diff --git a/.env-eos-mainnet.example b/.env-eos-mainnet.example
new file mode 100644
index 000000000..b2dd55cb5
--- /dev/null
+++ b/.env-eos-mainnet.example
@@ -0,0 +1,41 @@
+APP_NAME=Hypha DHO - EOS MainNet
+
+# BLOCKCHAIN CONFIG
+NETWORK_CHAIN_ID=aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906
+BLOCKCHAIN_ENDPOINTS=https://eos.api.eosnation.io
+
+# BLOCKCHAIN EXPLORER
+BLOCKCHAIN_EXPLORER=https://bloks.io/
+BLOCKCHAIN_EXPLORER_BTC=https://www.blockchain.com/btc/tx/
+BLOCKCHAIN_EXPLORER_ETH=https://etherscan.io/tx/
+BLOCKCHAIN_EXPLORER_EOS=https://bloks.io/transaction/
+
+# CONTRACTS
+DAO_CONTRACT=dao.hypha
+TLOSTO_SEEDS=tlosto.seeds
+SUPPLY_CONTRACT=voice.hypha
+KV_CONTRACT=kv.hypha
+
+# INFURA
+IPFS_URL=ipfs.infura.io
+IPFS_PROJECT_ID=
+IPFS_PROJECT_SECRET=
+
+# GRAPHQL
+DGRAPH_URL=https://nameless-brook-400051.eu-central-1.aws.cloud.dgraph.io
+GRAPHQL_URI=https://nameless-brook-400051.eu-central-1.aws.cloud.dgraph.io/graphql
+DGRAPH_AUTH_KEY=
+
+# HYPHA TOKEN SALES
+HYPHA_TOKEN_SALES_ENCODE_KEY=
+HYPHA_TOKEN_SALES_URL='https://tokensale.hypha.earth'
+
+# ONBOARDING AND ACCOUNT CREATION SERVICE
+PPP_ENV=eos
+ACCOUNT_API_URL=https://9fxmgfe1l5.execute-api.us-east-1.amazonaws.com/eosMainNet
+ACCOUNT_API_KEY=
+
+# MONITORING / TOOLING
+SENTRY_DSN=
+DOCUMENTATION=https://notepad.hypha.earth/5dC66nNXRVGpb1aTHaRJXw
+CHROMATIC_PROJECT_TOKEN=
diff --git a/.env-eos-testnet.example b/.env-eos-testnet.example
new file mode 100644
index 000000000..621a59ac1
--- /dev/null
+++ b/.env-eos-testnet.example
@@ -0,0 +1,42 @@
+APP_NAME=Hypha DHO - EOS TestNet
+
+# BLOCKCHAIN CONFIG
+NETWORK_CHAIN_ID=73e4385a2708e6d7048834fbc1079f2fabb17b3c125b146af438971e90716c4d
+BLOCKCHAIN_ENDPOINTS=https://jungle4.cryptolions.io
+EOS_ENDPOINTS=https://jungle4.cryptolions.io
+
+# BLOCKCHAIN EXPLORER
+BLOCKCHAIN_EXPLORER=https://local.bloks.io/?nodeUrl=jungle4.cryptolions.io&systemDomain=eosio&hyperionUrl=https%3A%2F%2Fjungle4history.cryptolions.io
+BLOCKCHAIN_EXPLORER_BTC=https://www.blockchain.com/btc/tx/
+BLOCKCHAIN_EXPLORER_ETH=https://etherscan.io/tx/
+BLOCKCHAIN_EXPLORER_EOS=https://bloks.io/transaction/
+
+# CONTRACTS
+DAO_CONTRACT=daoxhypha111
+TLOSTO_SEEDS=tlosto.seeds
+SUPPLY_CONTRACT=voicexhypha1
+KV_CONTRACT=kvxhypha1111
+
+# INFURA
+IPFS_URL=ipfs.infura.io
+IPFS_PROJECT_ID=
+IPFS_PROJECT_SECRET=
+
+# GRAPHQL
+DGRAPH_URL=https://nameless-brook-400226.eu-central-1.aws.cloud.dgraph.io
+GRAPHQL_URI=https://nameless-brook-400226.eu-central-1.aws.cloud.dgraph.io/graphql
+DGRAPH_AUTH_KEY=
+
+# HYPHA TOKEN SALES
+HYPHA_TOKEN_SALES_ENCODE_KEY=
+HYPHA_TOKEN_SALES_URL='https://tokensale.hypha.earth'
+
+# ONBOARDING AND ACCOUNT CREATION SERVICE
+PPP_ENV=eos-test
+ACCOUNT_API_URL=https://9fxmgfe1l5.execute-api.us-east-1.amazonaws.com/eosMainNet
+ACCOUNT_API_KEY=
+
+# MONITORING / TOOLING
+SENTRY_DSN=
+DOCUMENTATION=https://notepad.hypha.earth/5dC66nNXRVGpb1aTHaRJXw
+CHROMATIC_PROJECT_TOKEN=
diff --git a/.env.example b/.env.example
index 2fa59821a..6a86d47a0 100644
--- a/.env.example
+++ b/.env.example
@@ -21,7 +21,6 @@ DGRAPH_ROOT_HASH=52a7ff82bd6f53b31285e97d6806d886eefb650e79754784e9d923d3df347c9
GRAPHQL_URI=https://alpha-stts.tekit.io/graphql
BLOCKCHAIN_ENDPOINTS=https://testnet.telos.caleos.io
-EOS_ENDPOINTS='https://eos.greymass.com'
TLOSTO_SEEDS=tlosto.seeds
SUPPLY_CONTRACT=mtvoicehypha
diff --git a/.eslintrc.js b/.eslintrc.js
index 093b563a3..c36a64ad9 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,7 +1,8 @@
module.exports = {
root: true,
+ parser: 'vue-eslint-parser',
parserOptions: {
- parser: 'babel-eslint',
+ parser: '@typescript-eslint/parser',
sourceType: 'module'
},
env: {
@@ -20,6 +21,8 @@ module.exports = {
},
// add your custom rules here
rules: {
+ 'space-before-function-paren': 'off',
+ semi: ['error', 'never'],
// allow async-await
'generator-star-spacing': 'off',
// allow paren-less arrow functions
diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml
index 52357c4f6..cb5e0b9bb 100644
--- a/.github/workflows/deploy-dev.yml
+++ b/.github/workflows/deploy-dev.yml
@@ -2,11 +2,13 @@ name: Build and Deploy to Development
on:
push:
- branches: [ develop ]
+ branches:
+ - develop
jobs:
build:
name: build-dev
+ environment: telosTestNet
runs-on: ubuntu-latest
steps:
- name: Checkout code
@@ -33,10 +35,9 @@ jobs:
BLOCKCHAIN_EXPLORER_ETH: 'https://etherscan.io/tx/'
BLOCKCHAIN_EXPLORER_EOS: 'https://bloks.io/transaction/'
PPP_ENV: 'test'
- SENTRY_DSN: ''
+ SENTRY_DSN: ${{ vars.SENTRY_DSN }}
DGRAPH_URL: 'https://alpha-test.tekit.io/'
- DGRAPH_ROOT_HASH: '52a7ff82bd6f53b31285e97d6806d886eefb650e79754784e9d923d3df347c91'
- BLOCKCHAIN_ENDPOINTS: ${{ secrets.DEV_BLOCKCHAIN_ENDPOINTS }}
+ BLOCKCHAIN_ENDPOINTS: ${{ vars.BLOCKCHAIN_ENDPOINTS }}
TLOSTO_SEEDS: 'tlosto.seeds'
SUPPLY_CONTRACT: 'mtvoicehypha'
GRAPHQL_URI: 'https://alpha-stts.tekit.io/graphql'
@@ -51,7 +52,10 @@ jobs:
HYPHA_TOKEN_SALES_URL: 'https://dp9rw57cx84kg.cloudfront.net'
HYPHA_TOKEN_SALES_API_URL: 'http://api-tokensale.hypha.earth'
HYPHA_TOKEN_SALES_RPC_URL: 'https://telos.greymass.com'
-
+ ROOT_DAO_ID: ${{vars.ROOT_DAO_ID}}
+ ROOT_DAO_SLUG: ${{vars.ROOT_DAO_SLUG}}
+ HEALTH_ENDPOINT: ${{ vars.HEALTH_ENDPOINT }}
+
- name: S3 sync
uses: jakejarvis/s3-sync-action@master
with:
@@ -60,8 +64,8 @@ jobs:
AWS_S3_BUCKET: ${{ secrets.DEV_AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.DEV_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}
- AWS_REGION: 'us-east-1' # optional: defaults to us-east-1
- SOURCE_DIR: 'dist/spa' # optional: defaults to entire repository
+ AWS_REGION: 'us-east-1' # optional: defaults to us-east-1
+ SOURCE_DIR: 'dist/spa' # optional: defaults to entire repository
# Invalidate Cloudfront (this action)
- name: invalidate
diff --git a/.github/workflows/deploy-eos-dev.yml b/.github/workflows/deploy-eos-dev.yml
index 7e6f23630..9a61e9927 100644
--- a/.github/workflows/deploy-eos-dev.yml
+++ b/.github/workflows/deploy-eos-dev.yml
@@ -1,10 +1,8 @@
-name: EOS - Build and Deploy to Development - TestNet
+name: EOS - Build and Deploy to Development - TestNet
on:
push:
- branches:
- - feat/eos-deploy
- - feature/eos-account-support
+ branches: [develop]
jobs:
build:
@@ -23,28 +21,28 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v1
with:
- node-version: "16.x"
+ node-version: '16.x'
- run: yarn global add @vue/cli@latest
- run: yarn install
- run: mv public/chain-manifests-dev.json public/chain-manifests.json
- run: mv public/app-manifest-dev.json public/app-manifest.json
- run: yarn build
env:
- APP_NAME: "Hypha DHO - EOS TestNet"
+ APP_NAME: 'Hypha DHO - EOS TestNet'
NETWORK_CHAIN_ID: ${{ vars.NETWORK_CHAIN_ID }}
- DAO_CONTRACT: "daoxhypha111"
- HYPHA_CONTRACT: "hyphaxhypha1"
- SUPPLY_CONTRACT: "voicexhypha1"
- MULTISIG_CONTRACT: "msig.hypha"
- KV_CONTRACT: "kvxhypha1111"
+ DAO_CONTRACT: 'daoxhypha111'
+ HYPHA_CONTRACT: 'hyphaxhypha1'
+ SUPPLY_CONTRACT: 'voicexhypha1'
+ MULTISIG_CONTRACT: 'msig.hypha'
+ KV_CONTRACT: 'kvxhypha1111'
PPP_ENV: ${{ vars.PPP_ENV }}
ACCOUNT_API_URL: ${{ vars.ACCOUNT_API_URL }}
ACCOUNT_API_KEY: ${{ secrets.ACCOUNT_API_KEY }}
BLOCKCHAIN_ENDPOINTS: ${{ vars.BLOCKCHAIN_ENDPOINTS }}
BLOCKCHAIN_EXPLORER: ${{ vars.BLOCKCHAIN_EXPLORER }}
- BLOCKCHAIN_EXPLORER_BTC: "https://www.blockchain.com/btc/tx/"
- BLOCKCHAIN_EXPLORER_ETH: "https://etherscan.io/tx/"
- BLOCKCHAIN_EXPLORER_EOS: "https://bloks.io/transaction/"
+ BLOCKCHAIN_EXPLORER_BTC: 'https://www.blockchain.com/btc/tx/'
+ BLOCKCHAIN_EXPLORER_ETH: 'https://etherscan.io/tx/'
+ BLOCKCHAIN_EXPLORER_EOS: 'https://bloks.io/transaction/'
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
DOCUMENTATION: ${{ vars.DOCUMENTATION }}
@@ -54,19 +52,20 @@ jobs:
DGRAPH_AUTH_KEY: ${{ secrets.DGRAPH_AUTH_KEY }}
GRAPHQL_URI: ${{vars.GRAPHQL_URI}}
ROOT_DAO_ID: ${{vars.ROOT_DAO_ID}}
+ HEALTH_ENDPOINT: ${{ vars.HEALTH_ENDPOINT }}
ELASTIC_SEARCH_URL: ${{ vars.ELASTIC_SEARCH_URL }}
ELASTIC_SEARCH_API_KEY: ${{ secrets.ELASTIC_SEARCH_API_KEY }}
- IPFS_URL: "ipfs.infura.io"
- IPFS_PROJECT_ID: "2F5pWHIOMgHji1DeqUT0mGpvySz"
+ IPFS_URL: 'ipfs.infura.io'
+ IPFS_PROJECT_ID: '2F5pWHIOMgHji1DeqUT0mGpvySz'
IPFS_PROJECT_SECRET: ${{ secrets.IPFS_PROJECT_SECRET }}
- IPFS_GATEWAY: "https://hypha.infura-ipfs.io/ipfs/"
+ IPFS_GATEWAY: 'https://hypha.infura-ipfs.io/ipfs/'
HYPHA_TOKEN_SALES_ENCODE_KEY: ${{ secrets.HYPHA_TOKEN_SALES_ENCODE_KEY }}
HYPHA_TOKEN_SALES_URL: ${{ vars.HYPHA_TOKEN_SALES_URL }}
- HYPHA_TOKEN_SALES_API_URL: "http://api-tokensale.hypha.earth"
- HYPHA_TOKEN_SALES_RPC_URL: "https://telos.greymass.com"
+ HYPHA_TOKEN_SALES_API_URL: 'http://api-tokensale.hypha.earth'
+ HYPHA_TOKEN_SALES_RPC_URL: 'https://telos.greymass.com'
- name: Deploy to S3 bucket
run: aws s3 sync ./dist/spa s3://${{ vars.AWS_S3_BUCKET}} --delete
@@ -74,6 +73,6 @@ jobs:
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ vars.DISTRIBUTION_ID}}
- PATHS: "/*"
+ PATHS: '/*'
AWS_ACCESS_KEY_ID: ${{ secrets.HYPHA_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.HYPHA_AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/deploy-eos-prod.yml b/.github/workflows/deploy-eos-prod.yml
index 42e096c3a..784643f73 100644
--- a/.github/workflows/deploy-eos-prod.yml
+++ b/.github/workflows/deploy-eos-prod.yml
@@ -1,9 +1,8 @@
name: EOS - Build and Deploy to Production - MainNet
on:
- push:
- branches:
- - master
+ release:
+ types: [published]
jobs:
build:
@@ -22,41 +21,53 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v1
with:
- node-version: "16.x"
+ node-version: '16.x'
- run: yarn global add @vue/cli@latest
- run: yarn install
- run: mv public/chain-manifests-prod.json public/chain-manifests.json
- run: mv public/app-manifest-prod.json public/app-manifest.json
- run: yarn build
env:
- APP_NAME: "Hypha DHO"
- NETWORK_CHAIN_ID: "1eaa0824707c8c16bd25145493bf062aecddfeb56c736f6ba6397f3195f33c9f"
- DAO_CONTRACT: "dao.hypha"
- HYPHA_CONTRACT: "hypha.hypha"
- ACCOUNT_API_URL: "https://tb3nnn0qa9.execute-api.us-east-1.amazonaws.com/prod"
- ACCOUNT_API_KEY: ${{ secrets.PROD_ACCOUNT_API_KEY }}
- BLOCKCHAIN_EXPLORER: "https://telos.bloks.io"
- BLOCKCHAIN_EXPLORER_BTC: "https://www.blockchain.com/btc/tx/"
- BLOCKCHAIN_EXPLORER_ETH: "https://etherscan.io/tx/"
- BLOCKCHAIN_EXPLORER_EOS: "https://bloks.io/transaction/"
- PPP_ENV: eos
- SENTRY_DSN: "https://0b768263dc6247a5a2d309e07f771528@o324628.ingest.sentry.io/4503898341703680"
- DOCUMENTATION: "https://notepad.hypha.earth/5dC66nNXRVGpb1aTHaRJXw"
- DGRAPH_URL: "https://alpha.tekit.io"
- DGRAPH_ROOT_HASH: "52a7ff82bd6f53b31285e97d6806d886eefb650e79754784e9d923d3df347c91"
- BLOCKCHAIN_ENDPOINTS: "https://mainnet.telos.net"
- TLOSTO_SEEDS: "tlosto.seeds"
- SUPPLY_CONTRACT: "voice.hypha"
- GRAPHQL_URI: "https://alpha-dhomn.tekit.io/graphql"
- ELASTIC_SEARCH_URL: "https://hypha.es.eu-west-1.aws.found.io:9243/dho-mainnet-documents/_search"
- ELASTIC_SEARCH_API_KEY: ${{ secrets.PROD_ELASTIC_SEARCH_API_KEY }}
- IPFS_URL: "ipfs.infura.io"
- IPFS_PROJECT_ID: "2F5pWHIOMgHji1DeqUT0mGpvySz"
+ APP_NAME: 'Hypha DHO - EOS'
+ NETWORK_CHAIN_ID: ${{ vars.NETWORK_CHAIN_ID }}
+ DAO_CONTRACT: 'dao.hypha'
+ HYPHA_CONTRACT: 'hypha.hypha'
+ SUPPLY_CONTRACT: 'voice.hypha'
+ MULTISIG_CONTRACT: 'msig.hypha'
+ KV_CONTRACT: 'kv.hypha'
+ PPP_ENV: ${{ vars.PPP_ENV }}
+ PPP_APP_ID: ${{ vars.PPP_APP_ID }}
+ ACCOUNT_API_URL: ${{ vars.ACCOUNT_API_URL }}
+ ACCOUNT_API_KEY: ${{ secrets.ACCOUNT_API_KEY }}
+ BLOCKCHAIN_ENDPOINTS: ${{ vars.BLOCKCHAIN_ENDPOINTS }}
+ BLOCKCHAIN_EXPLORER: ${{ vars.BLOCKCHAIN_EXPLORER }}
+ BLOCKCHAIN_EXPLORER_BTC: 'https://www.blockchain.com/btc/tx/'
+ BLOCKCHAIN_EXPLORER_ETH: 'https://etherscan.io/tx/'
+ BLOCKCHAIN_EXPLORER_EOS: 'https://bloks.io/transaction/'
+
+ SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
+ DOCUMENTATION: ${{ vars.DOCUMENTATION }}
+
+ DGRAPH_URL: ${{ vars.DGRAPH_URL }}
+ DGRAPH_ROOT_HASH: ${{ vars.DGRAPH_ROOT_HASH }}
+ DGRAPH_AUTH_KEY: ${{ secrets.DGRAPH_AUTH_KEY }}
+ GRAPHQL_URI: ${{vars.GRAPHQL_URI}}
+ ROOT_DAO_ID: ${{vars.ROOT_DAO_ID}}
+ ROOT_DAO_SLUG: ${{vars.ROOT_DAO_SLUG}}
+ HEALTH_ENDPOINT: ${{ vars.HEALTH_ENDPOINT }}
+
+ ELASTIC_SEARCH_URL: ${{ vars.ELASTIC_SEARCH_URL }}
+ ELASTIC_SEARCH_API_KEY: ${{ secrets.ELASTIC_SEARCH_API_KEY }}
+
+ IPFS_URL: 'ipfs.infura.io'
+ IPFS_PROJECT_ID: '2F5pWHIOMgHji1DeqUT0mGpvySz'
IPFS_PROJECT_SECRET: ${{ secrets.IPFS_PROJECT_SECRET }}
- IPFS_GATEWAY: "https://hypha.infura-ipfs.io/ipfs/"
- MULTISIG_CONTRACT: "msigdhohypha"
+ IPFS_GATEWAY: 'https://hypha.infura-ipfs.io/ipfs/'
+
HYPHA_TOKEN_SALES_ENCODE_KEY: ${{ secrets.HYPHA_TOKEN_SALES_ENCODE_KEY }}
- HYPHA_TOKEN_SALES_URL: "https://tokensale.hypha.earth"
+ HYPHA_TOKEN_SALES_URL: ${{ vars.HYPHA_TOKEN_SALES_URL }}
+ HYPHA_TOKEN_SALES_API_URL: 'http://api-tokensale.hypha.earth'
+ HYPHA_TOKEN_SALES_RPC_URL: 'https://telos.greymass.com'
- name: Deploy to S3 bucket
run: aws s3 sync ./dist/spa s3://${{ vars.AWS_S3_BUCKET}} --delete
@@ -64,6 +75,6 @@ jobs:
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ vars.DISTRIBUTION_ID}}
- PATHS: "/*"
+ PATHS: '/*'
AWS_ACCESS_KEY_ID: ${{ secrets.HYPHA_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.HYPHA_AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml
index ed344c577..61199a9c1 100644
--- a/.github/workflows/deploy-prod.yml
+++ b/.github/workflows/deploy-prod.yml
@@ -1,9 +1,8 @@
name: Build and Deploy to Production
on:
- push:
- branches: [ master ]
-
+ release:
+ types: [published]
jobs:
build:
name: build-prod
@@ -37,7 +36,6 @@ jobs:
SENTRY_DSN: ${{ vars.SENTRY_DSN }}
DOCUMENTATION: 'https://notepad.hypha.earth/5dC66nNXRVGpb1aTHaRJXw'
DGRAPH_URL: 'https://alpha.tekit.io'
- DGRAPH_ROOT_HASH: '52a7ff82bd6f53b31285e97d6806d886eefb650e79754784e9d923d3df347c91'
BLOCKCHAIN_ENDPOINTS: 'https://mainnet.telos.net'
TLOSTO_SEEDS: 'tlosto.seeds'
SUPPLY_CONTRACT: 'voice.hypha'
@@ -53,6 +51,9 @@ jobs:
HYPHA_TOKEN_SALES_URL: 'https://tokensale.hypha.earth'
HYPHA_TOKEN_SALES_API_URL: 'http://api-tokensale.hypha.earth'
HYPHA_TOKEN_SALES_RPC_URL: 'https://telos.greymass.com'
+ ROOT_DAO_ID: ${{vars.ROOT_DAO_ID}}
+ ROOT_DAO_SLUG: ${{vars.ROOT_DAO_SLUG}}
+ HEALTH_ENDPOINT: ${{ vars.HEALTH_ENDPOINT }}
- name: S3 sync
uses: jakejarvis/s3-sync-action@master
@@ -62,8 +63,8 @@ jobs:
AWS_S3_BUCKET: ${{ secrets.PROD_AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.PROD_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}
- AWS_REGION: 'us-east-1' # optional: defaults to us-east-1
- SOURCE_DIR: 'dist/spa' # optional: defaults to entire repository
+ AWS_REGION: 'us-east-1' # optional: defaults to us-east-1
+ SOURCE_DIR: 'dist/spa' # optional: defaults to entire repository
# Invalidate Cloudfront (this action)
- name: invalidate
@@ -75,7 +76,6 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.PROD_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}
-
# - name: S3 Sync and Invalidate Cloudfront Distribution
# uses: digital-scarcity/s3-sync-action@master
# with:
diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml
index 8bf9640b9..59d36ad0d 100644
--- a/.github/workflows/deploy-staging.yml
+++ b/.github/workflows/deploy-staging.yml
@@ -2,7 +2,7 @@ name: Build and Deploy to Staging
on:
push:
- branches: [ staging ]
+ branches: [ master ]
jobs:
build:
diff --git a/.github/workflows/deploy.branch.yml b/.github/workflows/deploy.branch.yml
new file mode 100644
index 000000000..278ddd1e0
--- /dev/null
+++ b/.github/workflows/deploy.branch.yml
@@ -0,0 +1,124 @@
+name: Deploy temporary instance
+
+on:
+ push:
+ branches:
+ - feat/**
+ - feature/**
+ - fix/**
+ - hotfix/**
+ - docs/**
+ - style/**
+ - refactor/**
+ - perf/**
+ - test/**
+ - build/**
+ - ci/**
+ - chore/**
+ - revert/**
+
+env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.HYPHA_AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.HYPHA_AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: eu-west-1
+ NODE_ENV: development
+ BRANCH_PR_NUMBER: ${{ github.event.number }}
+ APP_NAME: 'Hypha DHO'
+ NETWORK_CHAIN_ID: ${{ vars.NETWORK_CHAIN_ID }}
+ DAO_CONTRACT: ${{ vars.DAO_CONTRACT }}
+ HYPHA_CONTRACT: ${{ vars.HYPHA_CONTRACT }}
+ SUPPLY_CONTRACT: ${{ vars.SUPPLY_CONTRACT }}
+ MULTISIG_CONTRACT: ${{ vars.MULTISIG_CONTRACT }}
+ KV_CONTRACT: ${{ vars.KV_CONTRACT }}
+ PPP_ENV: ${{ vars.PPP_ENV }}
+ ACCOUNT_API_URL: ${{ vars.ACCOUNT_API_URL }}
+ ACCOUNT_API_KEY: ${{ secrets.ACCOUNT_API_KEY }}
+ BLOCKCHAIN_ENDPOINTS: ${{ vars.BLOCKCHAIN_ENDPOINTS }}
+ BLOCKCHAIN_EXPLORER: ${{ vars.BLOCKCHAIN_EXPLORER }}
+ BLOCKCHAIN_EXPLORER_BTC: ${{ vars.BLOCKCHAIN_EXPLORER_BTC }}
+ BLOCKCHAIN_EXPLORER_ETH: ${{ vars.BLOCKCHAIN_EXPLORER_ETH }}
+ BLOCKCHAIN_EXPLORER_EOS: ${{ vars.BLOCKCHAIN_EXPLORER_EOS }}
+
+ SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
+ DOCUMENTATION: ${{ vars.DOCUMENTATION }}
+
+ DGRAPH_URL: ${{ vars.DGRAPH_URL }}
+ DGRAPH_ROOT_HASH: ${{ vars.DGRAPH_ROOT_HASH }}
+ DGRAPH_AUTH_KEY: ${{ secrets.DGRAPH_AUTH_KEY }}
+ GRAPHQL_URI: ${{vars.GRAPHQL_URI}}
+ ROOT_DAO_ID: ${{vars.ROOT_DAO_ID}}
+
+ ELASTIC_SEARCH_URL: ${{ vars.ELASTIC_SEARCH_URL }}
+ ELASTIC_SEARCH_API_KEY: ${{ secrets.ELASTIC_SEARCH_API_KEY }}
+
+ IPFS_URL: ${{ secrets.IPFS_URL }}
+ IPFS_PROJECT_ID: ${{ secrets.IPFS_PROJECT_ID }}
+ IPFS_PROJECT_SECRET: ${{ secrets.IPFS_PROJECT_SECRET }}
+ IPFS_GATEWAY: ${{ secrets.IPFS_GATEWAY }}
+
+ HYPHA_TOKEN_SALES_ENCODE_KEY: ${{ secrets.HYPHA_TOKEN_SALES_ENCODE_KEY }}
+ HYPHA_TOKEN_SALES_URL: ${{ vars.HYPHA_TOKEN_SALES_URL }}
+ HYPHA_TOKEN_SALES_API_URL: ${{ vars.HYPHA_TOKEN_SALES_API_URL }}
+ HYPHA_TOKEN_SALES_RPC_URL: ${{ vars.HYPHA_TOKEN_SALES_RPC_URL }}
+
+jobs:
+ build_and_deploy:
+ name: 'Build and Deploy App'
+ environment: telosTestNet
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - name: Generate branch name
+ run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | tr / -)" >> $GITHUB_ENV
+ - name: checkout
+ uses: actions/checkout@v3
+ - name: Create S3 bucket
+ run: |
+ if aws s3api head-bucket --bucket ${{ env.BRANCH_NAME }} 2>/dev/null; then
+ echo "Bucket exists"
+ else
+ aws s3 mb s3://${{ env.BRANCH_NAME }} --region ${{ env.AWS_REGION }}
+ echo "Bucket created"
+ fi
+
+ - name: Check CloudFront Distribution
+ run: |
+ DISTRIBUTION_ID=$(aws cloudfront list-distributions --query "DistributionList.Items[?Aliases.Items[0]=='${{ env.BRANCH_NAME }}'].Id" --output text)
+ if [ -z "$DISTRIBUTION_ID" ]
+ then
+ echo "Creating CloudFront distribution"
+ aws cloudfront create-distribution \
+ --origin-domain-name ${{ env.BRANCH_NAME }}.s3.amazonaws.com \
+ --default-root-object index.html
+ else
+ echo "CloudFront distribution exists with ID: $DISTRIBUTION_ID"
+ echo "::set-output name=cf-dist-id::$DISTRIBUTION_ID"
+ fi
+
+ - name: Get CloudFront Distribution DNS Name
+ id: get_cf_dns_name
+ run: |
+ echo "::set-output name=distribution_dns_name::$(aws cloudfront get-distribution-config --id ${{ steps.create_cloudfront.outputs.cloudfront_distribution_id }} --query 'DistributionConfig.ViewerCertificate.ACMCertificateArn' --output text | cut -d '/' -f 2)"
+
+ - name: Create CNAME entry
+ if: steps.get_cf_dns_name.outputs.distribution_dns_name != ''
+ run: |
+ echo ${{ env.BRANCH_NAME }} ${{ steps.get_cf_dns_name.outputs.distribution_dns_name }} >> /etc/hosts
+ aws route53 change-resource-record-sets --hosted-zone-id ${{ env.AWS_HOSTED_ZONE_ID }} --change-batch '{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"${env.BRANCH_NAME}.","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":"${steps.get_cf_dns_name.outputs.distribution_dns_name}"}]}}]}'
+ - name: Use Node.js
+ uses: actions/setup-node@v1
+ with:
+ node-version: '16.x'
+ - run: yarn global add @vue/cli@latest
+ - run: yarn install
+ - run: mv public/chain-manifests-prod.json public/chain-manifests.json
+ - run: mv public/app-manifest-prod.json public/app-manifest.json
+ - run: yarn build
+ - name: S3 sync
+ uses: jakejarvis/s3-sync-action@master
+ with:
+ args: --follow-symlinks --delete
+ env:
+ AWS_S3_BUCKET: ${{ env.BRANCH_NAME }}
+ AWS_REGION: ${{ env.AWS_REGION }}
+ SOURCE_DIR: 'dist/spa'
diff --git a/.github/workflows/destroy.branch.yml b/.github/workflows/destroy.branch.yml
new file mode 100644
index 000000000..9f463f30b
--- /dev/null
+++ b/.github/workflows/destroy.branch.yml
@@ -0,0 +1,47 @@
+name: Destroy temporary instance
+
+on:
+ delete:
+ branches:
+ - feat/**
+ - feature/**
+ - fix/**
+ - hotfix/**
+ - docs/**
+ - style/**
+ - refactor/**
+ - perf/**
+ - test/**
+ - build/**
+ - ci/**
+ - chore/**
+ - revert/**
+
+env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.HYPHA_AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.HYPHA_AWS_SECRET_ACCESS_KEY }}
+ AWS_REGION: eu-west-1
+ NODE_ENV: development
+
+jobs:
+ remove_bucket_and_distribution:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Generate branch name
+ run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | tr / -)" >> $GITHUB_ENV
+ - name: Checkout Repository
+ uses: actions/checkout@v3
+ - name: Delete CloudFront Distribution
+ if: github.event.pull_request.merged == true
+ run: |
+ DISTRIBUTION_ID=$(aws cloudfront list-distributions --query "DistributionList.Items[?Aliases.Items[0]=='${{ env.BRANCH_NAME }}'].Id" --output text)
+ if [ ! -z "$DISTRIBUTION_ID" ]
+ then
+ aws cloudfront delete-distribution --id $DISTRIBUTION_ID
+ fi
+
+ - name: Delete S3 Bucket
+ if: github.event.pull_request.merged == true
+ run: |
+ aws s3api delete-bucket --bucket ${{ env.BRANCH_NAME }} --region ${{ secrets.AWS_REGION }}
diff --git a/.prettierrc.cjs b/.prettierrc.cjs
new file mode 100644
index 000000000..1a03b30c2
--- /dev/null
+++ b/.prettierrc.cjs
@@ -0,0 +1,30 @@
+
+// @ts-check
+///
+
+/**
+ * @type {import('prettier').Options}
+ */
+
+module.exports = {
+ plugins: [require.resolve('@prettier/plugin-pug')],
+ pugBracketSameLine: false,
+ pugSingleQuote: false,
+ pugWrapAttributesThreshold: 1,
+ pugUseTabs: false,
+ "spaceBeforeFunctionParen": false,
+ "arrowParens": "always",
+ "pugBracketSpacing": false,
+ "pugIndentOffset": -2,
+ "pugIndentStart": false,
+ "semi": false,
+ "pugPrintWidth": 80,
+ "pugSingleFileComponentIndentation": true,
+ "pugAttributeSeparator": "none",
+ "pugSortAttributes": "asc",
+ "pugClosingBracketPosition": "new-line",
+ "singleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "none",
+ "printWidth": 80,
+ }
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 47c90d02b..06c507701 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,24 @@
# Changelog
+## [2.25.1](https://github.com/hypha-dao/dho-web-client/compare/v2.25.0...v2.25.1) (2023-04-06)
+
+
+### Features
+
+* add proposal history page ([#2065](https://github.com/hypha-dao/dho-web-client/issues/2065)) ([863b8ed](https://github.com/hypha-dao/dho-web-client/commit/863b8ed55945a165ecc179b3900c3fe0430571a4))
+* **organization:** added circles widget in organization page ([#2104](https://github.com/hypha-dao/dho-web-client/issues/2104)) ([#2111](https://github.com/hypha-dao/dho-web-client/issues/2111)) ([a2358f6](https://github.com/hypha-dao/dho-web-client/commit/a2358f63f0a064c4c44b184296a5295db1423272))
+* **ts:** add typescript support ([#2110](https://github.com/hypha-dao/dho-web-client/issues/2110)) ([320771a](https://github.com/hypha-dao/dho-web-client/commit/320771ae540a9e4aaf6c9571da81ab1451235296))
+
+
+### Reverts
+
+* feat(organization): added circles widget in organization page ([#2104](https://github.com/hypha-dao/dho-web-client/issues/2104)) ([#2111](https://github.com/hypha-dao/dho-web-client/issues/2111)) ([#2115](https://github.com/hypha-dao/dho-web-client/issues/2115)) ([3a099da](https://github.com/hypha-dao/dho-web-client/commit/3a099da5227ddf1d7c6ccaff3088855ec6cb9d8b))
+
+
+### Miscellaneous Chores
+
+* release 2.25.1 ([658ef6f](https://github.com/hypha-dao/dho-web-client/commit/658ef6f12a949482b35de6850e59e5e01d7daeb8))
+
## [2.24.0](https://github.com/hypha-dao/dho-web-client/compare/v2.23.0...v2.24.0) (2023-03-14)
@@ -218,7 +237,7 @@
* **sliding-design:** centering widgets ([#1918](https://github.com/hypha-dao/dho-web-client/issues/1918)) ([#1921](https://github.com/hypha-dao/dho-web-client/issues/1921)) ([69983bd](https://github.com/hypha-dao/dho-web-client/commit/69983bd0f781850578c06d783755d30fe4e79d0c))
* **sliding-design:** issues after feedback ([#1906](https://github.com/hypha-dao/dho-web-client/issues/1906)) ([#1912](https://github.com/hypha-dao/dho-web-client/issues/1912)) ([04aeaf5](https://github.com/hypha-dao/dho-web-client/commit/04aeaf50839ab061d540152c65afc62678e2b78d))
* small fix in router ([#1749](https://github.com/hypha-dao/dho-web-client/issues/1749)) ([846c889](https://github.com/hypha-dao/dho-web-client/commit/846c889e6fc38e95a17bac5459c5e9ebe3e72213))
-* **step-description:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
+* **step-details:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
* **style:** add specificity for rounded border q-input ([d36f94e](https://github.com/hypha-dao/dho-web-client/commit/d36f94ef2a0a92a0c75b445c4279ca3e39e3e8b4))
* **style:** rename rounded-corners to the rounded-full ([#2016](https://github.com/hypha-dao/dho-web-client/issues/2016)) ([cbad8fd](https://github.com/hypha-dao/dho-web-client/commit/cbad8fd98b1b42180d2608fad1adcf716ba7ba91))
* **tablet:** organizational assets page ([44d0bf6](https://github.com/hypha-dao/dho-web-client/commit/44d0bf63cf6a5a21d6755bcf53db620992b22c30))
@@ -455,7 +474,7 @@
* **sliding-design:** centering widgets ([#1918](https://github.com/hypha-dao/dho-web-client/issues/1918)) ([#1921](https://github.com/hypha-dao/dho-web-client/issues/1921)) ([69983bd](https://github.com/hypha-dao/dho-web-client/commit/69983bd0f781850578c06d783755d30fe4e79d0c))
* **sliding-design:** issues after feedback ([#1906](https://github.com/hypha-dao/dho-web-client/issues/1906)) ([#1912](https://github.com/hypha-dao/dho-web-client/issues/1912)) ([04aeaf5](https://github.com/hypha-dao/dho-web-client/commit/04aeaf50839ab061d540152c65afc62678e2b78d))
* small fix in router ([#1749](https://github.com/hypha-dao/dho-web-client/issues/1749)) ([846c889](https://github.com/hypha-dao/dho-web-client/commit/846c889e6fc38e95a17bac5459c5e9ebe3e72213))
-* **step-description:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
+* **step-details:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
* **style:** add specificity for rounded border q-input ([d36f94e](https://github.com/hypha-dao/dho-web-client/commit/d36f94ef2a0a92a0c75b445c4279ca3e39e3e8b4))
* **style:** rename rounded-corners to the rounded-full ([#2016](https://github.com/hypha-dao/dho-web-client/issues/2016)) ([cbad8fd](https://github.com/hypha-dao/dho-web-client/commit/cbad8fd98b1b42180d2608fad1adcf716ba7ba91))
* **tablet:** organizational assets page ([44d0bf6](https://github.com/hypha-dao/dho-web-client/commit/44d0bf63cf6a5a21d6755bcf53db620992b22c30))
@@ -666,7 +685,7 @@
* **sliding-design:** centering widgets ([#1918](https://github.com/hypha-dao/dho-web-client/issues/1918)) ([#1921](https://github.com/hypha-dao/dho-web-client/issues/1921)) ([69983bd](https://github.com/hypha-dao/dho-web-client/commit/69983bd0f781850578c06d783755d30fe4e79d0c))
* **sliding-design:** issues after feedback ([#1906](https://github.com/hypha-dao/dho-web-client/issues/1906)) ([#1912](https://github.com/hypha-dao/dho-web-client/issues/1912)) ([04aeaf5](https://github.com/hypha-dao/dho-web-client/commit/04aeaf50839ab061d540152c65afc62678e2b78d))
* small fix in router ([#1749](https://github.com/hypha-dao/dho-web-client/issues/1749)) ([846c889](https://github.com/hypha-dao/dho-web-client/commit/846c889e6fc38e95a17bac5459c5e9ebe3e72213))
-* **step-description:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
+* **step-details:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
* **style:** add specificity for rounded border q-input ([d36f94e](https://github.com/hypha-dao/dho-web-client/commit/d36f94ef2a0a92a0c75b445c4279ca3e39e3e8b4))
* **tablet:** organizational assets page ([44d0bf6](https://github.com/hypha-dao/dho-web-client/commit/44d0bf63cf6a5a21d6755bcf53db620992b22c30))
* **tablet:** proposal detail styles ([dd45277](https://github.com/hypha-dao/dho-web-client/commit/dd45277cc0e413794c9bc4330653df9c626a78d2))
@@ -837,7 +856,7 @@
* show dynamic deferred on active and archived proposals ([#1578](https://github.com/hypha-dao/dho-web-client/issues/1578)) ([d895d70](https://github.com/hypha-dao/dho-web-client/commit/d895d7020ef78919de618efb197062a80d0495fd))
* **sliding-design:** issues after feedback ([#1906](https://github.com/hypha-dao/dho-web-client/issues/1906)) ([#1912](https://github.com/hypha-dao/dho-web-client/issues/1912)) ([04aeaf5](https://github.com/hypha-dao/dho-web-client/commit/04aeaf50839ab061d540152c65afc62678e2b78d))
* small fix in router ([#1749](https://github.com/hypha-dao/dho-web-client/issues/1749)) ([846c889](https://github.com/hypha-dao/dho-web-client/commit/846c889e6fc38e95a17bac5459c5e9ebe3e72213))
-* **step-description:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
+* **step-details:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
* **style:** add specificity for rounded border q-input ([d36f94e](https://github.com/hypha-dao/dho-web-client/commit/d36f94ef2a0a92a0c75b445c4279ca3e39e3e8b4))
* **tablet:** organizational assets page ([44d0bf6](https://github.com/hypha-dao/dho-web-client/commit/44d0bf63cf6a5a21d6755bcf53db620992b22c30))
* **tablet:** proposal detail styles ([dd45277](https://github.com/hypha-dao/dho-web-client/commit/dd45277cc0e413794c9bc4330653df9c626a78d2))
@@ -1002,7 +1021,7 @@
* select options in filter widget has been fixed ([#1523](https://github.com/hypha-dao/dho-web-client/issues/1523), [#1556](https://github.com/hypha-dao/dho-web-client/issues/1556)) ([#1580](https://github.com/hypha-dao/dho-web-client/issues/1580)) ([8c927bb](https://github.com/hypha-dao/dho-web-client/commit/8c927bbd8b2b8d449acec26bc434a9362153174b))
* show dynamic deferred on active and archived proposals ([#1578](https://github.com/hypha-dao/dho-web-client/issues/1578)) ([d895d70](https://github.com/hypha-dao/dho-web-client/commit/d895d7020ef78919de618efb197062a80d0495fd))
* small fix in router ([#1749](https://github.com/hypha-dao/dho-web-client/issues/1749)) ([846c889](https://github.com/hypha-dao/dho-web-client/commit/846c889e6fc38e95a17bac5459c5e9ebe3e72213))
-* **step-description:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
+* **step-details:** duplicated titles in proposal with edit type ([#1735](https://github.com/hypha-dao/dho-web-client/issues/1735)) ([#1894](https://github.com/hypha-dao/dho-web-client/issues/1894)) ([a110420](https://github.com/hypha-dao/dho-web-client/commit/a110420ce6ff08edc1ef816253733cd20d95fc08))
* **style:** add specificity for rounded border q-input ([d36f94e](https://github.com/hypha-dao/dho-web-client/commit/d36f94ef2a0a92a0c75b445c4279ca3e39e3e8b4))
* **tablet:** organizational assets page ([44d0bf6](https://github.com/hypha-dao/dho-web-client/commit/44d0bf63cf6a5a21d6755bcf53db620992b22c30))
* **tablet:** proposal detail styles ([dd45277](https://github.com/hypha-dao/dho-web-client/commit/dd45277cc0e413794c9bc4330653df9c626a78d2))
diff --git a/codegen.ts b/codegen.ts
new file mode 100644
index 000000000..fb5ac090e
--- /dev/null
+++ b/codegen.ts
@@ -0,0 +1,37 @@
+import * as dotenv from 'dotenv'
+import { CodegenConfig } from '@graphql-codegen/cli'
+
+dotenv.config({ path: __dirname + '/.env' })
+
+const config: CodegenConfig = {
+ overwrite: true,
+ schema: process.env.GRAPHQL_URI,
+ documents: ['src/**/*.gql'],
+ generates: {
+ './src/generated/gql.ts': {
+ config: {
+ useTypeImports: true
+ },
+ plugins: [
+ {
+ add: {
+ content: '/* eslint-disable */'
+ }
+ },
+ 'typescript',
+ 'typescript-operations',
+ 'typescript-vue-apollo-smart-ops'
+ ]
+ }
+ },
+ config: {
+ contextType: 'Context',
+ strictScalars: true,
+ scalars: {
+ DateTime: 'Date',
+ Int64: 'BigInt'
+ }
+ }
+}
+
+export default config
diff --git a/cypress/support/component.js b/cypress/support/component.js
index 53d9d15a2..3d1a3d225 100644
--- a/cypress/support/component.js
+++ b/cypress/support/component.js
@@ -24,4 +24,4 @@ import { mount } from 'cypress/vue2'
Cypress.Commands.add('mount', mount)
// Example use:
-// cy.mount(MyComponent)
\ No newline at end of file
+// cy.mount(MyComponent)
diff --git a/package-lock.json b/package-lock.json
index b309524a1..a7408d928 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "dho-web-client",
- "version": "2.11.0",
+ "version": "2.25.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -3968,6 +3968,15 @@
"integrity": "sha512-nWlGg+aMfQDhGYa5FtBhZwldeo2MtdjHdxmEQvhBXEnxgD5IhIYl0PHvex8SdwyN7qcSoMykMWdjyAX7ZxkpMw==",
"dev": true
},
+ "@prettier/plugin-pug": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@prettier/plugin-pug/-/plugin-pug-2.4.2.tgz",
+ "integrity": "sha512-NYno1b0ZIY/2/wIiPSIWVRbWdhJ7KPkwjOo/xzWOZYUA35ZrwaEQshoEoLEizUrnizBuIgW93E9kqIrJEjBang==",
+ "dev": true,
+ "requires": {
+ "pug-lexer": "^5.0.0"
+ }
+ },
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -4275,37 +4284,37 @@
}
},
"@sentry-internal/tracing": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.48.0.tgz",
- "integrity": "sha512-MFAPDTrvCtfSm0/Zbmx7HA0Q5uCfRadOUpN8Y8rP1ndz+329h2kA3mZRCuC+3/aXL11zs2CHUhcAkGjwH2vogg==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.47.0.tgz",
+ "integrity": "sha512-udpHnCzF8DQsWf0gQwd0XFGp6Y8MOiwnl8vGt2ohqZGS3m1+IxoRLXsSkD8qmvN6KKDnwbaAvYnK0z0L+AW95g==",
"requires": {
- "@sentry/core": "7.48.0",
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "@sentry/core": "7.47.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
},
"dependencies": {
"@sentry/core": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.48.0.tgz",
- "integrity": "sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.47.0.tgz",
+ "integrity": "sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg==",
"requires": {
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
}
},
"@sentry/types": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.48.0.tgz",
- "integrity": "sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ=="
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.47.0.tgz",
+ "integrity": "sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA=="
},
"@sentry/utils": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.48.0.tgz",
- "integrity": "sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.47.0.tgz",
+ "integrity": "sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ==",
"requires": {
- "@sentry/types": "7.48.0",
+ "@sentry/types": "7.47.0",
"tslib": "^1.9.3"
}
}
@@ -4366,47 +4375,47 @@
}
},
"@sentry/replay": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.48.0.tgz",
- "integrity": "sha512-8fRHMGJ0NJeIZi6UucxUTvfDPaBa7+jU1kCTLjCcuH3X/UVz5PtGLMtFSO5U8HP+mUDlPs97MP1uoDvMa4S2Ng==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.47.0.tgz",
+ "integrity": "sha512-BFpVZVmwlezZ83y0L43TCTJY142Fxh+z+qZSwTag5HlhmIpBKw/WKg06ajOhrYJbCBkhHmeOvyKkxX0jnc39ZA==",
"requires": {
- "@sentry/core": "7.48.0",
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0"
+ "@sentry/core": "7.47.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0"
},
"dependencies": {
"@sentry/core": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.48.0.tgz",
- "integrity": "sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.47.0.tgz",
+ "integrity": "sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg==",
"requires": {
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
}
},
"@sentry/types": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.48.0.tgz",
- "integrity": "sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ=="
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.47.0.tgz",
+ "integrity": "sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA=="
},
"@sentry/utils": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.48.0.tgz",
- "integrity": "sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.47.0.tgz",
+ "integrity": "sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ==",
"requires": {
- "@sentry/types": "7.48.0",
+ "@sentry/types": "7.47.0",
"tslib": "^1.9.3"
}
}
}
},
"@sentry/tracing": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.48.0.tgz",
- "integrity": "sha512-X6w74Av0fyayNicKIlwL1IdpZ3O0ETQjyYXCDTwHoJL71ojrgrL5vdiNz8WwbPONTnqu98HehPYL/z3DCCKVbw==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.47.0.tgz",
+ "integrity": "sha512-hJCpKdekwaFNbCVXxfCz5IxfSEJIKnkPmRSVHITOm5VhKwq2e5kmy4Rn6bzSETwJFSDE8LGbR/3eSfGTqw37XA==",
"requires": {
- "@sentry-internal/tracing": "7.48.0"
+ "@sentry-internal/tracing": "7.47.0"
}
},
"@sentry/types": {
@@ -4424,51 +4433,51 @@
}
},
"@sentry/vue": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.48.0.tgz",
- "integrity": "sha512-0XN7SEkjQxdWPgkJvy7cXf1beJROCtkaILj1PeFWSUAObKemU902n25TNRbVeukUt5Mxjp3/8a0CvhQdpMpTbA==",
- "requires": {
- "@sentry/browser": "7.48.0",
- "@sentry/core": "7.48.0",
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.47.0.tgz",
+ "integrity": "sha512-ZaiddqyjMH5PAhe3JMw5Xy4vO3wvc97JzmvLnZ3qHkA69hQ1yFDtVhncscWeVtn5r0N9D4+VxUOHMCpDFNyATw==",
+ "requires": {
+ "@sentry/browser": "7.47.0",
+ "@sentry/core": "7.47.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
},
"dependencies": {
"@sentry/browser": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.48.0.tgz",
- "integrity": "sha512-tdx/2nhuiykncmXFlV4Dpp+Hxgt/v31LiyXE79IcM560wc+QmWKtzoW9azBWQ0xt5KOO3ERMib9qPE4/ql1/EQ==",
- "requires": {
- "@sentry-internal/tracing": "7.48.0",
- "@sentry/core": "7.48.0",
- "@sentry/replay": "7.48.0",
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.47.0.tgz",
+ "integrity": "sha512-L0t07kS/G1UGVZ9fpD6HLuaX8vVBqAGWgu+1uweXthYozu/N7ZAsakjU/Ozu6FSXj1mO3NOJZhOn/goIZLSj5A==",
+ "requires": {
+ "@sentry-internal/tracing": "7.47.0",
+ "@sentry/core": "7.47.0",
+ "@sentry/replay": "7.47.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
}
},
"@sentry/core": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.48.0.tgz",
- "integrity": "sha512-8FYuJTMpyuxRZvlen3gQ3rpOtVInSDmSyXqWEhCLuG/w34AtWoTiW7G516rsAAh6Hy1TP91GooMWbonP3XQNTQ==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.47.0.tgz",
+ "integrity": "sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg==",
"requires": {
- "@sentry/types": "7.48.0",
- "@sentry/utils": "7.48.0",
+ "@sentry/types": "7.47.0",
+ "@sentry/utils": "7.47.0",
"tslib": "^1.9.3"
}
},
"@sentry/types": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.48.0.tgz",
- "integrity": "sha512-kkAszZwQ5/v4n7Yyw/DPNRWx7h724mVNRGZIJa9ggUMvTgMe7UKCZZ5wfQmYiKVlGbwd9pxXAcP8Oq15EbByFQ=="
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.47.0.tgz",
+ "integrity": "sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA=="
},
"@sentry/utils": {
- "version": "7.48.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.48.0.tgz",
- "integrity": "sha512-d977sghkFVMfld0LrEyyY2gYrfayLPdDEpUDT+hg5y79r7zZDCFyHtdB86699E5K89MwDZahW7Erk+a1nk4x5w==",
+ "version": "7.47.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.47.0.tgz",
+ "integrity": "sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ==",
"requires": {
- "@sentry/types": "7.48.0",
+ "@sentry/types": "7.47.0",
"tslib": "^1.9.3"
}
}
@@ -4508,9 +4517,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4537,9 +4546,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4565,9 +4574,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4609,9 +4618,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4640,9 +4649,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4668,9 +4677,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -4701,9 +4710,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4727,9 +4736,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4750,9 +4759,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4777,9 +4786,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4804,9 +4813,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4837,9 +4846,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -4912,9 +4921,9 @@
}
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"find-up": {
@@ -4993,9 +5002,9 @@
}
},
"semver": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
- "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -5040,9 +5049,9 @@
}
},
"terser": {
- "version": "5.16.9",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz",
- "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==",
+ "version": "5.16.8",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz",
+ "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
@@ -5086,9 +5095,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -5116,9 +5125,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -5135,9 +5144,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -5171,9 +5180,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -5198,9 +5207,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -5222,9 +5231,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -5277,9 +5286,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -5406,9 +5415,9 @@
}
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"cosmiconfig": {
@@ -5462,9 +5471,9 @@
},
"dependencies": {
"semver": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
- "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -5552,9 +5561,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -5629,9 +5638,9 @@
"dev": true
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"fs-extra": {
@@ -5722,9 +5731,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"fs-extra": {
@@ -5757,9 +5766,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -5830,9 +5839,9 @@
}
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"find-up": {
@@ -5933,9 +5942,9 @@
}
},
"terser": {
- "version": "5.16.9",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz",
- "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==",
+ "version": "5.16.8",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz",
+ "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
@@ -5962,9 +5971,9 @@
},
"dependencies": {
"schema-utils": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz",
- "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.8",
@@ -6038,9 +6047,9 @@
}
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -6055,9 +6064,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -6087,9 +6096,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -6117,9 +6126,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -6162,9 +6171,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"estraverse": {
@@ -6216,9 +6225,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -6254,9 +6263,9 @@
}
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"fs-extra": {
@@ -6286,9 +6295,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -6316,9 +6325,9 @@
},
"dependencies": {
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
},
"qs": {
@@ -6367,9 +6376,9 @@
"dev": true
},
"core-js": {
- "version": "3.30.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
- "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==",
"dev": true
}
}
@@ -6572,9 +6581,9 @@
"dev": true
},
"@types/lodash": {
- "version": "4.14.194",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz",
- "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==",
+ "version": "4.14.192",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz",
+ "integrity": "sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==",
"dev": true
},
"@types/long": {
@@ -6867,6 +6876,63 @@
"tsutils": "^3.21.0"
},
"dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
+ "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
+ "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
+ "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz",
+ "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
+ "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -6876,6 +6942,22 @@
"ms": "2.1.2"
}
},
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
+ "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "dev": true
+ },
"semver": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
@@ -6899,6 +6981,47 @@
"debug": "^4.3.4"
},
"dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
+ "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
+ "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
+ "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
+ "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -6907,17 +7030,32 @@
"requires": {
"ms": "2.1.2"
}
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
+ "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
+ "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.58.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
- "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
+ "version": "5.57.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz",
+ "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.58.0",
- "@typescript-eslint/visitor-keys": "5.58.0"
+ "@typescript-eslint/types": "5.57.1",
+ "@typescript-eslint/visitor-keys": "5.57.1"
}
},
"@typescript-eslint/type-utils": {
@@ -6932,6 +7070,63 @@
"tsutils": "^3.21.0"
},
"dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz",
+ "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
+ "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
+ "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/visitor-keys": "5.58.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz",
+ "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.58.0",
+ "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/typescript-estree": "5.58.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.58.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
+ "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.58.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -6940,23 +7135,48 @@
"requires": {
"ms": "2.1.2"
}
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
+ "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
+ "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@typescript-eslint/types": {
- "version": "5.58.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz",
- "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==",
+ "version": "5.57.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz",
+ "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.58.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz",
- "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==",
+ "version": "5.57.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz",
+ "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.58.0",
- "@typescript-eslint/visitor-keys": "5.58.0",
+ "@typescript-eslint/types": "5.57.1",
+ "@typescript-eslint/visitor-keys": "5.57.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -6974,9 +7194,9 @@
}
},
"semver": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
- "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -6985,17 +7205,17 @@
}
},
"@typescript-eslint/utils": {
- "version": "5.58.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz",
- "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==",
+ "version": "5.57.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.1.tgz",
+ "integrity": "sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==",
"dev": true,
"requires": {
"@eslint-community/eslint-utils": "^4.2.0",
"@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.58.0",
- "@typescript-eslint/types": "5.58.0",
- "@typescript-eslint/typescript-estree": "5.58.0",
+ "@typescript-eslint/scope-manager": "5.57.1",
+ "@typescript-eslint/types": "5.57.1",
+ "@typescript-eslint/typescript-estree": "5.57.1",
"eslint-scope": "^5.1.1",
"semver": "^7.3.7"
},
@@ -7011,9 +7231,9 @@
}
},
"semver": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
- "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -7022,12 +7242,12 @@
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.58.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz",
- "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==",
+ "version": "5.57.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz",
+ "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.58.0",
+ "@typescript-eslint/types": "5.57.1",
"eslint-visitor-keys": "^3.3.0"
},
"dependencies": {
@@ -7039,6 +7259,156 @@
}
}
},
+ "@volar-plugins/html": {
+ "version": "2.0.0-alpha.13",
+ "resolved": "https://registry.npmjs.org/@volar-plugins/html/-/html-2.0.0-alpha.13.tgz",
+ "integrity": "sha512-z9ogEvMtrqkSl/m5h9019mWPbA2R8jua+AXkVJhLGIt/pc+S9SmMGpX+8eZGCPQhNkvzeoR9Cfg1wP0k/tGDVA==",
+ "dev": true,
+ "requires": {
+ "vscode-html-languageservice": "^5.0.4",
+ "vscode-languageserver-protocol": "^3.17.3",
+ "vscode-languageserver-textdocument": "^1.0.8"
+ }
+ },
+ "@volar-plugins/pug": {
+ "version": "2.0.0-alpha.13",
+ "resolved": "https://registry.npmjs.org/@volar-plugins/pug/-/pug-2.0.0-alpha.13.tgz",
+ "integrity": "sha512-chlweqIZHOsbrZsLWrrUUTYvd3nAV7ItzkglWV8WmHwzXJmTr3r+jDgRik1YwYOGQgRFTi4jDuawAByuzqgETg==",
+ "dev": true,
+ "requires": {
+ "@volar-plugins/html": "2.0.0-alpha.13",
+ "@volar/language-service": "1.3.0-alpha.0",
+ "@volar/source-map": "1.3.0-alpha.0",
+ "muggle-string": "^0.2.2",
+ "pug-lexer": "^5.0.1",
+ "pug-parser": "^6.0.0",
+ "vscode-html-languageservice": "^5.0.4",
+ "vscode-languageserver-textdocument": "^1.0.8",
+ "vscode-languageserver-types": "^3.17.2"
+ },
+ "dependencies": {
+ "@volar/source-map": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==",
+ "dev": true,
+ "requires": {
+ "muggle-string": "^0.2.2"
+ }
+ }
+ }
+ },
+ "@volar/language-core": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-W3uMzecHPcbwddPu4SJpUcPakRBK/y/BP+U0U6NiPpUX1tONLC4yCawt+QBJqtgJ+sfD6ztf5PyvPL3hQRqfOA==",
+ "dev": true,
+ "requires": {
+ "@volar/source-map": "1.3.0-alpha.0"
+ },
+ "dependencies": {
+ "@volar/source-map": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==",
+ "dev": true,
+ "requires": {
+ "muggle-string": "^0.2.2"
+ }
+ }
+ }
+ },
+ "@volar/language-service": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-dEzslTv2bHNP+ariZu0kj1C7ClSMzfX41Cmctp2MnNMN68F/olrmP4sT84+D7COeYj+wz7SduDqWSsWPGXfT2g==",
+ "dev": true,
+ "requires": {
+ "@volar/language-core": "1.3.0-alpha.0",
+ "@volar/shared": "1.3.0-alpha.0",
+ "@volar/source-map": "1.3.0-alpha.0",
+ "@volar/typescript-faster": "1.3.0-alpha.0",
+ "vscode-html-languageservice": "^5.0.4",
+ "vscode-json-languageservice": "^5.2.0",
+ "vscode-languageserver-protocol": "^3.17.3",
+ "vscode-languageserver-textdocument": "^1.0.8",
+ "vscode-uri": "^3.0.7"
+ },
+ "dependencies": {
+ "@volar/source-map": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==",
+ "dev": true,
+ "requires": {
+ "muggle-string": "^0.2.2"
+ }
+ }
+ }
+ },
+ "@volar/shared": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-+sRJ8tHp9IHpD3X2caeDRLA1BU7ntxRh8kpjhML9xUHYfGJv+C8pQUYqfAjemPwU4Z8F3C4gEM1Cvzg6aoyyLw==",
+ "dev": true,
+ "requires": {
+ "typesafe-path": "^0.2.2",
+ "vscode-uri": "^3.0.7"
+ }
+ },
+ "@volar/source-map": {
+ "version": "1.0.24",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.0.24.tgz",
+ "integrity": "sha512-Qsv/tkplx18pgBr8lKAbM1vcDqgkGKQzbChg6NW+v0CZc3G7FLmK+WrqEPzKlN7Cwdc6XVL559Nod8WKAfKr4A==",
+ "dev": true,
+ "requires": {
+ "muggle-string": "^0.1.0"
+ },
+ "dependencies": {
+ "muggle-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.1.0.tgz",
+ "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==",
+ "dev": true
+ }
+ }
+ },
+ "@volar/typescript-faster": {
+ "version": "1.3.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@volar/typescript-faster/-/typescript-faster-1.3.0-alpha.0.tgz",
+ "integrity": "sha512-9qQHzjARrwrx7HElzOAU8B0QL66HuVjRHNVaOAcoraRk+8ioGDVRaHPS4vuE+cnXXieul28UeAk7AQl/o639Ww==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.3.8"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@volar/vue-language-plugin-pug": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@volar/vue-language-plugin-pug/-/vue-language-plugin-pug-1.2.0.tgz",
+ "integrity": "sha512-Mt8XMBGO0FHfnPFKLEeVgWkPmZ7LOqtbKddy1jhkAKqdEgcqGO5Bo/RdpLdqnYgUlPUdn/0XNDK09fsNygOtsg==",
+ "dev": true,
+ "requires": {
+ "@volar-plugins/pug": "2.0.0-alpha.13",
+ "@volar/source-map": "1.0.24"
+ }
+ },
+ "@vscode/l10n": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz",
+ "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==",
+ "dev": true
+ },
"@vue/compiler-core": {
"version": "3.2.47",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
@@ -7094,12 +7464,12 @@
"dev": true
},
"postcss": {
- "version": "8.4.22",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz",
- "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==",
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"dev": true,
"requires": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
@@ -7174,6 +7544,15 @@
"eslint-import-resolver-webpack": "^0.13.0"
}
},
+ "@vue/reactivity": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz",
+ "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+ "dev": true,
+ "requires": {
+ "@vue/shared": "3.2.47"
+ }
+ },
"@vue/reactivity-transform": {
"version": "3.2.47",
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
@@ -7187,6 +7566,27 @@
"magic-string": "^0.25.7"
}
},
+ "@vue/runtime-core": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+ "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+ "dev": true,
+ "requires": {
+ "@vue/reactivity": "3.2.47",
+ "@vue/shared": "3.2.47"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.2.47",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+ "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+ "dev": true,
+ "requires": {
+ "@vue/runtime-core": "3.2.47",
+ "@vue/shared": "3.2.47",
+ "csstype": "^2.6.8"
+ }
+ },
"@vue/shared": {
"version": "3.2.47",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz",
@@ -8122,6 +8522,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -8161,6 +8574,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -8272,6 +8699,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -8311,6 +8751,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -8416,23 +8870,6 @@
"integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
"dev": true
},
- "ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
- "dev": true,
- "requires": {
- "tslib": "^2.0.1"
- },
- "dependencies": {
- "tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
- "dev": true
- }
- }
- },
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -8688,9 +9125,9 @@
},
"dependencies": {
"is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -8703,12 +9140,12 @@
"dev": true
},
"resolve": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz",
- "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"requires": {
- "is-core-module": "^2.12.0",
+ "is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -11307,6 +11744,12 @@
}
}
},
+ "csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+ "dev": true
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -14671,9 +15114,9 @@
"dev": true
},
"flow-parser": {
- "version": "0.204.0",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.204.0.tgz",
- "integrity": "sha512-cQhNPLOk5NFyDXBC8WE8dy2Gls+YqKI3FNqQbJ7UrbFyd30IdEX3t27u3VsnoVK22I872+PWeb1KhHxDgu7kAg==",
+ "version": "0.203.1",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.203.1.tgz",
+ "integrity": "sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==",
"dev": true
},
"flush-write-stream": {
@@ -16733,6 +17176,19 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true
+ },
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
}
}
},
@@ -17798,6 +18254,12 @@
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"dev": true
},
+ "jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -19488,6 +19950,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "muggle-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.2.2.tgz",
+ "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==",
+ "dev": true
+ },
"multiaddr": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz",
@@ -20093,6 +20561,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -20132,6 +20613,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -20241,6 +20736,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -20280,6 +20788,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -21773,11 +22295,10 @@
"dev": true
},
"prettier": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
- "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
- "dev": true,
- "optional": true
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
+ "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
+ "dev": true
},
"pretty-bytes": {
"version": "5.6.0",
@@ -22000,6 +22521,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -22039,6 +22573,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -22148,6 +22696,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -22187,6 +22748,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -22796,13 +23371,13 @@
}
},
"recast": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.1.tgz",
- "integrity": "sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.22.0.tgz",
+ "integrity": "sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==",
"dev": true,
"requires": {
"assert": "^2.0.0",
- "ast-types": "^0.16.1",
+ "ast-types": "0.15.2",
"esprima": "~4.0.0",
"source-map": "~0.6.1",
"tslib": "^2.0.1"
@@ -22820,6 +23395,15 @@
"util": "^0.12.0"
}
},
+ "ast-types": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz",
+ "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.1"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -23878,17 +24462,12 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
},
- "nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
- },
"postcss": {
- "version": "8.4.22",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz",
- "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==",
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"requires": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
@@ -25170,6 +25749,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -25209,6 +25801,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -25318,6 +25924,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -25357,6 +25976,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -25466,6 +26099,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -25505,6 +26151,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -25614,6 +26274,19 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
@@ -25653,6 +26326,20 @@
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
}
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
}
}
},
@@ -26643,6 +27330,12 @@
"is-typedarray": "^1.0.0"
}
},
+ "typesafe-path": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
+ "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==",
+ "dev": true
+ },
"typescript": {
"version": "4.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
@@ -27540,6 +28233,65 @@
"integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
"dev": true
},
+ "vscode-html-languageservice": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz",
+ "integrity": "sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==",
+ "dev": true,
+ "requires": {
+ "@vscode/l10n": "^0.0.11",
+ "vscode-languageserver-textdocument": "^1.0.8",
+ "vscode-languageserver-types": "^3.17.2",
+ "vscode-uri": "^3.0.7"
+ }
+ },
+ "vscode-json-languageservice": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.3.2.tgz",
+ "integrity": "sha512-5td6olfoNdtyxnNA4uocq7V9jdTJt63o9mGEntQb6cbD2HiObZW2XgbSj6nRaebWwBCiYdWpFklNjm6Wz6Xy1Q==",
+ "dev": true,
+ "requires": {
+ "@vscode/l10n": "^0.0.11",
+ "jsonc-parser": "^3.2.0",
+ "vscode-languageserver-textdocument": "^1.0.8",
+ "vscode-languageserver-types": "^3.17.3",
+ "vscode-uri": "^3.0.7"
+ }
+ },
+ "vscode-jsonrpc": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz",
+ "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==",
+ "dev": true
+ },
+ "vscode-languageserver-protocol": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz",
+ "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==",
+ "dev": true,
+ "requires": {
+ "vscode-jsonrpc": "8.1.0",
+ "vscode-languageserver-types": "3.17.3"
+ }
+ },
+ "vscode-languageserver-textdocument": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz",
+ "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==",
+ "dev": true
+ },
+ "vscode-languageserver-types": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
+ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz",
+ "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==",
+ "dev": true
+ },
"vue": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
@@ -27566,20 +28318,20 @@
}
},
"vue-docgen-api": {
- "version": "4.67.0",
- "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.67.0.tgz",
- "integrity": "sha512-BXXgWp80f03JMgNM9cCxmjdFc28SkjK3Kx4TA0LBkQXPBzcj4OQSp2GWKTz8fAB2Nefh7EXa2iGdCaDRiTFdeA==",
+ "version": "4.64.1",
+ "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.64.1.tgz",
+ "integrity": "sha512-jbOf7ByE3Zvtuk+429Jorl+eIeh2aB2Fx1GUo3xJd1aByJWE8KDlSEa6b11PB1ze8f0sRUBraRDinICCk0KY7g==",
"dev": true,
"requires": {
- "@babel/parser": "^7.21.4",
- "@babel/types": "^7.21.4",
+ "@babel/parser": "^7.13.12",
+ "@babel/types": "^7.18.8",
"@vue/compiler-dom": "^3.2.0",
"@vue/compiler-sfc": "^3.2.0",
- "ast-types": "^0.16.1",
+ "ast-types": "0.14.2",
"hash-sum": "^2.0.0",
"lru-cache": "^8.0.3",
"pug": "^3.0.2",
- "recast": "^0.23.1",
+ "recast": "0.22.0",
"ts-map": "^1.0.3",
"vue-inbrowser-compiler-independent-utils": "^4.64.1"
},
@@ -27613,6 +28365,15 @@
"to-fast-properties": "^2.0.0"
}
},
+ "ast-types": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz",
+ "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.1"
+ }
+ },
"hash-sum": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
@@ -27624,6 +28385,12 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
"dev": true
+ },
+ "tslib": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
+ "dev": true
}
}
},
diff --git a/package.json b/package.json
index 5b023657d..7fc1d2452 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "dho-web-client",
- "version": "2.24.1",
+ "version": "2.25.1",
"description": "Governance, payroll and treasury tools for distributed HUMAN organizations (DHO)",
"productName": "Hypha DHO",
"author": "Max ",
@@ -14,9 +14,11 @@
"build-storybook": "build-storybook -s ./public",
"graph-schema": "node ./src/apollo/generatePossibleTypes.js",
"prepare": "husky install",
- "commit": "git-cz"
+ "commit": "git-cz",
+ "generate-types": " graphql-codegen --config codegen.ts"
},
"dependencies": {
+ "@graphql-codegen/typescript-operations": "^3.0.3",
"@hypha-dao/hypha-token-sales-util": "^1.0.1",
"@hypha-dao/ppp-client-api": "1.0.2",
"@quasar/extras": "1.10.4",
@@ -48,6 +50,7 @@
"universal-authenticator-library": "^0.3.0",
"validator": "13.6.0",
"vue": "^2.6.12",
+ "vue-apollo-smart-ops": "^0.2.0-beta.1",
"vue-croppa": "^1.3.8",
"vue-lodash": "^2.1.2",
"vue-matomo": "^4.0.0",
@@ -60,6 +63,11 @@
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@commitlint/cli": "^17.0.3",
"@commitlint/config-conventional": "^17.0.3",
+ "@graphql-codegen/add": "^4.0.1",
+ "@graphql-codegen/cli": "^3.3.0",
+ "@graphql-codegen/typescript": "^3.0.3",
+ "@graphql-codegen/typescript-vue-apollo-smart-ops": "^2.3.6",
+ "@prettier/plugin-pug": "^2.4.2",
"@quasar/app": "^2.2.4",
"@quasar/quasar-app-extension-apollo": "^1.0.0-beta.8",
"@quasar/quasar-app-extension-qmarkdown": "^1.4.1",
@@ -69,7 +77,9 @@
"@storybook/vue": "^6.5.12",
"@typescript-eslint/eslint-plugin": "^5.57.0",
"@typescript-eslint/parser": "^5.57.0",
+ "@volar/vue-language-plugin-pug": "^1.2.0",
"@vue/eslint-config-standard": "6.0.0",
+ "@vue/runtime-dom": "^3.2.47",
"babel-eslint": "10.1.0",
"babel-loader": "^8.2.2",
"chromatic": "^5.8.2",
@@ -86,11 +96,14 @@
"eslint-plugin-storybook": "^0.6.4",
"eslint-plugin-vue": "7.9.0",
"husky": "^8.0.1",
+ "prettier": "^2.8.7",
"pug": "3.0.2",
"pug-plain-loader": "1.1.0",
"raw-loader": "^4.0.2",
"style-loader": "^2.0.0",
- "vue-loader": "^15.9.6"
+ "ts-node": "^10.9.1",
+ "typescript": "^5.0.4",
+ "vue-loader": "15.9.6"
},
"husky": {
"hooks": {
@@ -119,4 +132,4 @@
"last 10 iOS versions",
"last 5 Opera versions"
]
-}
+}
\ No newline at end of file
diff --git a/public/svg/create-new-dao.svg b/public/svg/create-new-dao.svg
new file mode 100644
index 000000000..030173293
--- /dev/null
+++ b/public/svg/create-new-dao.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svg/icon-anchor.svg b/public/svg/icon-anchor.svg
new file mode 100644
index 000000000..a37376034
--- /dev/null
+++ b/public/svg/icon-anchor.svg
@@ -0,0 +1,3 @@
+
diff --git a/public/svg/icon-gallery.svg b/public/svg/icon-gallery.svg
new file mode 100644
index 000000000..51df611bf
--- /dev/null
+++ b/public/svg/icon-gallery.svg
@@ -0,0 +1,5 @@
+
diff --git a/quasar.conf.js b/quasar.conf.js
index bf1a649b4..e36c54c0b 100644
--- a/quasar.conf.js
+++ b/quasar.conf.js
@@ -71,14 +71,14 @@ module.exports = function (ctx) {
DGRAPH_URL: process.env.DGRAPH_URL,
DGRAPH_ROOT_HASH: process.env.DGRAPH_ROOT_HASH,
DGRAPH_AUTH_KEY: process.env.DGRAPH_AUTH_KEY,
+ ROOT_DAO_ID: process.env.ROOT_DAO_ID,
+ ROOT_DAO_SLUG: process.env.ROOT_DAO_SLUG,
REGISTER_API_URL: process.env.REGISTER_API_URL,
REGISTER_API_KEY: process.env.REGISTER_API_KEY,
ACCOUNT_API_URL: process.env.ACCOUNT_API_URL,
ACCOUNT_API_KEY: process.env.ACCOUNT_API_KEY,
NETWORK_CHAIN_ID: process.env.NETWORK_CHAIN_ID,
BLOCKCHAIN_ENDPOINTS: process.env.BLOCKCHAIN_ENDPOINTS,
- EOS_NETWORK_CHAIN_ID: process.env.EOS_NETWORK_CHAIN_ID,
- EOS_ENDPOINTS: process.env.EOS_ENDPOINTS,
TLOSTO_SEEDS: process.env.TLOSTO_SEEDS,
DAO_CONTRACT: process.env.DAO_CONTRACT,
KV_CONTRACT: process.env.KV_CONTRACT,
@@ -87,6 +87,7 @@ module.exports = function (ctx) {
BLOCKCHAIN_EXPLORER_ETH: process.env.BLOCKCHAIN_EXPLORER_ETH,
BLOCKCHAIN_EXPLORER_EOS: process.env.BLOCKCHAIN_EXPLORER_EOS,
PPP_ENV: process.env.PPP_ENV,
+ PPP_APP_ID: process.env.PPP_APP_ID,
SENTRY_DSN: process.env.SENTRY_DSN,
SENTRY_ENV: process.env.SENTRY_ENV,
IPFS_URL: process.env.IPFS_URL,
@@ -103,7 +104,8 @@ module.exports = function (ctx) {
HYPHA_TOKEN_SALES_URL: process.env.HYPHA_TOKEN_SALES_URL,
HYPHA_TOKEN_SALES_API_URL: process.env.HYPHA_TOKEN_SALES_API_URL,
HYPHA_TOKEN_SALES_RPC_URL: process.env.HYPHA_TOKEN_SALES_RPC_URL,
- PACKAGE_VERSION: JSON.parse(packageJson).version || 0
+ PACKAGE_VERSION: JSON.parse(packageJson).version || 0,
+ HEALTH_ENDPOINT: process.env.HEALTH_ENDPOINT
},
scopeHoisting: true,
diff --git a/src/App.vue b/src/App.vue
index 8971ddc53..c36d99800 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -27,6 +27,7 @@ export default {
async beforeMount () {
await this.autoLogin()
+ await this.initConfigs()
await this.loadAlert()
},
@@ -38,6 +39,7 @@ export default {
methods: {
...mapActions('accounts', ['autoLogin']),
+ ...mapActions('dao', ['initConfigs']),
...mapActions('layout', ['loadAlert']),
...mapMutations('layout', ['dismissAlert'])
}
diff --git a/src/assets/icons/attachments/camera.svg b/src/assets/icons/attachments/camera.svg
new file mode 100644
index 000000000..c5ceb63bf
--- /dev/null
+++ b/src/assets/icons/attachments/camera.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/attachments/cloud.svg b/src/assets/icons/attachments/cloud.svg
new file mode 100644
index 000000000..d8fc30d6d
--- /dev/null
+++ b/src/assets/icons/attachments/cloud.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/assets/icons/attachments/doc.svg b/src/assets/icons/attachments/doc.svg
new file mode 100644
index 000000000..8a1d478f8
--- /dev/null
+++ b/src/assets/icons/attachments/doc.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/attachments/picture.svg b/src/assets/icons/attachments/picture.svg
new file mode 100644
index 000000000..a0189e29a
--- /dev/null
+++ b/src/assets/icons/attachments/picture.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/ecosystem/socio-ecological.svg b/src/assets/icons/ecosystem/socio-ecological.svg
new file mode 100644
index 000000000..265fb7f5f
--- /dev/null
+++ b/src/assets/icons/ecosystem/socio-ecological.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/icons/ecosystem/socio-economic.svg b/src/assets/icons/ecosystem/socio-economic.svg
new file mode 100644
index 000000000..4993b58ba
--- /dev/null
+++ b/src/assets/icons/ecosystem/socio-economic.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/ecosystem/socio-political.svg b/src/assets/icons/ecosystem/socio-political.svg
new file mode 100644
index 000000000..353e8a234
--- /dev/null
+++ b/src/assets/icons/ecosystem/socio-political.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/icons/ecosystem/socio-psychological.svg b/src/assets/icons/ecosystem/socio-psychological.svg
new file mode 100644
index 000000000..0ffc0f6c5
--- /dev/null
+++ b/src/assets/icons/ecosystem/socio-psychological.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icons/tlos.png b/src/assets/icons/tlos.png
new file mode 100644
index 000000000..51213ed63
Binary files /dev/null and b/src/assets/icons/tlos.png differ
diff --git a/src/assets/images/scratch-option-img.png b/src/assets/images/scratch-option-img.png
new file mode 100644
index 000000000..76b471262
Binary files /dev/null and b/src/assets/images/scratch-option-img.png differ
diff --git a/src/assets/images/template-option-img.png b/src/assets/images/template-option-img.png
new file mode 100644
index 000000000..ca2246a5b
Binary files /dev/null and b/src/assets/images/template-option-img.png differ
diff --git a/src/boot/api.js b/src/boot/api.js
index 4bd9e1e41..d3662ed6a 100644
--- a/src/boot/api.js
+++ b/src/boot/api.js
@@ -2,46 +2,59 @@ import { Api, JsonRpc } from 'eosjs'
import axios from 'axios'
const signTransaction = async function (actions) {
- actions.forEach(action => {
+ actions.forEach((action) => {
if (!action.authorization || !action.authorization.length) {
- action.authorization = [{
- actor: this.state.accounts.account,
- permission: 'active'
- }]
+ action.authorization = [
+ {
+ actor: this.state.accounts.account,
+ permission: 'active'
+ }
+ ]
}
})
let transactionId = null
let error = null
try {
if (this.$type === 'ual') {
- const result = await this.$ualUser.signTransaction({
- actions
- }, {
- blocksBehind: 3,
- expireSeconds: 30
- })
+ const result = await this.$ualUser.signTransaction(
+ {
+ actions
+ },
+ {
+ blocksBehind: 3,
+ expireSeconds: 30
+ }
+ )
transactionId = result.transactionId
} else if (this.$type === 'inApp') {
- const result = await this.$inAppUser.transact({
- actions
- }, {
- blocksBehind: 3,
- expireSeconds: 30
- })
+ const result = await this.$inAppUser.transact(
+ {
+ actions
+ },
+ {
+ blocksBehind: 3,
+ expireSeconds: 30
+ }
+ )
transactionId = result.transaction_id
} else if (typeof window.LightWalletChannel === 'object') {
transactionId = await this.$lightWallet.sendTransaction(actions)
}
} catch (e) {
error = this.$type === 'inApp' ? e.message : e.cause.message
- // console.error(error) // eslint-disable-line no-console
- // console.error(actions) // eslint-disable-line no-console
+ console.error(e) // eslint-disable-line no-console
+ console.error(error) // eslint-disable-line no-console
+ console.error(actions) // eslint-disable-line no-console
this.$sentry?.setExtra('actions', JSON.stringify(actions))
this.$sentry?.setExtra('error', error)
this.$sentry?.captureException(e)
throw new Error(e)
}
- this.commit('notifications/addNotification', { transactionId, actions, error }, { root: true })
+ this.commit(
+ 'notifications/addNotification',
+ { transactionId, actions, error },
+ { root: true }
+ )
return error === null
}
@@ -57,12 +70,11 @@ const getAccount = async function (account) {
}
export default async ({ store }) => {
- const apiUrl = await getBestEndpoint()
- const eosApiUrl = await getBestEndpoint(process.env.EOS_ENDPOINTS)
+ const apiUrl = await getBestEndpoint(process.env.BLOCKCHAIN_ENDPOINTS)
store.$apiUrl = apiUrl
- store.$eosApiUrl = eosApiUrl
const rpc = new JsonRpc(apiUrl)
+
store.$defaultApi = new Api({ rpc })
store.$api = {
@@ -72,20 +84,24 @@ export default async ({ store }) => {
}
}
-const getBestEndpoint = async (endpoints = process.env.BLOCKCHAIN_ENDPOINTS) => {
+const getBestEndpoint = async (
+ endpoints = process.env.BLOCKCHAIN_ENDPOINTS,
+ healthEndpoint = process.env.HEALTH_ENDPOINT
+) => {
const promises = []
for (const endpoint of endpoints.split(',')) {
- promises.push(pingEndpoint(endpoint))
+ promises.push(pingEndpoint(endpoint, healthEndpoint))
}
const result = await Promise.all(promises)
result.sort((a, b) => a.time - b.time)
return result[0].url
}
-const pingEndpoint = async (url) => {
+const pingEndpoint = async (url, healthEndoint) => {
const start = Date.now()
+ const healthUrl = healthEndoint ? `${url}/${healthEndoint}` : url
try {
- await axios.get(`${url}/v2/health`, {
+ await axios.get(`${healthUrl}`, {
timeout: 5000
})
} catch (e) {
diff --git a/src/boot/axios.js b/src/boot/axios.js
index eb18af5f4..a783e011b 100644
--- a/src/boot/axios.js
+++ b/src/boot/axios.js
@@ -1,7 +1,7 @@
import axios from 'axios'
export const accountApi = axios.create({
- baseURL: process.env.EOS_ACCOUNT_API_URL,
+ baseURL: process.env.ACCOUNT_API_URL,
headers: {
'Content-Type': 'application/json',
'x-api-key': process.env.ACCOUNT_API_KEY
@@ -9,8 +9,8 @@ export const accountApi = axios.create({
})
accountApi.interceptors.response.use(
- response => response.data || {},
- error => {
+ (response) => response.data || {},
+ (error) => {
return {
status: error.response.status,
error: error.response.data
diff --git a/src/boot/config.js b/src/boot/config.js
index b16f63218..ed886b3a4 100644
--- a/src/boot/config.js
+++ b/src/boot/config.js
@@ -1,4 +1,3 @@
-
export default async ({ Vue, store }) => {
try {
const contracts = {
@@ -12,84 +11,11 @@ export default async ({ Vue, store }) => {
kv: process.env.KV_CONTRACT
}
- // Debug purpose
- /*
- const all = `{
- documents(func: has(hash)) {
- expand(_all_) {
- expand(_all_) {
- expand(_all_)
- }
- }
- }
- }`
-
- const allDocuments = await store.$dgraph.newTxn().query(all)
- */
- const query = `
- query document($hash:string) {
- document(func: eq(hash, $hash)) {
- uid
- hash
- settings {
- hash
- creator
- created_date
- content_groups{
- contents {
- label
- value
- type
- }
- }
- }
- content_groups{
- contents {
- label
- value
- type
- }
- }
- }
- }
- `
- // debugger
- const root = await store.$dgraph.newTxn().queryWithVars(query, { $hash: `${process.env.DGRAPH_ROOT_HASH}` })
- let settings
- if (root) {
- root.data.document[0] && root.data.document[0].settings[0].content_groups.forEach(cg => {
- if (cg.contents.some(c => c.label === 'content_group_label' && c.value === 'settings')) {
- settings = cg.contents
- }
- })
- }
- if (settings) {
- contracts.decide = settings.find(o => o.label === 'telos_decide_contract').value
- contracts.hyphaToken = settings.find(o => o.label === 'hypha_token_contract').value
- contracts.deferredHyphaToken = settings.find(o => o.label === 'hypha_cosale_contract').value
- contracts.hvoiceToken = settings.find(o => o.label === 'hvoice_token_contract').value
- contracts.hyphaMultiplier = parseInt(settings.find(o => o.label === 'hypha_deferral_factor_x100').value) / 100
- contracts.hyphaUsdValue = parseFloat(settings.find(o => o.label === 'hypha_usd_value').value)
- contracts.husdToken = settings.find(o => o.label === 'husd_token_contract').value
- contracts.seedsToken = settings.find(o => o.label === 'seeds_token_contract').value
- contracts.seedsEscrow = settings.find(o => o.label === 'seeds_escrow_contract').value
- contracts.seedsMultiplier = parseInt(settings.find(o => o.label === 'seeds_deferral_factor_x100').value) / 100
- contracts.treasury = settings.find(o => o.label === 'treasury_contract').value
- contracts.voteDurationSeconds = parseInt(settings.find(o => o.label === 'voting_duration_sec').value)
- }
-
- const seedsConfig = settings && contracts.seedsToken && await store.$api.getTableRows({
- code: 'tlosto.seeds',
- scope: 'tlosto.seeds',
- table: 'config'
- })
- if (seedsConfig && seedsConfig.rows.length) {
- const usdToSeeds = parseFloat(seedsConfig.rows[0].seeds_per_usd)
- const seedsToUsd = 1 / usdToSeeds
- store.commit('payouts/setSeedsValues', { usdToSeeds, seedsToUsd }, { root: true })
+ Vue.prototype.$config = {
+ contracts,
+ rootDaoSlug: process.env.ROOT_DAO_SLUG || 'hypha'
}
- Vue.prototype.$config = { contracts }
store.$config = {
dho: process.env.ROOT_DAO_ID,
contracts
diff --git a/src/boot/dgraph.js b/src/boot/dgraph.js
index bf3f00d0b..983e0c1c0 100644
--- a/src/boot/dgraph.js
+++ b/src/boot/dgraph.js
@@ -1,119 +1,12 @@
import { DgraphClient, DgraphClientStub } from 'dgraph-js-http'
-/**
- * Generates vars for a dgraph query in the expected format
- * Example output: { $key1: value1, $key2: value2 }
- */
-function buildVars (item, parameters) {
- const vars = {}
- if (item.parameters && parameters) {
- Object.keys(item.parameters).forEach(key => {
- vars[`$${key}`] = `${parameters[key]}`
- })
- }
-
- return vars
-}
-
export default ({ Vue, store }) => {
- // Defines the query 'routes' that our app uses
- // The query can be written in a graphql file or inline
- // The provided 'name' must match the query name from graphql
- const QUERIES = {
- '/profile/get': {
- name: 'profile',
- query: require('../query/profile/profile.graphql').default,
- parameters: {
- username: String
- },
- single: true
- }
- }
-
const client = new DgraphClient(new DgraphClientStub(process.env.DGRAPH_URL, false))
if (process.env.DGRAPH_AUTH_KEY) {
client.setCloudApiKey(process.env.DGRAPH_AUTH_KEY)
}
- function convertContentGroups (data) {
- const result = {}
-
- if (data) {
- // Transform content_groups to sub objects
- if (Array.isArray(data.content_groups)) {
- data.content_groups.forEach(group => {
- if (Array.isArray(group.contents)) {
- const groupName = group.contents.find(c => c.label === 'content_group_label').value
- data[groupName] = {}
- group.contents.forEach(c => {
- if (c.label === 'content_group_label') return
- let value = c.value
- switch (c.type) {
- case 'int64': value = Number.parseInt(c.value); break
- case 'float': value = Number.parseInt(c.value); break
- case 'asset': break
- case 'time_point': value = new Date(c.value); break
- }
- data[groupName][c.label] = value
- })
- }
- })
- }
- // Retrieve values from data object, ignoring content_groups
- Object.keys(data).forEach(key => {
- if (key === 'content_groups') return
- if (Array.isArray(data[key])) {
- const items = []
- data[key].forEach(item => items.push(convertContentGroups(item)))
- result[key] = items
- } else {
- result[key] = data[key]
- }
- })
- }
-
- return result
- }
-
- async function dgraphQuery (item, parameters) {
- const res = await client.newTxn({ readOnly: true, bestEffort: true })
- .queryWithVars(item.query, buildVars(item, parameters))
- if (item.single) {
- const data = res.data[item.name][0]
- return convertContentGroups(data)
- }
-
- if (Array.isArray(res.data[item.name])) {
- const results = []
- res.data[item.name].forEach(r => {
- results.push(convertContentGroups(r))
- })
-
- return results
- }
-
- // TODO: Throw exception?
- return null
- }
-
// TODO: Remove this, used by legacy dgraph queries
store.$dgraph = client
-
- /**
- * Run a dgraph query and extract the results into a plain javascript object
- * TODO: Transform content_groups and contents to simple properties of proper type
- * TODO: Cache the result of this query and return that immediately for subsequent calls
- * TODO: If same query is in flight recently (<2 seconds) return results of the first call
- * @param {String} path Query route to use (unique identifier)
- * @param {Object} parameters Object with parameters for query
- */
- Vue.prototype.$dgraphQuery = async (path, parameters) => {
- const item = QUERIES[path]
- if (item) {
- return await dgraphQuery(item, parameters)
- }
-
- return null
- }
}
diff --git a/src/boot/matomo.js b/src/boot/matomo.js
index dd117ff8a..8c2ddc06d 100644
--- a/src/boot/matomo.js
+++ b/src/boot/matomo.js
@@ -1,9 +1,9 @@
-import VueMatomo from 'vue-matomo'
+// import VueMatomo from 'vue-matomo'
export default ({ Vue, router }) => {
- Vue.use(VueMatomo, {
- host: 'https://track.hypha.earth',
- siteId: 1,
- router
- })
+ // Vue.use(VueMatomo, {
+ // host: 'https://track.hypha.earth',
+ // siteId: 1,
+ // router
+ // })
}
diff --git a/src/boot/ppp.js b/src/boot/ppp.js
index b1552f275..180538306 100644
--- a/src/boot/ppp.js
+++ b/src/boot/ppp.js
@@ -1,6 +1,6 @@
import PPP from '@hypha-dao/ppp-client-api'
export default async ({ store }) => {
- PPP.configure(process.env.PPP_ENV)
+ PPP.configure(process.env.PPP_ENV, process.env.PPP_APP_ID)
store.$ppp = PPP
}
diff --git a/src/boot/ual.js b/src/boot/ual.js
index 20a2a1e9d..c16cb854d 100644
--- a/src/boot/ual.js
+++ b/src/boot/ual.js
@@ -7,7 +7,7 @@ export default async ({ Vue, store }) => {
chainId: process.env.NETWORK_CHAIN_ID,
rpcEndpoints: [{
protocol: 'https',
- host: store.$eosApiUrl.replace('https://', ''),
+ host: store.$apiUrl.replace('https://', ''),
port: 443
}]
}
diff --git a/src/components.d.ts b/src/components.d.ts
new file mode 100644
index 000000000..f70061b0c
--- /dev/null
+++ b/src/components.d.ts
@@ -0,0 +1,10 @@
+import { ComponentConstructor } from 'quasar';
+
+type Quasar = typeof import('quasar');
+type QuasarComponentNames = keyof { [K in keyof Quasar as (Quasar)[K] extends ComponentConstructor ? K : never]: any };
+type QuasarComponents = Pick;
+type QuasarFuncationalComponents = { [K in keyof QuasarComponents]: Quasar[K] extends ComponentConstructor ? (props: Partial) => void : never };
+
+declare module '@vue/runtime-dom' { // Vue <= 2.6.14
+ export interface GlobalComponents extends QuasarFuncationalComponents { }
+}
diff --git a/src/components/assignments/assignment-radio.stories.js b/src/components/assignments/assignment-radio.stories.js
index c68e98124..4395e3d56 100644
--- a/src/components/assignments/assignment-radio.stories.js
+++ b/src/components/assignments/assignment-radio.stories.js
@@ -20,9 +20,6 @@ Example.args = {
__typename: 'Assignment',
details_title_s: 'Hypha Frontend Dev',
details_periodCount_i: 12,
- details_startPeriod_c_edge: {
- details_startTime_t: 1234567890
- },
role: [
{
details_title_s: 'Building and Developing B4'
diff --git a/src/components/assignments/assignment-radio.vue b/src/components/assignments/assignment-radio.vue
index 6f5f89df0..c3b315ee6 100644
--- a/src/components/assignments/assignment-radio.vue
+++ b/src/components/assignments/assignment-radio.vue
@@ -1,6 +1,5 @@
-.base-banner.full-width.rounded-full.relative-position.overflow-hidden(:style="{'background': color}" :class="{'compact-banner' : compact}")
- #banner-pattern.absolute(:style="{'background': `url('${pattern}') repeat`, 'background-size': '200px' }" v-if="pattern")
- #banner-image.absolute(:style="{'background': `url('${background}') no-repeat`, 'background-size': 'cover' }" v-if="background")
+.base-banner.full-width.rounded-full.relative-position.overflow-hidden(
+ :class="{'compact-banner': compact}"
+ :style="{background: color}"
+)
+ #banner-pattern.absolute(
+ :style="{background: `url('${pattern}') repeat`, 'background-size': '200px'}"
+ v-if="pattern"
+ )
+ #banner-image.absolute(
+ :style="{background: `url('${background}') no-repeat`, 'background-size': 'cover'}"
+ v-if="background"
+ )
#linear-gradient.absolute.z-40(v-if="gradient")
- .content.relative-position.z-50.full-height.q-pa-xl(:class="{'q-pa-xxxl': $q.screen.gt.sm }")
- .absolute-top-right.z-50.q-pa-sm(v-if="hasListener('onClose') || hasSlot('top-right')")
+ .content.relative-position.z-50.full-height.q-pa-xl(
+ :class="{'q-pa-xxxl': $q.screen.gt.sm}"
+ )
+ .absolute-top-right.z-50.q-pa-sm(
+ v-if="hasListener('onClose') || hasSlot('top-right')"
+ )
slot(name="top-right")
q-btn.absolute-top-right.q-pa-sm.close-btn(
@click="$emit('onClose')"
@@ -84,7 +105,10 @@ export default {
slot(name="header")
section.row
- div(v-if="!compact" :class="{'col-6': split || hasSlot('right'), 'full-width': contentFullWidth}")
+ div(
+ :class="{'col-6': split || hasSlot('right'), 'full-width': contentFullWidth}"
+ v-if="!compact"
+ )
h3.q-pa-none.q-ma-none.h-h2.text-white.text-weight-700 {{title}}
p.h-b1.text-white.q-my-lg.text-weight-500.leading-loose {{description}}
nav.q-mt-xl
@@ -111,5 +135,4 @@ export default {
background-repeat: no-repeat
background-size: cover
background-position-x right
-
diff --git a/src/components/common/button-card.vue b/src/components/common/button-card.vue
index 8124d4ff3..316dd36e7 100644
--- a/src/components/common/button-card.vue
+++ b/src/components/common/button-card.vue
@@ -1,11 +1,8 @@
-
q-btn.button(
- :class="{ 'no-pointer-events': !clickable }"
- :style="{ 'border-radius': round ? '24px' : '4px' }"
+ :class="{'no-pointer-events': !clickable}"
:color="color"
- :text-color="text"
- :outline="outline"
:disable="disable"
:flat="iconOnly"
- unelevated
- no-caps
- padding="4px"
+ :outline="outline"
:ripple="false"
+ :style="{'border-radius': round ? '24px' : '4px'}"
+ :text-color="text"
@click="$emit('click')"
+ no-caps
+ padding="4px"
+ unelevated
)
- .row(:style="{ width: `${width}px`, height: `${height}px` }")
- .row.items-left.justify-between.full-width(:class="{ 'q-mt-xs': !iconOnly }")
- q-avatar.q-ml-xs(:color="outline ? 'primary' : 'white'" size="35px")
- q-icon(v-if="!hideIcon" :name="icon" size="14px" :color="!outline ? 'primary' : 'white'")
+ .row(:style="{width: `${width}px`, height: `${height}px`}")
+ .row.items-left.justify-between.full-width(
+ :class="{'q-mt-xs': !iconOnly}"
+ )
+ q-avatar.q-ml-xs(
+ :color="outline ? 'primary' : 'white'"
+ size="35px"
+ )
+ q-icon(
+ :color="!outline ? 'primary' : 'white'"
+ :name="icon"
+ size="14px"
+ v-if="!hideIcon"
+ )
//- .div.q-pa-none.chip-container.q-px-xs
- //- chips.nudge-right(v-if="chip && chip.label" :tags="[ chip ]")
+ //- chips.nudge-right(v-if="chip && chip.label" :tags="[ chip ]")
.row.q-mx-sm.q-my-xxs.text-left(v-if="from || end")
//- .h-h7-regular(:class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") From
- .h-h6.q-mb-xxs(v-if="from" :class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") {{ formatDate(from) }}
- .h-h7-regular(v-if="from || end" :class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") Until
- .h-h6.q-py-xxs(v-if="end" :class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") {{ formatDate(end) }}
+ .h-h6.q-mb-xxs(
+ :class="outline ? 'text-primary' : 'text-white'"
+ :style="{width: `${width - 16}px`}"
+ v-if="from"
+ ) {{formatDate(from)}}
+ .h-h7-regular(
+ :class="outline ? 'text-primary' : 'text-white'"
+ :style="{width: `${width - 16}px`}"
+ v-if="from || end"
+ ) Until
+ .h-h6.q-py-xxs(
+ :class="outline ? 'text-primary' : 'text-white'"
+ :style="{width: `${width - 16}px`}"
+ v-if="end"
+ ) {{formatDate(end)}}
.row.q-mx-sm.q-my-xxs.text-left(v-else-if="title || subtitle")
- .h-h5-regular.q-mb-xxs(:class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") {{ title }}
- .h-h5.q-py-xxs(:class="outline ? 'text-primary' : 'text-white'" :style="{ width: `${width - 16}px`}") {{ subtitle }}
+ .h-h5-regular.q-mb-xxs(
+ :class="outline ? 'text-primary' : 'text-white'"
+ :style="{width: `${width - 16}px`}"
+ ) {{title}}
+ .h-h5.q-py-xxs(
+ :class="outline ? 'text-primary' : 'text-white'"
+ :style="{width: `${width - 16}px`}"
+ ) {{subtitle}}
slot
diff --git a/src/components/common/button-radio.vue b/src/components/common/button-radio.vue
index d9d7a9737..80ec2fc6f 100644
--- a/src/components/common/button-radio.vue
+++ b/src/components/common/button-radio.vue
@@ -1,9 +1,11 @@
-
q-btn.full-width.relative-position(
- :style="{ 'border-radius': '24px' }"
+ :class="{'grey-opacity': opacity}"
:color="selected ? 'primary' : 'internal-bg'"
:disable="disable"
- :class="{ 'grey-opacity': opacity }"
- unelevated
- no-caps
- padding="0"
:ripple="false"
+ :style="{'border-radius': '24px'}"
@click="$emit('click')"
+ no-caps
+ padding="0"
+ unelevated
)
- .q-pa-md.full-width.full-height(:class="{ 'text-body': !selected }")
- .row.q-mb-md.full-width.justify-between(v-if="!horizontal && icon")
- q-btn(
- round
- unelevated
- :icon="icon"
- :color="selected ? 'white' : 'primary'"
- :text-color="selected ? 'primary' : 'white'"
- size="sm"
- :ripple="false"
- )
- .text-subtitle2 {{ iconText }}
- q-icon(v-if="selected" name="fas fa-check")
- .row.text-left
- .col-4(:class="{'col-12': !horizontal}")
- .row.items-center.justify-start
- q-btn.on-left(
- v-if="horizontal && icon"
- round
- unelevated
- :icon="icon"
- :color="selected ? 'white' : 'primary'"
- :text-color="selected ? 'primary' : 'white'"
- size="sm"
- :ripple="false"
+ .q-pa-md.full-width.full-height(:class="{'text-body': !selected}")
+ .row.q-mb-md.full-width.justify-between(v-if="!horizontal && icon")
+ q-btn(
+ :color="selected ? 'white' : 'primary'"
+ :icon="icon"
+ :ripple="false"
+ :text-color="selected ? 'primary' : 'white'"
+ round
+ size="sm"
+ unelevated
+ )
+ .text-subtitle2 {{iconText}}
+ q-icon(
+ name="fas fa-check"
+ v-if="selected"
+ )
+ .row.text-left
+ .col-4(:class="{'col-12': !horizontal}")
+ .row.items-center.justify-start
+ q-btn.on-left(
+ :color="selected ? 'white' : 'primary'"
+ :icon="icon"
+ :ripple="false"
+ :text-color="selected ? 'primary' : 'white'"
+ round
+ size="sm"
+ unelevated
+ v-if="horizontal && icon"
+ )
+ .text-subtitle2 {{iconText}}
+ .row.full-width.justify-between.items-center
+ .row.items-center
+ q-avatar.q-mr-xs(
+ :color="selected ? 'white' : 'none'"
+ :style="{border: '1px solid'}"
+ size="sm"
+ text-color="primary"
+ v-if="!icon"
+ )
+ q-icon(
+ color="primary"
+ name="fas fa-check"
+ size="12px"
+ v-if="selected"
+ )
+ .col
+ .h-h5(
+ :class="{'text-body2': dense, 'text-primary': primary, 'text-white': selected}"
+ ) {{title || subtitle}}
+ .h-h5-regular.text-weight-thin.q-ml-xs(
+ :class="{'text-body2': dense, 'text-primary': primary, 'text-white': selected}"
+ v-if="title && subtitle !== title"
)
- .text-subtitle2 {{ iconText }}
- .row.full-width.justify-between.items-center
- .row.items-center
- q-avatar.q-mr-xs(v-if="!icon" size="sm" :style="{'border': '1px solid'}" :color="selected ? 'white' : 'none'" text-color="primary")
- q-icon(v-if="selected" name="fas fa-check" size="12px" color="primary")
- .col
- .h-h5(:class="{ 'text-body2': dense, 'text-primary': primary, 'text-white': selected }") {{ title || subtitle }}
- .h-h5-regular.text-weight-thin.q-ml-xs(v-if="title && subtitle !== title" :class="{ 'text-body2': dense, 'text-primary': primary, 'text-white': selected }")
- span {{ subtitle }}
- slot(name="subtitle")
- .col-4(v-if="horizontal")
- .text-ellipsis.q-ml-md.font-sans.text-weight-500(:class="{'text-grey-7': !selected && !primary, 'text-grey-5': selected, 'text-primary': primary}") {{ description }}
- slot(name="description")
- .row.q-mt-md.text-left(v-if="!horizontal")
- .text-ellipsis.text-xs(v-if="description" :class="{'text-grey-7': !selected && !primary, 'text-grey-5': selected, 'text-primary': primary}") {{ description }}
+ span {{subtitle}}
+ slot(name="subtitle")
+ .col-4(v-if="horizontal")
+ .text-ellipsis.q-ml-md.font-sans.text-weight-500(
+ :class="{'text-grey-7': !selected && !primary, 'text-grey-5': selected, 'text-primary': primary}"
+ ) {{description}}
slot(name="description")
- slot
+ .row.q-mt-md.text-left(v-if="!horizontal")
+ .text-ellipsis.text-xs(
+ :class="{'text-grey-7': !selected && !primary, 'text-grey-5': selected, 'text-primary': primary}"
+ v-if="description"
+ ) {{description}}
+ slot(name="description")
+ slot
+
diff --git a/src/components/common/empty-widget-label.vue b/src/components/common/empty-widget-label.vue
index 7c100d6fa..e808bca6b 100644
--- a/src/components/common/empty-widget-label.vue
+++ b/src/components/common/empty-widget-label.vue
@@ -1,7 +1,9 @@
-
- .text-body2.q-mt-sm.text-weight-thin.text-grey-7.q-my-md Your organization doesn't have any {{ sectionTitle }} yet.
- span(v-if="isMember") Click
- span
- router-link.q-mx-xs(:to="{ name: 'proposal-create' }") here
- span to set them up.
+.text-body2.q-mt-sm.text-weight-thin.text-grey-7.q-my-md Your organization doesn't have any {{sectionTitle}} yet.
+ span(v-if="isMember") Click
+ span
+ router-link.q-mx-xs(:to="{name: 'proposal-create'}") here
+ span to set them up.
diff --git a/src/components/common/explore-by-widget.stories.js b/src/components/common/explore-by-widget.stories.js
new file mode 100644
index 000000000..a1adf258a
--- /dev/null
+++ b/src/components/common/explore-by-widget.stories.js
@@ -0,0 +1,22 @@
+import ExploreByWidget from './explore-by-widget.vue'
+
+export default {
+ title: 'Explore By Widget',
+ component: ExploreByWidget
+}
+
+const Template = (args, { argTypes }) => ({
+ props: Object.keys(argTypes),
+ components: { ExploreByWidget },
+ template: `
+
+ `
+})
+
+export const Example = Template.bind({})
+// These are the params for the example story. You can all the params you want.
+Example.args = {
+
+}
+
+export const Base = Template.bind({})
diff --git a/src/components/common/explore-by-widget.vue b/src/components/common/explore-by-widget.vue
new file mode 100644
index 000000000..576361184
--- /dev/null
+++ b/src/components/common/explore-by-widget.vue
@@ -0,0 +1,66 @@
+
+
+
+widget.sticky.bg-white.rounded.full-width.q-pa-md.q-mb-md(
+ :textColor="'black'"
+ :title="'Explore by:'"
+)
+ .select-option(@click="$emit('change', EXPLORE_BY.DAOS)")
+ .select-option-label DAOs
+ .select-option-dot(
+ :class="{selected: this.type === EXPLORE_BY.DAOS}"
+ )
+ .select-option(@click="$emit('change', EXPLORE_BY.ECOSYSTEMS)")
+ .select-option-label Ecosystems
+ .select-option-dot(
+ :class="{selected: this.type === EXPLORE_BY.ECOSYSTEMS}"
+ )
+
+
+
+.select-option
+ display: flex
+ align-items: center
+ justify-content: space-between
+ margin-top: 15px
+ cursor: pointer
+ .select-option-label
+ color: black
+ font-size: 14px
+ font-weight: 600
+ .select-option-dot
+ display: flex
+ justify-content: center
+ align-items: center
+ border-radius: 50%
+ width: 22px
+ height: 22px
+ opacity: 0.18
+ background: #252F5D
+ .selected
+ opacity: 1
+ .selected::before
+ content: ''
+ background: #FFF
+ width: 10px
+ height: 10px
+ border-radius: 50%
+
diff --git a/src/components/common/info-tooltip.vue b/src/components/common/info-tooltip.vue
index 82873a3a8..9e3aa61e0 100644
--- a/src/components/common/info-tooltip.vue
+++ b/src/components/common/info-tooltip.vue
@@ -1,8 +1,10 @@
-
- q-icon(name="fas fa-info-circle" size="15px" color="body" class="q-ml-xs" v-if="tooltip")
- q-tooltip {{ tooltip }}
+q-icon.q-ml-xs(
+ color="body"
+ name="fas fa-info-circle"
+ size="15px"
+ v-if="tooltip"
+)
+ q-tooltip {{tooltip}}
-
+
diff --git a/src/components/common/input-editor.vue b/src/components/common/input-editor.vue
index 6110350a3..bb359089d 100644
--- a/src/components/common/input-editor.vue
+++ b/src/components/common/input-editor.vue
@@ -1,5 +1,7 @@
-
-
-q-editor(:content-style="{ color: '#84878E', fontWeight: 'normal' }"
- :color = "color"
- :rules = "rules"
- v-bind = "{...$attrs, ...$props, ...$slots}"
- v-on = "$listeners")
+
+q-editor(
+ :color="color"
+ :content-style="{color: '#84878E', fontWeight: 'normal'}"
+ :rules="rules"
+ v-bind="{...$attrs, ...$props, ...$slots}"
+ v-on="$listeners"
+)
diff --git a/src/components/common/loading-spinner.vue b/src/components/common/loading-spinner.vue
index c8a1f3a57..47c9bb09a 100644
--- a/src/components/common/loading-spinner.vue
+++ b/src/components/common/loading-spinner.vue
@@ -1,8 +1,10 @@
-
q-spinner-tail(
- :color = "color"
- :size = "size"
+ :color="color"
+ :size="size"
)
diff --git a/src/components/common/payout-amounts.vue b/src/components/common/payout-amounts.vue
index dfe73e5cc..e3807aa2e 100644
--- a/src/components/common/payout-amounts.vue
+++ b/src/components/common/payout-amounts.vue
@@ -1,16 +1,25 @@
-
-.full-width(:class="{ 'row':$q.platform.is.desktop }")
+.full-width(:class="{row: $q.platform.is.desktop}")
template(v-for="token in tokens")
- .col.q-pa-xxs(:class="{ 'col-12': stacked, 'q-mb-md':$q.platform.is.mobile }")
- token-value(v-bind="token" :multiplier="multiplier" :daoLogo="daoLogo")
+ .col(:class="{'col-12': stacked, 'q-mb-md': $q.platform.is.mobile}")
+ token-value(
+ :daoLogo="daoLogo"
+ :multiplier="multiplier"
+ v-bind="token"
+ )
diff --git a/src/components/common/progress-percentage.vue b/src/components/common/progress-percentage.vue
index 507507ee9..54be95e99 100644
--- a/src/components/common/progress-percentage.vue
+++ b/src/components/common/progress-percentage.vue
@@ -1,9 +1,11 @@
-
.row.items-center.q-gutter-sm
- .row.items-center.justify-between(:class="{ 'full-width': !mini }")
+ .row.items-center.justify-between(:class="{'full-width': !mini}")
.row.items-center
- q-icon.on-left(:name="icon" :color="colorConfig.icons")
- .on-right.text-bold(v-if="!mini") {{ title }}
+ q-icon.on-left(
+ :color="colorConfig.icons"
+ :name="icon"
+ )
+ .on-right.text-bold(v-if="!mini") {{title}}
.row.items-center(v-if="!mini")
- .text-bold.q-mr-xs {{ parseFloat(value * 100).toFixed(2) + '%'}}
- .text-grey.q-mx-xs {{ '(' + (threshold * 100).toFixed(0) + '% needed)' }}
- q-icon(v-if="value >= threshold" color="positive" name="fas fa-check")
- q-icon(v-else color="negative" name="fas fa-times")
+ .text-bold.q-mr-xs {{(value * 100).toFixed(2) + '%'}}
+ .text-grey.q-mx-xs {{'(' + (threshold * 100).toFixed(0) + '% needed)'}}
+ q-icon(
+ color="positive"
+ name="fas fa-check"
+ v-if="value >= threshold"
+ )
+ q-icon(
+ color="negative"
+ name="fas fa-times"
+ v-else
+ )
.col(v-if="mini")
- q-linear-progress(rounded :color="colorConfig.progress" :track-color="colorConfig.track" :value="value" :class="{ 'color-opacity': colorConfig.opacity}")
- q-linear-progress(v-else rounded :color="colorConfig.progress" :track-color="colorConfig.track" :value="value" :class="{ 'color-opacity': colorConfig.opacity}")
+ q-linear-progress(
+ :class="{'color-opacity': colorConfig.opacity}"
+ :color="colorConfig.progress"
+ :track-color="colorConfig.track"
+ :value="value"
+ rounded
+ )
+ q-linear-progress(
+ :class="{'color-opacity': colorConfig.opacity}"
+ :color="colorConfig.progress"
+ :track-color="colorConfig.track"
+ :value="value"
+ rounded
+ v-else
+ )
.row.items-center(v-if="mini")
- .on-right.text-bold(:class="colorConfig.text") {{ parseFloat(value * 100).toFixed(2) + '%'}}
+ .on-right.text-bold(:class="colorConfig.text") {{(value * 100).toFixed(2) + '%'}}
diff --git a/src/components/common/token-value.vue b/src/components/common/token-value.vue
index 627de57be..7604d0874 100644
--- a/src/components/common/token-value.vue
+++ b/src/components/common/token-value.vue
@@ -1,15 +1,21 @@
-
@@ -83,24 +89,30 @@ export default {
.col
.row.q-mb-sm
.col
- .text-body2.text-bold {{ label }}
+ .text-body2.text-bold {{label}}
.row.items-center
token-logo(
:customIcon="icon"
- :type="type"
:daoLogo="daoLogo"
+ :type="type"
)
.col
- .text-left.inline-block
- span(v-if="!coefficient") {{ getFormatedTokenAmount(value * multiplier, Number.MAX_VALUE) }}
- span.text-bold.q-mx-sm(v-else-if="coefficient && (coefficientPercentage !== undefined || coefficientPercentage !== null )" :class="coefficientPercentage >= 0 ? 'text-positive' : 'text-negative'") x {{ coefficientPercentage }}
- q-tooltip(
- v-if="tooltip"
- anchor="top right"
- self="top right"
- :content-style="{ 'font-size': '1em' }"
- ) {{ tooltip }}
- .text-caption.text-left.inline-block.q-ml-sm.text-italic(v-if="detail") {{ '(' + detail + ')'}}
+ widget(:style="{padding: '12px 15px', 'border-radius': '15px'}")
+ .text-left.inline-block
+ span(v-if="!coefficient") {{getFormatedTokenAmount(value * multiplier, Number.MAX_VALUE)}}
+ span.text-bold.q-mx-sm(
+ :class="coefficientPercentage && coefficientPercentage >= 0 ? 'text-positive' : 'text-negative'"
+ v-else-if="coefficient && (coefficientPercentage !== undefined || coefficientPercentage !== null)"
+ ) x {{coefficientPercentage}}
+ q-tooltip(
+ :content-style="{'font-size': '1em'}"
+ anchor="top right"
+ self="top right"
+ v-if="tooltip"
+ ) {{tooltip}}
+ .text-caption.text-left.inline-block.q-ml-sm.text-italic(
+ v-if="detail"
+ ) {{'(' + detail + ')'}}
diff --git a/src/components/common/upvote-delegate-widget.vue b/src/components/common/upvote-delegate-widget.vue
index ff3deb649..eb6e4c47a 100644
--- a/src/components/common/upvote-delegate-widget.vue
+++ b/src/components/common/upvote-delegate-widget.vue
@@ -1,139 +1,198 @@
-
-q-card.widget.full-width.q-pt-xl.q-pl-xl.q-pr-xs.q-pb-xs.relative-position.rounded(flat :class="{ 'q-pr-xl': $q.screen.md || $q.screen.lt.md }")
+q-card.widget.full-width.q-pt-xl.q-pl-xl.q-pr-xs.q-pb-xs.relative-position.rounded(
+ :class="{'q-pr-xl': $q.screen.md || $q.screen.lt.md}"
+ flat
+)
.col
.row.justify-between.items-center
.row.items-center
- img(src="/svg/check-to-slot.svg" width="18px" height="14px")
+ img(
+ height="14px"
+ src="/svg/check-to-slot.svg"
+ width="18px"
+ )
.title.text-bold.q-ml-sm Upvote Delegates
- .row(:class="{ 'q-mt-md': $q.screen.lt.md }")
- .counter(:class="{ 'right-margin': !$q.screen.lt.md }")
+ .row(:class="{'q-mt-md': $q.screen.lt.md}")
+ .counter(:class="{'right-margin': !$q.screen.lt.md}")
.title Election validity expires in:
.time.row
.row.items-end
- .days {{ formatTimeLeft().days }}
+ .days {{formatTimeLeft().days}}
.subtext(v-if="formatTimeLeft().days > 1") days
.subtext(v-else) day
.row.items-end
- .hours {{ formatTimeLeft().hours }}
+ .hours {{formatTimeLeft().hours}}
.subtext(v-if="formatTimeLeft().hours > 1") hours
.subtext(v-else) hour
.row.items-end
- .mins {{ formatTimeLeft().mins }}
+ .mins {{formatTimeLeft().mins}}
.subtext(v-if="formatTimeLeft().mins > 1") mins
.subtext(v-else) min
.row.q-mt-md
- .template.col(v-for="user in headWinners" :class="{ 'col-6 q-px-xs': $q.screen.md, 'q-mr-md q-mb-md': $q.screen.gt.md, 'q-mb-md': $q.screen.md || $q.screen.lt.md, 'col-12': $q.screen.lt.md }")
+ .template.col(
+ :class="{'col-6 q-px-xs': $q.screen.md, 'q-mr-md q-mb-md': $q.screen.gt.md, 'q-mb-md': $q.screen.md || $q.screen.lt.md, 'col-12': $q.screen.lt.md}"
+ v-for="user in headWinners"
+ )
.user-card
.tag HEAD DELEGATE
.row.items-center.justify-between
- ProfilePicture(:username="user.details_member_n" size="50px" showUsername showName noMargins boldName withoutItalic)
- q-icon.card-icon(name="far fa-address-card" size="16px" color="white")
- .template.col(v-for="user in chiefWinners" :class="{ 'col-6 q-px-xs': $q.screen.md, 'q-mr-md q-mb-md': $q.screen.gt.md, 'q-mb-md': $q.screen.md || $q.screen.lt.md, 'col-12': $q.screen.lt.md }")
+ ProfilePicture(
+ :username="user.details_member_n"
+ boldName
+ noMargins
+ showName
+ showUsername
+ size="50px"
+ withoutItalic
+ )
+ q-icon.card-icon(
+ color="white"
+ name="far fa-address-card"
+ size="16px"
+ )
+ .template.col(
+ :class="{'col-6 q-px-xs': $q.screen.md, 'q-mr-md q-mb-md': $q.screen.gt.md, 'q-mb-md': $q.screen.md || $q.screen.lt.md, 'col-12': $q.screen.lt.md}"
+ v-for="user in chiefWinners"
+ )
.user-card
.row.items-center.justify-between
- ProfilePicture(:username="user.details_member_n" size="50px" showUsername showName noMargins boldName withoutItalic)
- q-icon.card-icon(name="far fa-address-card" size="16px" color="white")
+ ProfilePicture(
+ :username="user.details_member_n"
+ boldName
+ noMargins
+ showName
+ showUsername
+ size="50px"
+ withoutItalic
+ )
+ q-icon.card-icon(
+ color="white"
+ name="far fa-address-card"
+ size="16px"
+ )
+
diff --git a/src/components/common/widget.vue b/src/components/common/widget.vue
index f5e0bddc7..2c3d1f90d 100644
--- a/src/components/common/widget.vue
+++ b/src/components/common/widget.vue
@@ -1,13 +1,12 @@
-
-q-card.widget(flat :class="{ ...widgetClass, 'q-py-xl': !noPadding, 'q-px-xl': !noPadding }" ).relative-position
- q-card-section.q-pa-none.row.items-center(v-if="bar" :class="titleClass" :style="{ height: titleHeight }")
+q-card.widget.relative-position(
+ :class="{...widgetClass, 'q-py-xl': !noPadding, 'q-px-xl': !noPadding}"
+ flat
+)
+ q-card-section.q-pa-none.row.items-center(
+ :class="titleClass"
+ :style="{height: titleHeight}"
+ v-if="bar"
+ )
img(:src="titleImage")
- .h-h4.text-bold.q-ml-sm(:class="textClass" v-if="!noTitle") {{ title }}
- q-card-section.q-pa-none.full-height(:class="{ 'flex row no-wrap items-center': scrollList }")
- .row.justify-between
- .col
- .h-h4(v-if="title && !bar && !noTitle" :class="textClass") {{ title }}
- q-icon(name="fas fa-info-circle" size="16px" color="body" class="q-ml-xs" v-if="tooltip")
- q-tooltip {{ tooltip }}
+ .h-h4.text-bold.q-ml-sm(
+ :class="textClass"
+ v-if="!noTitle"
+ ) {{title}}
+ q-card-section.q-pa-none.full-height(
+ :class="{'flex row no-wrap items-center': scrollList}"
+ )
+ .row(:class="{ 'justify-between': !breadcrumbs }")
+ div(:class="{ 'col': !breadcrumbs }")
+ .h-h4(
+ :class="textClass"
+ v-if="title && !bar && !noTitle"
+ ) {{title}}
+ q-icon.q-ml-xs(
+ color="body"
+ name="fas fa-info-circle"
+ size="16px"
+ v-if="tooltip"
+ )
+ q-tooltip {{tooltip}}
slot(name="header")
.col-auto(v-if="more && morePosition == 'top'")
- q-btn.h-btn2(rounded text-color="primary" flat no-caps @click="$emit('more-clicked')") See all
+ q-btn.h-btn2(
+ @click="$emit('more-clicked')"
+ flat
+ no-caps
+ rounded
+ text-color="primary"
+ ) See all
slot
- .q-mt-lg(v-if="more && morePosition != 'top'" vertical)
- q-btn.h-btn2.q-mx-lg.full-width(text-color="primary" rounded no-caps outline @click="$emit('more-clicked')") See all
+ .q-mt-lg(
+ v-if="more && morePosition != 'top'"
+ vertical
+ )
+ q-btn.h-btn2.q-mx-lg.full-width(
+ @click="$emit('more-clicked')"
+ no-caps
+ outline
+ rounded
+ text-color="primary"
+ ) See all
diff --git a/src/components/dao/settings-community.vue b/src/components/dao/settings-community.vue
index 13e2a4a45..d5d3652cc 100644
--- a/src/components/dao/settings-community.vue
+++ b/src/components/dao/settings-community.vue
@@ -149,7 +149,6 @@ widget(title='Community' titleImage='/svg/vote.svg' :bar='true').q-pa-none.full-
unelevated
)
q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
-
.col-6.bg-secondary.rounded-full.row.justify-center.items-center(v-if="form.communityVotingMethod === votingMethods.UPVOTE")
q-btn.q-px-xl.rounded-border.text-bold.q-mr-xs(
:disable="!isAdmin"
diff --git a/src/components/dao/settings-general.vue b/src/components/dao/settings-general.vue
index c3ab6a3ee..33b573f90 100644
--- a/src/components/dao/settings-general.vue
+++ b/src/components/dao/settings-general.vue
@@ -28,8 +28,6 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label DAO name
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your DAO documentation here. Could be your website or a wiki where users can learn more about your DAO. The link will be added to the Banner on the Organization Page.
q-input.q-my-sm(
:debounce="200"
:disable="!isAdmin"
@@ -44,11 +42,10 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
v-model='form.title'
)
q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label Custom URL
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your Discord Server here. The link will be added on the Dashboard in the "Need Support?" Widget as well as the Help Page.
.row.items-center
p.q-mt-md.q-mr-md.subtitle dao.hypha.earth/
q-input.q-my-sm.col(
@@ -70,8 +67,6 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label Social chat
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your DAO documentation here. Could be your website or a wiki where users can learn more about your DAO. The link will be added to the Banner on the Organization Page.
q-input.q-my-sm(
:debounce="200"
:disable="!isAdmin"
@@ -86,6 +81,7 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
v-model='form.socialChat'
)
q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+
.col-12.col-md-3
.row.items-center.q-col-gutter-xs
label.h-label Link to documentation
@@ -103,6 +99,7 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
v-model='form.documentationURL'
)
q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+
.col-12.col-md-3
.row.items-center.q-col-gutter-xs
label.h-label Button text
@@ -125,8 +122,6 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label Proposals creation
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your DAO documentation here. Could be your website or a wiki where users can learn more about your DAO. The link will be added to the Banner on the Organization Page.
.row.items-center.justify-between.q-mt-xs
label.text-xs Activate or deactivate proposal creation.
q-toggle(:disable="!isAdmin" color="primary" keep-color v-model="form.proposalsCreationEnabled")
@@ -135,8 +130,6 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label Members application
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your DAO documentation here. Could be your website or a wiki where users can learn more about your DAO. The link will be added to the Banner on the Organization Page.
.row.items-center.justify-between.q-mt-xs(:class="{'q-mt-xl': !$q.screen.gt.sm}")
label.text-xs Activate or deactivate member applications.
q-toggle(:disable="!isAdmin" color="primary" keep-color v-model="form.membersApplicationEnabled")
@@ -146,14 +139,18 @@ widget(title='General' titleImage='/svg/file-checkmark.svg' :bar='true').q-pa-no
.col-12.col-md-6
.row.items-center.q-col-gutter-xs
label.h-label Removable banners
- //- q-icon(name="fas fa-info-circle" size="16px" color="body")
- //- q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle") Add a link to your DAO documentation here. Could be your website or a wiki where users can learn more about your DAO. The link will be added to the Banner on the Organization Page.
.row.items-center.justify-between.q-mt-xs
label.text-xs Activate or deactivate removable banners.
q-toggle(:disable="!isAdmin" color="primary" keep-color v-model="form.removableBannersEnabled")
q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
- .row.justify-between
+ .col-12.col-md-6
+ .row.items-center.q-col-gutter-xs
+ label.h-label Multisig configuration
+ .row.items-center.justify-between.q-mt-xs
+ label.text-xs Activate or deactivate multisig.
+ q-toggle(:disable="!isAdmin" color="primary" keep-color v-model="form.multisigEnabled")
+ q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
diff --git a/src/components/dashboard/new-members.stories.js b/src/components/dashboard/members.stories.js
similarity index 88%
rename from src/components/dashboard/new-members.stories.js
rename to src/components/dashboard/members.stories.js
index fd995826c..da9a42d66 100644
--- a/src/components/dashboard/new-members.stories.js
+++ b/src/components/dashboard/members.stories.js
@@ -1,16 +1,16 @@
-import NewMembers from './new-members.vue'
+import Members from './members.vue'
export default {
title: 'dashboard/New Members',
- component: NewMembers,
+ component: Members,
argTypes: {}
}
const Template = (args, { argTypes }) => ({
props: Object.keys(argTypes),
- components: { NewMembers },
+ components: { Members },
template: `
-
+
`
})
diff --git a/src/components/dashboard/new-members.vue b/src/components/dashboard/new-members.vue
deleted file mode 100644
index 19fe0a1a6..000000000
--- a/src/components/dashboard/new-members.vue
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-widget(more morePosition="top" title="New Members" @more-clicked="moreClicked").full-height
- #member-item.row.q-pt-xs(v-for="member in members")
- profile-picture(:username="member.name" size="2.8rem" show-name link)
- template(v-slot:detail)
- .row.q-gutter-sm.q-pt-xs
- q-icon(name="fas fa-calendar-alt")
- .h-b3 {{ member.joinedDate | timeAgo }}
-
diff --git a/src/components/ecosystem/ecosystem-card.stories.js b/src/components/ecosystem/ecosystem-card.stories.js
new file mode 100644
index 000000000..ebbea578d
--- /dev/null
+++ b/src/components/ecosystem/ecosystem-card.stories.js
@@ -0,0 +1,22 @@
+import EcosystemCard from './ecosystem-card.vue'
+
+export default {
+ title: 'Ecosystem Card',
+ component: EcosystemCard
+}
+
+const Template = (args, { argTypes }) => ({
+ props: Object.keys(argTypes),
+ components: { EcosystemCard },
+ template: `
+
+ `
+})
+
+export const Example = Template.bind({})
+// These are the params for the example story. You can all the params you want.
+Example.args = {
+
+}
+
+export const Base = Template.bind({})
diff --git a/src/components/ecosystem/ecosystem-card.vue b/src/components/ecosystem/ecosystem-card.vue
new file mode 100644
index 000000000..cd9b7ba14
--- /dev/null
+++ b/src/components/ecosystem/ecosystem-card.vue
@@ -0,0 +1,78 @@
+
+
+widget.full-width.relative
+ div.absolute.justify-center.items-center.flex(:style="{ 'width': '40px', 'height': '40px', 'border-radius': '50%', 'background': '#F1F1F3', 'right': '-15px', 'top': '-15px' }")
+ q-icon(name="fas fa-globe" size="20px")
+ .row.items-center
+ .col-9.q-pr-xl.row.items-center
+ .col-auto
+ q-avatar(size="160px" color='primary')
+ img(:src="ipfsy(data.logo)" v-if="data.logo").object-cover
+ .col.q-ml-md
+ .row.items-center.q-mb-md
+ .h-h4 {{ data.name }}
+ .row.q-ml-xs
+ img.q-pt-xxs(:src="getIconPath(data.domain)")
+ .text-xs.q-ml-xxs.q-mt-xs {{ parseEcosystemDomain(data.domain) }}
+ .text-xs.text-h-gray {{ data.purpose }}
+ q-separator(:vertical="true" color="grey-3" inset)
+ .col
+ .column.justify-between.full-width.full-height.items-center
+ div
+ .row.items-center
+ .h-h4.q-mb-sm {{ data.daosCount }} DAOs
+ .row.items-center
+ q-icon.q-py-xs(color="primary" name="fas fa-calendar-alt")
+ .text-xs.text-h-gray.q-px-xs {{ formatDate(data.createdDate) }}
+ .row.items-center
+ q-icon.q-py-xs(color="grey-7" name="fas fa-users")
+ .text-xs.text-h-gray.q-px-xs {{ data.coreMembersCount }} Core members
+ .row.items-center
+ q-icon.q-py-xs(color="grey-7" name="fas fa-users")
+ .text-xs.text-h-gray.q-px-xs {{ data.comMembersCount }} Community members
+
+
+
+
diff --git a/src/components/ecosystem/ecosystem-info.vue b/src/components/ecosystem/ecosystem-info.vue
new file mode 100644
index 000000000..71c44a362
--- /dev/null
+++ b/src/components/ecosystem/ecosystem-info.vue
@@ -0,0 +1,217 @@
+
+
+
+.full-width.q-pa-xxl.bg-primary.text-white.rounded-full
+ .row
+ .col-2
+ q-avatar(size="184px" color="secondary" text-color="white")
+ img(v-if="form.logo" :src="ipfsy(form.logo)")
+ img(v-else src="/svg/icon-gallery.svg" style="max-width: 96px")
+ .col.q-pl-md
+ .row.items-center
+ .text-3xl
+ span(v-if="hasBasicInfo") {{ form.name }}
+ span(v-else) First step: Configure your
+ span.q-ml-xxs.text-weight-900 Ecosystem
+ .text-sm.q-ml-xl.text-capitalize(v-if="form.domain") {{ hasBasicInfo ? form.domain.toLowerCase().replace('_',' ') :'' }}
+ .text-base.leading-loose.text-weight-100.q-mt-xs(v-if="form.purpose") {{ hasBasicInfo ? form.purpose :'' }}
+ span.relative-position
+ q-btn.q-px-xl.rounded-border.text-bold.q-mt-xl.relative-position(
+ :disable="!isAdmin"
+ @click="isEditing = true"
+ color="white"
+ label="Edit Ecosystem Information"
+ no-caps
+ outline
+ rounded
+ unelevated
+ v-if="!isEditing"
+ )
+ q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+ q-btn.q-px-xl.rounded-border.text-bold.q-mt-xl(
+ :disable="!isAdmin"
+ @click="_handleSave"
+ color="secondary"
+ label="Save Ecosystem Information"
+ no-caps
+ rounded
+ unelevated
+ v-if="isEditing"
+ )
+
+ section(v-if="isEditing")
+ .row.q-col-gutter-md.justify-between.q-pt-xl.q-px-md
+ .col-4
+ label.h-label.text-white Ecosystem Name
+ q-input.q-my-sm(
+ :debounce="200"
+ :rules="[rules.required]"
+ bg-color="#343B64"
+ color="white"
+ dark
+ dense
+ lazy-rules
+ outlined
+ placeholder="Type Name here (Max 30 Characters)"
+ ref="name"
+ rounded
+ v-model='form.name'
+ )
+ q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+
+ .col-4
+ .row.items-center
+ q-avatar(size="64px" font-size="24px" color="secondary" text-color="white")
+ img(v-if="form.logo" :src="ipfsy(form.logo)")
+ img(v-if="!form.logo && !isUploadingLogo" src="/svg/icon-gallery.svg" style="max-width: 32px")
+ loading-spinner(v-if="isUploadingLogo" color="primary" size="2em")
+ div.q-pl-xs
+ label.h-label.text-white Logo
+ q-btn.q-my-sm.q-px-xl.rounded-border.text-bold.full-width(
+ @click="$refs.ipfsInput.chooseFile()"
+ color="white"
+ label="Upload an image (max 3MB)"
+ no-caps
+ outline
+ rounded
+ unelevated
+ )
+ input-file-ipfs(
+ @finished="isUploadingLogo = false"
+ @uploadedFile="form.logo = arguments[0]"
+ @uploading="isUploadingLogo = true"
+ image
+ ref="ipfsInput"
+ v-show="false"
+ )
+
+ .col-4
+ .row.items-center.q-col-gutter-xs
+ label.h-label.text-white Show Ecosystem on Marketplace
+ .row.items-center.justify-between.q-mt-xs
+ label.text-xs.text-white Find investors willing to fund your Ecosystem
+ q-toggle( color="primary" keep-color v-model="form.marketplace")
+ q-tooltip(:content-style="{ 'font-size': '1em' }" anchor="top middle" self="bottom middle" v-if="!isAdmin") Only DAO admins can change the settings
+
+ .row.q-mt-xl
+ .full-width.q-px-md
+ label.h-label.text-white Ecosystem Domain
+ .row.q-col-gutter-md.full-width
+ template(v-for="(domain,index) in ECOSYSTEM_DOMAIN")
+ .col-3
+ q-btn.radio-button.q-my-sm.q-px-xl.rounded-border.text-bold.full-width(
+ @click="form.domain = domain"
+ color="white"
+ :label="parseEcosystemDomain(domain)"
+ no-caps
+ outline
+ rounded
+ unelevated
+
+ )
+ q-radio(dense dark v-model="form.domain" :val="domain" color="white")
+
+ .row.q-px-md.q-mt-xl
+ .full-width
+ label.h-label.text-white Ecosystem Purpose
+ q-input.q-my-sm.rounded-border(
+ :debounce="200"
+ :input-style="{ 'resize': 'none' }"
+ :rules="[rules.required]"
+ bg-color="#343B64"
+ color="white"
+ dark
+ dense
+ lazy-rules
+ maxlength="300"
+ outlined
+ placeholder="Type a description here (max 300 characters)"
+ ref="purpose"
+ rounded
+ rows='5'
+ type="textarea"
+ v-model='form.purpose'
+ )
+
+
+
diff --git a/src/components/filters/filter-widget.vue b/src/components/filters/filter-widget.vue
index c6d8ee3a1..f90665b25 100644
--- a/src/components/filters/filter-widget.vue
+++ b/src/components/filters/filter-widget.vue
@@ -22,10 +22,10 @@ export default {
optionArray: Array,
circleArray: Array,
filters: Array,
- viewSelectorLabel: String,
chipsFiltersLabel: String,
toggleLabel: String,
showToggle: Boolean,
+ viewSelectorLabel: String,
showViewSelector: {
type: Boolean,
default: true
@@ -117,8 +117,8 @@ export default {
sort: '',
textFilter: null,
circle: '',
- view: '',
- toggle: true
+ toggle: true,
+ view: ''
}
}
}
@@ -130,6 +130,13 @@ widget(title="Filters")
q-input.text-filter.rounded-border.full-width(outlined v-model="textFilter" :placeholder="filterTitle" :debounce="debounce" dense)
template(v-slot:append v-if="textFilter")
q-icon(size="15px" name="fas fa-times" @click="clearSearchInput")
+ .row.q-py-sm
+ q-select.full-width(dense v-model="sort" :options="optionArray" hide-bottom-space rounded outlined options-dense bg-color="internal-bg" dropdown-icon="fas fa-chevron-down")
+ .row.q-py-sm(v-if="showCircle")
+ q-select.full-width(dense v-model="circle" :options="circleArray" hide-bottom-space rounded outlined options-dense bg-color="internal-bg" dropdown-icon="fas fa-chevron-down")
+ .row.q-my-md(v-if="filters")
+ .h-b2.q-mb-sm {{ chipsFiltersLabel }}
+ chips(:tags="filterTags" clickable @click-tag="toggleFilter" )
.row.items-center.justify-between.q-py-sm(v-if="showViewSelector")
.h-b2 {{ viewSelectorLabel }}
.btn-container
@@ -153,13 +160,6 @@ widget(title="Filters")
:text-color="view === 'list' ? 'white' : 'primary'"
@click="view = 'list'"
)
- .row.q-py-sm
- q-select.full-width(dense v-model="sort" :options="optionArray" hide-bottom-space rounded outlined options-dense bg-color="internal-bg" dropdown-icon="fas fa-chevron-down")
- .row.q-py-sm(v-if="showCircle")
- q-select.full-width(dense v-model="circle" :options="circleArray" hide-bottom-space rounded outlined options-dense bg-color="internal-bg" dropdown-icon="fas fa-chevron-down")
- .row.q-my-md(v-if="filters")
- .h-b2.q-mb-sm {{ chipsFiltersLabel }}
- chips(:tags="filterTags" clickable @click-tag="toggleFilter" )
.row.items-center.justify-between.q-mt-sm(v-if="showToggle")
.h-b2 {{ toggleLabel }}
q-toggle(v-model="toggle" color="primary" keep-color)
diff --git a/src/components/form/custom-period-input.vue b/src/components/form/custom-period-input.vue
index 8f233a9e3..fcde60dcb 100644
--- a/src/components/form/custom-period-input.vue
+++ b/src/components/form/custom-period-input.vue
@@ -121,11 +121,11 @@ div.custom-period-input
ref='amount'
).input-amount.inline
- q-btn-dropdown(v-if="type === 'time'" :disable="disable" color="primary" :label="period" no-caps rounded unelevated).absolute-right
- q-list
- q-item(clickable v-close-popup @click="period = 'hours'")
- q-item-section
- q-item-label hours
+ q-btn-dropdown(v-if="type === 'time'" :disable="disable" color="primary" :label="period" no-caps rounded unelevated).absolute-right
+ q-list
+ q-item(clickable v-close-popup @click="period = 'hours'")
+ q-item-section
+ q-item-label hours
q-item(clickable v-close-popup @click="period = 'days'")
q-item-section
diff --git a/src/components/ipfs/input-file-ipfs.vue b/src/components/ipfs/input-file-ipfs.vue
index e6a36f6ea..a721b8fe4 100644
--- a/src/components/ipfs/input-file-ipfs.vue
+++ b/src/components/ipfs/input-file-ipfs.vue
@@ -18,10 +18,13 @@
@input=" e => updateModel(e)"
:accept="acceptedFiles"
counter
- filled
+ outlined
+ flat
+ rounded
v-model="file"
:max-total-size="maxSize"
@rejected="e => showError(e)"
+ :label="label"
)
template(v-slot:append v-if="isUploading")
loading-spinner(
@@ -47,7 +50,7 @@ export default {
isUploading: false,
typeCid: undefined,
file: undefined,
- maxSize: 5000000
+ maxSize: 3000000
}
},
props: {
@@ -87,15 +90,16 @@ export default {
this.$emit('uploading')
this.typeCid = await BrowserIpfs.store(e)
this.$emit('uploadedFile', this.typeCid)
- await this.loadFile(this.typeCid)
+ await this.loadFile(this.typeCid, e)
+ this.$emit('finished')
} catch (e) {
this.isUploading = false
}
this.isUploading = false
},
- async loadFile (v) {
+ async loadFile (v, e) {
this.typeCid = v
- this.$emit('uploadedFile', this.typeCid)
+ this.$emit('uploadedFile', this.typeCid, e)
const file = await BrowserIpfs.retrieve(this.typeCid)
this.file = file.payload
this.imageURI = URL.createObjectURL(file.payload)
diff --git a/src/components/ipfs/ipfs-image-viewer.vue b/src/components/ipfs/ipfs-image-viewer.vue
index 3b25e2013..7724adf72 100644
--- a/src/components/ipfs/ipfs-image-viewer.vue
+++ b/src/components/ipfs/ipfs-image-viewer.vue
@@ -4,7 +4,8 @@ import BrowserIpfs from '~/ipfs/browser-ipfs.js'
export default {
name: 'ipfs-image-viewer',
components: {
- LoadingSpinner: () => import('~/components/common/loading-spinner.vue')
+ LoadingSpinner: () => import('~/components/common/loading-spinner.vue'),
+ Widget: () => import('~/components/common/widget.vue')
},
props: {
ipfsCid: String,
@@ -28,7 +29,13 @@ export default {
textColor: {
type: String,
default: 'white'
- }
+ },
+ square: {
+ type: Boolean,
+ default: false
+ },
+ originalUploadedFile: File,
+ canRemoveFile: Boolean
},
data () {
return {
@@ -73,11 +80,19 @@ export default {
#avatar-container(v-if="ipfsCid || showDefault")
- q-avatar(:size="size" :color="color" :text-color="textColor")
+ q-avatar(:size="size" :color="color" :text-color="textColor" v-if="!square")
img(:src="imageURI" v-if="imageURI").object-cover
loading-spinner.loadingSpinner(
:color="textColor"
v-else-if="!imageURI && isLoading"
)
span(v-else-if="!imageURI && !isLoading && showDefault" size=size font-size=fontSize color="primary" text-color="white") {{ this.label }}
+ template(v-else)
+ q-card(:style="{ 'max-width': '180px', 'border-radius': '12px', 'box-shadow': '0px 0px 14px #23283C14', 'position': 'relative' }")
+ div.bg-white.flex.items-center.justify-center.absolute.cursor-pointer(v-if="canRemoveFile" @click="$emit('removeFile')" :style="{ 'width': '20px', 'height': '20px', 'border-radius': '50%', 'right': '10px', 'top': '10px' }")
+ q-icon(name="fas fa-times" color="primary")
+ img(:src="imageURI" v-if="imageURI" width="180px" height="98px" :style="{ 'border-radius': '12px 12px 0 0' }").object-cover
+ q-card-section(v-if="originalUploadedFile")
+ .font-lato.text-bold(:style="{ 'font-size': '11px', 'text-overflow': 'ellipsis', 'white-space': 'nowrap', 'overflow': 'hidden' }") {{ originalUploadedFile.name }}
+ .h-b2.text-italic {{ Math.round(originalUploadedFile.size/1000) }} KB
diff --git a/src/components/navigation/dho-card.vue b/src/components/navigation/dho-card.vue
index c66cdcf49..c9f6da526 100644
--- a/src/components/navigation/dho-card.vue
+++ b/src/components/navigation/dho-card.vue
@@ -1,6 +1,5 @@
-q-card.dho-card.q-pa-md(flat :class="{'dho-card--card': isCardView, 'dho-card--list': isListView }")
+q-card.dho-card.q-px-md.q-py-md(flat :class="{'dho-card--card': isCardView, 'dho-card--list': isListView }")
+ slot(name="icon")
q-btn.absolute-top-right.q-pa-xxs.z-10(
- id="share-button"
+ :class="{ 'q-mt-sm q-mr-sm': isCardView, '': isListView, '': !$q.screen.gt.sm }"
@click="copyToClipboardADaoLink"
- color="white"
+ color="internal-bg"
icon="fas fa-share-alt"
- padding="12px"
- rounded unelevated size="sm"
+ id="share-button"
+ padding="8px"
+ round
+ size="sm"
text-color="primary"
- :class="{ 'q-mt-md q-mr-md': isCardView, '': isListView, '': !$q.screen.gt.sm }"
+ unelevated
+ v-if="url"
)
q-card-section.q-pa-none.row.justify-center.items-center(:class="{'col-auto q-pr-xs': isListView, 'full-width': !$q.screen.gt.sm }" :style="[isCardView ? {'height': '200px'}: {}]")
- q-avatar(:size="isListView && $q.screen.gt.sm ? '82px' : '140px'" color="primary" text-color="white" @click="goToDaoInNewTab").relative-position
- img(:src="ipfsy(logo)" v-if="logo").object-cover
- span(v-if="!logo") {{name && name[0].toUpperCase()}}
-
+ .full-width
+ slot(name="header")
+ .relative-position
+ q-avatar(
+ :size="isListView && $q.screen.gt.sm ? '82px' : '150px'"
+ @click="goToDaoInNewTab"
+ color="primary"
+ text-color="white"
+ )
+ img(:src="isValidPath(logo) && !useIpfsy ? logo : ipfsy(logo)" v-if="logo").object-cover
+ span(v-if="!logo") {{name && name[0].toUpperCase()}}
+ q-avatar.absolute-bottom-right(v-if="bubble" size="48px")
+ img(:src="ipfsy(bubble)").object-cover
q-card-section.q-pa-none(@click="goToDaoInNewTab" :class="{ 'col': isCardView, 'col row items-center': isListView, 'full-width': !$q.screen.gt.sm }")
- div
+ div(:class="{ 'text-center q-mt-md': isCardView, '': isListView }")
.h-h5.text-bold {{ title }}
- .h-b2.q-mt-xs(v-if="isCardView") {{ description }}
-
- q-card-section.q-pa-none.row.justify-between.items-center(@click="goToDaoInNewTab" :class="{ '': isCardView, 'col': isListView, 'full-width q-pt-md': !$q.screen.gt.sm }" :style="[isCardView && $q.screen.gt.xs ? {'height': '80px'} : {}]")
- .full-width.row.items-center(:class="{ 'col-12': isCardView }")
- .col-6.text-center.border-right
- q-icon.q-py-xs(color="grey-7" name="fas fa-calendar-alt")
- .text-grey-7.h-b2.q-pl-xs.q-pr-xxs {{ dateAndMonth }}
- .text-grey-7.h-b2 {{ year }}
- .col-6.text-center
- q-icon.q-py-xs(color="grey-7" name="fas fa-users")
- .text-grey-7.h-b2.q-px-xs {{ members }}
- .text-grey-7.h-b2 Members
+ .text-xs.text-weight-900.text-secondary.q-mt-xxs(:style="{'height': '16px'}") {{ subtitle }}
+ .text-xs.leading-loose.text-h-gray.q-mt-xs(v-if="isCardView" :style="{'height': '104px'}") {{ ellipsisDescription(description) }}
+
+ q-card-section.q-pa-none.row.justify-between.items-center(:class="{ '': isCardView, 'col': isListView, 'full-width q-pt-md': !$q.screen.gt.sm }" :style="[isCardView && $q.screen.gt.xs ? {'height': '80px'} : {}]")
+ .full-width
+ slot(name="footer")
@@ -126,12 +133,8 @@ q-card.dho-card.q-pa-md(flat :class="{'dho-card--card': isCardView, 'dho-card--l
flex-direction: column
justify-content: space-between
height: auto
- @media (min-width: $breakpoint-xs)
- height: 560px
.dho-card--list
flex-direction: row
-.border-right
- border-right 1px solid $internal-bg
diff --git a/src/components/navigation/top-navigation.vue b/src/components/navigation/top-navigation.vue
index 2edd72511..7d3d1cc09 100644
--- a/src/components/navigation/top-navigation.vue
+++ b/src/components/navigation/top-navigation.vue
@@ -18,7 +18,9 @@ export default {
},
dhos: undefined,
profile: Object,
- disabledSelector: Boolean
+ disabledSelector: Boolean,
+ selectedDaoPlan: Object,
+ showTopButtons: Boolean
},
data () {
@@ -60,7 +62,7 @@ export default {
.border-right.full-height
.col.justify-end.flex(v-if="!expanded")
- .div.inline(v-if="!searching")
+ .div.inline(v-if="!searching && showTopButtons")
q-btn.q-mr-xxs.icon(flat unelevated rounded padding="12px" icon="fas fa-search" size="sm" color="white" text-color="primary" @click="searching=!searching")
q-btn.q-mr-xxs.icon(:to="{ name: 'support' }" unelevated rounded padding="12px" icon="far fa-question-circle" size="sm" color="white" text-color="primary")
q-btn.q-mr-xs(v-if="selectedDaoPlan.isActivated" :to="{ name: 'plan-manager' }" unelevated rounded padding="12px" icon="fas fa-rocket" size="sm" color="white" text-color="primary" )
diff --git a/src/components/organization-asset/asset-card.vue b/src/components/organization-asset/asset-card.vue
index 918f3fae7..3f0ca4db5 100644
--- a/src/components/organization-asset/asset-card.vue
+++ b/src/components/organization-asset/asset-card.vue
@@ -126,13 +126,13 @@ export default {
this.$store.commit('proposals/setIcon', this.proposal.details_icon_s)
this.$store.commit('proposals/setStepIndex', 1)
- this.$store.commit('proposals/setPastSteps', ['step-proposal-type', 'step-description'])
+ this.$store.commit('proposals/setPastSteps', ['step-proposal-type', 'step-details'])
const draftId = Date.now()
this.$store.commit('proposals/setDraftId', draftId)
this.saveDraft()
- await this.applyForBadge(this.proposal.details_title_s)
- // this.$router.push({ name: 'proposal-create', params: { draftId } })
+ // await this.applyForBadge(this.proposal.details_title_s)
+ this.$router.push({ name: 'proposal-create', params: { draftId } })
},
async loadIconDetails () {
let type = null
diff --git a/src/components/organization-asset/create-badge-widget.stories.js b/src/components/organization-asset/create-badge-widget.stories.js
index 57c93efd3..5c257d750 100644
--- a/src/components/organization-asset/create-badge-widget.stories.js
+++ b/src/components/organization-asset/create-badge-widget.stories.js
@@ -8,7 +8,7 @@ import CreateBadgeWidget from './create-badge-widget.vue'
export default {
title: 'Organization-asset/ Create badge widget',
- component: CreateBadgeWidget,
+ component: CreateBadgeWidget
}
const Template = () => ({
diff --git a/src/components/organization-asset/create-badge-widget.vue b/src/components/organization-asset/create-badge-widget.vue
index 2ec05d993..d3036fd87 100644
--- a/src/components/organization-asset/create-badge-widget.vue
+++ b/src/components/organization-asset/create-badge-widget.vue
@@ -20,7 +20,7 @@ export default {
this.$store.commit('proposals/setStepIndex', 1)
const draftId = Date.now()
this.$store.commit('proposals/setDraftId', draftId)
- this.$store.commit('proposals/setPastSteps', ['step-proposal-type', 'step-description'])
+ this.$store.commit('proposals/setPastSteps', ['step-proposal-type', 'step-details'])
this.saveDraft()
this.$router.push({ name: 'proposal-create', params: { draftId } })
}
diff --git a/src/components/organization/circle-card.vue b/src/components/organization/circle-card.vue
index 154384eb4..33bbfdb03 100644
--- a/src/components/organization/circle-card.vue
+++ b/src/components/organization/circle-card.vue
@@ -2,32 +2,107 @@
export default {
name: 'circle-card',
components: {
- Widget: () => import('../common/widget.vue')
+ Widget: () => import('../common/widget.vue'),
+ ProfilePicture: () => import('../profiles/profile-picture.vue')
},
props: {
- /**
- * Circle Title
- */
- title: String,
- /**
- * Circle Description
- */
- description: String,
- /**
- * Circle Icon
- */
- icon: String
+ id: String,
+ name: String,
+ members: {
+ type: Array,
+ default: () => []
+ },
+ subcircles: {
+ type: Array,
+ default: () => []
+ }
},
+
data () {
return {
+ isExpanded: false
+ }
+ },
+
+ computed: {
+ expandIcon () {
+ return this.isExpanded ? 'fas fa-chevron-up' : 'fas fa-chevron-down'
+ }
+ },
+
+ methods: {
+ toggleExpanded () {
+ this.isExpanded = !this.isExpanded
}
}
}
- widget.bg-internal-bg.q-mx-xs.q-my-md.cursor-pointer
- q-btn(round unelevated :icon="icon" color="primary" text-color="white" size="sm" :ripple="false")
- .text-h6 {{title}}
- .h-b2.q-mt-sm.text-weight-thin.text-grey-7 {{description}}
+widget.bg-internal-bg.q-my-md.cursor-pointer
+ .row.justify-between
+ .row.items-center
+ .h-h4 {{ name }}
+ .text-italic.q-ml-md(v-if="subcircles.length > 0") Sub Circles ({{ subcircles.length }})
+ q-btn.q-ml-md.text-primary.h-h7(
+ :icon-right="expandIcon"
+ @click="toggleExpanded"
+ dense
+ flat
+ label="Show Subcircles Details"
+ no-caps
+ v-if="subcircles.length > 0"
+ )
+ q-btn.q-ml-md.text-primary.h-h7(
+ @click="$router.replace($route.path.includes('circles') ? id : 'circles/' + id)"
+ dense
+ flat
+ icon-right="fas fa-chevron-right"
+ label="Go to circle"
+ no-caps
+ )
+ template(v-if="isExpanded && subcircles")
+ widget.q-pa-md.q-my-xs(v-if="subcircles" v-for="circle, index in subcircles" v-bind:key="index" noPadding)
+ .row.items-center
+ .h-h6(v-if="circle.name") {{ circle.name }}
+ .text-italic.q-ml-md(v-if="members") Members ({{ members.length }})
+ .column
+ .text-italic.q-mt-xs.q-mb-sm Members ({{ members.length }})
+ .row.flex.profile-container
+ .profile-item-wrapper(v-for="member, index in members" v-if="index <= 2")
+ .profile-item
+ profile-picture(:username="member.username" size="26px" :key="member.username")
+ q-tooltip @{{ member.username }}
+ .profile-counter.bg-internal-bg(v-if="members.length > 3") +{{ members.length - 3 }}
+ .profile-counter.bg-internal-bg(v-else-if="!members.length") n/a
+
+.profile-container
+ margin-left 15px
+.profile-item-wrapper
+ display: flex
+ align-items: center
+ justify-content: center
+ background: #FFFFFF
+ width: 30px
+ height: 30px
+ border-radius: 50%
+ z-index: 100
+ margin-left: -10px
+ .profile-item
+ width 26px
+.profile-counter
+ display: flex
+ align-items: center
+ justify-content: center
+ border-radius: 50%
+ height: 30px
+ width: 30px
+ position: relative
+ font-size: 10px
+ font-weight: 600
+ font-family: 'Source Sans Pro', sans-serif
+ color: #242F5D
+ margin-left: -10px
+ z-index: 100
+
diff --git a/src/components/organization/circles-widget.vue b/src/components/organization/circles-widget.vue
index 871ce2553..3cfc81762 100644
--- a/src/components/organization/circles-widget.vue
+++ b/src/components/organization/circles-widget.vue
@@ -1,38 +1,129 @@
-widget.full-height.full-width
- coming-soon-tag(message="IN DEVELOPMENT - COMING SOON")
- .row.justify-between.q-my-md
- .col-9
- .text-h6.text-weight-bold Circles
- .col
- q-btn.full-width(
- label="See all"
- flat
- no-caps
- dense
- )
- .row
-
- .col-4(v-for="circle in circles")
+widget(:title="singleCircle ? '' : title" :noPadding="singleCircle").full-height.full-width
+ template(v-if="!singleCircle")
+ .h-h3.text-secondary.absolute(:style="{ 'top': '0', 'right': '0' }") {{ circles.length }}
+ q-tabs(
+ active-color="primary"
+ align="start"
+ indicator-color="primary"
+ no-caps
+ v-model="tab"
+ v-if="circles.length > 0"
+ )
+ q-tab(:name="TABS.STRUCTURE" label="Structure" :ripple="false")
+ q-tab(:name="TABS.DISTRIBUTION" label="Circle Budget Distribution" :ripple="false")
+ div(v-if="tab === TABS.STRUCTURE")
+ template(v-for="circle in circles")
circle-card(v-bind="circle")
+ div(v-if="tab === TABS.DISTRIBUTION")
+ template(v-for="circle in circles")
+ widget.bg-internal-bg.q-my-md.cursor-pointer(:style="{ 'padding-right': '10px' }")
+ div(:style="{ 'padding-right': '20px' }")
+ .row.items-center.justify-between
+ .row.items-center
+ .h-h4.q-mr-md {{ circle.name }}
+ .row
+ .text-black.text-bold.text-xs.text-italic.q-mr-xs TOTAL:
+ .text-italic.text-xs $ {{ formatCurrency(totalBudget ? totalBudget : 0) }}
+ .row.items-center
+ .row.items-center.flex
+ .husd-label
+ .text-black.text-bold.text-xs.text-italic.q-ml-xxs HUSD
+ .row.items-center.flex.q-ml-md
+ .hypha-label
+ .text-black.text-bold.text-xs.text-italic.q-ml-xxs HYPHA
+ .row.no-wrap
+ q-linear-progress.q-mt-xs(rounded size="8px" color="primary" :value="percentage(circle.husd[0] ? circle.husd[0] : 0,totalBudget)/100")
+ .text-italic.text-xs.q-mt-xxs.q-ml-md {{ formatCurrency(circle.husd[0] ? circle.husd[0] : 0) }}
+ .row.no-wrap
+ q-linear-progress.q-mt-xs(rounded size="8px" color="secondary" :value="percentage(circle.hvoice[0] ? circle.hvoice[0] : 0,totalBudget)/100")
+ .text-italic.text-xs.q-mt-xxs.q-ml-md {{ formatCurrency(circle.hvoice[0] ? circle.hvoice[0] : 0) }}
+ .row.q-my-md.items-center.q-pr-md(v-if="circle.subcircles.length" :style=" { 'flex-wrap': 'nowrap', 'white-space': 'nowrap' }")
+ .text-black.text-bold.text-italic.text-xs.q-mr-xs Budget Breakdown
+ .separator
+ .row
+ .template.col-6.q-pr-md.q-pb-md(v-for="subCircle in circle.subcircles" :style="{ 'padding-right': '20px' }" :class=" { 'full-width': $q.screen.lt.md }")
+ widget
+ .row.items-center
+ .h-h6 {{ subCircle.name }}
+ .row.no-wrap
+ q-linear-progress.q-mt-xs(rounded size="8px" color="primary" :value="percentage(subCircle.husd[0] ? subCircle.husd[0] : 0,circle.husd[0] ? circle.husd[0] : 0)/100")
+ .text-italic.text-xs.q-mt-xxs.q-ml-md {{ formatCurrency(subCircle.husd[0] ? subCircle.husd[0] : 0) }}
+ .row.no-wrap
+ q-linear-progress.q-mt-xs(rounded size="8px" color="secondary" :value="percentage(subCircle.hvoice[0] ? subCircle.hvoice[0] : 0,circle.hvoice[0] ? circle.hvoice[0] : 0)/100")
+ .text-italic.text-xs.q-mt-xxs.q-ml-md {{ formatCurrency(subCircle.hvoice[0] ? subCircle.hvoice[0] : 0) }}
+ template(v-else)
+ template(v-for="circle in circles")
+ circle-card(v-bind="circle")
+
+.husd-label
+ width: 12px
+ height: 12px
+ border-radius: 50%
+ background: #3F64EE
+.hypha-label
+ width: 12px
+ height: 12px
+ border-radius: 50%
+ background: #242F5D
+.separator
+ width: 100%
+ height: 1px
+ background: #707070
+ display: block
+ opacity: .5
+
diff --git a/src/components/organization/create-dho-widget.vue b/src/components/organization/create-dho-widget.vue
index e5aea8042..79eb4d6f0 100644
--- a/src/components/organization/create-dho-widget.vue
+++ b/src/components/organization/create-dho-widget.vue
@@ -4,11 +4,13 @@ export default {
components: {
Widget: () => import('~/components/common/widget.vue')
}
+
}
-widget.q-my-md.position-relative(title="Create your DHO")
- .text-ellipsis.text-body.q-my-xl Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
- q-btn.q-mt-xl.q-px-lg(rounded color="primary" no-caps @click="$router.push({ name: 'dao-launcher' })") New DHO
+widget.q-my-md.position-relative(title="Create new DAO")
+ //- TODO: Add real copy
+ //- .text-ellipsis.text-body.leading-loose.q-my-md Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
+ q-btn.full-width.q-px-lg(rounded color="primary" no-caps @click="$emit('create')") Create New DAO
diff --git a/src/components/organization/members.vue b/src/components/organization/members.vue
new file mode 100644
index 000000000..a0060157e
--- /dev/null
+++ b/src/components/organization/members.vue
@@ -0,0 +1,57 @@
+
+
+
+widget(more morePosition="top" :title="title" @more-clicked="moreClicked").full-height
+ .row.q-pt-xs(v-for="member in members")
+ profile-picture(:username="member.name || member.username" size="50px" show-name link)
+ template(v-slot:detail)
+ .row.q-gutter-xxs.q-pt-xxs.text-h-gray
+ q-icon(name="fas fa-calendar-alt")
+ .text-xs {{ member.joinedDate | timeAgo }}
+ .col.row.items-center.justify-end
+ .row.q-gutter-xs(v-if="hasListener('enroll') && hasListener('reject')")
+ q-btn.q-pa-xxs(
+ @click="$emit('reject', member.username)"
+ color="negative"
+ icon="fas fa-times"
+ round
+ size="xs"
+ unelevated
+ )
+ q-btn.q-pa-xxs(
+ @click="$emit('enroll', member.username)"
+ color="positive"
+ icon="fas fa-check"
+ round
+ size="xs"
+ unelevated
+ )
+
diff --git a/src/components/organization/treasury-widget.stories.js b/src/components/organization/tokens.stories.js
similarity index 70%
rename from src/components/organization/treasury-widget.stories.js
rename to src/components/organization/tokens.stories.js
index b3f014f11..cb0a62b60 100644
--- a/src/components/organization/treasury-widget.stories.js
+++ b/src/components/organization/tokens.stories.js
@@ -1,16 +1,16 @@
-import TreasuryWidget from './treasury-widget.vue'
+import Tokens from './tokens.vue'
export default {
- title: 'organization/Treasury Widget',
- component: TreasuryWidget,
+ title: 'organization/Tokens',
+ component: Tokens,
argTypes: {}
}
const Template = (args, { argTypes }) => ({
props: Object.keys(argTypes),
- components: { TreasuryWidget },
+ components: { Tokens },
template: `
-
+
`
})
diff --git a/src/components/organization/treasury-widget.vue b/src/components/organization/tokens.vue
similarity index 91%
rename from src/components/organization/treasury-widget.vue
rename to src/components/organization/tokens.vue
index a4678db7f..7e3cfab89 100644
--- a/src/components/organization/treasury-widget.vue
+++ b/src/components/organization/tokens.vue
@@ -1,6 +1,6 @@
-.row.items-center.no-wrap(:class="{ 'cursor-pointer': link && username }" @click="onClick")
+.row.items-center(:class="{ 'cursor-pointer': link && username }" @click="onClick")
q-avatar(v-if="avatar && !textOnly"
:size="size"
:class="{ 'cursor-pointer': link && username, 'q-mr-md': showName && !lightName && !noMargins }"
@@ -137,7 +138,7 @@ export default {
color="secondary"
text-color="white"
:size="size"
- :class="{ 'cursor-pointer': link && username, 'q-mr-md': showName && !noMargins }"
+ :class="{ 'cursor-pointer': link && username, 'q-mr-xxs': showName && !noMargins }"
) {{ getNameAbbreviation() }}
q-badge(v-if="badge" floating rounded color="red" :label="badge")
q-tooltip(v-if="tooltip"
@@ -155,6 +156,8 @@ export default {
q-tooltip {{'@' + username}}
.h-b3.text-italic.text-heading(v-if="detail") {{ detail }}
slot(name="detail")
+ //- div.col(v-if="hasSlot('right')")
+ slot(name="right")
diff --git a/src/components/profiles/wallet.vue b/src/components/profiles/wallet.vue
index 0f2be744d..262d05c96 100644
--- a/src/components/profiles/wallet.vue
+++ b/src/components/profiles/wallet.vue
@@ -20,7 +20,7 @@ export default {
data () {
return {
- canRedeem: false,
+ canRedeem: true,
loading: true,
pegToken: undefined,
supply: 0,
@@ -92,10 +92,10 @@ export default {
}
if (this.isOwner && this.daoSettings.isHypha) { // TODO: Remove is hypha when treasury gets implemented
- const defaultRedeemAddr = await this.redeemAddress()
+ // const defaultRedeemAddr = await this.redeemAddress()
// Only EOS redemptions are allowed for now
- this.canRedeem = defaultRedeemAddr === 'eosaccount'
+ // this.canRedeem = defaultRedeemAddr === 'eosaccount'
}
} finally {
this.loading = false
diff --git a/src/components/proposals/comments-widget.vue b/src/components/proposals/comments-widget.vue
index 61a2c5ec9..8e02469f8 100644
--- a/src/components/proposals/comments-widget.vue
+++ b/src/components/proposals/comments-widget.vue
@@ -29,7 +29,8 @@ export default {
-widget.comments-widget(:title="`Comments (${comments.length})`")
+widget.comments-widget(title='Comments')
+ .h-h2.text-secondary.absolute(:style="{ 'top': '-10px', 'right': '0' }") {{ comments.length }}
template(v-for="(comment, index) in comments")
comment-item.q-mt-xs(
:class="{ 'q-mt-xl': index === 0 }"
diff --git a/src/components/proposals/creation-stepper.stories.js b/src/components/proposals/creation-stepper.stories.js
index 80bf70012..8551cb3ae 100644
--- a/src/components/proposals/creation-stepper.stories.js
+++ b/src/components/proposals/creation-stepper.stories.js
@@ -28,13 +28,13 @@ Example.args = {
key: 'description',
index: 2,
label: 'Description',
- component: 'step-description'
+ component: 'step-details'
},
{
key: 'date',
index: 3,
label: 'Date / Duration',
- component: 'step-date-duration'
+ component: 'step-duration'
},
{
key: 'icon',
@@ -46,7 +46,7 @@ Example.args = {
key: 'compensation',
index: 5,
label: 'Compensation',
- component: 'step-compensation'
+ component: 'step-payout'
},
{
key: 'review',
@@ -79,13 +79,13 @@ Contributions.args = {
key: 'description',
index: 2,
label: 'Description',
- component: 'step-description'
+ component: 'step-details'
},
{
key: 'compensation',
index: 3,
label: 'Compensation',
- component: 'step-compensation'
+ component: 'step-payout'
},
{
key: 'review',
@@ -110,19 +110,19 @@ RecurringActivity.args = {
key: 'description',
index: 2,
label: 'Description',
- component: 'step-description'
+ component: 'step-details'
},
{
key: 'date',
index: 3,
label: 'Date / Duration',
- component: 'step-date-duration'
+ component: 'step-duration'
},
{
key: 'compensation',
index: 5,
label: 'Compensation',
- component: 'step-compensation'
+ component: 'step-payout'
},
{
key: 'review',
@@ -147,13 +147,13 @@ OrganizationalAsset.args = {
key: 'description',
index: 2,
label: 'Description',
- component: 'step-description'
+ component: 'step-details'
},
{
key: 'date',
index: 3,
label: 'Date / Duration',
- component: 'step-date-duration'
+ component: 'step-duration'
},
{
key: 'icon',
@@ -165,7 +165,7 @@ OrganizationalAsset.args = {
key: 'compensation',
index: 5,
label: 'Compensation',
- component: 'step-compensation'
+ component: 'step-payout'
},
{
key: 'review',
diff --git a/src/components/proposals/one-time-activity-header.vue b/src/components/proposals/one-time-activity-header.vue
index 14affa535..95514da3f 100644
--- a/src/components/proposals/one-time-activity-header.vue
+++ b/src/components/proposals/one-time-activity-header.vue
@@ -34,7 +34,11 @@ export default {
/**
* Compensation amount string. Example: 400.00 HUSD
*/
- compensation: Object
+ compensation: Object,
+ /**
+ * Contribution type: Example: String
+ */
+ type: String
},
computed: {
@@ -51,7 +55,7 @@ export default {
.row.full-width.flex.items-center.justify-between
.col-12.col-md-8
.row.items-end
- proposal-card-chips(type="Payout" :state="state" :showVotingState="true" :accepted="accepted" :votingExpired="votingExpired" :compensation="compensation")
+ proposal-card-chips(:type="type" :state="state" :showVotingState="true" :accepted="accepted" :votingExpired="votingExpired" :compensation="compensation")
.q-mt-xxs
.h-h5.text-bold.ellipsis {{ title }}
.row.q-mt-xs
diff --git a/src/components/proposals/proposal-card-chips.vue b/src/components/proposals/proposal-card-chips.vue
index aa3d64203..112ee34d3 100644
--- a/src/components/proposals/proposal-card-chips.vue
+++ b/src/components/proposals/proposal-card-chips.vue
@@ -1,4 +1,5 @@
-.proposal-list.row(:class="{'q-mr-md' : view === 'list'}")
+.proposal-list.row.q-col-gutter-md.q-mr-md
.template(v-for="p in proposals" :class="{ 'col-6 q-px-xs': $q.screen.md, 'col-4': view === 'card' && !compact, 'col-12': view === 'card' && compact && !$q.screen.md, 'full-width': view === 'list'}").flex.justify-center
proposal-card.q-mb-md(
:fullWidth="compact"
:style="{width: '100%'}"
- :class="{'q-mr-md' : !compact}"
:view="view"
:key="p.hash"
:proposal="p"
diff --git a/src/components/proposals/proposal-view.vue b/src/components/proposals/proposal-view.vue
index fc47133ed..5d87f89a9 100644
--- a/src/components/proposals/proposal-view.vue
+++ b/src/components/proposals/proposal-view.vue
@@ -6,6 +6,7 @@ import { mapActions, mapGetters } from 'vuex'
*/
import { isURL } from 'validator'
import { format } from '~/mixins/format'
+import { PROPOSAL_TYPE, PROPOSAL_STATE } from '~/const'
// import { proposals } from '~/mixins/proposals'
export default {
@@ -18,7 +19,10 @@ export default {
Widget: () => import('~/components/common/widget.vue'),
IpfsImageViewer: () => import('~/components/ipfs/ipfs-image-viewer.vue'),
IpfsFileViewer: () => import('~/components/ipfs/ipfs-file-viewer.vue'),
- ProposalDynamicPopup: () => import('~/components/proposals/proposal-dynamic-popup.vue')
+ ProposalDynamicPopup: () => import('~/components/proposals/proposal-dynamic-popup.vue'),
+ VersionHistory: () => import('~/components/proposals/version-history.vue'),
+ QuestProgression: () => import('~/components/proposals/quest-progression.vue'),
+ CirclesWidget: () => import('~/components/organization/circles-widget.vue')
},
props: {
@@ -69,10 +73,17 @@ export default {
pastQuorum: Number,
pastUnity: Number,
purpose: String,
- proposal: Object
+ proposal: Object,
+ masterPolicy: Object,
+ parentQuest: Object,
+ votingMethod: String,
+ circle: Object,
+ parentCircle: Array
},
data () {
return {
+ PROPOSAL_TYPE,
+ PROPOSAL_STATE,
iconDetails: undefined,
showDefferredPopup: false,
showCommitPopup: false,
@@ -121,9 +132,15 @@ export default {
return (this.cycleDurationSec / this.daoSettings.periodDurationSec).toFixed(2)
},
commitDifference () {
- return (this.commit.value) - this.commit.max
+ return (this.commit?.value) - this.commit.max
+ },
+ state () {
+ switch (this.$router.currentRoute.name) {
+ case 'proposal-create':
+ return 'CREATING'
+ }
+ return ''
}
-
},
methods: {
@@ -165,6 +182,19 @@ export default {
this.$emit('change-deferred', value)
}
}
+ },
+ apollo: {
+ circleData: {
+ query: require('~/query/circles/dao-circle-details-review-step.gql'),
+ update: data => {
+ const circle = data.getDocument
+ return [circle]
+ },
+ skip () { return !this.circle.value },
+ variables () {
+ return { docId: this.circle.value }
+ }
+ }
}
}
@@ -172,12 +202,20 @@ export default {
widget.proposal-view.q-mb-sm
.row
- proposal-card-chips(:proposal="proposal" :type="type" :state="status" :showVotingState="false" :compensation="compensation" :salary="salary" v-if="!ownAssignment" :commit="commit && commit.value")
- .row.q-my-sm
+ .col
+ .row
+ proposal-card-chips(:proposal="proposal" :type="type" :state="status" :showVotingState="false" :compensation="compensation" :salary="salary" v-if="!ownAssignment" :commit="commit && commit.value")
+ .col.justify-end.flex.items-center(v-if="periodCount")
+ .text-grey.text-italic(:style="{ 'font-size': '12px' }") {{ `Starting ${start} | Duration: ${periodCount} period${periodCount > 1 ? 's' : ''}` }}
+ .text-grey.text-italic.q-mt-sm(:style="{ 'font-size': '12px' }") Title
+ .row.q-mb-sm
.column
- .text-h6.text-bold {{ title }}
+ .text-h5.text-bold {{ title }}
.text-italic.text-body {{ subtitle }}
- .q-my-sm(:class="{ 'row':$q.screen.gt.md }" v-if="type === 'Assignment' || type === 'Edit' || type === 'Payout' || type === 'Assignment Badge' || type === 'Badge'")
+ version-history(v-if="type === PROPOSAL_TYPE.POLICY" :proposalId="proposal?.docId ? proposal.docId : docId")
+ quest-progression(v-if="type === PROPOSAL_TYPE.QUEST_START" :proposalId="proposal?.docId ? proposal.docId : docId")
+
+ .q-my-sm(:class="{ 'row':$q.screen.gt.md }" v-if="type === PROPOSAL_TYPE.ROLE || type === PROPOSAL_TYPE.EDIT || type === PROPOSAL_TYPE.PAYOUT || type === PROPOSAL_TYPE.ABILITY || type === PROPOSAL_TYPE.BADGE")
.col.bg-internal-bg.rounded-border(:class="{ 'q-mr-xs':$q.screen.gt.md, 'q-mb-sm':$q.screen.lt.md || $q.screen.md }" v-if="icon")
.row.full-width.q-pt-md.q-px-md.q-ml-xs(:class="{ 'q-pb-md':$q.screen.lt.md || $q.screen.md }" v-if="iconDetails")
q-btn.no-pointer-events(
@@ -188,58 +226,56 @@ widget.proposal-view.q-mb-sm
img.icon-img(:src="iconDetails.name")
ipfs-image-viewer(size="lg", :ipfsCid="iconDetails.cid" v-else-if="iconDetails.type === 'ipfs'")
.text-bold.q-ml-md Icon
- .col(v-if="periodCount")
- .bg-internal-bg.rounded-border.q-pa-md.full-height(:class="{ 'q-mr-xs':$q.screen.gt.md }")
- .text-bold Date and duration
- .text-grey-7.text-body2 {{ periodCount }} period{{periodCount > 1 ? 's' : ''}}, starting {{ start }}
- .col.bg-internal-bg.rounded-border(:class="{ 'q-mb-sm':$q.screen.lt.md || $q.screen.md }" v-if="type === 'Badge'")
+ .col.bg-internal-bg.rounded-border(:class="{ 'q-mb-sm':$q.screen.lt.md || $q.screen.md }" v-if="type === PROPOSAL_TYPE.BADGE")
.bg-internal-bg.rounded-border.q-pa-md.q-ml-xs
.text-bold Voting system
.text-grey-7.text-body2 {{ `Quorum: ${pastQuorum ? pastQuorum : '20'} | Unity: ${pastUnity ? pastUnity : '80'}` }}
- .col(:class="{ 'q-mr-sm':$q.screen.gt.md }" v-if="(type === 'Role' || type === 'Assignment' || (deferred && commit && type === 'Edit') )")
- .row.bg-internal-bg.rounded-border.q-pa-md(:class="{ 'q-ml-xs':$q.screen.gt.md, 'q-mt-sm':$q.screen.lt.md || $q.screen.md }")
+ .col(v-if="(type === PROPOSAL_TYPE.ARCHETYPE || type === PROPOSAL_TYPE.ROLE || (deferred && commit && type === PROPOSAL_TYPE.EDIT) )")
+ .row.bg-internal-bg.rounded-border.q-pa-md
.col-6(v-if="commit !== undefined")
- .text-bold Commitment level
- .text-grey-7.text-body2 {{ (commit.value) + '%' }}
- .text-secondary.text-body2.q-ml-xxs.inline(v-if="ownAssignment && commitDifference") {{commitDifference}} %
- .dynamic-popup(v-if="showCommitPopup")
- proposal-dynamic-popup(
- title="Adjust Commitment"
- description="Multiple adjustments to your commitment will be included in the calculation."
- :step="5"
- :min="commit.min"
- :max="commit.max"
- :initialValue="commit.value"
- @close="showCommitPopup = false"
- @save="onCommitmentEdit").q-pa-xxl.absolute
- q-btn.q-ml-xxxl(
- flat round size="sm"
- icon="fas fa-pen"
- color="primary"
- v-if="ownAssignment && status === 'approved'"
- @click="showCommitPopup = true; showDefferredPopup = false")
- q-tooltip Edit
- .col-6(v-if="deferred !== undefined && type !== 'Payout'")
- .text-bold Deferred amount
- .text-grey-7.text-body2 {{ deferred.value + '%' }}
- .dynamic-popup(v-if="showDefferredPopup")
- proposal-dynamic-popup(
- title="Adjust Deferred"
- description="The % deferral will be immediately reflected on your next claim"
- :step="1"
- :min="deferred.min"
- :max="deferred.max"
- :initialValue="deferred.value"
- @close="showDefferredPopup = false"
- @save="onDeferredEdit").q-pa-xxl.absolute
- q-btn.q-ml-xxxl(
- flat round size="sm"
- icon="fas fa-pen"
- color="primary"
- v-if="ownAssignment && status === 'approved' || status === 'archived'"
- @click="showDefferredPopup = true; showCommitPopup = false")
- q-tooltip Edit
- .q-my-sm(:class="{ 'row':$q.screen.gt.md }" v-if="type === 'Role'")
+ .text-bold.q-mb-xs Commitment level
+ widget.q-mr-sm(:style="{ 'padding': '12px 15px', 'border-radius': '15px' }")
+ .text-grey-7.text-body2 {{ (commit.value) + '%' }}
+ .text-secondary.text-body2.q-ml-xxs.inline(v-if="ownAssignment && commitDifference") {{commitDifference}} %
+ .dynamic-popup(v-if="showCommitPopup")
+ proposal-dynamic-popup(
+ title="Adjust Commitment"
+ description="Multiple adjustments to your commitment will be included in the calculation."
+ :step="5"
+ :min="commit.min"
+ :max="commit.max"
+ :initialValue="commit.value"
+ @close="showCommitPopup = false"
+ @save="onCommitmentEdit").q-pa-xxl.absolute
+ q-btn.q-ml-xxxl(
+ flat round size="sm"
+ icon="fas fa-pen"
+ color="primary"
+ v-if="ownAssignment && status === PROPOSAL_STATE.APPROVED"
+ @click="showCommitPopup = true; showDefferredPopup = false")
+ q-tooltip Edit
+ .col-6(v-if="deferred !== undefined && type !== PROPOSAL_TYPE.PAYOUT")
+ .text-bold.q-mb-xs Deferred amount
+ widget(:style="{ 'padding': '12px 15px', 'border-radius': '15px' }")
+ .text-grey-7.text-body2 {{ deferred.value + '%' }}
+ .dynamic-popup(v-if="showDefferredPopup")
+ proposal-dynamic-popup(
+ title="Adjust Deferred"
+ description="The % deferral will be immediately reflected on your next claim"
+ :step="1"
+ :min="deferred.min"
+ :max="deferred.max"
+ :initialValue="deferred.value"
+ @close="showDefferredPopup = false"
+ @save="onDeferredEdit").q-pa-xxl.absolute
+ q-btn.q-ml-xxxl(
+ flat round size="sm"
+ icon="fas fa-pen"
+ color="primary"
+ v-if="ownAssignment && status === PROPOSAL_STATE.APPROVED || status === PROPOSAL_TYPE.ARCHIVED"
+ @click="showDefferredPopup = true; showCommitPopup = false")
+ q-tooltip Edit
+ .q-my-sm(:class="{ 'row':$q.screen.gt.md }" v-if="type === PROPOSAL_TYPE.ARCHETYPE")
.col-6
.bg-internal-bg.rounded-border.q-pa-md(:class="{ 'q-mr-xs':$q.screen.gt.md }")
.text-bold Salary band
@@ -252,34 +288,58 @@ widget.proposal-view.q-mb-sm
.col-6
.text-bold Role capacity
.text-grey-7.text-body2 {{ capacity }}
- .q-my-sm(:class="{ 'row':$q.screen.gt.md }" v-if="tokens && !isBadge && type != 'Assignment Badge'")
- .col.bg-internal-bg.rounded-border
- .row.q-ml-md.q-py-md.text-bold(v-if="withToggle" ) {{ compensationLabel }}
- payout-amounts(:daoLogo="daoSettings.logo" :tokens="!toggle ? tokens : tokensByCycle" :class="{ 'q-pa-md': !withToggle }")
- .row.items-center.q-py-md.q-ml-xs(v-if="withToggle")
- .div(:class="{ 'col-1':$q.screen.gt.md }")
- q-toggle(v-model="toggle" size="md")
- .col.q-mt-xxs Show compensation for one period
- .col-3.bg-internal-bg.rounded-border.q-py-md.q-pa-md(:class="{ 'q-ml-xxs':$q.screen.gt.md, 'q-mt-md':$q.screen.lt.md || $q.screen.md }" v-if="type === 'Payout' && deferred && deferred.value >= 0")
+
.q-pa-xs
+ template(v-if="tokens && (type === PROPOSAL_TYPE.ROLE || type === PROPOSAL_TYPE.PAYOUT || type === PROPOSAL_TYPE.QUEST_START || type === PROPOSAL_TYPE.QUEST_PAYOUT || type === PROPOSAL_TYPE.QUEST || type === PROPOSAL_TYPE.BUDGET)")
+ .text-grey.text-italic(:style="{ 'font-size': '12px' }") Compensation
+ .q-my-sm(:class="{ 'row':$q.screen.gt.md }")
+ .col.bg-internal-bg(:style="{ 'border-radius': '25px' }")
+ .row.q-ml-md.q-py-md.text-bold(v-if="withToggle" ) {{ compensationLabel }}
+ payout-amounts(:daoLogo="daoSettings.logo" :tokens="!toggle ? tokens : tokensByCycle" :class="{ 'q-pa-md': !withToggle }")
+ .row.items-center.q-py-md.q-ml-xs(v-if="withToggle")
+ .div(:class="{ 'col-1':$q.screen.gt.md }")
+ q-toggle(v-model="toggle" size="md")
+ .col.q-mt-xxs Show compensation for one period
+ .col-3.bg-internal-bg.q-py-md.q-pa-md(:style="{ 'border-radius': '25px' }" :class="{ 'q-ml-xxs':$q.screen.gt.md, 'q-mt-md':$q.screen.lt.md || $q.screen.md }" v-if="type === PROPOSAL_TYPE.PAYOUT && deferred && deferred.value >= 0")
.row.q-mb-sm
.col.text-bold Deferred amount
- .row.q-pt-xs
- .text-grey-7.text-body2 {{ deferred.value + '%' }}
- template(v-if="purpose")
- .text-bold.q-mt-lg.q-mb-sm Purpose
- .row
- q-markdown(:src="purpose")
- .text-bold.q-mb-sm(:class="{ 'q-mt-lg': !purpose }") Description
+ widget.q-pt-xs(:style="{ 'padding': '12px 15px', 'border-radius': '15px' }")
+ .row
+ .text-grey-7.text-body2 {{ deferred.value + '%' }}
+ template(v-if="parentCircle?.length")
+ .text-xs.text-grey.text-italic Parent circle
+ circles-widget(:circles="parentCircle" singleCircle)
+ //- For review step
+ template(v-if="circle")
+ .q-mt-md
+ .text-xs.text-grey.text-italic Parent circle
+ circles-widget(:circles="circleData" singleCircle)
+ //- template(v-if="parentQuest")
+ //- .text-xs.text-grey.text-italic Quest type
+ //- .row.q-mb-lg {{ parentQuest.label }}
+ template(v-if="masterPolicy")
+ .text-xs.text-grey.text-italic Parent policy
+ .row.q-mb-lg {{ masterPolicy.label }}
+ //- .row.items-center.q-mb-md(v-if="url")
+ //- .text-bold.q-mt-lg.q-mb-sm Purpose
+ //- .row
+ //- q-markdown(:src="purpose")
+
+ .text-grey.text-italic(v-if="descriptionWithoutSpecialCharacters" :style="{ 'font-size': '12px' }" :class="{ 'q-mt-lg': !purpose }") Description
.row
q-markdown(:src="descriptionWithoutSpecialCharacters")
- .row.items-center.q-mb-md(v-if="url")
+
+ .text-grey.text-italic.q-mb-sm(v-if="url" :style="{ 'font-size': '12px' }") Attached documents
+ .row.items-center.q-mb-md.bg-internal-bg.relative(v-if="url" :style="{ 'padding': '7px 10px', 'border-radius': '15px' }")
q-icon(name="far fa-file" size="xs" color="primary")
ipfs-file-viewer(v-if="isIpfsFile" size="lg", :ipfsCid="url")
a.on-right(v-else :href="url") {{ url }}
- .row.top-border.q-pt-md.justify-between(v-if="!preview && !isBadge")
- profile-picture(:username="creator" show-name size="40px" link)
- q-btn(flat color="primary" no-caps rounded :disable="creator === null" :to="profile") See profile
+ q-icon.absolute(name="fas fa-chevron-right" :style="{ 'right': '10px' }")
+ template(v-if="!preview && !isBadge")
+ .text-grey.text-italic.top-border.q-pt-sm(:style="{ 'font-size': '12px' }") Created by:
+ .row.q-pt-md.justify-between
+ profile-picture(:username="creator" show-name size="40px" link)
+ q-btn(flat color="primary" no-caps rounded :disable="creator === null" :to="profile") See profile
.row
slot(name="bottom")
diff --git a/src/components/proposals/quest-claim-widget.stories.js b/src/components/proposals/quest-claim-widget.stories.js
new file mode 100644
index 000000000..35d0adb07
--- /dev/null
+++ b/src/components/proposals/quest-claim-widget.stories.js
@@ -0,0 +1,21 @@
+import QuestClaimWidget from './quest-claim-widget.vue'
+
+export default {
+ title: 'Proposals/Quest claim widget',
+ component: QuestClaimWidget,
+ argTypes: {}
+}
+
+const Template = (args, { argTypes }) => ({
+ props: Object.keys(argTypes),
+ components: { QuestClaimWidget },
+ template: `
+
+ `
+})
+
+export const Example = Template.bind({})
+Example.args = {
+}
+
+export const Base = Template.bind({})
diff --git a/src/components/proposals/quest-claim-widget.vue b/src/components/proposals/quest-claim-widget.vue
new file mode 100644
index 000000000..7b1dc441d
--- /dev/null
+++ b/src/components/proposals/quest-claim-widget.vue
@@ -0,0 +1,29 @@
+
+
+
+.quest-claim-widget(v-if="isDisplaying")
+ widget
+ .h-h5.q-mb-md {{ title }}
+ .description.q-mt-md {{ description }}
+ q-btn.q-mt-md.q-px-sm.text-white.full-width(noCaps rounded color="primary" @click="clickEvent") {{ buttonText }}
+
+
+
diff --git a/src/components/proposals/quest-progression.stories.js b/src/components/proposals/quest-progression.stories.js
new file mode 100644
index 000000000..7a3391032
--- /dev/null
+++ b/src/components/proposals/quest-progression.stories.js
@@ -0,0 +1,21 @@
+import QuestProgression from './quest-progression.vue'
+
+export default {
+ title: 'Proposals/Quest progression',
+ component: QuestProgression,
+ argTypes: {}
+}
+
+const Template = (args, { argTypes }) => ({
+ props: Object.keys(argTypes),
+ components: { QuestProgression },
+ template: `
+
+ `
+})
+
+export const Example = Template.bind({})
+Example.args = {
+}
+
+export const Base = Template.bind({})
diff --git a/src/components/proposals/quest-progression.vue b/src/components/proposals/quest-progression.vue
new file mode 100644
index 000000000..dc12f0ba3
--- /dev/null
+++ b/src/components/proposals/quest-progression.vue
@@ -0,0 +1,148 @@
+
+
+.quest-progression(v-if="progression.currentQuest.status !== PROPOSAL_STATE.DRAFTED")
+ .text-grey.text-italic.q-mb-sm(:style="{ 'font-size': '12px' }") Quest Progression
+ .row
+ template(v-if="progression.ascendants" v-for="card in progression.ascendants")
+ div.q-mr-md.q-mb-md.rounded-border.q-pa-md(
+ :style="{ 'min-width': '160px', 'max-width': '160px' }"
+ :class="cardColor(card.status)"
+ )
+ .icon-container(:class="{ 'bg-primary': card.status === PROPOSAL_STATE.PENDING }")
+ q-icon(name="fa fa-map-marker" :color="iconColor(card.status)")
+ .h-h5.text-white(:style="{ 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow': 'hidden' }") {{ card.title }}
+ q-tooltip {{ card.title }}
+ .h-h7.text-white.q-mt-md(:class="{ 'text-grey': card.status === PROPOSAL_STATE.PENDING}") {{ cardStatus(card) }}
+ div.q-mr-md.q-mb-md.rounded-border.q-pa-md(
+ :style="{ 'min-width': '160px', 'max-width': '160px' }"
+ :class="cardColor(progression.currentQuest.status)"
+ )
+ .icon-container(:class="{ 'bg-primary': progression.currentQuest.status === PROPOSAL_STATE.PENDING }")
+ q-icon(name="fa fa-map-marker" :color="iconColor(progression.currentQuest.status)")
+ .h-h5.text-white(:style="{ 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow': 'hidden' }") {{ progression.currentQuest.title }}
+ q-tooltip {{ progression.currentQuest.title }}
+ .h-h7.text-white.q-mt-md(:class="{ 'text-grey': progression.currentQuest.status === PROPOSAL_STATE.PENDING}") {{ cardStatus(progression.currentQuest) }}
+ div.q-mr-md.q-mb-md.rounded-border.q-pa-md(
+ :style="{ 'min-width': '160px', 'max-width': '160px' }"
+ :class="cardColor('pending')"
+ )
+ .icon-container.bg-primary
+ q-icon(name="fa fa-map-marker" :color="iconColor('pending')")
+ .h-h5.text-black(:style="{ 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow': 'hidden' }") {{ 'Completion' }}
+ .h-h7.text-white.q-mt-md.text-grey {{ completionCardTitle() }}
+
+
+.icon-container
+ display: flex
+ align-items: center
+ justify-content: center
+ border-radius: 50%
+ background: #fff
+ margin-bottom: 15px
+ width: 30px
+ height: 30px
+.bordered
+ border: 1px solid #84878E
+.rounded-border
+ border-radius: 15px
+
diff --git a/src/components/proposals/version-history.stories.js b/src/components/proposals/version-history.stories.js
new file mode 100644
index 000000000..a5198662b
--- /dev/null
+++ b/src/components/proposals/version-history.stories.js
@@ -0,0 +1,19 @@
+import VersionHistory from './version-history.vue'
+
+export default {
+ title: 'Version History',
+ component: VersionHistory,
+ argTypes: {}
+}
+
+const Template = (args, { argTypes }) => ({
+ props: Object.keys(argTypes),
+ components: { VersionHistory },
+ template: `
+
+ `
+})
+
+export const Example = Template.bind({})
+// These are the params for the example story. You can add all the params you want.
+Example.args = {}
diff --git a/src/components/proposals/version-history.vue b/src/components/proposals/version-history.vue
new file mode 100644
index 000000000..09293db10
--- /dev/null
+++ b/src/components/proposals/version-history.vue
@@ -0,0 +1,77 @@
+
+
+.version-history(v-if="versionHistory.state !== PROPOSAL_STATE.DRAFTED && versionHistory.state !== PROPOSAL_STATE.APPROVED")
+ .text-grey.text-italic.q-mb-sm(:style="{ 'font-size': '12px' }") Version History
+ .row
+ div.bg-internal-bg.q-mr-md.q-mb-md.rounded-border.q-pa-md(:style="{ 'min-width': '160px', 'position': 'relative' }" :class="{ 'selected-card': !versionHistory.originalApprovedDate, 'rejected-card': versionHistory.state === PROPOSAL_STATE.REJECTED }")
+ q-icon.absolute(v-if="versionHistory.originalApprovedDate" name="fas fa-arrow-right" :style="{ 'right': '20px', 'top': '28px' }")
+ div(:style="{ 'border-radius': '50%', 'background': '#242F5D', 'width': '30px', 'height': '30px', 'display': 'flex', 'justify-content': 'center', 'align-items': 'center' }" :class="{ 'selected-icon': !versionHistory.originalApprovedDate }")
+ q-icon(name="fas fa-check" :color="versionHistory.originalApprovedDate ? 'white' : versionHistory.state === PROPOSAL_STATE.REJECTED ? 'negative' : 'primary'")
+ .h-h5.text-weight-700.q-mt-sm.q-mb-md(:class="{ 'selected-title': !versionHistory.originalApprovedDate }") Original
+ div(v-if="versionHistory.state === PROPOSAL_STATE.PROPOSED") Current - on voting
+ div(v-else-if="versionHistory.state === PROPOSAL_STATE.REJECTED") Rejected
+ div(v-else) {{ parsedDate(versionHistory.originalApprovedDate) }}
+ div.bg-internal-bg.q-mr-md.q-mb-md.rounded-border.q-pa-md(v-if="versionHistory.originalApprovedDate" :style="{ 'min-width': '160px', 'position': 'relative' }" :class="{ 'selected-card': versionHistory.originalApprovedDate }")
+ div(:style="{ 'border-radius': '50%', 'background': '#242F5D', 'width': '30px', 'height': '30px', 'display': 'flex', 'justify-content': 'center', 'align-items': 'center' }" :class="{ 'selected-icon': versionHistory.originalApprovedDate }")
+ q-icon(name="fas fa-check" :color="versionHistory.originalApprovedDate ? 'primary' : 'white'")
+ .h-h5.text-weight-700.q-mt-sm.q-mb-md(:class="{ 'selected-title': versionHistory.originalApprovedDate }") Version 2
+ div(v-if="versionHistory.state === PROPOSAL_STATE.PROPOSED") Current - on voting
+ div(v-else-if="versionHistory.state === PROPOSAL_STATE.REJECTED") Rejected
+ div(v-else) {{ parsedDate(versionHistory.originalApprovedDate) }}
+
+
+
+.rounded-border
+ border-radius: 15px
+.selected-icon
+ background: #fff !important
+.selected-card
+ color: #fff !important
+ background: #242F5D !important
+.selected-title
+ color: #fff !important
+.rejected-card
+ background: #EF3F69 !important
+
diff --git a/src/components/proposals/voter-list.vue b/src/components/proposals/voter-list.vue
index f871e41e4..895a01e91 100644
--- a/src/components/proposals/voter-list.vue
+++ b/src/components/proposals/voter-list.vue
@@ -120,18 +120,16 @@ export default {
-widget(:title="`Votes (${size})`")
+widget(title="Votes")
+ .h-h2.text-secondary.absolute(:style="{ 'top': '-10px', 'right': '0' }") {{ size }}
template(v-if="(paginatedVotes.length === 0) && (size !== 0)")
div(class="row justify-center q-my-md")
- loading-spinner(color="primary" size="40px")
+ loading-spinner(color="primary" size="40px")
template(v-for="vote of paginatedVotes")
.row.items-center.justify-between.q-my-md(:key="vote.username")
- profile-picture(:username="vote.username" show-name size="40px" limit link)
+ profile-picture(:username="vote.username" show-name size="40px" limit link noMargins ellipsisName)
template(v-slot:detail)
- .row.items-center
- q-avatar(size="13px")
- img(:src="iconPercentage")
- .h-b3.text-italic.text-grey-6.q-ml-xxs {{ vote.percentage }}
+ .h-b3.text-italic.text-grey-6 {{ vote.percentage }}
chips(:tags="[tag(vote)]")
// q-icon(:name="icon(vote)" :color="color(vote)" size="sm")
.row.justify-between.q-pt-sm.items-center
diff --git a/src/components/proposals/voting.vue b/src/components/proposals/voting.vue
index 41ea682e3..bcd498dfe 100644
--- a/src/components/proposals/voting.vue
+++ b/src/components/proposals/voting.vue
@@ -169,7 +169,7 @@ widget(:title="widgetTitle" noPadding :background="background" :textColor="isVot
q-btn.q-mt-xxs(unelevated rounded no-caps color="white" text-color="primary" label="No" @click="withdraw = false")
.column.justify-between(v-else)
.row.full-width.q-mb-sm.q-mt-xs
- voting-result(:unity="unity" :quorum="quorum" :isVotingExpired="isVotingExpired" :colorConfig="colorConfig" :colorConfigQuorum="colorConfigQuorum")
+ voting-result(:unity="unity" :quorum="quorum" :isVotingExpired="isVotingExpired" :colorConfig="colorConfig()" :colorConfigQuorum="colorConfigQuorum()")
.row.justify-center.q-mb-sm.q-mt-sm
q-btn.q-px-xl(v-if="!voteConfig && isProposed && !isVotingExpired && activeButtons" no-caps rounded color="primary" @click="isVoting = !isVoting") Vote now
q-btn.q-px-xl.full-width(v-if="(isVotingExpired || voteConfig ) && !isApproved" no-caps rounded color="white" outline :class="{ 'no-pointer-events': isVotingExpired, ...backgroundButton }" :disable="isProposed && isVotingExpired" @click="isVoting = !isVoting") {{ voteString }}
diff --git a/src/components/templates/config/config.json b/src/components/templates/config/config.json
new file mode 100644
index 000000000..949cd01ac
--- /dev/null
+++ b/src/components/templates/config/config.json
@@ -0,0 +1,355 @@
+{
+ "templates": {
+ "first": {
+ "title": "Startup",
+ "description": "The purpose of a startup is to create a new business or bring a new product or service to market, with the aim of growing and scaling rapidly. Startups are often founded by entrepreneurs who identify a gap or opportunity in the market, and who seek to develop innovative solutions to address it.",
+ "possibilities": [
+ "6 Role Archetypes",
+ "4 Circles",
+ "4 Policy Documents",
+ "80/20 consent voting method",
+ "Community layer off",
+ "Community voting: classic",
+ "4 Core members badges",
+ "0 Community badges"
+ ],
+ "details": {
+ "archetypes": [
+ {
+ "title": "CEO",
+ "description": "The CEO is responsible for overseeing the day-to-day operations of the startup, and for executing on the organization’s strategy. They typically have a broad range of responsibilities, including hiring and managing staff, raising capital, and overseeing product development and marketing."
+ },
+ {
+ "title": "CTO",
+ "description": "The CTO (Chief Technology Officer) is responsible for overseeing the technical development of the organization’s product or service. They typically have a strong technical background, and are responsible for managing the organization’s software development, hardware design, and other technical initiatives."
+ },
+ {
+ "title": "CFO",
+ "description": "The CFO (Chief Financial Officer) is responsible for managing the organization’s finances, including budgeting, financial reporting, and fundraising. They work closely with the CEO to ensure that the organization has the financial resources it needs to succeed."
+ },
+ {
+ "title": "Marketing Director",
+ "description": "The Marketing Director is responsible for overseeing the organization’s marketing efforts, including advertising, social media, and content creation. They work closely with the CEO to develop and execute on the organization’s marketing strategy."
+ },
+ {
+ "title": "Sales Director",
+ "description": "The Sales Director is responsible for overseeing the organization’s sales efforts, including lead generation, customer outreach, and deal closing. They work closely with the CEO to ensure that the organization is meeting its sales targets."
+ },
+ {
+ "title": "Product Manager",
+ "description": "The Product Manager is responsible for overseeing the development and management of the organization’s product or service. They work closely with the CTO and other members of the product development team to ensure that the product meets the needs of the organization’s customers."
+ }
+ ],
+ "circles": [
+ {
+ "title": "Product Development Circle",
+ "description": "This circle is responsible for developing and refining the startup’s products or services, including conducting market research, creating prototypes, and testing and iterating on the product. They work closely with the Founders Circle to ensure that the product is aligned with the startup’s overall vision and strategy."
+ },
+ {
+ "title": "Marketing and Sales Circle",
+ "description": "This circle is responsible for developing and executing the startup’s marketing and sales strategy, including advertising, promotions, and outreach to potential customers. They work closely with the Product Development Circle to ensure that the marketing message is aligned with the product and its features."
+ },
+ {
+ "title": "Technology and Infrastructure Circle",
+ "description": "This circle is responsible for managing the startup’s technology infrastructure, including hardware, software, and data management. They work closely with the Product Development Circle to ensure that the technology is aligned with the product and its features."
+ },
+ {
+ "title": "Operations Circle",
+ "description": "This circle is responsible for managing the startup’s day-to-day operations, including finance, human resources, and logistics. They work closely with the Founders Circle to ensure that the startup is operating efficiently and effectively."
+ }
+ ],
+ "policies": [
+ {
+ "title": "Business Plan",
+ "description": "This document outlines the company’s mission, goals, and strategies for achieving those goals. It typically includes information on the market opportunity, target customers, product or service offerings, and financial projections."
+ },
+ {
+ "title": "Investor Agreement",
+ "description": "This legal document outlines the terms of the investment, including the amount invested, ownership percentage, and any other terms and conditions of the investment."
+ },
+ {
+ "title": "Employment Agreements",
+ "description": "These documents outline the terms and conditions of employment for employees, including salary, benefits, and job responsibilities."
+ },
+ {
+ "title": "Terms of Service and Privacy Policy",
+ "description": "These documents outline the terms and conditions for using the startup’s product or service, as well as the company’s policy for handling user data and protecting privacy."
+ }
+ ],
+ "coreVotingMethod": [
+ {
+ "title": "80/20 Pareto Vote",
+ "description": "This decision method requires 80% unity and 20% quorum to pass. It is a good method to show strong support but does not require everyone in the community to participate. ",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "communityVotingMethod": [
+ {
+ "title": "Majority Vote",
+ "description": "This decision method requires 51% unity and 51% quorum to pass. It is good for achieving an outcome that the majority supports but can risk fragmentation. ",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "coreBadges": [
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_founder.png",
+ "title": "Founder",
+ "description": "This badge could be awarded to the founders of the startup, recognizing their role in creating and launching the organization."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_investor.png",
+ "title": "Investor",
+ "description": "This badge could be awarded to individuals or organizations who have invested in the startup, either through financial contributions or other means of support."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_adopter.png",
+ "title": "Early Adopter",
+ "description": "This badge could be awarded to individuals who have been early adopters of the startup’s product or service, demonstrating a commitment to its success."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_customer_service.png",
+ "title": "Customer Service",
+ "description": "This badge could be awarded to individuals who have demonstrated exceptional customer service skills, going above and beyond to support the startup’s customers."
+ }
+ ],
+ "communityBadges": [
+ ]
+ }
+ },
+ "second": {
+ "title": "Cooperative",
+ "description": "The purpose of a cooperative is to provide a democratic and equitable economic organization for its members. A cooperative is a type of business that is owned and controlled by its members, who share in the profits and decision-making of the organization.",
+ "possibilities": [
+ "4 Role Archetypes",
+ "4 Policy proposals",
+ "80/20 consent voting method",
+ "Community layer on",
+ "4 Core members badges"
+ ],
+ "details": {
+ "archetypes": [
+ {
+ "title": "Board of Directors",
+ "description": "The Board of Directors is responsible for overseeing the cooperative's operations and setting its strategic direction. They typically have fiduciary responsibilities and may be involved in hiring and supervising the cooperative's management team."
+ },
+ {
+ "title": "General Manager",
+ "description": "The General Manager is responsible for overseeing the day-to-day operations of the cooperative, including managing staff, finances, and other resources. They work closely with the Board of Directors to ensure that the cooperative is meeting its goals and objectives."
+ },
+ {
+ "title": "Operations Manager",
+ "description": "The Operations Manager is responsible for managing the cooperative’s day-to-day operations, including production, logistics, and supply chain management. They work closely with the General Manager and other members of the management team to ensure that the cooperative is operating efficiently and effectively."
+ },
+ {
+ "title": "Membership Coordinator",
+ "description": "The Membership Coordinator is responsible for managing the cooperative’s membership program, including recruiting new members, processing applications, and maintaining member records."
+ }
+ ],
+ "circles": [
+ {
+ "title": "General Assembly",
+ "description": "This circle is responsible for overseeing the cooperative’s operations and setting its strategic direction. They typically have fiduciary responsibilities and may be involved in hiring and supervising the cooperative’s management team."
+ },
+ {
+ "title": "Operations Circle",
+ "description": "This circle is responsible for managing the cooperative’s day-to-day operations, including production, logistics, and supply chain management. They work closely with the General Manager and other members of the management team to ensure that the cooperative is operating efficiently and effectively."
+ },
+ {
+ "title": "Finance Circle",
+ "description": "This circle is responsible for managing the cooperative’s finances, including budgeting, accounting, and financial reporting. They work closely with the Board of Directors and other circles to ensure that the cooperative is meeting its financial goals and objectives."
+ },
+ {
+ "title": "Membership Circle",
+ "description": "This circle is responsible for managing the cooperative’s membership program, including recruiting new members, processing applications, and maintaining member records. They work closely with the Marketing and Outreach Circle to ensure that the cooperative is attracting new members and retaining existing ones."
+ }
+ ],
+ "policies": [
+ {
+ "title": "Articles of Incorporation",
+ "description": "This legal document establishes the cooperative as a legal entity and outlines its purpose, structure, and governance. It typically includes information on the cooperative’s name, address, membership requirements, and governance structure."
+ },
+ {
+ "title": "Bylaws",
+ "description": " This document outlines the rules and procedures for how the cooperative operates, including how decisions are made, how members are elected or appointed to the board, and how profits are distributed. Bylaws are typically established by the founding members and can be amended as the cooperative evolves."
+ },
+ {
+ "title": "Membership Agreement",
+ "description": "This document outlines the rights and responsibilities of cooperative members, including their financial obligations, voting rights, and participation requirements. It also typically includes information on the cooperative’s values and principles."
+ },
+ {
+ "title": "Policies and Procedures",
+ "description": "These documents provide guidelines for how the cooperative operates in specific areas, such as human resources, marketing, and finance. They typically outline the rules and procedures for how tasks are performed, and how decisions are made."
+ }
+ ],
+ "coreVotingMethod": [
+ {
+ "title": "80/20 Pareto Vote",
+ "description": "This decision method requires 80% unity and 20% quorum to pass. It is a good method to show strong support but does not require everyone in the community to participate. ",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "communityVotingMethod": [
+ {
+ "title": "Board of Directors Vote",
+ "description": "The community can delegate voice power to a Board of Directors. It requires a democratic election process that awards badges to delegates for a selected period of time.",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "coreBadges": [
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_diversity.png",
+ "title": "Diversity, Equity, and Inclusion",
+ "description": "This badge could be awarded to members who have contributed to the cooperative’s efforts to promote diversity, equity, and inclusion, whether through advocating for marginalized communities, participating in diversity and inclusion training, or supporting initiatives that promote equity."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_assembly.png",
+ "title": "",
+ "description": "This badge gratns access to the general assembly responsible for setting the strategic direction of the cooperative, as well as approving major decisions and changes to the cooperative’s bylaws."
+ }
+ ],
+ "communityBadges": [
+ {
+ "icon": "",
+ "title": "Member-Owner",
+ "description": "This is the core role in a cooperative, as each member-owner has a stake in the organization and a voice in its decision-making processes. Member-owners typically have voting rights and may be involved in the management of the cooperative."
+ },
+ {
+ "icon": "",
+ "title": "Volunteer",
+ "description": "This badge could be awarded to members who have volunteered their time and skills to support the cooperative, whether through working on committees, organizing events, or contributing to the work of the cooperative."
+ }
+ ]
+ }
+ },
+ "third": {
+ "title": "Movement",
+ "description": "The purpose of a movement is to create social, political, or cultural change by mobilizing a group of people who share a common cause, goal, or vision. Movements can take many different forms and operate at different levels, from grassroots community organizing to large-scale national or international campaigns.",
+ "possibilities": [
+ "6 Role Archetypes",
+ "5 Policy proposals",
+ "Core team voting: Consensus",
+ "Community layer on",
+ "Community voting: Majority",
+ "4 Core members badges",
+ "5 Community badges"
+ ],
+ "details": {
+ "archetypes": [
+ {
+ "title": "Campaign Manager",
+ "description": "The campaign manager is responsible for developing and executing the movement’s strategy and tactics, and coordinating the efforts of different teams and individuals to achieve the movement’s goals. They also oversee fundraising, messaging, and outreach efforts."
+ },
+ {
+ "title": "Volunteer Coordinator",
+ "description": "The volunteer coordinator is responsible for recruiting, training, and managing volunteers who support the movement’s goals. This includes developing a volunteer database, coordinating volunteer schedules, and ensuring that volunteers are properly trained and equipped to carry out their tasks."
+ },
+ {
+ "title": "Communications Director",
+ "description": "The communications director is responsible for developing and implementing the movement’s communication strategy, including social media, traditional media, and other outreach efforts. They also oversee the development of messaging and branding, and work closely with the campaign manager to ensure that all communications efforts are aligned with the movement’s overall strategy."
+ },
+ {
+ "title": "Fundraiser",
+ "description": "The fundraiser is responsible for identifying potential sources of funding, developing fundraising campaigns and events, and ensuring that the movement has the financial resources it needs to achieve its goals."
+ },
+ {
+ "title": "Grassroots Organizer",
+ "description": "The grassroots organizer is responsible for building support for the movement at the local level, including organizing events, canvassing, and building relationships with key stakeholders in the community. They also work closely with the volunteer coordinator to recruit and train volunteers."
+ },
+ {
+ "title": "Data Manager",
+ "description": "The data manager is responsible for collecting, organizing, and analyzing data related to the movement’s supporters, including demographics, preferences, and behaviors. This information is used to inform the movement’s outreach and engagement efforts, as well as to evaluate the effectiveness of different tactics and strategies."
+ }
+ ],
+ "circles": [
+ {
+ "title": "Campaign Management Circle",
+ "description": "The Campaign Management Circle serves as the decision-making body within the political movement. Its purpose is to oversee and manage the different aspects of the campaign, including communication, fundraising, data management, and volunteer coordination."
+ },
+ {
+ "title": "Communication and Outreach Circle",
+ "description": "The Communication and Outreach Circle would be a sub-circle within the Campaign Management Circle, with a specific focus on developing and implementing the movement’s communication and outreach strategies. Its purpose would be to ensure that the movement’s message is effectively communicated to its target audience, and that the movement is engaging with the community in a way that is aligned with its values and mission."
+ },
+ {
+ "title": "Funding and Resources Circle",
+ "description": "The purpose of a Funding and Resources Circle would be to oversee and manage the financial resources of the political movement. This circle would be responsible for developing and implementing a comprehensive fundraising strategy, which includes identifying and cultivating donor relationships, applying for grants, and organizing fundraising events."
+ },
+ {
+ "title": "Evaluation and Learning Circle",
+ "description": "The purpose of an Evaluation and Learning Circle would be to ensure that the political movement is continually learning and improving its strategies and tactics. This circle would be responsible for collecting and analyzing data on the movement’s activities and impact, and using this information to make data-driven decisions and continuously improve its approach."
+ }
+ ],
+ "policies": [
+ {
+ "title": "Mission Statement",
+ "description": "This document outlines the movement’s purpose, core values, and overarching goals. It serves as a guiding principle for the movement and helps align members and supporters around a common vision."
+ },
+ {
+ "title": "Policy Platform",
+ "description": "This document details the movement’s positions on key policy issues. It provides a comprehensive overview of the movement’s stance on various topics, helping to inform supporters and guide advocacy efforts."
+ },
+ {
+ "title": "Strategic Plan",
+ "description": "This document outlines the movement’s strategic goals, objectives, and the action steps required to achieve them. It provides a roadmap for the movement’s activities, ensuring that efforts are focused and coordinated."
+ },
+ {
+ "title": "Code of Conduct",
+ "description": "This document establishes a set of ethical guidelines and behavioral expectations for all members and supporters of the movement. It promotes a respectful and inclusive environment, outlines the values the movement upholds, and sets standards for engagement."
+ },
+ {
+ "title": "Fundraising Plan",
+ "description": "This document outlines the movement’s fundraising strategy, including goals, target donors, methods, and timelines. It provides a framework for raising funds to support the movement’s activities, campaigns, and infrastructure."
+ }
+ ],
+ "coreVotingMethod": [
+ {
+ "title": "Consensus Vote",
+ "description": "This decision method requires 100% unity and 90% quorum to pass. It is good for achieving early consensus but can fail for larger groups due to misalignment.",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "communityVotingMethod": [
+ {
+ "title": "Majority Vote",
+ "description": "This decision method requires 51% unity and 51% quorum to pass. It is good for achieving an outcome that the majority supports but can risk fragmentation.",
+ "unity": 80,
+ "quorum": 20
+ }
+ ],
+ "coreBadges": [
+ ],
+ "communityBadges": [
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_champion.png",
+ "title": "Campaign Champion",
+ "description": "This badge recognizes individuals who have demonstrated exceptional dedication and success in planning and executing political campaigns. It highlights their contributions to the movement's electoral efforts and their ability to mobilize support effectively."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_advocate.png",
+ "title": "Policy Advocate",
+ "description": "This badge is awarded to individuals who have shown a deep commitment to advocating for the movement’s policy platform. It acknowledges their efforts in raising awareness, engaging in policy discussions, and influencing public opinion on key policy issues."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_organizer.png",
+ "title": "Community Organizer",
+ "description": "This badge is given to individuals who have made significant contributions to grassroots organizing and community engagement. It recognizes their ability to mobilize and empower local communities, strengthening the movement’s presence and impact."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_mobilizer.png",
+ "title": "Digital Mobilizer",
+ "description": "This badge acknowledges individuals who have played a vital role in leveraging digital platforms and social media to mobilize support for the movement. It recognizes their skills in online outreach, content creation, and effectively spreading the movement’s message."
+ },
+ {
+ "icon": "https://assets.hypha.earth/badges/badge_diversity.png",
+ "title": "Diversity and Inclusion Advocate",
+ "description": "This badge is awarded to individuals who have demonstrated a strong commitment to promoting diversity, equity, and inclusion within the movement. It acknowledges their efforts to ensure representation, inclusivity, and equal opportunities for marginalized communities within the movement’s activities."
+ }
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/components/templates/templates-modal.vue b/src/components/templates/templates-modal.vue
new file mode 100644
index 000000000..417701ab0
--- /dev/null
+++ b/src/components/templates/templates-modal.vue
@@ -0,0 +1,311 @@
+
+
+
+.templates-modal
+ q-dialog(:value="isOpen" full-width)
+ widget.relative.wrapper(:style="{'width': '300px'}" title="Customize your DAO" breadcrumbs)
+ template(v-slot:header)
+ .breadcrumbs.font-lato.relative(v-if="currentStepIndex !== 0" :style="{ 'font-size': '18px', 'margin-top': '4px', 'margin-left': '4px' }") {{ breadcrumbs }}
+ q-icon.absolute(v-if="currentStepIndex !== 0 && !setupState" @click="back()" name="fas fa-arrow-left" color="primary" :style="{ 'top': '10px', 'left': '-20px', 'cursor': 'pointer' }")
+ .col.flex(v-if="setupState" :style="{ 'margin-top': '160px' }" @click="successful = true, processPercentage = 100")
+ .row
+ .col-8.flex.items-center
+ .col
+ .h-h3.q-mb-md
+ template(v-if="successful") All Templates proposals have been successfully published and are now ready for uther DAO members to vote!
+ template(v-else) Creating and publishing all the template proposals. This process might take a minute, please don’t leave this page
+ .h-b2 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ .col.q-mt-xxl
+ .row.h-h6
+ div Publishing process:
+ div.q-ml-xxs(:class="{ 'text-positive': successful }") {{ processPercentage }}%
+ q-linear-progress.q-mt-sm(:value="processPercentage/100" :color="successful ? 'positive' : 'primary'" rounded)
+ .col.justify-center.flex
+ div.flex.items-center.justify-center(v-if="successful" :style="{ 'width': '205px', 'height': '205px', 'background': '#1CB59B', 'border-radius': '50%' }")
+ q-icon(name="fa fa-check" color="white" size="110px")
+ div.flex.items-center.justify-center(v-else :style="{ 'width': '205px', 'height': '205px', 'background': '#242F5D', 'border-radius': '50%' }")
+ q-icon(name="fa fa-caret-up" color="white" size="150px")
+ .q-pt-xl(v-else)
+ template(v-if="currentStepIndex === 0")
+ .row.q-gutter-xl
+ .col
+ q-card.card.row.justify-between
+ img(:style="{ 'max-height': '230px' }" src="~/assets/images/template-option-img.png")
+ q-card-section.full-width.q-px-xl.q-pt-xl
+ .h-h4 Choose A DAO Template
+ p.q-py-sm.text-sm.text-h-gray.leading-loose A DAO template is a pre-packaged set of proposals. Each contains a particular organisational item for example, Roles, Badges, Circles etc.. Once you select a template, all the items in it will generate a single proposal. Each proposal will then come up for voting on the proposals page. Then the other DAO members can vote and decide on all the parts of the DAO settings.
+ q-card-section.full-width.q-px-xl.justify-end.flex
+ .col
+ .col
+ q-btn.relative.q-px-lg.h-btn1.full-width(
+ @click="currentStepIndex = 1"
+ color="primary"
+ label="Use a Template"
+ no-caps
+ rounded
+ unelevated
+ )
+ q-icon.absolute(name="fas fa-plus" size="10px" :style="{ 'margin-top': '2px', 'right': '12px' }")
+
+ .col
+ q-card.card.row.justify-between
+ img(:style="{ 'max-height': '230px' }" src="~/assets/images/scratch-option-img.png")
+ q-card-section.full-width.q-px-xl.q-pt-xl
+ .h-h4 Start From Scratch
+ p.q-py-sm.text-sm.text-h-gray.leading-loose You can choose to customize your DAO when you select this option. In case you do not want to go the template route, this path will give you the freedom to create the kind of organization that you think fits your vision. You can define your own organizational boundaries with Policies and set up the Roles, Circles and Badges as you wish.
+ q-card-section.full-width.q-px-xl.justify-end.flex
+ .col
+ .col
+ q-btn.relative.q-px-lg.h-btn1.full-width(
+ @click="isOpen = false"
+ color="primary"
+ label="Create Your Own"
+ no-caps
+ rounded
+ unelevated
+ )
+ q-icon.absolute(name="fas fa-plus" size="10px" :style="{ 'margin-top': '2px', 'right': '12px' }")
+
+ template(v-if="currentStepIndex === 1")
+ .row.q-gutter-xl
+ template(v-for="option in CONFIG.templates")
+ .col
+ q-card.card.q-pa-sm.flex(:style="{ 'flex-direction': 'column' }")
+ .col
+ q-card-section
+ .h-h5 {{ option.title }}
+ q-card-section.q-py-none
+ .h-b2 {{ option.description }}
+ q-card-section.q-pt-none
+ ul.q-pl-sm
+ template(v-for="li in option.possibilities")
+ li.text-bold.text-black {{ li }}
+ .col.flex.justify-end(:style="{ 'flex-direction': 'column' }")
+ q-card-section.relative(:style="{ 'bottom': '0' }")
+ .row.q-gutter-md
+ .col
+ q-btn.q-px-lg.h-btn1.relative.full-width.text-no-wrap(
+ color="primary"
+ label="See details"
+ no-caps
+ rounded
+ unelevated
+ outline
+ @click="currentStepIndex = 2, selectedOption = option"
+ )
+ .col
+ q-btn.q-px-lg.h-btn1.relative.full-width(
+ color="primary"
+ label="Select"
+ no-caps
+ rounded
+ unelevated
+ @click="$emit('submit' ,option)"
+ )
+ template(v-if="currentStepIndex === 2")
+ .h-h4 {{ selectedOption.title }}
+ .font-lato.text-black.q-mt-md(:style="{ 'font-size': '18px' }") {{ selectedOption.description }}
+ .row.q-mt-md
+ .row.h-h4.q-mb-md Role Archetypes ({{ selectedOption.details.archetypes.length }})
+ .row.q-col-gutter-xl
+ .col-4(v-for="archetype in selectedOption.details.archetypes")
+ widget.details-card
+ .h-h5 {{ archetype.title }}
+ .h-b2.q-mt-md {{ archetype.description }}
+ .h-b2.text-primary.text-underline.q-mt-md.text-bold.cursor-pointer(@click="currentProposal = archetype, currentStepIndex = 3") More Details
+ .row.q-mt-md
+ .row.h-h4.q-mb-md Circles ({{ selectedOption.details.circles.length }})
+ .row.q-col-gutter-xl
+ .col-4(v-for="circle in selectedOption.details.circles")
+ widget.details-card
+ .h-h5 {{ circle.title }}
+ .h-b2.q-mt-md {{ circle.description }}
+ .h-b2.text-primary.text-underline.q-mt-md.text-bold.cursor-pointer(@click="currentProposal = circle, currentStepIndex = 3") More Details
+ .row.q-mt-md
+ .row.h-h4.q-mb-md DAO Policies ({{ selectedOption.details.circles.length }})
+ .row.q-col-gutter-xl
+ .col-4(v-for="policy in selectedOption.details.policies")
+ widget.details-card
+ .h-h5 {{ policy.title }}
+ .h-b2.q-mt-md {{ policy.description }}
+ .h-b2.text-primary.text-underline.q-mt-md.text-bold.cursor-pointer(@click="currentProposal = policy, currentStepIndex = 3") More Details
+ .col.q-mt-md
+ .row.h-h4.q-mb-md Core team Voting method
+ .row.q-col-gutter-xl
+ .col-4(v-for="method in selectedOption.details.coreVotingMethod")
+ widget.details-card
+ .h-h5 {{ method.title }}
+ .h-b2.q-mt-md {{ method.description }}
+ .row.q-mt-sm
+ .col.flex.justify-between
+ .row.items-center
+ q-icon.q-mr-xxs(name="fas fa-vote-yea" color="black")
+ .h-b2.text-bold.text-black Unity
+ .h-b2.text-bold.text-black {{ method.unity }}%
+ q-linear-progress.q-mt-xxs(:value="method.unity/100" :color="'primary'" rounded)
+ .row.q-mt-md
+ .col.flex.justify-between
+ .row.items-center
+ q-icon.q-mr-xxs(name="fas fa-users" color="black")
+ .h-b2.text-bold.text-black Quorum
+ .h-b2.text-bold.text-black {{ method.quorum }}%
+ q-linear-progress.q-mt-xxs(:value="method.quorum/100" :color="'primary'" rounded)
+ .col.q-mt-md
+ .row.h-h4.q-mb-md Community team Voting method
+ .row.q-col-gutter-xl
+ .col-4(v-for="method in selectedOption.details.communityVotingMethod")
+ widget.details-card
+ .h-h5 {{ method.title }}
+ .h-b2.q-mt-md {{ method.description }}
+ .row.q-mt-sm
+ .col.flex.justify-between
+ .row.items-center
+ q-icon.q-mr-xxs(name="fas fa-vote-yea" color="black")
+ .h-b2.text-bold.text-black Unity
+ .h-b2.text-bold.text-black {{ method.unity }}%
+ q-linear-progress.q-mt-xxs(:value="method.unity/100" :color="'primary'" rounded)
+ .row.q-mt-md
+ .col.flex.justify-between
+ .row.items-center
+ q-icon.q-mr-xxs(name="fas fa-users" color="black")
+ .h-b2.text-bold.text-black Quorum
+ .h-b2.text-bold.text-black {{ method.quorum }}%
+ q-linear-progress.q-mt-xxs(:value="method.quorum/100" :color="'primary'" rounded)
+ .row.q-mt-md
+ .row.h-h4.q-mb-md Core team badges ({{ selectedOption.details.coreBadges.length }})
+ .row.q-col-gutter-xl
+ .col-4(v-for="badge in selectedOption.details.coreBadges")
+ widget.details-card
+ .icon.q-mb-xs
+ q-icon(name="fas fa-cog" color="white")
+ .h-h5 {{ badge.title }}
+ .h-b2.q-mt-md {{ badge.description }}
+ .h-b2.text-primary.text-underline.q-mt-md.text-bold.cursor-pointer(@click="currentProposal = badge, currentStepIndex = 3") More Details
+ .row.q-mt-md.q-pb-xl
+ .row.h-h4.q-mb-md Community team badges ({{ selectedOption.details.communityBadges.length }})
+ .row.q-col-gutter-xl
+ .col-4(v-for="badge in selectedOption.details.communityBadges")
+ widget.details-card
+ .icon.q-mb-xs.bg-secondary
+ q-icon(name="fas fa-cog" color="white")
+ .h-h5 {{ badge.title }}
+ .h-b2.q-mt-md {{ badge.description }}
+ .h-b2.text-primary.text-underline.q-mt-md.text-bold.cursor-pointer(@click="currentProposal = badge, currentStepIndex = 3") More Details
+ template(v-if="currentStepIndex === 3")
+ widget(:style="{ 'box-shadow': '0px 0px 30px #0000001F !important', 'border-radius': '25px' }")
+ .text-grey.text-italic(:style="{ 'font-size': '12px' }") Title
+ .h-h3 {{ currentProposal.title }}
+ .text-grey.text-italic.q-mt-md(:style="{ 'font-size': '12px' }") Description
+ .h-b4(:style="{ 'font-size': '18px' }") {{ currentProposal.description }}
+ .row.full-width.justify-end.q-pb-md(v-if="currentStepIndex === 2")
+ q-btn.q-px-lg.h-btn1.relative(
+ color="primary"
+ label="Back to templates"
+ no-caps
+ rounded
+ unelevated
+ outline
+ @click="currentStepIndex = 1"
+ )
+ q-btn.q-ml-md.q-px-lg.h-btn1.relative(
+ color="primary"
+ label="Select this template"
+ no-caps
+ rounded
+ unelevated
+ @click="$emit('submit' ,selectedOption)"
+ )
+ .row.absolute(:style="{ 'bottom': '0', 'right': '0' }")
+ q-btn.q-px-lg.h-btn1.relative(
+ v-if="successful"
+ color="primary"
+ label="Go to proposals dashboard"
+ no-caps
+ rounded
+ unelevated
+ outline
+ )
+ q-btn.q-ml-md.q-px-lg.h-btn1.relative(
+ v-if="successful"
+ color="primary"
+ label="Go to organization Dashboard"
+ no-caps
+ rounded
+ unelevated
+ )
+
+
+
+.wrapper
+ min-height: 70vh
+.card
+ height: 100%
+ min-height: 600px
+ box-shadow: 0px 0px 30px #0000001F
+ border-radius: 25px
+.details-card
+ box-shadow: 0px 0px 30px #0000001F !important
+ border-radius: 25px !important
+.icon
+ width: 30px
+ height: 30px
+ background: #242f5d
+ border-radius: 50%
+ display: flex
+ align-items: center
+ justify-content: center
+
diff --git a/src/const.js b/src/const.js
new file mode 100644
index 000000000..88e75651c
--- /dev/null
+++ b/src/const.js
@@ -0,0 +1,84 @@
+export const PROPOSAL_TYPE = Object.freeze({
+ ABILITY: 'Assignment Badge',
+ ASSIGNBADGE: 'Assignbadge',
+ ROLE: 'Assignment',
+ QUEST_START: 'Queststart',
+ QUEST_PAYOUT: 'Questcomplet',
+ QUEST: 'Quest',
+
+ ARCHETYPE: 'Role',
+ BADGE: 'Badge',
+ CIRCLE: 'Circle',
+ POLICY: 'Policy',
+
+ EDIT: 'Edit',
+ PAYOUT: 'Payout',
+ SUSPEND: 'Suspend',
+ BUDGET: 'Budget',
+ POLL: 'Poll'
+})
+
+export const ECOSYSTEM_DOMAIN = Object.freeze({
+ SOCIO_ECOLOGICAL: 'SOCIO_ECOLOGICAL',
+ SOCIO_ECONOMICAL: 'SOCIO_ECONOMICAL',
+ SOCIO_POLITICAL: 'SOCIO_POLITICAL',
+ SOCIO_PSYCHOLOGICAL: 'SOCIO_PSYCHOLOGICAL'
+})
+
+export const parseEcosystemDomain = (domain) => {
+ switch (domain) {
+ case ECOSYSTEM_DOMAIN.SOCIO_ECOLOGICAL:
+ return 'Socio-Ecological'
+ case ECOSYSTEM_DOMAIN.SOCIO_ECONOMICAL:
+ return 'Socio-Economical'
+ case ECOSYSTEM_DOMAIN.SOCIO_POLITICAL:
+ return 'Socio-Political'
+ case ECOSYSTEM_DOMAIN.SOCIO_PSYCHOLOGICAL:
+ return 'Socio-Psychological'
+ }
+}
+
+export const EXPLORE_BY = Object.freeze({
+ DAOS: 'DAOS',
+ ECOSYSTEMS: 'ECOSYSTEMS'
+})
+
+export const MEMBER_TYPE = Object.freeze({
+ CORE: 'CORE',
+ COMMUNITY: 'COMMUNITY'
+})
+
+export const PROPOSAL_STATE = Object.freeze({
+ DRAFTED: 'drafted',
+ PROPOSED: 'proposed',
+ APPROVED: 'approved',
+ REJECTED: 'rejected',
+ PENDING: 'pending',
+ ARCHIVED: 'archived',
+ SUSPENDED: 'suspended',
+ WITHDRAWED: 'withdrawed'
+})
+
+export const COLOR_TYPE = Object.freeze({
+ POSITIVE: 'positive',
+ NEGATIVE: 'negative',
+ GREY: 'grey',
+ WHITE: 'white'
+})
+
+export const VOTE_STATUS = Object.freeze({
+ PASS: 'pass',
+ ABSTAIN: 'abstain',
+ FAIL: 'fail'
+})
+
+export const MULTISIG_TABS = Object.freeze({
+ HISTORY: 'HISTORY',
+ READY: 'READY',
+ MULTISIG: 'MULTISIG',
+ PAYOUT: 'PAYOUT'
+})
+
+export const RPC_ACCOUNTS = Object.freeze({
+ EOSIO: 'eosio.msig'
+})
diff --git a/src/css/quasar-classes-override.styl b/src/css/quasar-classes-override.styl
index 7027dd1e9..8c6e4484e 100644
--- a/src/css/quasar-classes-override.styl
+++ b/src/css/quasar-classes-override.styl
@@ -90,6 +90,9 @@ a, a:hover, a:focus
.q-field--rounded .q-field__control
border-radius $button-rounded-border-radius !important
+.q-field__control-container
+ padding: 1px !important;
+
// SELECT
.q-select.q-field--outlined
.q-field__inner
@@ -137,3 +140,17 @@ a, a:hover, a:focus
.q-btn.disabled
opacity: 0.5 !important;
+
+// CALENDAR
+.q-date__main
+ background: #fff
+ border-radius: 15px
+.q-date__calendar-days
+ background: #f1f0f3
+ border-radius: 10px
+
+// STEP
+.disable-step
+ opacity: 20% !important
+ pointer-events: none
+ border-radius: 26px
\ No newline at end of file
diff --git a/src/css/typography.styl b/src/css/typography.styl
index 17686626a..b578dcc22 100644
--- a/src/css/typography.styl
+++ b/src/css/typography.styl
@@ -25,6 +25,12 @@
font-size: 22px
color: $heading
}
+.h-h4-regular{
+ font-family: Lato, sans-serif !important
+ font-weight: 400
+ font-size: 22px
+ color: $heading
+}
.h-h5{
font-family: Lato, sans-serif !important
font-weight: 900
@@ -117,3 +123,79 @@
.text-xs { font-size: 13px; line-height: 1rem; }
+
+.leading-none { line-height: 1; }
+.leading-tight { line-height: 1.25; }
+.leading-snug { line-height: 1.375; }
+.leading-normal { line-height: 1.5; }
+.leading-relaxed { line-height: 1.625; }
+.leading-loose { line-height: 2; }
+.leading-3 { line-height: .75rem; /* 12px */ }
+.leading-4 { line-height: 1rem; /* 16px */ }
+.leading-5 { line-height: 1.25rem; /* 20px */ }
+.leading-6 { line-height: 1.5rem; /* 24px */ }
+.leading-7 { line-height: 1.75rem; /* 28px */ }
+.leading-8 { line-height: 2rem; /* 32px */ }
+.leading-9 { line-height: 2.25rem; /* 36px */ }
+.leading-10 { line-height: 2.5rem; /* 40px */ }
+
+
+
+.text-xxs {
+ font-size: 0.5rem; /* 9px */
+ line-height: 1rem; /* 16px */
+}
+
+.text-xs {
+ font-size: 0.75rem; /* 12px */
+ line-height: 1rem; /* 16px */
+}
+.text-sm {
+ font-size: 0.875rem; /* 14px */
+ line-height: 1.25rem; /* 20px */
+}
+.text-base {
+ font-size: 1rem; /* 16px */
+ line-height: 1.5rem; /* 24px */
+}
+.text-lg {
+ font-size: 1.125rem; /* 18px */
+ line-height: 1.75rem; /* 28px */
+}
+.text-xl {
+ font-size: 1.25rem; /* 20px */
+ line-height: 1.75rem; /* 28px */
+}
+.text-2xl {
+ font-size: 1.5rem; /* 24px */
+ font-size: 22px;
+ line-height: 2rem; /* 32px */
+}
+.text-3xl {
+ font-size: 1.875rem; /* 30px */
+ line-height: 2.25rem; /* 36px */
+}
+.text-4xl {
+ font-size: 2.25rem; /* 36px */
+ line-height: 2.5rem; /* 40px */
+}
+.text-5xl {
+ font-size: 3rem; /* 48px */
+ line-height: 1;
+}
+.text-6xl {
+ font-size: 3.75rem; /* 60px */
+ line-height: 1;
+}
+.text-7xl {
+ font-size: 4.5rem; /* 72px */
+ line-height: 1;
+}
+.text-8xl {
+ font-size: 6rem; /* 96px */
+ line-height: 1;
+}
+.text-9xl {
+ font-size: 8rem; /* 128px */
+ line-height: 1;
+}
diff --git a/src/generated/gql.ts b/src/generated/gql.ts
new file mode 100644
index 000000000..aafd2528f
--- /dev/null
+++ b/src/generated/gql.ts
@@ -0,0 +1,27805 @@
+/* eslint-disable */
+
+import gql from 'graphql-tag';
+import { createMutationFunction, createSmartQueryOptionsFunction, createSmartSubscriptionOptionsFunction } from 'vue-apollo-smart-ops';
+import { ApolloError } from 'apollo-client';
+export type Maybe = T | null;
+export type InputMaybe = Maybe;
+export type Exact = { [K in keyof T]: T[K] };
+export type MakeOptional = Omit & { [SubKey in K]?: Maybe };
+export type MakeMaybe = Omit & { [SubKey in K]: Maybe };
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+ ID: string;
+ String: string;
+ Boolean: boolean;
+ Int: number;
+ Float: number;
+ DateTime: Date;
+ Int64: BigInt;
+};
+
+export type Query = {
+ __typename?: 'Query';
+ aggregateAlert?: Maybe;
+ aggregateAssignbadge?: Maybe;
+ aggregateAssignment?: Maybe;
+ aggregateAttestation?: Maybe;
+ aggregateBadge?: Maybe;
+ aggregateBalance?: Maybe;
+ aggregateBillingInfo?: Maybe;
+ aggregateBudget?: Maybe;
+ aggregateCircle?: Maybe;
+ aggregateCmntSection?: Maybe;
+ aggregateComment?: Maybe;
+ aggregateCursor?: Maybe;
+ aggregateDao?: Maybe;
+ aggregateDaoDraft?: Maybe;
+ aggregateDho?: Maybe;
+ aggregateDoccacheConfig?: Maybe;
+ aggregateDocument?: Maybe;
+ aggregateEdit?: Maybe;
+ aggregateElectnRound?: Maybe;
+ aggregateMember?: Maybe;
+ aggregateMemo?: Maybe;
+ aggregateMultisig?: Maybe;
+ aggregatePayment?: Maybe;
+ aggregatePayout?: Maybe;
+ aggregatePeriod?: Maybe;
+ aggregatePlanManager?: Maybe;
+ aggregatePolicy?: Maybe;
+ aggregatePoll?: Maybe;
+ aggregatePriceOffer?: Maybe;
+ aggregatePricingPlan?: Maybe;
+ aggregateQuestcomple?: Maybe;
+ aggregateQuestcomplet?: Maybe;
+ aggregateQueststart?: Maybe;
+ aggregateReaction?: Maybe;
+ aggregateRedemption?: Maybe;
+ aggregateRole?: Maybe;
+ aggregateSettings?: Maybe;
+ aggregateSuspend?: Maybe;
+ aggregateTimeshare?: Maybe;
+ aggregateTreasury?: Maybe;
+ aggregateTrsyPayment?: Maybe;
+ aggregateTypeVersion?: Maybe;
+ aggregateUpvtElectn?: Maybe;
+ aggregateVotable?: Maybe;
+ aggregateVote?: Maybe;
+ aggregateVoteGroup?: Maybe;
+ aggregateVoteTally?: Maybe;
+ getAlert?: Maybe;
+ getAssignbadge?: Maybe;
+ getAssignment?: Maybe;
+ getAttestation?: Maybe;
+ getBadge?: Maybe;
+ getBalance?: Maybe;
+ getBillingInfo?: Maybe;
+ getBudget?: Maybe;
+ getCircle?: Maybe;
+ getCmntSection?: Maybe;
+ getComment?: Maybe;
+ getCursor?: Maybe;
+ getDao?: Maybe;
+ getDaoDraft?: Maybe;
+ getDho?: Maybe;
+ getDoccacheConfig?: Maybe;
+ /** @deprecated @id argument for get query on interface is being deprecated, it will be removed in v21.11.0, please update your query to not use that argument */
+ getDocument?: Maybe;
+ getEdit?: Maybe;
+ getElectnRound?: Maybe;
+ getMember?: Maybe;
+ getMemo?: Maybe;
+ getMultisig?: Maybe;
+ getPayment?: Maybe;
+ getPayout?: Maybe;
+ getPeriod?: Maybe;
+ getPlanManager?: Maybe;
+ getPolicy?: Maybe;
+ getPoll?: Maybe;
+ getPriceOffer?: Maybe;
+ getPricingPlan?: Maybe;
+ getQuestcomple?: Maybe;
+ getQuestcomplet?: Maybe;
+ getQueststart?: Maybe;
+ getReaction?: Maybe;
+ getRedemption?: Maybe;
+ getRole?: Maybe;
+ getSettings?: Maybe;
+ getSuspend?: Maybe;
+ getTimeshare?: Maybe;
+ getTreasury?: Maybe;
+ getTrsyPayment?: Maybe;
+ getUpvtElectn?: Maybe;
+ getVote?: Maybe;
+ getVoteGroup?: Maybe;
+ getVoteTally?: Maybe;
+ queryAlert?: Maybe>>;
+ queryAssignbadge?: Maybe>>;
+ queryAssignment?: Maybe>>;
+ queryAttestation?: Maybe>>;
+ queryBadge?: Maybe>>;
+ queryBalance?: Maybe>>;
+ queryBillingInfo?: Maybe>>;
+ queryBudget?: Maybe>>;
+ queryCircle?: Maybe>>;
+ queryCmntSection?: Maybe>>;
+ queryComment?: Maybe>>;
+ queryCursor?: Maybe>>;
+ queryDao?: Maybe>>;
+ queryDaoDraft?: Maybe>>;
+ queryDho?: Maybe>>;
+ queryDoccacheConfig?: Maybe>>;
+ queryDocument?: Maybe>>;
+ queryEdit?: Maybe>>;
+ queryElectnRound?: Maybe>>;
+ queryMember?: Maybe>>;
+ queryMemo?: Maybe>>;
+ queryMultisig?: Maybe>>;
+ queryPayment?: Maybe>>;
+ queryPayout?: Maybe>>;
+ queryPeriod?: Maybe>>;
+ queryPlanManager?: Maybe>>;
+ queryPolicy?: Maybe>>;
+ queryPoll?: Maybe>>;
+ queryPriceOffer?: Maybe>>;
+ queryPricingPlan?: Maybe>>;
+ queryQuestcomple?: Maybe>>;
+ queryQuestcomplet?: Maybe>>;
+ queryQueststart?: Maybe>>;
+ queryReaction?: Maybe>>;
+ queryRedemption?: Maybe>>;
+ queryRole?: Maybe>>;
+ querySettings?: Maybe>>;
+ querySuspend?: Maybe>>;
+ queryTimeshare?: Maybe>>;
+ queryTreasury?: Maybe>>;
+ queryTrsyPayment?: Maybe>>;
+ queryTypeVersion?: Maybe>>;
+ queryUpvtElectn?: Maybe>>;
+ queryVotable?: Maybe>>;
+ queryVote?: Maybe>>;
+ queryVoteGroup?: Maybe>>;
+ queryVoteTally?: Maybe>>;
+};
+
+
+export type QueryAggregateAlertArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateAssignbadgeArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateAssignmentArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateAttestationArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateBadgeArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateBalanceArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateBillingInfoArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateBudgetArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateCircleArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateCmntSectionArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateCommentArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateCursorArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateDaoArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateDaoDraftArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateDhoArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateDoccacheConfigArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateDocumentArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateEditArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateElectnRoundArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateMemberArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateMemoArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateMultisigArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePaymentArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePayoutArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePeriodArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePlanManagerArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePolicyArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePollArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePriceOfferArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregatePricingPlanArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateQuestcompleArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateQuestcompletArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateQueststartArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateReactionArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateRedemptionArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateRoleArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateSettingsArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateSuspendArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateTimeshareArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateTreasuryArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateTrsyPaymentArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateTypeVersionArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateUpvtElectnArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateVotableArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateVoteArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateVoteGroupArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryAggregateVoteTallyArgs = {
+ filter?: InputMaybe;
+};
+
+
+export type QueryGetAlertArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetAssignbadgeArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetAssignmentArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetAttestationArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetBadgeArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetBalanceArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetBillingInfoArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetBudgetArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetCircleArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetCmntSectionArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetCommentArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetCursorArgs = {
+ id: Scalars['String'];
+};
+
+
+export type QueryGetDaoArgs = {
+ details_daoName_n?: InputMaybe;
+ docId?: InputMaybe;
+};
+
+
+export type QueryGetDaoDraftArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetDhoArgs = {
+ details_rootNode_n?: InputMaybe;
+ docId?: InputMaybe;
+};
+
+
+export type QueryGetDoccacheConfigArgs = {
+ id: Scalars['String'];
+};
+
+
+export type QueryGetDocumentArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetEditArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetElectnRoundArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetMemberArgs = {
+ details_member_n?: InputMaybe;
+ docId?: InputMaybe;
+};
+
+
+export type QueryGetMemoArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetMultisigArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPaymentArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPayoutArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPeriodArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPlanManagerArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPolicyArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPollArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPriceOfferArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetPricingPlanArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetQuestcompleArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetQuestcompletArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetQueststartArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetReactionArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetRedemptionArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetRoleArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetSettingsArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetSuspendArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetTimeshareArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetTreasuryArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetTrsyPaymentArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetUpvtElectnArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetVoteArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetVoteGroupArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryGetVoteTallyArgs = {
+ docId: Scalars['String'];
+};
+
+
+export type QueryQueryAlertArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryAssignbadgeArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryAssignmentArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryAttestationArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryBadgeArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryBalanceArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryBillingInfoArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryBudgetArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryCircleArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryCmntSectionArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe;
+};
+
+
+export type QueryQueryCommentArgs = {
+ filter?: InputMaybe;
+ first?: InputMaybe;
+ offset?: InputMaybe;
+ order?: InputMaybe