diff --git a/.github/workflows/npm-build-and-deploy-develop.yml b/.github/workflows/npm-build-and-deploy-develop.yml new file mode 100644 index 0000000000..142f81b0b5 --- /dev/null +++ b/.github/workflows/npm-build-and-deploy-develop.yml @@ -0,0 +1,35 @@ +# This workflow will do a clean install of node dependencies, build the source code and push the binaries to the deployment repository. +name: Continuous Delivery and Deployment + +on: + push: + branches: [develop] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [10.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build + - name: Create CNAME file + uses: finnp/create-file-action@master + env: + FILE_NAME: build/dist/CNAME + FILE_DATA: develop.bitshares.org + - name: Deploy + uses: s0/git-publish-subdir-action@master + env: + REPO: git@github.com:bitshares/develop.bitshares.org.git + BRANCH: master + FOLDER: build/dist + SSH_PRIVATE_KEY: ${{ secrets.AUTOMATION_UI_DEPLOYMENT_KEY }} diff --git a/.gitignore b/.gitignore index 038d9c14df..4641489b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,9 @@ app/stats-dev.json app/stats-prod.json app/test/MarketClasses.js yarn.lock -charting_library/charting_library.zip + +charting_library/* +!charting_library/scss +!charting_library/charting_library.17.025.02b61a1c.zip.md5 +!charting_library/package-charting-library.js +!charting_library/install-charting-library.js \ No newline at end of file diff --git a/app/actions/MarketsActions.js b/app/actions/MarketsActions.js index 4259d543a0..52cfeceed8 100644 --- a/app/actions/MarketsActions.js +++ b/app/actions/MarketsActions.js @@ -723,14 +723,22 @@ class MarketsActions { }); } - cancelLimitOrders(accountID, orderIDs) { - let fee_asset_id = accountUtils.getFinalFeeAsset( - accountID, - "limit_order_cancel" - ); - - var tr = WalletApi.new_transaction(); - orderIDs.forEach(id => { + cancelLimitOrders(accountID, orderIDs, fallbackFeeAssets = "1.3.0") { + if (__DEV__) { + console.log("cancelLimitOrders", accountID, orderIDs); + } + let tr = WalletApi.new_transaction(); + for (let i = 0; i < orderIDs.length; i++) { + let id = orderIDs[i]; + let fallbackFeeAsset = + typeof fallbackFeeAssets === "string" + ? fallbackFeeAssets + : fallbackFeeAssets[i]; + let fee_asset_id = accountUtils.getFinalFeeAsset( + accountID, + "limit_order_cancel", + fallbackFeeAsset + ); tr.add_type_operation("limit_order_cancel", { fee: { amount: 0, @@ -739,8 +747,7 @@ class MarketsActions { fee_paying_account: accountID, order: id }); - }); - + } return WalletDb.process_transaction(tr, null, true).catch(error => { console.log("cancel error:", error); }); diff --git a/app/actions/TransactionConfirmActions.js b/app/actions/TransactionConfirmActions.js index 108783b7b0..1f6c6c547e 100644 --- a/app/actions/TransactionConfirmActions.js +++ b/app/actions/TransactionConfirmActions.js @@ -50,7 +50,9 @@ class TransactionConfirmActions { // try to break down the error in human readable pieces let splitError = error.message.split("\n"); let data, code; - if (splitError.length > 1) { + if (splitError.length == 1) { + message = splitError[0]; + } else if (splitError.length > 1) { try { jsonError = JSON.parse(splitError[1]); data = jsonError.data; diff --git a/app/api/ApplicationApi.js b/app/api/ApplicationApi.js index a053e3233d..0203e943f7 100644 --- a/app/api/ApplicationApi.js +++ b/app/api/ApplicationApi.js @@ -803,15 +803,7 @@ const ApplicationApi = { amount: amount, asset_id: objects.asset.get("id") }, - // fixme should be given - policy: [ - 0, - { - begin_timestamp: parseInt(new Date().getTime() / 1000), - vesting_cliff_seconds: 100, - vesting_duration_seconds: 100 - } - ] + policy: policy } ); diff --git a/app/api/accountApi.js b/app/api/accountApi.js index 6caa6f7e9d..b1ce6c568e 100644 --- a/app/api/accountApi.js +++ b/app/api/accountApi.js @@ -5,7 +5,7 @@ class Api { // direct query, circumventing subscription system of ChainStore return Apis.instance() .db_api() - .exec("lookup_accounts", [startChar, limit]); + .exec("lookup_accounts", [startChar, limit], false); } lookupAccountByPublicKey(pubKey) { // direct query, circumventing subscription system of ChainStore diff --git a/app/api/apiConfig.js b/app/api/apiConfig.js index aa2fffdd87..78ab818dfe 100644 --- a/app/api/apiConfig.js +++ b/app/api/apiConfig.js @@ -155,14 +155,6 @@ export const settingsAPIs = { operator: "Witness: btspp-witness", contact: "telegram:btsplusplus" }, - { - url: "wss://blockzms.xyz/ws", - region: "Northern America", - country: "U.S.A.", - location: "New Jersey", - operator: "Witness: delegate-zhaomu", - contact: "telegram:lzmlam;wechat:lzmlam" - }, { url: "wss://api.bts.mobi/ws", region: "Northern America", @@ -186,14 +178,6 @@ export const settingsAPIs = { operator: "Witness: bhuz", contact: "telegram:bhuzor" }, - { - url: "wss://kimziv.com/ws", - region: "Northern America", - country: "U.S.A.", - location: "New Jersey", - operator: "Witness: witness.yao", - contact: "telegram:imyao" - }, { url: "wss://api.btsgo.net/ws", region: "Southeastern Asia", @@ -248,15 +232,15 @@ export const settingsAPIs = { country: "China", location: "Shandong", operator: "Witness: liuye", - contact: "email:work@domyself.me" + contact: "email:work@akawa.ink" }, { - url: "wss://btsfullnode.bangzi.info/ws", - region: "Western Europe", - country: "Germany", - location: "Munich", - operator: "Witness: Bangzi", - contact: "telegram:Bangzi" + url: "wss://api-us.61bts.com", + region: "Northern America", + country: "USA", + location: "St. Louis", + operator: "Witness: liuye", + contact: "email:work@akawa.ink" }, { url: "wss://api.dex.trading/", @@ -348,12 +332,12 @@ export const settingsAPIs = { contact: "wechat:xiaoyuan_409" }, { - url: "wss://fujian.cnvote.vip:81/", - region: "Eastern Asia", + url: "wss://hongkong.bitshares.im/ws", + region: "East Asia", country: "China", - location: "Fujian", - operator: "ptschina", - contact: "wechat:planetlife" + location: "Hong Kong", + operator: "Witness: clone", + contact: "telegram: yexiao" }, { url: "wss://singapore.bitshares.im/ws", @@ -370,7 +354,15 @@ export const settingsAPIs = { location: "New York", operator: "Witness: clone", contact: "telegram: yexiao" - }, + }, + { + url: "wss://api.iamredbar.com/ws", + region: "Northern America", + country: "U.S.A.", + location: "Minnesota", + operator: "Witness: iamredbar", + contact: "telegram: iamredbar" + }, // Testnet { url: "wss://node.testnet.bitshares.eu", @@ -403,10 +395,32 @@ export const settingsAPIs = { location: "Tokyo", operator: "Witness: clone", contact: "telegram: yexiao" + }, + { + url: "wss://api-testnet.61bts.com/ws", + region: "Eastern Asia", + country: "China", + location: "Shandong", + operator: "Witness: liuye", + contact: "email:work@akawa.ink" + }, + { + url: "wss://api-us-testnet.61bts.com/ws", + region: "Northern America", + country: "USA", + location: "St. Louis", + operator: "Witness: liuye", + contact: "email:work@akawa.ink" } - ], ES_WRAPPER_LIST: [ + { + url: "https://api.bitshares.ws/openexplorer", + region: "Western Europe", + country: "Germany", + operator: "blocksights.info", + contact: "bitshares:blocksights" + } ], DEFAULT_FAUCET: getFaucet().url, TESTNET_FAUCET: getTestFaucet().url diff --git a/app/assets/asset-symbols/atri.png b/app/assets/asset-symbols/atri.png new file mode 100644 index 0000000000..e48579acad Binary files /dev/null and b/app/assets/asset-symbols/atri.png differ diff --git a/app/assets/asset-symbols/bat.png b/app/assets/asset-symbols/bat.png new file mode 100644 index 0000000000..edf604749b Binary files /dev/null and b/app/assets/asset-symbols/bat.png differ diff --git a/app/assets/asset-symbols/fil.png b/app/assets/asset-symbols/fil.png new file mode 100644 index 0000000000..19cf73df96 Binary files /dev/null and b/app/assets/asset-symbols/fil.png differ diff --git a/app/assets/asset-symbols/symbols.js b/app/assets/asset-symbols/symbols.js index 41b7c04d80..49987fb2a9 100644 --- a/app/assets/asset-symbols/symbols.js +++ b/app/assets/asset-symbols/symbols.js @@ -82,7 +82,11 @@ require("file-loader?name=asset-symbols/[name].png!./cof.png"); require("file-loader?name=asset-symbols/[name].png!./exr.png"); require("file-loader?name=asset-symbols/[name].png!./lcrt.png"); require("file-loader?name=asset-symbols/[name].png!./nvc.png"); -require("file-loader?name=asset-symbols/[name].png!./nmc.png"); +require("file-loader?name=asset-symbols/[name].png!./atri.png"); +require("file-loader?name=asset-symbols/[name].png!./bat.png"); +require("file-loader?name=asset-symbols/[name].png!./fil.png"); +require("file-loader?name=asset-symbols/[name].png!./usdc.png"); +require("file-loader?name=asset-symbols/[name].png!./usdn.png"); // 3rd party assets (RuDEX) require("file-loader?name=asset-symbols/[name].png!./ppy.png"); diff --git a/app/assets/asset-symbols/usdc.png b/app/assets/asset-symbols/usdc.png new file mode 100644 index 0000000000..09c2e4c8d4 Binary files /dev/null and b/app/assets/asset-symbols/usdc.png differ diff --git a/app/assets/asset-symbols/usdn.png b/app/assets/asset-symbols/usdn.png new file mode 100644 index 0000000000..294e3da68c Binary files /dev/null and b/app/assets/asset-symbols/usdn.png differ diff --git a/app/assets/locales/locale-de.json b/app/assets/locales/locale-de.json index 8bc684194f..7142032556 100644 --- a/app/assets/locales/locale-de.json +++ b/app/assets/locales/locale-de.json @@ -1580,6 +1580,15 @@ "amount": "Betrag zum Tauschen", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Adresse konnte nicht genieriert werden.", "amount": "Einzahlungsbetrag", @@ -1774,6 +1783,19 @@ "publish_feed": "{account} hat eine Preisangabe von {price} veröffentlicht.", "reg_account": "{registrar} hat das Konto {newaccount} registriert.", "set_proxy": "{account} hat {proxy} als seinen Vertreter eingestellt.", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} hat {amount} an {to} überwiesen.", "transfer_account": "Konto {account} wurde an {to} übertragen.", "unlisted_by": "{lister} hat {listee} von der Liste gestrichen.", @@ -2559,6 +2581,7 @@ "proposal_create": "Vorschlag erstellen", "proposal_delete": "Vorschlag löschen", "proposal_update": "Vorschlag aktualisieren", + "ticket_create": "Create ticket", "transfer": "Überweisung", "transfer_from_blind": "Überweisung von blindem Konto", "transfer_to_blind": "Überweisung zu blinden Konten", @@ -2696,7 +2719,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-en.json b/app/assets/locales/locale-en.json index 664669f1d9..013bcb3516 100644 --- a/app/assets/locales/locale-en.json +++ b/app/assets/locales/locale-en.json @@ -1580,6 +1580,15 @@ "amount": "Amount to Convert", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Unable to generate address", "amount": "Amount to Deposit", @@ -1774,6 +1783,19 @@ "publish_feed": "{account} published feed price of {price}", "reg_account": "{registrar} registered the account {new_account}", "set_proxy": "{account} set {proxy} as their voting proxy", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} sent {amount} to {to}", "transfer_account": "{account} ownership transferred to {to}", "unlisted_by": "{lister} unlisted the account {listee}", @@ -1784,20 +1806,7 @@ "witness_pay": "Withdrew witness pay to account", "witness_receive": "Received witness from witness", "witness_update": "{account} update its witness info", - "worker_create": "{account} created a worker proposal with daily pay of {pay}", - "ticket_create": "{account} locked away {amount} in a ticket", - "ticket_types": { - "0": "Liquid", - "1": "Locked for 180 days", - "2": "Locked for 360 days", - "3": "Locked for 720 days", - "4": "Locked forever", - "liquid": "Liquid", - "lock_180_days": "Locked for 180 days", - "lock_360_days": "Locked for 360 days", - "lock_720_days": "Locked for 720 days", - "lock_forever": "Locked forever" - } + "worker_create": "{account} created a worker proposal with daily pay of {pay}" }, "page404": { "asset_not_found_subtitle": "That asset does not exist", @@ -2572,6 +2581,7 @@ "proposal_create": "Create proposal", "proposal_delete": "Delete proposal", "proposal_update": "Update proposal", + "ticket_create": "Create ticket", "transfer": "Transfer", "transfer_from_blind": "Transfer from blinded account", "transfer_to_blind": "Transfer to blinded account", @@ -2584,8 +2594,7 @@ "witness_create": "Create witness", "witness_update": "Update witness", "witness_withdraw_pay": "Witness pay withdrawal", - "worker_create": "Create worker", - "ticket_create": "Create ticket" + "worker_create": "Create worker" }, "vesting_balance_create": "created vesting balance of", "view_json": "Show raw json", @@ -2710,10 +2719,11 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", - "title": "Voting", - "ticket_explanation": "TBD", - "create_ticket": "Lock 1 {asset}" + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", + "title": "Voting" }, "walkthrough": { "buy_form": "Place buy orders using this form.", diff --git a/app/assets/locales/locale-es.json b/app/assets/locales/locale-es.json index aa4175a3a0..dc6d7390d1 100644 --- a/app/assets/locales/locale-es.json +++ b/app/assets/locales/locale-es.json @@ -1580,6 +1580,15 @@ "amount": "Cantidad a convertir", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "No se puede generar la dirección", "amount": "Cantidad a depositar", @@ -1774,6 +1783,19 @@ "publish_feed": "{account} publicò precio de suministro de {price}", "reg_account": "{registrar} Cuenta registrada {new_account}", "set_proxy": "{account} set {proxy} como su proxy de voto", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} enviado {amount} a {to}", "transfer_account": "{account} propiedad transferida a {to}", "unlisted_by": "{lister} delistada la cuenta {listee}", @@ -2559,6 +2581,7 @@ "proposal_create": "Crear propuesta", "proposal_delete": "Eliminar propuesta", "proposal_update": "Actualizar propuesta", + "ticket_create": "Create ticket", "transfer": "Transferencia", "transfer_from_blind": "Transferencia desde cuenta cegada", "transfer_to_blind": "Transferencia a la cuenta cegada", @@ -2696,7 +2719,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-fr.json b/app/assets/locales/locale-fr.json index f871c9280e..ef41fd0164 100644 --- a/app/assets/locales/locale-fr.json +++ b/app/assets/locales/locale-fr.json @@ -1574,6 +1574,15 @@ "amount": "Amount to Convert", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Unable to generate address", "amount": "Amount to Deposit", @@ -1768,6 +1777,19 @@ "publish_feed": "{account} a publié un nouveau flux de {price}", "reg_account": "{registrar} a créé le compte {new_account}", "set_proxy": "{account} a choisi {proxy} pour son nouveau proxy", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} a envoyé {amount} à {to}", "transfer_account": "{account} ownership transferred to {to}", "unlisted_by": "{lister} a délisté le compte {listee}", @@ -2553,6 +2575,7 @@ "proposal_create": "Création d'une proposition", "proposal_delete": "Suppresion d'une proposition", "proposal_update": "Mise à jour d'une proposition", + "ticket_create": "Create ticket", "transfer": "Transfert", "transfer_from_blind": "Transfer from blinded account", "transfer_to_blind": "Transfer to blinded account", @@ -2690,7 +2713,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-it.json b/app/assets/locales/locale-it.json index bfd616b3b7..2a70fc0a37 100644 --- a/app/assets/locales/locale-it.json +++ b/app/assets/locales/locale-it.json @@ -1574,6 +1574,15 @@ "amount": "Quantità da convertire", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Unable to generate address", "amount": "Quantità da depositare", @@ -1768,6 +1777,19 @@ "publish_feed": "{account} ha pubblicato un feed price di {price}", "reg_account": "{registrar} ha registrato l'account {new_account}", "set_proxy": "{account} ha scelto {proxy} come suo proxy di voto", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} ha inviato {amount} a {to}", "transfer_account": "L'ownership di {account} è stata transferita a {to}", "unlisted_by": "{lister} ha delistato l'account {listee}", @@ -2553,6 +2575,7 @@ "proposal_create": "Crea proposta", "proposal_delete": "Cancella proposta", "proposal_update": "Aggiorna proposta", + "ticket_create": "Create ticket", "transfer": "Trasferimento", "transfer_from_blind": "Trasferisci da blinded account", "transfer_to_blind": "Trasferisci a blinded account", @@ -2690,7 +2713,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-ja.json b/app/assets/locales/locale-ja.json index d20e6a1a6c..6093ddd91f 100644 --- a/app/assets/locales/locale-ja.json +++ b/app/assets/locales/locale-ja.json @@ -1574,6 +1574,15 @@ "amount": "変換数量", "submit": "OK" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "アドレスを生成できません", "amount": "入金する数量", @@ -1768,6 +1777,19 @@ "publish_feed": "{account}はフィード価格 {price}を公開しました", "reg_account": "{registrar}は{new_account}のアカウントを登録しました", "set_proxy": "{account}は投票代理人に{proxy}を設定しました", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from}は{amount}を{to}に送りました", "transfer_account": "{account}の所有権を{to}に移転しました", "unlisted_by": "{lister}は{listee}をリストから外しました", @@ -2553,6 +2575,7 @@ "proposal_create": "提案を作成", "proposal_delete": "提案を削除", "proposal_update": "提案を更新", + "ticket_create": "Create ticket", "transfer": "転送", "transfer_from_blind": "匿名アカウントからの転送", "transfer_to_blind": "匿名アカウントに転送", @@ -2690,7 +2713,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-ko.json b/app/assets/locales/locale-ko.json index 998c62b9db..99134751f8 100644 --- a/app/assets/locales/locale-ko.json +++ b/app/assets/locales/locale-ko.json @@ -1574,6 +1574,15 @@ "amount": "Amount to Convert", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Unable to generate address", "amount": "Amount to Deposit", @@ -1768,6 +1777,19 @@ "publish_feed": "{account} published feed price of {price}", "reg_account": "{registrar} registered the account {new_account}", "set_proxy": "{account} set {proxy} as their voting proxy", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} sent {amount} to {to}", "transfer_account": "{account} ownership transferred to {to}", "unlisted_by": "{lister} unlisted the account {listee}", @@ -2553,6 +2575,7 @@ "proposal_create": "제안서 생성", "proposal_delete": "제안서 삭제", "proposal_update": "제안서 업데이트", + "ticket_create": "Create ticket", "transfer": "전송", "transfer_from_blind": "Transfer from blinded account", "transfer_to_blind": "Transfer to blinded account", @@ -2690,7 +2713,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-ru.json b/app/assets/locales/locale-ru.json index 40f8ef3a1c..c183bca142 100644 --- a/app/assets/locales/locale-ru.json +++ b/app/assets/locales/locale-ru.json @@ -1580,6 +1580,15 @@ "amount": "Сумма к конвертации", "submit": "ОК" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Не удается сгенерировать адрес", "amount": "Сумма депозита", @@ -1774,6 +1783,19 @@ "publish_feed": "{account} опубликовал котировки {price}", "reg_account": "{registrar} зарегистрировал аккаунт {new_account}", "set_proxy": "{account} установил {proxy} в качестве своего прокси для голосования", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} отправил {amount} на {to}", "transfer_account": "Владение {account} передано {to}", "unlisted_by": "{lister} удалил аккаунт {listee} из списка", @@ -2559,6 +2581,7 @@ "proposal_create": "Создание предложения", "proposal_delete": "Удаление предложения", "proposal_update": "Обновление предложения", + "ticket_create": "Create ticket", "transfer": "Перевод", "transfer_from_blind": "Перевод со слепого аккаунта", "transfer_to_blind": "Перевод на слепой аккаунт", @@ -2696,7 +2719,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "Блокчейн BitShares позволяет держателям его базового токена BTS голосовать за производителей блоков (заверителей), членов комитета (управления блокчейном), рабочие предложения (оплата блокчейном задач и стратегических решений через Предложения/Опросы).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Голосование" }, "walkthrough": { diff --git a/app/assets/locales/locale-tr.json b/app/assets/locales/locale-tr.json index 9fa55f00ca..55d69e4e10 100644 --- a/app/assets/locales/locale-tr.json +++ b/app/assets/locales/locale-tr.json @@ -1574,6 +1574,15 @@ "amount": "Amount to Convert", "submit": "Ok" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "Unable to generate address", "amount": "Yatıralacak Miktar", @@ -1768,6 +1777,19 @@ "publish_feed": "{account} fiyat duyurdu: {price}", "reg_account": "{registrar} kayıt yaptırdı - Hesap adı: {new_account}", "set_proxy": "{account} oy kullanması için {proxy} adlı hesabı vekil tayin etti", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} {amount} gönderdi - Alıcı: {to}", "transfer_account": "{account} adlı hesabın mülkiyeti {to} adlı hesaba devredildi.", "unlisted_by": "{lister} izin listesinden {listee} adlı hesabı çıkardı.", @@ -2553,6 +2575,7 @@ "proposal_create": "Teklif oluşturma", "proposal_delete": "Teklif silme", "proposal_update": "Teklif güncelleme", + "ticket_create": "Create ticket", "transfer": "Gönder", "transfer_from_blind": "Kör hesaptan transfer et", "transfer_to_blind": "Kör hesaba transfer", @@ -2690,7 +2713,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "The BitShares blockchain allows the holders of its core token BTS to vote on block producers (witnesses), committee members (blockchain governance), worker proposals (reimbursement for tasks and strategic decisions through BSIPs/Polls).", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "Voting" }, "walkthrough": { diff --git a/app/assets/locales/locale-zh.json b/app/assets/locales/locale-zh.json index dc73e71611..ae2128c98e 100644 --- a/app/assets/locales/locale-zh.json +++ b/app/assets/locales/locale-zh.json @@ -1580,6 +1580,15 @@ "amount": "兑换数量", "submit": "确定" }, + "create_lock": { + "amount": "Amount to lock", + "from": "Account to lock from", + "submit": "Lock", + "targetType": "Lock Type", + "title": "Create Lock", + "type_warning": "Please choose a lock type.", + "warning_message": "Note that locked assets must be requested to unlock, and can only be claimed back after the unlock period has passed. Current unlock period would be %(lock_days)s days" + }, "deposit": { "address_generation_error": "不能生成地址", "amount": "充值数量", @@ -1774,6 +1783,19 @@ "publish_feed": "{account} 发布了喂价 {price}", "reg_account": "{registrar} 登记了账户 {new_account}", "set_proxy": "{account} 将 {proxy} 设置为投票代理", + "ticket_create": "{account} locked away {amount} in a ticket", + "ticket_types": { + "0": "Liquid", + "1": "Claimable 180 days after unlock request", + "2": "Claimable 360 days after unlock request", + "3": "Claimable 720 days after unlock request", + "4": "Locked forever", + "liquid": "Liquid", + "lock_180_days": "Claimable 180 days after unlock request", + "lock_360_days": "Claimable 360 days after unlock request", + "lock_720_days": "Claimable 720 days after unlock request", + "lock_forever": "Locked forever" + }, "transfer": "{from} 将 {amount} 转账给 {to}", "transfer_account": "{account} 的账户权限转移给了 {to}", "unlisted_by": "{lister} 将 {listee} 移出清单", @@ -2559,6 +2581,7 @@ "proposal_create": "创建提案", "proposal_delete": "删除提案", "proposal_update": "更新提案", + "ticket_create": "Create ticket", "transfer": "转账", "transfer_from_blind": "从隐私账户转出", "transfer_to_blind": "向隐私账户转账", @@ -2696,7 +2719,10 @@ } }, "voting": { + "create_ticket": "Lock 1 {asset}", "description": "比特股区块链允许BTS token持有者投票决定区块生产者(见证人), 理事会成员(区块链管理者), 工作提案(任务赏金及BSIPs/Polls战略决策)。", + "increase_voting_power": "Create Lock", + "ticket_explanation": "Obtain voting power by locking away the core token BTS.", "title": "投票" }, "walkthrough": { diff --git a/app/branding.js b/app/branding.js index 59b9c68132..5cdc128a5c 100644 --- a/app/branding.js +++ b/app/branding.js @@ -100,7 +100,7 @@ export function getDefaultMarket() { if (_isTestnet()) { return "USD_TEST"; } - return "USD_BTS"; + return "BTS_CNY"; } /** @@ -112,7 +112,7 @@ export function getMyMarketsBases() { if (_isTestnet()) { return ["TEST"]; } - return ["BTS", "BTC", "ETH", "USD", "CNY"]; + return ["BTS", "BTC", "CNY", "USD", "USDT", "ETH"]; } /** @@ -127,14 +127,20 @@ export function getMyMarketsQuotes() { let tokens = { nativeTokens: [ "BTC", + "BTC1.0", "BTS", "CNY", + "CNY1.0", "EUR", + "EUR1.0", "GOLD", - "KRW", + "GOLD1.0", "RUBLE", + "RUB1.0", "SILVER", - "USD" + "SILVER1.0", + "USD", + "USD1.0" ], gdexTokens: [ "GDEX.BTC", @@ -186,7 +192,18 @@ export function getMyMarketsQuotes() { "XBTSX.COF", "XBTSX.MDL", "XBTSX.ETH", - "XBTSX.EXR" + "XBTSX.EXR", + "XBTSX.USDT", + "XBTSX.TUSD", + "XBTSX.USDC", + "XBTSX.USDN", + "XBTSX.USD", + "XBTSX.RUB", + "XBTSX.EUR", + "XBTSX.ATRI", + "XBTSX.FIL", + "XBTSX.EOS", + "XBTSX.BAT" ], otherTokens: ["CVCOIN", "HERO", "OCT", "HERTZ", "YOYOW"] }; @@ -281,8 +298,17 @@ export function getFeaturedMarkets(quotes = []) { ["BTS", "RUDEX.WLS"], ["BTS", "RUDEX.SMOKE"], ["BTS", "RUDEX.PZM"], + ["BTS", "XBTSX.BTC"], + ["BTS", "XBTSX.ETH"], + ["BTS", "XBTSX.EUR"], + ["BTS", "XBTSX.RUB"], ["BTS", "XBTSX.STH"], + ["BTS", "XBTSX.TUSD"], ["BTS", "XBTSX.WAVES"], + ["BTS", "XBTSX.USD"], + ["BTS", "XBTSX.USDC"], + ["BTS", "XBTSX.USDN"], + ["BTS", "XBTSX.USDT"], ["BTS", "HERTZ"] ].filter(a => { if (!quotes.length) return true; @@ -324,7 +350,8 @@ export function allowedGateway(gateway) { "GDEX", "XBTSX", "CITADEL", - "BRIDGE" // keep to display the warning icon, permanently disabled in gateways.js + "BRIDGE", // keep to display the warning icon, permanently disabled in gateways.js + "SPARKDEX" // keep to display the warning icon, permanently disabled in gateways.js ]; if (!gateway) { // answers the question: are any allowed? diff --git a/app/components/Account/AccountOrders.jsx b/app/components/Account/AccountOrders.jsx index 0680a32021..4a44a63b48 100644 --- a/app/components/Account/AccountOrders.jsx +++ b/app/components/Account/AccountOrders.jsx @@ -1,7 +1,7 @@ import React from "react"; import counterpart from "counterpart"; import MarketsActions from "actions/MarketsActions"; -import {ChainStore} from "bitsharesjs"; +import {ChainStore, FetchChain} from "bitsharesjs"; import {LimitOrder, SettleOrder, FeedPrice} from "common/MarketClasses"; import {connect} from "alt-react"; import SettingsStore from "stores/SettingsStore"; @@ -643,17 +643,31 @@ class AccountOrders extends React.Component { return tables; } - _cancelLimitOrders(orderId) { - MarketsActions.cancelLimitOrders( - this.props.account.get("id"), - this.state.selectedOrders - ) - .then(() => { - this.resetSelected(); - }) - .catch(err => { - console.log("cancel orders error:", err); - }); + _getSelectedOrders(keys) { + let orders = this.props.account + .get("orders") + .toArray() + .filter(item => keys.indexOf(item) != -1); + return FetchChain("getObject", orders); + } + + _cancelLimitOrders() { + this._getSelectedOrders(this.state.selectedOrders).then(orders => { + let fallbackFeeAssets = orders + .toJS() + .map(item => item.sell_price.base.asset_id); + MarketsActions.cancelLimitOrders( + this.props.account.get("id"), + this.state.selectedOrders, + fallbackFeeAssets + ) + .then(() => { + this.resetSelected(); + }) + .catch(err => { + console.log("cancel orders error:", err); + }); + }); } onFlip(marketId) { diff --git a/app/components/Account/AccountSelector.jsx b/app/components/Account/AccountSelector.jsx index 6b90231650..f7e9247adc 100644 --- a/app/components/Account/AccountSelector.jsx +++ b/app/components/Account/AccountSelector.jsx @@ -52,6 +52,7 @@ class AccountSelector extends React.Component { allowUppercase: PropTypes.bool, // use it if you need to allow uppercase letters typeahead: PropTypes.bool, excludeAccounts: PropTypes.array, // array of accounts to exclude from the typeahead + includeMyActiveAccounts: PropTypes.bool, // whether to include my active accounts in the list focus: PropTypes.bool, disabled: PropTypes.bool, editable: PropTypes.bool, @@ -63,6 +64,7 @@ class AccountSelector extends React.Component { static defaultProps = { autosubscribe: false, excludeAccounts: [], + includeMyActiveAccounts: true, disabled: null, editable: null, locked: false, @@ -86,9 +88,11 @@ class AccountSelector extends React.Component { if (accountName) { this._addThisToIndex(accountName); } - this.props.myActiveAccounts.map(a => { - this._addThisToIndex(a); - }); + if (this.props.includeMyActiveAccounts) { + this.props.myActiveAccounts.map(a => { + this._addThisToIndex(a); + }); + } this.props.contacts.map(a => { this._addThisToIndex(a); }); @@ -182,22 +186,34 @@ class AccountSelector extends React.Component { 3000, {} ).then(accounts => { - accounts.forEach(account => { + for (let i = 0; i < accounts.length; i++) { + let account = accounts[i]; if (account) { let objectIndex = this._getIndex( account.get("name"), accountIndex ); - let result = this._populateAccountIndex(account); if (result) { accountIndex[objectIndex] = result; search_array.splice(account.get("name")); } - } - }); + } else { + let objectIndex = this._getIndex( + search_array[i], + accountIndex + ); + let result = this._populateAccountIndexWithPublicKey( + search_array[i] + ); + if (result) { + accountIndex[objectIndex] = result; + search_array.splice(search_array[i]); + } + } + } search_array.forEach(account_to_find => { let objectIndex = this._getIndex( account_to_find, @@ -223,6 +239,21 @@ class AccountSelector extends React.Component { } } + _populateAccountIndexWithPublicKey(publicKey) { + let accountType = this.getInputType(publicKey); + let rightLabel = "Public Key"; + + return { + name: publicKey, + attempts: 0, + data: { + name: publicKey, + type: accountType, + rightLabel: rightLabel + } + }; + } + _populateAccountIndex(accountResult) { let {myActiveAccounts, contacts} = this.props; @@ -449,7 +480,16 @@ class AccountSelector extends React.Component { ? accountIndex[objectIndex].data : null; } + if (this.props.allowPubKey) { + let objectIndex = accountIndex.findIndex( + a => a.name === accountName + ); + selectedAccount = + accountIndex && accountIndex[objectIndex] + ? accountIndex[objectIndex].data + : null; + } disabledAction = !( account || @@ -458,18 +498,7 @@ class AccountSelector extends React.Component { error || disableActionButton; - if (selectedAccount && selectedAccount.isOwnAccount) { - linked_status = ( - - - - - - ); - } else if (selectedAccount && selectedAccount.isKnownScammer) { + if (selectedAccount && selectedAccount.isKnownScammer) { linked_status = ( ); + } else if (selectedAccount && selectedAccount.isOwnAccount) { + linked_status = ( + + + + + + ); } else if (selectedAccount) { linked_status = ( - {account.data.isOwnAccount ? ( - - ) : null} - {account.data.isContact ? ( - - ) : null} {account.data.isKnownScammer ? ( + ) : account.data.isContact ? ( + + ) : account.data.isOwnAccount ? ( + ) : null}   {account.data.name} @@ -624,7 +663,7 @@ class AccountSelector extends React.Component { let accountImageContainer = this.props .hideImage ? null : selectedAccount && - selectedAccount.accountType === "pubkey" ? ( + selectedAccount.type === "pubkey" ? (
@@ -667,18 +706,17 @@ class AccountSelector extends React.Component { diff --git a/app/components/Account/AccountVoting.jsx b/app/components/Account/AccountVoting.jsx index 407b73e326..d677395253 100644 --- a/app/components/Account/AccountVoting.jsx +++ b/app/components/Account/AccountVoting.jsx @@ -17,7 +17,7 @@ import AccountStore from "stores/AccountStore"; import Witnesses from "./Voting/Witnesses"; import Committee from "./Voting/Committee"; import Workers from "./Voting/Workers"; -import TranslateWithLinks from "../Utility/TranslateWithLinks"; +import CreateLockModal from "../Modal/CreateLockModal"; const WITNESSES_KEY = "witnesses"; const COMMITTEE_KEY = "committee"; @@ -54,6 +54,8 @@ class AccountVoting extends React.Component { all_committee: Immutable.List(), hideLegacyProposals: true, filterSearch: "", + isCreateLockModalVisible: false, + isCreateLockModalVisibleBefore: false, tabs: [ { name: "witnesses", @@ -80,6 +82,9 @@ class AccountVoting extends React.Component { this.onPublish = this.onPublish.bind(this); this.onReset = this.onReset.bind(this); this._getVoteObjects = this._getVoteObjects.bind(this); + + this.showCreateLockModal = this.showCreateLockModal.bind(this); + this.hideCreateLockModal = this.hideCreateLockModal.bind(this); } componentWillMount() { @@ -96,6 +101,8 @@ class AccountVoting extends React.Component { shouldComponentUpdate(np, ns) { return ( + ns.isCreateLockModalVisible != + this.state.isCreateLockModalVisible || np.location.pathname !== this.props.location.pathname || ns.prev_proxy_account_id !== this.state.prev_proxy_account_id || ns.hideLegacyProposals !== this.state.hideLegacyProposals || @@ -510,10 +517,13 @@ class AccountVoting extends React.Component { let [lbo] = res; if (lbo === null) { // The object does not exist, the id was too high - this.setState( - {lastBudgetObject: `2.13.${newIDInt - 1}`}, - this.getBudgetObject - ); + let lastId = `2.13.${newIDInt - 1}`; + if (lastId != lastBudgetObject) { + this.setState( + {lastBudgetObject: `2.13.${newIDInt - 1}`}, + this.getBudgetObject + ); + } } else { SettingsStore.setLastBudgetObject(newID); @@ -611,27 +621,12 @@ class AccountVoting extends React.Component { float: "right" }} > -
); - return (
@@ -718,10 +713,33 @@ class AccountVoting extends React.Component { })}
+ {/* CreateLock Modal */} + {(this.state.isCreateLockModalVisible || + this.state.isCreateLockModalVisibleBefore) && ( + + )}
); } + showCreateLockModal() { + this.setState({ + isCreateLockModalVisible: true, + isCreateLockModalVisibleBefore: true + }); + } + + hideCreateLockModal() { + this.setState({ + isCreateLockModalVisible: false + }); + } + _getBudgets(globalObject) { let budgetObject; if (this.state.lastBudgetObject) { diff --git a/app/components/Dashboard/MarketsTable.jsx b/app/components/Dashboard/MarketsTable.jsx index 8493a4744c..53923c5e20 100644 --- a/app/components/Dashboard/MarketsTable.jsx +++ b/app/components/Dashboard/MarketsTable.jsx @@ -307,7 +307,6 @@ class MarketsTable extends React.Component { _onError(imgName) { if (!this.state.imgError) { - this.refs[imgName.toLowerCase()].src = "asset-symbols/bts.png"; this.setState({ imgError: true }); @@ -340,6 +339,10 @@ class MarketsTable extends React.Component { ? "gold-star" : "grey-star"; + const imageSrc = this.state.imgError + ? `${__BASE_URL__}asset-symbols/${imgName.toLowerCase()}.png` + : `${__BASE_URL__}asset-symbols/bts.png`; + return { key: marketID, star: ( @@ -357,11 +360,10 @@ class MarketsTable extends React.Component { asset: (   diff --git a/app/components/Exchange/Exchange.jsx b/app/components/Exchange/Exchange.jsx index a374f1e83d..9c1c5b8b80 100644 --- a/app/components/Exchange/Exchange.jsx +++ b/app/components/Exchange/Exchange.jsx @@ -349,7 +349,7 @@ class Exchange extends React.Component { chartType: ws.get("chartType", "price_chart"), chartHeight: chart_height, chartZoom: ws.get("chartZoom", true), - chartTools: ws.get("chartTools", true), + chartTools: ws.get("chartTools", false), hideFunctionButtons: ws.get("hideFunctionButtons", true), currentPeriod: ws.get("currentPeriod", 3600 * 24 * 30 * 3), // 3 months showMarketPicker: false, @@ -1047,7 +1047,7 @@ class Exchange extends React.Component { const inverted = this.props.marketDirections.get(marketName); const shouldFlip = (inverted && first.get("id") !== this.props.baseAsset.get("id")) || - (!inverted && first.get("id") !== this.props.baseAsset.get("id")); + (!inverted && first.get("id") === this.props.baseAsset.get("id")); if (shouldFlip) { let setting = {}; setting[marketName] = !inverted; @@ -2754,7 +2754,7 @@ class Exchange extends React.Component { className={"exchange--chart-control"} style={{ height: 33, - right: chartType == "price_chart" ? "5rem" : "15rem", + right: chartType == "price_chart" ? "6rem" : "15rem", top: "1px", position: "absolute", zIndex: 1, diff --git a/app/components/Exchange/MarketRow.jsx b/app/components/Exchange/MarketRow.jsx index 2de6ec1bdf..65672ecb7d 100644 --- a/app/components/Exchange/MarketRow.jsx +++ b/app/components/Exchange/MarketRow.jsx @@ -30,11 +30,18 @@ class MarketRow extends React.Component { componentDidMount() { this.statsChecked = new Date(); - this.statsInterval = MarketsActions.getMarketStatsInterval( - 35 * 1000, - this.props.base, - this.props.quote - ); + if ( + this.props.base.get && + this.props.base.get("id") && + this.props.quote.get && + this.props.quote.get("id") + ) { + this.statsInterval = MarketsActions.getMarketStatsInterval( + 35 * 1000, + this.props.base, + this.props.quote + ); + } } componentWillUnmount() { diff --git a/app/components/Exchange/MyOpenOrders.jsx b/app/components/Exchange/MyOpenOrders.jsx index 75c65c0581..8e1558584a 100644 --- a/app/components/Exchange/MyOpenOrders.jsx +++ b/app/components/Exchange/MyOpenOrders.jsx @@ -6,7 +6,7 @@ import MarketsActions from "actions/MarketsActions"; import Translate from "react-translate-component"; import TransitionWrapper from "../Utility/TransitionWrapper"; import SettingsActions from "actions/SettingsActions"; -import {ChainStore} from "bitsharesjs"; +import {ChainStore, FetchChain} from "bitsharesjs"; import {LimitOrder, CallOrder} from "common/MarketClasses"; import ReactTooltip from "react-tooltip"; import {Button} from "bitshares-ui-style-guide"; @@ -207,17 +207,31 @@ class MarketOrders extends React.Component { } } + _getSelectedOrders(keys) { + let orders = this.props.currentAccount + .get("orders") + .toArray() + .filter(item => keys.indexOf(item) != -1); + return FetchChain("getObject", orders); + } + _cancelLimitOrders() { - MarketsActions.cancelLimitOrders( - this.props.currentAccount.get("id"), - this.state.selectedOrders - ) - .then(() => { - this.resetSelected(); - }) - .catch(err => { - console.log("cancel orders error:", err); - }); + this._getSelectedOrders(this.state.selectedOrders).then(orders => { + let fallbackFeeAssets = orders + .toJS() + .map(item => item.sell_price.base.asset_id); + MarketsActions.cancelLimitOrders( + this.props.currentAccount.get("id"), + this.state.selectedOrders, + fallbackFeeAssets + ) + .then(() => { + this.resetSelected(); + }) + .catch(err => { + console.log("cancel orders error:", err); + }); + }); } _getOrders() { diff --git a/app/components/Exchange/TradingViewPriceChart.jsx b/app/components/Exchange/TradingViewPriceChart.jsx index bd89756176..806c94ea1b 100644 --- a/app/components/Exchange/TradingViewPriceChart.jsx +++ b/app/components/Exchange/TradingViewPriceChart.jsx @@ -1,5 +1,5 @@ import React from "react"; -const TradingView = require("../../../charting_library/charting_library.min.js"); +const TradingView = require("../../../charting_library/charting_library.esm"); import colors from "assets/colors"; import {getResolutionsFromBuckets, getTVTimezone} from "./tradingViewClasses"; import {Modal, Input, Table, Button, Icon} from "bitshares-ui-style-guide"; @@ -54,7 +54,8 @@ class TradingViewPriceChart extends React.Component { "border_around_the_chart", "header_symbol_search", "header_compare", - "header_saveload" + "header_saveload", + "header_settings" ]; let enabled_features = []; @@ -70,6 +71,7 @@ class TradingViewPriceChart extends React.Component { disabled_features.push("chart_events"); disabled_features.push("footer_share_buttons"); disabled_features.push("footer_screenshot"); + disabled_features.push("timeframes_toolbar"); disabled_features.push("footer_publish_idea_button"); disabled_features.push("caption_buttons_text_if_possible"); disabled_features.push("line_tool_templates"); @@ -93,10 +95,24 @@ class TradingViewPriceChart extends React.Component { if (__DEV__) console.log("*** Load Chart ***"); if (__DEV__) console.time("*** Chart load time: "); + // resolution / interval: length of one bar + // frame: total timeframe shown on the chart + // (in below list, text is frame) + const allTimes = props.buckets.map(bucket => { + return { + text: getResolutionsFromBuckets([bucket * 250], true)[0], + resolution: getResolutionsFromBuckets([bucket])[0] + }; + }); this.tvWidget = new TradingView.widget({ fullscreen: false, symbol: props.quoteSymbol + "_" + props.baseSymbol, interval: getResolutionsFromBuckets([props.bucketSize])[0], + timeframe: getResolutionsFromBuckets( + [props.bucketSize * 250], + true + )[0], + time_frames: allTimes, library_path: `${ __ELECTRON__ ? __BASE_URL__ : "" }/charting_library/`, @@ -109,15 +125,23 @@ class TradingViewPriceChart extends React.Component { autosize: true, locale: props.locale, timezone: getTVTimezone(), - toolbar_bg: themeColors.bgColor, + // toolbar_bg: themeColors.bgColor, + // theme: (props.theme == "darkTheme") ? "dark" : "light", overrides: { "paneProperties.background": themeColors.bgColor, "paneProperties.horzGridProperties.color": themeColors.axisLineColor, "paneProperties.vertGridProperties.color": - themeColors.axisLineColor, - "scalesProperties.lineColor": themeColors.axisLineColor, - "scalesProperties.textColor": themeColors.textColor + themeColors.axisLineColor + // "scalesProperties.lineColor": themeColors.axisLineColor, + // "scalesProperties.textColor": themeColors.textColor, + // "scalesProperties.backgroundColor": themeColors.bgColor, + // "mainSeriesProperties.candleStyle.upColor": "#", + // "mainSeriesProperties.candleStyle.downColor": "#", + // "mainSeriesProperties.hollowCandleStyle.upColor": "#", + // "mainSeriesProperties.hollowCandleStyle.downColor": "#", + // "mainSeriesProperties.haStyle.upColor": "#", + // "mainSeriesProperties.haStyle.downColor": "#" }, custom_css_url: props.theme + ".css", enabled_features: enabled_features, @@ -125,41 +149,39 @@ class TradingViewPriceChart extends React.Component { debug: false, preset: this.props.mobile ? "mobile" : "" }); - this.tvWidget.onChartReady(() => { + let widget = this.tvWidget; if (__DEV__) console.log("*** Chart Ready ***"); if (__DEV__) console.timeEnd("*** Chart load time: "); - this.tvWidget - .createButton() - .attr( - "title", - counterpart.translate("exchange.load_custom_charts") - ) - .addClass("apply-common-tooltip") - .on("click", () => { - that.setState({showLoadModal: true}); - }) - .append( - `${counterpart.translate( + if (!this.props.mobile && this.props.chartTools) { + widget.headerReady().then(() => { + if (__DEV__) console.log("*** Header Ready ***"); + const loadButton = this.tvWidget.createButton(); + loadButton.setAttribute( + "title", + counterpart.translate("exchange.load_custom_charts") + ); + loadButton.classList.add("apply-common-tooltip"); + loadButton.addEventListener("click", () => { + that.setState({showLoadModal: true}); + }); + loadButton.innerHTML = `${counterpart.translate( "exchange.chart_load" - )}` - ); - this.tvWidget - .createButton() - .attr( - "title", - counterpart.translate("exchange.save_custom_charts") - ) - .addClass("apply-common-tooltip") - .on("click", () => { - that.setState({showSaveModal: true}); - }) - .append( - `${counterpart.translate( + )}`; + const saveButton = this.tvWidget.createButton(); + saveButton.setAttribute( + "title", + counterpart.translate("exchange.save_custom_charts") + ); + saveButton.classList.add("apply-common-tooltip"); + saveButton.addEventListener("click", () => { + that.setState({showSaveModal: true}); + }); + saveButton.innerHTML = `${counterpart.translate( "exchange.chart_save" - )}` - ); - + )}`; + }); + } dataFeed.update({ onMarketChange: this._setSymbol.bind(this) }); diff --git a/app/components/Exchange/tradingViewClasses.js b/app/components/Exchange/tradingViewClasses.js index d30b697103..eb00bbd3fd 100644 --- a/app/components/Exchange/tradingViewClasses.js +++ b/app/components/Exchange/tradingViewClasses.js @@ -70,36 +70,30 @@ class SymbolInfo { } } -function getResolutionsFromBuckets(buckets) { +function getResolutionsFromBuckets(buckets, convertToFrame = false) { let resolutions = buckets .map(r => { let minute = r / 60; let day = minute / 60 / 24; let week = day / 7; - if (minute < 1) { + if (minute < 1 && !convertToFrame) { // below 1 minute we return Seconds return r + "S"; - } else if (day < 1 && parseInt(minute, 10) === minute) { + } else if ( + day < 1 && + parseInt(minute, 10) === minute && + !convertToFrame + ) { // below 1 day we return Minutes return minute.toString(); - } else if (week < 1) { - // below 1 week we return Days - if (day >= 1) { - if (parseInt(day, 10) === day) { - if (day === 1) return "D"; - return day + "D"; - } - } } else { - // we return weeks - if (week >= 1) { - if (parseInt(week, 10) === week) { - return week + "D"; - } - } + // below 1 week we return Days + day = parseInt(day, 10); + if (day === 1 && !convertToFrame) return "D"; + if (day === 0) return "1D"; + return day + "D"; } - return null; }) .filter(a => !!a); diff --git a/app/components/Gateways/GatewaySelectorModal.jsx b/app/components/Gateways/GatewaySelectorModal.jsx index 089ba0ce0d..c36f6b0997 100644 --- a/app/components/Gateways/GatewaySelectorModal.jsx +++ b/app/components/Gateways/GatewaySelectorModal.jsx @@ -194,8 +194,12 @@ class GatewaySelectorModal extends React.Component { const all = this._getRows(); let onChainConfig = {}; for (let i = 0; i < all.length; i++) { - if (!(await all[i].isEnabled({onlyOnChainConfig: true}))) + if (!(await all[i].isEnabled({onlyOnChainConfig: true}))) { onChainConfig[all[i].key] = await getGatewayConfig(all[i].key); + if (!onChainConfig[all[i].key]) { + onChainConfig[all[i].key] = {enabled: false}; + } + } } this.setState({onChainConfig}); } diff --git a/app/components/Modal/CreateLockModal.jsx b/app/components/Modal/CreateLockModal.jsx new file mode 100644 index 0000000000..52a3c16728 --- /dev/null +++ b/app/components/Modal/CreateLockModal.jsx @@ -0,0 +1,218 @@ +import React from "react"; +import BalanceComponent from "../Utility/BalanceComponent"; +import counterpart from "counterpart"; +import AmountSelector from "../Utility/AmountSelectorStyleGuide"; +import {ChainStore, ChainTypes} from "bitsharesjs"; +import {Asset} from "common/MarketClasses"; +import AssetWrapper from "../Utility/AssetWrapper"; +import { + Modal, + Button, + Form, + Alert, + Tooltip, + Input, + Select +} from "bitshares-ui-style-guide"; +import ApplicationApi from "../../api/ApplicationApi"; + +class CreateLockModal extends React.Component { + constructor(props) { + super(props); + this.state = this.getInitialState(props); + + this.onSubmit = this.onSubmit.bind(this); + } + + componentWillReceiveProps(np) { + if ( + np.asset && + this.props.asset && + np.asset.get("id") !== this.props.asset.get("id") + ) { + this.setState(this.getInitialState(np)); + } + } + + getInitialState(props) { + return { + targetType: null, + amount: 0, + amountAsset: new Asset({ + amount: 0, + asset_id: props.asset.get("id"), + precision: props.asset.get("precision") + }) + }; + } + + onAmountChanged({amount, asset}) { + this.state.amountAsset.setAmount({real: amount}); + this.setState({amount, asset}); + } + + onTargetTypeChanged(e) { + this.setState({targetType: e}); + } + + canSubmit() { + return this.state.targetType && this.state.amountAsset.hasAmount(); + } + + onSubmit() { + ApplicationApi.createTicket( + this.props.account, + this.state.amountAsset.asset_id, + this.state.amountAsset.getAmount(), + this.state.targetType + ).then(() => { + this.state.amountAsset.setAmount({sats: 0}); + this.setState({ + amount: 0, + numberOfPeriods: 1 + }); + }); + this.props.hideModal(); + } + + _getUnlockPeriod() { + if (!this.state.targetType) return 0; + const unlockPeriods = { + 0: 0, + 1: 180, + 2: 360, + 3: 720, + 4: Infinity + }; + return unlockPeriods[this.state.targetType]; + } + + render() { + let assetId = this.props.asset.get("id"); + + let currentBalance = + this.props.account && + this.props.account.get("balances", []).size && + !!this.props.account.getIn(["balances", assetId]) + ? ChainStore.getObject( + this.props.account.getIn(["balances", assetId]) + ) + : null; + if (!currentBalance) { + currentBalance = 0; + } else { + currentBalance = currentBalance.get("balance"); + } + + return ( + + {counterpart.translate("modal.create_lock.submit")} + , + + ]} + > + +
+ { + this.state.amountAsset.setAmount({ + sats: currentBalance + }); + this.setState({ + amount: this.state.amountAsset.getAmount( + {real: true} + ) + }); + }} + > + + + } + tabIndex={1} + /> + + + + + + +
+ ); + } +} + +CreateLockModal = AssetWrapper(CreateLockModal, { + propNames: ["asset"] +}); + +export default CreateLockModal; diff --git a/app/components/Modal/ReportModal.jsx b/app/components/Modal/ReportModal.jsx index 9e7f4a53c7..6d59ae0164 100644 --- a/app/components/Modal/ReportModal.jsx +++ b/app/components/Modal/ReportModal.jsx @@ -115,17 +115,6 @@ class ReportModal extends React.Component {

-
-    - - https://hackthedex.io -

); } diff --git a/app/components/Modal/SendModal.jsx b/app/components/Modal/SendModal.jsx index 2e9a3f1d42..fa9d332f36 100644 --- a/app/components/Modal/SendModal.jsx +++ b/app/components/Modal/SendModal.jsx @@ -616,6 +616,7 @@ class SendModal extends React.Component { this )} typeahead={true} + includeMyActiveAccounts={false} tabIndex={tabIndex++} /> diff --git a/app/help/en/index.md b/app/help/en/index.md index 3676ecf429..fe9cd80fa2 100644 --- a/app/help/en/index.md +++ b/app/help/en/index.md @@ -34,7 +34,6 @@ of this application. ## Development * [Bitshares UI Github](https://github.com/bitshares/bitshares-ui) - * [HackTheDEX](introduction/hackthedex.md) ---------- [Glossary](glossary.md) diff --git a/app/help/en/introduction/bitshares.md b/app/help/en/introduction/bitshares.md index 1ab32c3cdd..420e6d407a 100644 --- a/app/help/en/introduction/bitshares.md +++ b/app/help/en/introduction/bitshares.md @@ -7,7 +7,7 @@ ### Bitshares Chat You can chat with other member of the Bitshares community in real time at: -- [Telegram](https://t.me/BitSharesDEX) +- [Telegram](https://t.me/BitSharesDAC) - [Discord](https://discord.gg/GsjQfAJ) ### Developers diff --git a/app/help/en/introduction/hackthedex.md b/app/help/en/introduction/hackthedex.md deleted file mode 100644 index 80a578db80..0000000000 --- a/app/help/en/introduction/hackthedex.md +++ /dev/null @@ -1,23 +0,0 @@ -# Hack the DEX - -## How It Works -If someone discovers a critical bug in the DEX, they might be tempted to exploit the bug, in an attempt to steal funds from unsuspecting users. Without a public bug bounty system, hackers do not have an obvious path of disclosure for reporting their findings. They also do not have any incentive to share their exploits and techniques, rather than using them for personal gain. - -With this worker proposal, we've started a BitShares bug bounty program for security researchers and penetration testers (...aka hackers!) to disclose important security vulnerabilities they find within the BitShares core protocol, reference wallet, and related code repositories. - -The proposal will use funds from the reserve pool to reward those that step forward with exploits, relative to the overall risk assessment of the exploit. The higher the payout for critical bugs, the more incentive there will be to attract higher quality researchers, and ultimately providing better security coverage for the DEX. - -Worker proposal funds will be held in an escrow account by the BitShares Blockchain Foundation and unused funds will be refunded back to the network at the end of the proposal period. - -## General Rules -* Public disclosure of a vulnerability makes it ineligible for a bounty -* Your testing must not violate any law or compromise any data that is not yours -* Issues that have already been submitted by another user or are already known to repository maintainers are not eligible for bounty rewards -* Bounties will only be awarded for code repositories that are in scope -* BitShares marketing websites and 3rd party websites/gateways are not eligible for bounties -* Anyone involved in an audit panel or in the bug bounty program are not eligible to win bounty rewards -* A number of variables contribute to determining if a disclosed vulnerability is eligible for a reward. How the vulnerability is scored, and the methods used to determine the score, are at the sole discretion of the panel chosen to audit the report -* You should expect to provide your full name to claim bounty rewards -* Once the bounty is awarded, feel free to share/blog/tweet/tell your mom about the exploit - -Learn more on [hackthedex.io](https://hackthedex.io) or submit a report directly to submit@hackthedex.io \ No newline at end of file diff --git a/app/lib/common/gateways.js b/app/lib/common/gateways.js index effbe4c6a8..d361e6d4d4 100644 --- a/app/lib/common/gateways.js +++ b/app/lib/common/gateways.js @@ -125,14 +125,14 @@ export const availableGateways = { id: "SPARKDEX", name: "BitSpark", baseAPI: bitsparkAPIs, - isEnabled: _isEnabled("SPARKDEX"), + isEnabled: () => false, selected: false, options: { enabled: false, selected: false }, - landing: "https://www.bitspark.io/for-traders", - wallet: "https://dex.bitspark.io/" + landing: "https://www.bitspark.io/", + wallet: "Shutdown" }, BRIDGE: { id: "BRIDGE", @@ -181,7 +181,7 @@ export const availableGateways = { id: "CITADEL", name: "Citadel", baseAPI: citadelAPIs, - isEnabled: _isEnabled("CITADEL"), + isEnabled: () => false, selected: false, assetWithdrawlAlias: {monero: "xmr"}, // if asset name doesn't equal to memo options: { @@ -189,7 +189,7 @@ export const availableGateways = { selected: false }, landing: "https://citadel.li/", - wallet: "https://citadel.li/wallet/" + wallet: "Disabled" } }; diff --git a/app/lib/common/scamAccounts.js b/app/lib/common/scamAccounts.js index c81b363946..6b8918df8b 100644 --- a/app/lib/common/scamAccounts.js +++ b/app/lib/common/scamAccounts.js @@ -20,7 +20,9 @@ export const scamAccountsPolo = [ "poloniex", "1.2.2340", "poloneix", - "1.2.24900" + "1.2.24900", + "poloniexeos1", + "1.2.1049362" ]; export const scamAccountsBittrex = [ @@ -35,7 +37,9 @@ export const scamAccountsBittrex = [ "bittrex", "1.2.2343", "bittrex-deposits", - "1.2.161093" + "1.2.161093", + "bittrexacct1", + "1.2.1649570" ]; export const scamAccountsOther = [ @@ -51,6 +55,8 @@ export const scamAccountsOther = [ "1.2.878058", "aex-bitcny-deposit", "1.2.455052", + "aex-bitcny-dopesit-wallet", + "1.2.1795613", "aex-bts-deposit-walle", "1.2.454205", "aex-cnc-cza", @@ -135,6 +141,8 @@ export const scamAccountsOther = [ "1.2.467526", "binancecleos", "1.2.1017616", + "binance-nbs-02", + "1.2.1792577", "bishengtopex", "1.2.1029188", "bisq", @@ -1234,5 +1242,892 @@ export const scamAccountsOther = [ "committee-delegate", "1.2.1621188", "binance-witness", - "1.2.1700190" + "1.2.1700190", + "binanace-bts-1", + "1.2.1593437", + "zbbs001", + "1.2.886790", + "zbbt001", + "1.2.886122", + "huibi-pro", + "1.2.852941", + "hubi-pro", + "1.2.852641", + "bts-binance-1", + "1.2.1037039", + "binance-bts1", + "1.2.467722", + "collateral-update", + "1.2.1623407", + "bue", + "1.2.18513", + "openledger-safety", + "1.2.1682058", + "gdex-wallet-security", + "1.2.1691946", + "bridge-security", + "1.2.1691907", + "criptobridge-security", + "1.2.1691905", + "rudex-upgrade", + "1.2.1682487", + "openledger-guarantee", + "1.2.1602048", + "bitshares-guarantee", + "1.2.1655608", + "huilao000", + "1.2.1640223", + "china-cash", + "1.2.673914", + "cryptobridge-security", + "1.2.1574325", + "nextt0", + "1.2.1588395", + "putler666", + "1.2.1589085", + "bankofamerica1488", + "1.2.649072", + "ooops0", + "1.2.1602141", + "ikarus2", + "1.2.671426", + "toolate6238", + "1.2.486167", + "huibao000", + "1.2.1615149", + "tkyjpn0109", + "1.2.1606009", + "rz120", + "1.2.1045915", + "demon2443", + "1.2.1653463", + "bit-token", + "1.2.777552", + "jk700", + "1.2.284217", + "mnstr", + "1.2.875801", + "hltbb", + "1.2.867020", + "mitu-kine", + "1.2.622294", + "tanhayir666", + "1.2.1588321", + "porro777", + "1.2.1601740", + "poroh777", + "1.2.1597967", + "clgc1972", + "1.2.897040", + "memet92", + "1.2.732890", + "rich4231", + "1.2.1574048", + "kbak19", + "1.2.183440", + "prvtrl", + "1.2.1059156", + "cement-wallet", + "1.2.739132", + "hui-lusha", + "1.2.690318", + "bot-ho-bot", + "1.2.809180", + "drugtvoejmami888", + "1.2.661618", + "china-na", + "1.2.641953", + "update-wallet", + "1.2.1621516", + "acrll-confirm", + "1.2.1677131", + "postup5", + "1.2.567061", + "wallet-upgrade", + "1.2.1638214", + "bit-daozhi", + "1.2.1605117", + "openledger-dex.com", + "1.2.1670833", + "openledger-secure", + "1.2.1640825", + "chen-woo", + "1.2.1641140", + "cryptobridge-confirm", + "1.2.1634946", + "get-free-btc", + "1.2.1593095", + "chey-woochey", + "1.2.1638351", + "p0202p", + "1.2.1638431", + "jd84053589", + "1.2.432753", + "yanlee-che", + "1.2.1593044", + "tele-gram", + "1.2.659614", + "cryptobridge-withdraw", + "1.2.1571944", + "khalil84", + "1.2.1080837", + "n8wmajor", + "1.2.1081311", + "aj357911", + "1.2.788421", + "supercoiner-666", + "1.2.1298993", + "stepcoin-wallet", + "1.2.688768", + "cryptobridge-update", + "1.2.1589426", + "china-capuchina", + "1.2.630495", + "zbbttss001", + "1.2.1588916", + "security-upgrade", + "1.2.1640943", + "mind-alkemist", + "1.2.381456", + "norbitz1510", + "1.2.104355", + "mrk86", + "1.2.1211789", + "hbscc", + "1.2.270441", + "pnc1", + "1.2.93052", + "arnaud2", + "1.2.529684", + "hack-tiras", + "1.2.985746", + "derek-molden", + "1.2.983604", + "alvinauh86", + "1.2.635321", + "argo9north9", + "1.2.706723", + "gjf-1", + "1.2.857833", + "ydnah2", + "1.2.1096704", + "driss19999", // recoverable + "1.2.913826", + "oyxm", + "1.2.20177", + "thunder-thor", + "1.2.1575892", + "btc-profit", + "1.2.962295", + "neffos14", + "1.2.1602008", + "neffos1488", + "1.2.1601731", + "ardis-29", + "1.2.1591593", + "tigriri909", + "1.2.96396", + "eror404", + "1.2.155124", + "toolate111", + "1.2.977735", + "mcavoy5", + "1.2.452330", + "laniakea-corp", + "1.2.491952", + "openledger.com-wallet", + "1.2.1680581", + "clockwork-delegate", + "1.2.1653886", + "gdex-delegate", + "1.2.1697884", + "cni-hotwallet.update", + "1.2.1674304", + "abit.committee-delegate", + "1.2.1676892", + "p3732551", + "1.2.397891", + "witness-blockchain", + "1.2.1702664", + "esrcow-67zgh", + "1.2.1795658", + "esrcow-panff", + "1.2.1795683", + "escrow-fgj7a", + "1.2.1795566", + "yykuxxu830905", + "1.2.1797839", + "aex-bts-depocit-wallet", + "1.2.1799880", + "aex-bts-deposit-wellat", + "1.2.1799240", + "aex-bts-deposite-walet", + "1.2.1795541", + "aex-bts-depositt-wallet", + "1.2.1801028", + "aex-bts-dopesit-wallet", + "1.2.1795663", + "bianance-bts-1", + "1.2.1801625", + "bihance-bts-1", + "1.2.1800807", + "binanece-bts-1", + "1.2.1795443", + "binaence-bts-1", + "1.2.1795582", + "binanae-bts-1", + "1.2.1800913", + "binansce-bts-1", + "1.2.1801322", + "bineance-bts-1", + "1.2.1799262", + "binaince-bts-1", + "1.2.1798345", + "bionance-bts-1", + "1.2.1800421", + "bivance-bts-1", + "1.2.1800210", + "gate-bts-io66", + "1.2.1798716", + "gdex-wallat", + "1.2.1800134", + "haobi-pro", + "1.2.1800626", + "hobui-pro", + "1.2.1795665", + "houbui-pro", + "1.2.1795489", + "houdi-pro", + "1.2.1795562", + "huoabi-pro", + "1.2.1800962", + "huobui-pro", + "1.2.1795490", + "huobi-prc", + "1.2.1800589", + "huobio-pro", + "1.2.1801492", + "huobai-pro", + "1.2.1799738", + "huobi-qro", + "1.2.1799636", + "huoboi-pro", + "1.2.1799492", + "zbbst00l", + "1.2.1800460", + "zbbtst001", + "1.2.1801124", + "zbbbts-001", + "1.2.1800863", + "zbbts-001", + "1.2.826268", + "zbbit001", + "1.2.1795542", + "zbbls001", + "1.2.1795565", + "zblbts001", + "1.2.1799353", + "juhiy011-01", + "1.2.1798466", + "sarkie1337", + "1.2.1799478", + "niegoe9ia", + "1.2.1799397", + "botgate11", + "1.2.1799462", + "hujoyy-131hk", + "1.2.1799561", + "hitxxxrav25", + "1.2.1799380", + "subzyng11", + "1.2.1799563", + "aex-bts-withdrawal-wallet-security", + "1.2.1694852", + "citadel-one", + "1.2.1701664", + "account-free", + "1.2.1700256", + "huobi-pro-security", + "1.2.1685151", + "huobi-bts-withdrawal-security", + "1.2.1694660", + "binance-bts-security", + "1.2.1695170", + "bitshares-dex.com", + "1.2.1784547", + "bitsharesdex.com-update1904454", + "1.2.1702044", + "bitsharesdex.com-security", + "1.2.1654426", + "bitshares-blockchain", + "1.2.1704232", + "bitshares-committee", + "1.2.1617075", + "bridge-assets", + "1.2.1680505", + "bridge-delegate", + "1.2.1699981", + "attention.hacker-attac.update-account", + "1.2.1679799", + "cn-vote.update", + "1.2.1791755", + "account-whitelist", + "1.2.1703478", + "committee-members", + "1.2.1672586", + "committee-capital", + "1.2.1672714", + "committee-member", + "1.2.1779077", + "committee-accaunt", + "1.2.1668194", + "committee-cryptobridge", + "1.2.1613328", + "committee-proposals-cryptobridge", + "1.2.1616990", + "committee-update.wallet", + "1.2.1680811", + "coommittee-proposals", + "1.2.1569126", + "committee-beos-update", + "1.2.1612406", + "committee-operator", + "1.2.1668188", + "committee-cnyoperator", + "1.2.1668177", + "committee-safe", + "1.2.1652200", + "committee-account.wallet", + "1.2.1680392", + "committee.data-lock", + "1.2.1672227", + "committee-manager", + "1.2.1799556", + "security-update", + "1.2.1621255", + "assets.committee-account", + "1.2.1680394", + "jademont-committee", + "1.2.1653895", + "cryptobridge-assist", + "1.2.1700317", + "cryptobridge-notification", + "1.2.1686969", + "cryptobridge.wallet-security", + "1.2.1662834", + "bitcrab-committee", + "1.2.1661890", + "bitcrab-security", + "1.2.1669292", + "bitcrab-delegate", + "1.2.1653889", + "dexbot-cryptobridge", + "1.2.1679899", + "deex-security", + "1.2.1697838", + "deliondex-witness", + "1.2.1701987", + "delegate-security", + "1.2.1649328", + "evraz-team", + "1.2.1701498", + "evraz-delegate", + "1.2.1703881", + "gdex-gateway", + "1.2.1783425", + "gdex-account", + "1.2.1700585", + "gdex-maintenance", + "1.2.1742757", + "gdex-proposals", + "1.2.1669295", + "gdex-update", + "1.2.1636052", + "gdex-whitelist", + "1.2.1761562", + "gdex-wallet-proposes", + "1.2.1669298", + "gdex.usdt-witness", + "1.2.1698882", + "obits-team", + "1.2.1701497", + "openledger.com-account", + "1.2.1653960", + "openledger-dc.witness", + "1.2.1678121", + "openledger-delegate", + "1.2.1623104", + "openledger-wallet.last-update", + "1.2.1702509", + "openledger-asset", + "1.2.1680387", + "openledger-team", + "1.2.1652169", + "openledger-news", + "1.2.1634974", + "openledger-notification", + "1.2.1686966", + "openledger-operator", + "1.2.1668859", + "openledger-proposal", + "1.2.1685599", + "openledger-wallet-security", + "1.2.1657279", + "openledger-dex.wallet", + "1.2.1680259", + "openledger-dex.account", + "1.2.1671740", + "openledgerdex-security", + "1.2.1656375", + "openledger-update-security", + "1.2.1621760", + "openledger-update.wallet", + "1.2.1684393", + "openledger-witness", + "1.2.1672208", + "openledger.bts-witness", + "1.2.1757518", + "openlegder-wallet", + "1.2.1574699", + "openledger-settings", + "1.2.1640823", + "openledger.io-update", + "1.2.1659323", + "openledger-new-option", + "1.2.1640335", + "openledgerdex-account", + "1.2.1668861", + "openledger-dex-wallet", + "1.2.1658954", + "openledger-deposition", + "1.2.1617054", + "openledgerdex-wallet", + "1.2.1657273", + "openservice1000", + "1.2.1640832", + "open-explorer.com", + "1.2.1672571", + "wallet-openledger", + "1.2.1680271", + "beos.gateway-wallet", + "1.2.1654890", + "beos-update", + "1.2.1613314", + "beos-market", + "1.2.1674026", + "beos-account", + "1.2.1665247", + "delegate-witness", + "1.2.1703158", + "transactions-blocked.recommendation-update", + "1.2.1679759", + "compumatrix-assets", + "1.2.1680396", + "compumatrix-witness", + "1.2.1698652", + "compumatrix-security", + "1.2.1675939", + "compumatrix-1", + "1.2.1678154", + "compamatrix1", + "1.2.1680878", + "bittrex-security-update", + "1.2.1695149", + "rudex-account", + "1.2.1700275", + "rudex-delegate", + "1.2.1699874", + "rudex-update", + "1.2.1612897", + "rudex-witness", + "1.2.1699897", + "rudex-farme", + "1.2.1664661", + "rudex-karma.contract", + "1.2.1699055", + "security-suport", + "1.2.1641465", + "sparkdex-wallet", + "1.2.1703512", + "wallet.bitshares.org-update", + "1.2.1782212", + "wallet.bitshares.org-security", + "1.2.1677407", + "wallet.bitshares.org-compumatrix", + "1.2.1675264", + "wallet-update", + "1.2.1684797", + "wallet-security", + "1.2.1656385", + "wallet.maintenance-security", + "1.2.1655293", + "libra-proposals", + "1.2.1663826", + "update-security", + "1.2.1621419", + "bitshares.org-wallet", + "1.2.1671745", + "bitshares.org-update", + "1.2.1653973", + "magicwallet-witness", + "1.2.1668200", + "delegate.freedom-witness", + "1.2.1666141", + "account-wallet", + "1.2.1685496", + "security-delegate", + "1.2.1669437", + "support-update", + "1.2.1652121", + "bitspark-committee", + "1.2.1653944", + "xbtsx-account", + "1.2.1700443", + "blockchain.com-wallet", + "1.2.1677087", + "sparkdex-delegate", + "1.2.1697883", + "account-update", + "1.2.1685113", + "witness-update", + "1.2.1785414", + "proposals-update", + "1.2.1620632", + "update-account", + "1.2.1679807", + "bitcoin.com-work", + "1.2.1682875", + "condor1", + "1.2.1692389", + "condor2", + "1.2.1692603", + "ugv-1", + "1.2.1672113", + "selo-67", + "1.2.1617731", + "kg-033", + "1.2.1601638", + "u-67", + "1.2.1785627", + "dusja-1", + "1.2.1791654", + "galogenco2", + "1.2.1702987", + "dizel1", + "1.2.1701576", + "lusi1", + "1.2.1684459", + "lusi51", + "1.2.1684396", + "bts552", + "1.2.1683740", + "ag475", + "1.2.1679233", + "game-ss", + "1.2.1702766", + "bitforint-market", + "1.2.1689684", + "tank-34", + "1.2.1601663", + "dubl-1", + "1.2.1640338", + "dubl-2", + "1.2.1641069", + "dubl-3", + "1.2.1641083", + "cuda-1", + "1.2.1651011", + "gru1", + "1.2.1689985", + "f0123f", + "1.2.1640161", + "shaie-uh", + "1.2.1649099", + "nu35ko", + "1.2.1658517", + "loijuufao3", + "1.2.1668748", + "sfbf1uhf1i381191kal", + "1.2.1653720", + "fsjkfu1hf818181", + "1.2.1673663", + "gliofdr229", + "1.2.1671362", + "alfa-a", + "1.2.1786096", + "saks25", + "1.2.1799731", + "pocits-team", + "1.2.1702279", + "committee.blacklist-manager", + "1.2.1799121", + "bitcoin-wizards", + "1.2.457302", + "leon38marokko", + "1.2.1782246", + "orthodox-friar", + "1.2.645010", + "galvanzio845", + "1.2.880009", + "lus", // likely false positive + "1.2.142945", + "wit", // likely false positive + "1.2.5509", + "duolba26", + "1.2.446891", + "mstrader77", + "1.2.645984", + "dylan-1978", + "1.2.1600004", + "st4585k", + "1.2.780140", + "ippua1", + "1.2.392599", + "nicaracuaga-1", + "1.2.1653236", + "e-lena", + "1.2.1063803", + "dujuan0204", + "1.2.408553", + "liaofuxing-liaowenxin", + "1.2.1146367", + "blacknightdream410", + "1.2.1589532", + "pavelzcz-1", + "1.2.792058", + "grand-cryptos", // temporarily recoverable + "1.2.787832", + "vve732", + "1.2.803373", + "loto1", + "1.2.480686", + "phienho226loj", + "1.2.1088744", + "mrbrown1", + "1.2.109836", + "doyle", + "1.2.20952", + "ifeomadee1", + "1.2.1654233", + "barmaley6", + "1.2.1639497", + "danfreeus-702", + "1.2.494368", + "inlusoble88", + "1.2.1582517", + "tne6mujflmcoc", + "1.2.811935", + "mister-hankeh", + "1.2.593183", + "ed-tred", + "1.2.36103", + "citizen1983", + "1.2.1096445", + "ghost-llk", + "1.2.1597865", + "vezunchik-account", + "1.2.462216", + "razdacha-bts", + "1.2.1646336", + // EOS + "coinbasebase", + "1.2.1603952", + "accountcreat", + "1.2.1799179", + "atomintlexch", + "1.2.1799180", + "bcgame222333", + "1.2.1799181", + "bcgameeoswin", + "1.2.1799182", + "beexpayioeos", + "1.2.1799183", + "bikicoineos5", + "1.2.1593635", + "bilaxyeos111", + "1.2.1799184", + "bitforexcoin", + "1.2.1596635", + "bithumbeos15", + "1.2.1677135", + "bithumbrecv1", + "1.2.1635360", + "bitmaxaddrz1", + "1.2.1109244", + "bitoctoeosio", + "1.2.1799185", + "bitruebitrue", + "1.2.1799186", + "bitvavodepos", + "1.2.1799187", + "bkexeosusers", + "1.2.1234827", + "btcturkeosio", + "1.2.1761232", + "btflwnetex24", + "1.2.1799188", + "bweosdeposit", + "1.2.1282180", + "bybitdeposit", + "1.2.1761243", + "catexioeosio", + "1.2.1799189", + "changenoweos", + "1.2.1799119", + "coinboxstore", + "1.2.1799190", + "coincolasave", + "1.2.1653599", + "coinealeoswa", + "1.2.1799191", + "coinexviabtc", + "1.2.1087752", + "coinonekorea", + "1.2.1150124", + "coinspoteos1", + "1.2.1603157", + "crexpayments", + "1.2.1799192", + "cryptocomeos", + "1.2.1761230", + "cryptomkteos", + "1.2.1799193", + "ctforeos2222", + "1.2.1147939", + "dcoindeposit", + "1.2.1212186", + "dfttothemoon", + "1.2.1158646", + "e1k2m1ynpoof", + "1.2.1703024", + "eoshoowallet", + "1.2.1080697", + "eosprimedice", + "1.2.1799194", + "eosupbitsusr", + "1.2.1703357", + "eoswithmixin", + "1.2.1212806", + "exmodeposits", + "1.2.1799195", + "exodussignup", + "1.2.1689962", + "freewalletin", + "1.2.1797385", + "gopaxdeposit", + "1.2.1150123", + "gxgxcomtotal", + "1.2.1799196", + "gyztsojzgage", + "1.2.1799197", + "hitbtcpayins", + "1.2.1080701", + "hotbitioeoss", + "1.2.1606463", + "hotbitkorean", + "1.2.1799198", + "ilovebityard", + "1.2.1799199", + "indodaxaccnt", + "1.2.1594372", + "koineksadres", + "1.2.1594877", + "korbiteosdep", + "1.2.1797390", + "kunaexchange", + "1.2.1211841", + "latokeneos11", + "1.2.1799200", + "lbkexdeposit", + "1.2.1637485", + "luckyfish321", + "1.2.1799201", + "makeaccounts", + "1.2.1799202", + "mathmathmath", + "1.2.1794559", + "mercatoxeos1", + "1.2.1604773", + "metalcccceos", + "1.2.1799203", + "mxcexdeposit", + "1.2.1261064", + "myeostokenin", + "1.2.1799204", + "nobitexeosw1", + "1.2.1799205", + "okcoincomeos", + "1.2.1761246", + "orinocotrade", + "1.2.1799206", + "paribuwallet", + "1.2.1273867", + "probitwallet", + "1.2.1799207", + "radardeposit", + "1.2.1653604", + "stakecasino1", + "1.2.1799208", + "th3f4tw4113t", + "1.2.1681437", + "tokenbankpro", + "1.2.1211831", + "trustbitopro", + "1.2.1799209", + "unocoinindia", + "1.2.1799210", + "useosbinance", + "1.2.1761231", + "utexiopayin1", + "1.2.1799211", + "uytt1epvvwtn", + "1.2.1799212", + "wablockchain", + "1.2.1799213", + "walleteos125", + "1.2.1700871", + "whaleextrust", + "1.2.1147873", + "x1bitpaygate", + "1.2.1799214", + "xq3bcloi5tox", + "1.2.1799215", + "youhodlereos", + "1.2.1799216", + "yuo4dirjxmz4", + "1.2.1799217", + "z1wdmuuosmes", + "1.2.1770761", + "zebpaypayins", + "1.2.1799218", + // STEEM + "bitsonicpro", + "1.2.1799436", + "bitvavo", + "1.2.1785173", + "deepcrypto8", + "1.2.1211130", + "deposit-kr", + "1.2.1787961", + "gateiodeposit", + "1.2.1783716", + "ionomy", + "1.2.1799435", + "mxcsteem", + "1.2.1785904", + "orinoco", + "1.2.1794558", + "probitsteem", + "1.2.1791239", + "receiver-kr", + "1.2.1787962", + "receiver-pro", + "1.2.1787963", + "user.dunamu", + "1.2.1761235", + // BNB + "bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23", + "1.2.1607940", + "bnb1jdy9svxl8jk3s9grsvencvrhx7pt3nvel68uk5", + "1.2.1798126" ]; diff --git a/app/stores/MarketsStore.js b/app/stores/MarketsStore.js index 9d187c3413..b908a51562 100644 --- a/app/stores/MarketsStore.js +++ b/app/stores/MarketsStore.js @@ -170,7 +170,7 @@ class MarketsStore { } _getBucketSize() { - return parseInt(marketStorage.get("bucketSize", 4 * 3600)); + return parseInt(marketStorage.get("bucketSize", 3600)); } _setBucketSize(size) { diff --git a/charting_library/charting_library.17.025.02b61a1c.zip.md5 b/charting_library/charting_library.17.025.02b61a1c.zip.md5 new file mode 100644 index 0000000000..ad7955d2a4 --- /dev/null +++ b/charting_library/charting_library.17.025.02b61a1c.zip.md5 @@ -0,0 +1 @@ +7C1A43A054922FBAFBB49B40CC115B25 diff --git a/charting_library/charting_library.zip.md5 b/charting_library/charting_library.zip.md5 deleted file mode 100644 index 78577c8f2b..0000000000 --- a/charting_library/charting_library.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -0F4B4F04A2BD6511722F666CA89248D1 \ No newline at end of file diff --git a/charting_library/install-charting-library.js b/charting_library/install-charting-library.js index 91d46732a7..e0336270df 100644 --- a/charting_library/install-charting-library.js +++ b/charting_library/install-charting-library.js @@ -9,19 +9,21 @@ function getMD5Digest(file) { return hash.toUpperCase(); } -var outputFilePath = path.join(__dirname, "charting_library.zip"); +var outputFileName = "charting_library.17.025.02b61a1c.zip"; +var outputFilePath = path.join(__dirname, outputFileName); const outputFile = fs.createWriteStream(outputFilePath); -http.get("https://bitshares.org/assets/charting_library.zip", (response) => { - response.pipe(outputFile); +http.get("https://bitshares.org/assets/" + outputFileName, (response) => { + response.pipe(outputFile); }).on("error", (err) => { console.error("Failed to download charting_library archive"); console.error(err); + throw (err); }); outputFile.on("finish", () => { const actualDigest = getMD5Digest(outputFilePath); - const expectedDigest = fs.readFileSync(outputFilePath + ".md5").toString(); + const expectedDigest = fs.readFileSync(outputFilePath + ".md5").toString().trim(); if (actualDigest !== expectedDigest) { fs.unlinkSync(outputFilePath); throw new Error("MD5 of downloaded file (" + actualDigest + ") not matches expected (" + expectedDigest + ")"); diff --git a/charting_library/package-charting-library.js b/charting_library/package-charting-library.js index afdefdddd2..b2c5c0ce86 100644 --- a/charting_library/package-charting-library.js +++ b/charting_library/package-charting-library.js @@ -4,9 +4,9 @@ var archiver = require("archiver"); const md5File = require("md5-file"); -var outputFile = path.join(__dirname, "charting_library.zip"); +var outputFile = path.join(__dirname, "charting_library.17.025.02b61a1c.zip"); const outFilename = path.basename(outputFile); -var ignoreFiles = [path.basename(__filename), outFilename, outFilename + ".md5", "install-charting-library.js"]; +var ignoreFiles = [path.basename(__filename), outFilename, outFilename + ".md5", "install-charting-library.js", "scss", "scss/**", "base.css", "darkTheme.css", "midnightTheme.css", "lightTheme.css"]; /** * @param {String} source diff --git a/charting_library/scss/base.scss b/charting_library/scss/base.scss new file mode 100644 index 0000000000..eb967d591f --- /dev/null +++ b/charting_library/scss/base.scss @@ -0,0 +1,674 @@ +// main colors + +$primary-background: #383838 !default; +$primary-border-color: #535353 !default; +$primary-background-active: $primary-border-color !default; + +$primary-text-color: #bababa !default; +$primary-text-color-active: #059cce !default; + +$layout-top-button-border-color: $primary-border-color !default; + +$button-success-color: #fff !default; +$button-success-border: $primary-text-color-active !default; +$button-success-background: $primary-text-color-active !default; + +$button-default-color: $primary-text-color !default; +$button-default-border: $primary-background-active !default; +$button-default-background: $primary-background-active !default; + +$button-cancel-color: $primary-text-color !default; +$button-cancel-border: $primary-background-active !default; +$button-cancel-background: $primary-background-active !default; + +$primary-btn-color: $primary-text-color !default; +$primary-btn-background: #262626 !default; +$primary-btn-background-active: #2d2d2d !default; +$primary-btn-border-active: $primary-background-active !default; + +$icon-light-color: $primary-text-color !default; +$icon-light-color-active: $primary-text-color-active !default; + +.chart-page { + --tv-color-platform-background: #{$primary-background}; + --tv-color-pane-background: #{$primary-background}; + --tv-color-pane-background-secondary: #{$primary-background-active}; + --tv-color-toolbar-button-background-hover: #{$primary-btn-background-active}; + --tv-color-toolbar-button-background-secondary-hover: #{$primary-btn-background-active}; + --tv-color-toolbar-button-background-expanded: #{$primary-background}; + --tv-color-toolbar-button-text: #{$primary-btn-color}; + --tv-color-toolbar-button-text-hover: #{$primary-btn-color}; + --tv-color-toolbar-button-text-active: #{$primary-btn-color}; + --tv-color-toolbar-button-text-active-hover: #{$primary-btn-color}; + --tv-color-item-active-text: #{$primary-btn-color}; + --tv-color-toolbar-toggle-button-background-active: #{$primary-background}; + --tv-color-toolbar-toggle-button-background-active-hover: #{$primary-background-active}; +} + +.layout__area--top { + // header buttons + .apply-common-tooltip { + cursor: pointer; + + background-color: $primary-background; + color: $primary-btn-color !important; + + &:hover { + background-color: $primary-btn-background-active; + } + } +} + +// +//body.chart-page, .loading-indicator { +// --background: $primary-background; +//} +// +//.chart-page .chart-container { +// border: none; +// background: $primary-background; +//} +// +//.header-chart-panel .group { +// margin: 1px 0; +//} +// +///*Header buttons background color */ +//.header-chart-panel .button, +//.symbol-search-dialog .symbol-block input, +//input.symbol-edit, +//.favored-list-container span { +// background: #9e9e9e21; +// border: none; +//} +// +//.header-chart-panel .button.disabled { +// background: #9e9e9e21; +// border: none; +// opacity: 50%; +//} +// +///* Disabled features background color */ +//.feature-no-touch .header-chart-panel .button.disabled:active, +//.feature-touch .header-chart-panel .button.disabled:active, +//.header-chart-panel .button.disabled, +//.header-chart-panel .button.disabled.active { +// /*background: red;*/ +//} +// +///* Small close button */ +//.tv-close-panel { +// display: none; +// z-index: 999; +//} +// +//.tv-close-panel.top { +// bottom: -15px; +// background: $primary-background; +// border-color: $primary-background; +// margin-left: -5px; +// height: 8px; +//} +// +//.tv-close-panel.top:after { +// display: block; +// content: ""; +// position: absolute; +// width: 0; +// height: 0; +// border-style: solid; +// border-width: 0 5px 4px 5px; +// border-color: transparent transparent $icon-light-color transparent; +// top: 2px; +// left: 50%; +// margin-left: -5px; +//} +// +//.favored-list-container span { +// color: $icon-light-color; +//} +// +////.header-chart-panel-content .group svg { +//// fill: #bababa; +////} +// +////.header-chart-panel .button, .apply-common-tooltip { +//// background-color: #262626 !important; +////} +// +////.header-chart-panel .intervals-container .interval-dialog-button { +//// border-right-color: #383838; +////} +// +////.header-chart-panel .header-group-indicators .study-template-widget .submenu{ +//// border-left-color: #383838; +////} +// +//.on-widget .getimage .icon { +// fill: $icon-light-color !important; +//} +// +//.pane-legend { +// margin-top: 12px; +// margin-left: 12px; +//} +// +//.layout__area--top { +// .header-chart-panel-sizer { +// height: 42px !important; +// .header-chart-panel-content { +// padding: 5px !important; +// background: $primary-background; +// +// .button, .apply-common-tooltip { +// border: 1px solid $layout-top-button-border-color !important; +// background-color: $primary-btn-background; +// } +// +// // template button border +// .favored-list-container .submenu { +// border-color: $primary-background; +// } +// +// } +// } +// +// // header buttons +// .apply-common-tooltip { +// cursor: pointer; +// +// color: $primary-btn-color !important; +// +// svg { +// fill: $primary-btn-color !important; +// } +// +// i { +// background-color: $primary-btn-color !important; +// } +// +// &:hover { +// background-color: $primary-btn-background-active; +// &:before { +// border-color: transparent !important; +// } +// +// color: $icon-light-color-active !important; +// +// svg { +// fill: $icon-light-color-active !important; +// } +// +// i { +// background-color: $icon-light-color-active !important; +// } +// } +// } +// +// // study-template header button +// +// .study-template-widget { +// .apply-common-tooltip { +// border: 0 !important; +// margin-left: 1px; +// .tv-caret { +// margin-left: 7px; +// } +// } +// } +// +// // chart-style-widget header button +// +// .chart-style-widget { +// .apply-common-tooltip { +// margin-left: 1px; +// .tv-caret { +// margin-left: 7px; +// } +// } +// } +// +// // header group intervals +// .header-group-intervals { +// margin-right: 2px; +// .interval-dialog-button { +// margin: 0 1px; +// border-right: none !important; +// } +// .tv-caret { +// margin-left: 7px; +// } +// } +//} +// +//// dropdown list styling when user click on some dropdown btn +// +//.charts-popup-list { +// border: none; +// background-color: $primary-background; +// +// .special { +// color: $primary-text-color-active !important; +// background-color: $primary-background-active !important; +// } +// +// .item, span { +// color: $primary-text-color !important; +// +// //hover state +// &:hover { +// color: $primary-text-color-active !important; +// +// background: $primary-background-active !important; +// +// span { +// color: $primary-text-color-active !important; +// } +// } +// +// //active state +// &.active { +// color: $icon-light-color-active !important; +// +// background-color: $primary-background-active; +// } +// +// } +// +// .separator { +// border-color: $primary-border-color; +// } +// +//} +// +///* buttons */ +// +//.tv-button--default { +// color: $button-default-color; +// border-color: $button-default-border; +// background-color: $button-default-background; +// &:hover { +// color: $button-default-color; +// border-color: lighten($button-default-border, 20%) !important; +// background-color: lighten($button-default-background, 20%) !important; +// } +//} +// +//.tv-button--success { +// color: $button-success-color; +// border-color: $button-success-border; +// background-color: $button-success-background; +// &:hover { +// color: $button-success-color; +// border-color: lighten($button-success-border, 20%) !important; +// background-color: lighten($button-success-background, 20%) !important; +// } +//} +// +///* dialogs */ +// +//.tv-dialog { +// +// background-color: $primary-background; +// +// color: $primary-text-color; +// +// .js-reset-button, .js-dialog__close { +// svg { +// fill: $primary-text-color; +// } +// } +// +// .tv-dialog__title { +// color: $primary-text-color +// } +// +// .tv-dialog__section--title { +// border-color: $primary-border-color; +// } +// +// .tv-search-row { +// border-color: $primary-border-color; +// input { +// background-color: $primary-background; +// color: $primary-text-color; +// } +// } +// +// .tv-insert-study-item { +// &:hover { +// color: $primary-text-color-active; +// background-color: $primary-background-active; +// } +// } +// +// .tv-text { +// color: $primary-text-color; +// p { +// color: $primary-text-color; +// } +// } +// +// // when user clicks on save template as +// .tv-control-input { +// color: $primary-text-color; +// background-color: $primary-background; +// } +// +// .tv-dropdown__body { +// background-color: $primary-background !important; +// } +// +// .tv-autocomplete__dropdown-item { +// color: $primary-text-color; +// background-color: $primary-background !important; +// &:hover { +// color: $primary-text-color-active; +// } +// } +//} +// +//._tv-dialog { +// border-color: $primary-background-active; +// background-color: $primary-background; +// +// * { +// color: $primary-text-color; +// } +// +// .tv-tabs { +// &:before { +// background-color: $primary-border-color; +// } +// } +// +// input { +// border-color: $primary-border-color !important; +// background-color: $primary-background; +// +// color: $primary-text-color !important; +// } +// +// a { +// color: $primary-text-color !important; +// &:hover { +// color: $primary-text-color-active !important; +// } +// } +// +// label { +// color: $primary-text-color; +// } +// +// /* buttons */ +// +// .dialog-buttons { +// ._tv-button.tv-left { +// color: $button-default-color !important; +// border-color: $button-default-border !important; +// background-color: $button-default-background !important; +// &:hover { +// color: $button-default-color !important; +// border-color: lighten($button-default-border, 20%) !important; +// background-color: lighten($button-default-background, 20%) !important; +// } +// } +// ._tv-button.ok { +// color: $button-success-color !important; +// border-color: $button-success-border !important; +// background-color: $button-success-background !important; +// &:hover { +// color: $button-success-color !important; +// border-color: lighten($button-success-border, 20%) !important; +// background-color: lighten($button-success-background, 20%) !important; +// } +// } +// ._tv-button.cancel { +// color: $button-cancel-color !important; +// border-color: $button-cancel-border !important; +// background-color: $button-cancel-background !important; +// &:hover { +// color: $button-cancel-color !important; +// border-color: lighten($button-cancel-border, 20%) !important; +// background-color: lighten($button-cancel-background, 20%) !important; +// } +// } +// } +// +// /* select */ +// .tv-select-container.dialog { +// cursor: pointer; +// background-color: $primary-background !important; +// color: $primary-text-color !important; +// border-color: $primary-border-color !important; +// +// .sbOptions { +// li, a { +// background-color: $primary-background; +// color: $primary-text-color; +// &:hover { +// background-color: $primary-background-active; +// color: $primary-text-color-active; +// } +// } +// } +// +// .sbToggle, .sbSelector { +// cursor: pointer; +// } +// } +// +// /* input number */ +// .ticker.tv-text-input.inset.dialog { +// background-color: $primary-background; +// color: $primary-text-color; +// border-color: $primary-border-color; +// } +// .tv-ticker { +// background-color: $primary-background; +// color: $primary-text-color; +// .tv-ticker__btn { +// svg { +// fill: $primary-text-color; +// } +// background-color: $primary-background; +// border-color: $primary-border-color; +// } +// } +// /* end input number */ +// +// /* color picker */ +// .colorpicker-widget.tvcolorpicker-widget { +// border-color: $primary-border-color !important; +// } +// +// /* custom-select (line selector) */ +// .custom-select { +// .switcher { +// cursor: pointer; +// background-color: $primary-background !important; +// border-color: $primary-border-color !important; +// &:hover { +// border-color: $primary-border-color !important; +// &:before { +// border-color: $primary-border-color !important; +// } +// } +// } +// .items { +// background-color: $primary-background !important; +// border-color: $primary-border-color !important; +// .item { +// background-color: $primary-background !important; +// &.selected { +// background-color: $primary-background-active !important; +// } +// &:hover { +// background-color: $primary-background-active !important; +// } +// } +// } +// } +// +// /* font-size selector */ +// .tv-select-container-fontsize { +// border-color: $primary-border-color !important; +// ul { +// border-color: $primary-border-color !important; +// } +// } +// +//} +// +///* end dialogs*/ +// +///* bottom control bar */ +//.chart-controls-bar { +// .apply-common-tooltip { +// color: $primary-text-color !important; +// &:hover { +// background-color: transparent !important; +// color: $primary-text-color-active !important; +// } +// } +//} +// +///* go to dialog */ +// +//[class|=dialog] { +// background-color: $primary-background; +// [class|=header] { +// color: $primary-text-color; +// border-color: $primary-border-color; +// [class|=close] { +// svg { +// fill: $primary-text-color +// } +// &:hover { +// svg { +// fill: $primary-text-color-active; +// } +// } +// } +// } +// [class|=body] { +// input { +// color: $primary-text-color !important; +// background-color: $primary-background !important; +// border-color: $primary-border-color !important; +// } +// } +//} +// +// +//.layout__area--left { +// [class|=separator] { +// background-color: $primary-border-color; +// } +// [class|=inner] { +// background: $primary-background; +// [class|=buttonIcon] { +// color: $primary-text-color; +// } +// [class|=button] { +// &:hover { +// svg { +// fill: $primary-text-color-active !important; +// } +// } +// } +// span { +// svg { +// fill: $icon-light-color; +// } +// } +// [class|=isActive] { +// span { +// svg { +// fill: $icon-light-color-active; +// } +// } +// } +// } +//} +// +//.tv-floating-toolbar { +// border-color: $primary-border-color; +// background-color: $primary-background; +// +// .tv-grouped-floating-toolbar__sub-widget { +// transition: none; +// border-color: $primary-border-color; +// background-color: $primary-background; +// &:hover { +// border-color: $primary-border-color !important; +// background-color: $primary-background !important; +// } +// } +// +// .tv-floating-toolbar__content { +// background-color: $primary-background !important; +// +// .tv-floating-toolbar__widget { +// background-color: $primary-background !important; +// border-color: $primary-border-color; +// +// .apply-common-tooltip { +// background-color: $primary-background !important; +// } +// } +// +// } +// +// &.tv-linetool-properties-toolbar { +// .tv-linetool-properties-toolbar__color-picker { +// svg { +// fill: $primary-background; +// .bg { +// fill: $primary-background; +// } +// .icon { +// fill: $primary-text-color; +// } +// &:hover { +// .bg { +// fill: $primary-background; +// } +// } +// } +// } +// +// .tv-linetool-properties-toolbar__icon { +// svg { +// path { +// fill: $primary-text-color !important; +// } +// } +// } +// } +//} +// +///* dropdown menu when click on some items +// on left side menu +//*/ +// +//[class|=menuWrap] { +// [class|=menu] { +// background-color: $primary-background !important; +// [class|=item] { +// cursor: pointer; +// color: $primary-text-color; +// background-color: $primary-background !important; +// [class|=labelRow] { +// color: $primary-text-color !important; +// } +// &:hover { +// color: $primary-text-color-active; +// background-color: $primary-background-active !important; +// [class|=labelRow] { +// color: $primary-text-color-active !important; +// } +// } +// } +// } +//} diff --git a/charting_library/scss/darkTheme.scss b/charting_library/scss/darkTheme.scss new file mode 100644 index 0000000000..ed21364b3c --- /dev/null +++ b/charting_library/scss/darkTheme.scss @@ -0,0 +1,32 @@ +// main colors + +$primary-background: #383838; +$primary-border-color: #535353; +$primary-background-active: $primary-border-color; + +$layout-top-button-border-color: $primary-background; + +$primary-text-color: #bababa; +$primary-text-color-active: #059cce; + +$button-success-color: #fff; +$button-success-border: $primary-text-color-active; +$button-success-background: $primary-text-color-active; + +$button-default-color: $primary-text-color; +$button-default-border: $primary-background-active; +$button-default-background: $primary-background-active; + +$button-cancel-color: $primary-text-color; +$button-cancel-border: $primary-background-active; +$button-cancel-background: $primary-background-active; + +$primary-btn-color: $primary-text-color; +$primary-btn-background: #262626; +$primary-btn-background-active: #2d2d2d; +$primary-btn-border-active: $primary-background-active; + +$icon-light-color: $primary-text-color; +$icon-light-color-active: $primary-text-color-active; + +@import "./base"; diff --git a/charting_library/scss/lightTheme.scss b/charting_library/scss/lightTheme.scss new file mode 100644 index 0000000000..223d089b67 --- /dev/null +++ b/charting_library/scss/lightTheme.scss @@ -0,0 +1,30 @@ +// main colors + +$primary-background: #eee; +$primary-border-color: #e0e0e0; +$primary-background-active: #dadada; + +$primary-text-color: #656565; +$primary-text-color-active: #059cce; + +$button-success-color: #fff; +$button-success-border: $primary-text-color-active; +$button-success-background: $primary-text-color-active; + +$button-default-color: $primary-text-color; +$button-default-border: $primary-background-active; +$button-default-background: $primary-background-active; + +$button-cancel-color: $primary-text-color; +$button-cancel-border: $primary-background-active; +$button-cancel-background: $primary-background-active; + +$primary-btn-color: $primary-text-color; +$primary-btn-background: $primary-background; +$primary-btn-background-active: $primary-background-active; +$primary-btn-border-active: $primary-background-active; + +$icon-light-color: $primary-text-color; +$icon-light-color-active: $primary-text-color-active; + +@import "./base"; diff --git a/charting_library/scss/midnightTheme.scss b/charting_library/scss/midnightTheme.scss new file mode 100644 index 0000000000..aec3f47385 --- /dev/null +++ b/charting_library/scss/midnightTheme.scss @@ -0,0 +1,32 @@ +// main colors + +$primary-background: #2b2e37; +$primary-border-color: #373e47; +$primary-background-active: $primary-border-color; + +$layout-top-button-border-color: $primary-background; + +$primary-text-color: #b6bab7; +$primary-text-color-active: #059cce; + +$button-success-color: #fff; +$button-success-border: $primary-text-color-active; +$button-success-background: $primary-text-color-active; + +$button-default-color: $primary-text-color; +$button-default-border: $primary-background-active; +$button-default-background: $primary-background-active; + +$button-cancel-color: $primary-text-color; +$button-cancel-border: $primary-background-active; +$button-cancel-background: $primary-background-active; + +$primary-btn-color: $primary-text-color; +$primary-btn-background: #1d212d; +$primary-btn-background-active: #272b3c; +$primary-btn-border-active: $primary-background-active; + +$icon-light-color: $primary-text-color; +$icon-light-color-active: $primary-text-color-active; + +@import "./base"; diff --git a/package-lock.json b/package-lock.json index 167f0602c4..fb11d343bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BitShares2-light", - "version": "4.0.0", + "version": "5.0.20210216", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -626,6 +626,24 @@ } } }, + "@babel/runtime-corejs3": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz", + "integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==", + "optional": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "optional": true + } + } + }, "@babel/template": { "version": "7.0.0-beta.44", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", @@ -2541,6 +2559,12 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, + "@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, "@types/react": { "version": "16.9.49", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.49.tgz", @@ -2904,7 +2928,7 @@ "dependencies": { "acorn": { "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } @@ -2928,6 +2952,7 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -3692,7 +3717,8 @@ "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true }, "array-find-index": { "version": "1.0.2", @@ -3785,7 +3811,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -3837,7 +3864,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.1", @@ -3887,12 +3915,14 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "babel-code-frame": { "version": "6.26.0", @@ -5163,7 +5193,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -5191,6 +5222,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "optional": true, "requires": { "tweetnacl": "^0.14.3" @@ -5657,9 +5689,14 @@ "node-int64": "^0.4.0" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -5978,95 +6015,17 @@ "dev": true }, "canvg": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/canvg/-/canvg-1.5.3.tgz", - "integrity": "sha512-7Gn2IuQzvUQWPIuZuFHrzsTM0gkPz2RRT9OcbdmA03jeKk8kltrD8gqUzNX15ghY/4PV5bbe5lmD6yDLDY6Ybg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.7.tgz", + "integrity": "sha512-4sq6iL5Q4VOXS3PL1BapiXIZItpxYyANVzsAKpTPS5oq4u3SKbGfUcbZh2gdLCQ3jWpG/y5wRkMlBBAJhXeiZA==", + "optional": true, "requires": { - "jsdom": "^8.1.0", + "@babel/runtime-corejs3": "^7.9.6", + "@types/raf": "^3.4.0", + "raf": "^3.4.1", "rgbcolor": "^1.0.1", - "stackblur-canvas": "^1.4.1", - "xmldom": "^0.1.22" - }, - "dependencies": { - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" - }, - "acorn": { - "version": "2.7.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - }, - "acorn-globals": { - "version": "1.0.9", - "resolved": "http://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", - "requires": { - "acorn": "^2.1.0" - } - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "requires": { - "cssom": "0.3.x" - } - }, - "jsdom": { - "version": "8.5.0", - "resolved": "http://registry.npmjs.org/jsdom/-/jsdom-8.5.0.tgz", - "integrity": "sha1-1Nj12/J2hjW2KmKCO5R89wcevJg=", - "requires": { - "abab": "^1.0.0", - "acorn": "^2.4.0", - "acorn-globals": "^1.0.4", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.0 < 0.4.0", - "cssstyle": ">= 0.2.34 < 0.3.0", - "escodegen": "^1.6.1", - "iconv-lite": "^0.4.13", - "nwmatcher": ">= 1.3.7 < 2.0.0", - "parse5": "^1.5.1", - "request": "^2.55.0", - "sax": "^1.1.4", - "symbol-tree": ">= 3.1.0 < 4.0.0", - "tough-cookie": "^2.2.0", - "webidl-conversions": "^3.0.1", - "whatwg-url": "^2.0.1", - "xml-name-validator": ">= 2.0.1 < 3.0.0" - } - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-2.0.1.tgz", - "integrity": "sha1-U5ayBD8CDub3BNnEXqhRnnJN5lk=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" - } + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^5.0.5" } }, "capture-exit": { @@ -6087,12 +6046,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "cf-blob.js": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/cf-blob.js/-/cf-blob.js-0.0.1.tgz", - "integrity": "sha1-9at+EueYyvCMz4KMaaug8GPYP5k=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chain-function": { "version": "1.0.1", @@ -6101,7 +6056,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -6419,7 +6374,8 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", @@ -6469,6 +6425,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -6672,9 +6629,15 @@ }, "core-js": { "version": "1.2.7", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, + "core-js-pure": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.9.1.tgz", + "integrity": "sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A==", + "optional": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -6792,29 +6755,12 @@ } }, "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", "requires": { - "fbjs": "^0.8.9", "loose-envify": "^1.3.1", "object-assign": "^4.1.1" - }, - "dependencies": { - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } } }, "cross-env": { @@ -6977,7 +6923,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "normalize-path": { @@ -7061,7 +7008,8 @@ "cssom": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==" + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "dev": true }, "cssstyle": { "version": "1.4.0", @@ -7129,6 +7077,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -7207,7 +7156,8 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "define-properties": { "version": "1.1.2", @@ -7311,7 +7261,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "delegate": { "version": "3.2.0", @@ -7566,6 +7517,12 @@ "domelementtype": "1" } }, + "dompurify": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.7.tgz", + "integrity": "sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg==", + "optional": true + }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -7649,6 +7606,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "optional": true, "requires": { "jsbn": "~0.1.0", @@ -8028,7 +7986,7 @@ }, "es6-promise": { "version": "3.3.1", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, @@ -8067,6 +8025,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "dev": true, "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -8078,12 +8037,14 @@ "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true } } @@ -8301,12 +8262,14 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -8330,7 +8293,7 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -8758,7 +8721,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -8799,22 +8763,26 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fastparse": { "version": "1.1.1", @@ -8867,11 +8835,16 @@ "dependencies": { "whatwg-fetch": { "version": "0.9.0", - "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz", "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA=" } } }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -9025,12 +8998,14 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "1.0.6", @@ -9776,7 +9751,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -9790,6 +9765,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -9933,13 +9909,13 @@ } }, "globule": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", - "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", "dev": true, "requires": { "glob": "~7.1.1", - "lodash": "~4.17.12", + "lodash": "~4.17.10", "minimatch": "~3.0.2" } }, @@ -10060,12 +10036,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, "requires": { "ajv": "^5.1.0", "har-schema": "^2.0.0" @@ -10394,7 +10372,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -10408,6 +10386,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -10652,9 +10631,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "inquirer": { @@ -11069,7 +11048,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", @@ -11127,7 +11107,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-lib-coverage": { "version": "2.0.3", @@ -14791,9 +14772,9 @@ } }, "js-base64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", - "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, "js-sha256": { @@ -14820,6 +14801,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, "optional": true }, "jsdom": { @@ -14906,12 +14888,14 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -14922,7 +14906,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json2mq": { "version": "0.2.0", @@ -14934,12 +14919,12 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { @@ -14952,15 +14937,54 @@ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==" }, "jspdf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-1.4.1.tgz", - "integrity": "sha512-2vYVdrvrQUdKKPyWHw81t1jEYYAJ6uFJ/HtTcGbI4qXIQEdl18dLEuL2wTeSv2GzeQLSgUvEvwsXsszuHK+PTw==", - "requires": { - "canvg": "^1.0", - "cf-blob.js": "0.0.1", - "file-saver": "1.3.8", - "omggif": "1.0.7", - "stackblur": "^1.0.0" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.3.1.tgz", + "integrity": "sha512-1vp0USP1mQi1h7NKpwxjFgQkJ5ncZvtH858aLpycUc/M+r/RpWJT8PixAU7Cw/3fPd4fpC8eB/Bj42LnsR21YQ==", + "requires": { + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + }, + "dependencies": { + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "optional": true + }, + "core-js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz", + "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==", + "optional": true + }, + "css-line-break": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz", + "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==", + "optional": true, + "requires": { + "base64-arraybuffer": "^0.2.0" + } + }, + "html2canvas": { + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.7.tgz", + "integrity": "sha512-yvPNZGejB2KOyKleZspjK/NruXVQuowu8NnV2HYG7gW7ytzl+umffbtUI62v2dCHQLDdsK6HIDtyJZ0W3neerA==", + "optional": true, + "requires": { + "css-line-break": "1.1.1" + } + } } }, "jspdf-autotable": { @@ -14972,6 +14996,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -15068,6 +15093,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -15075,7 +15101,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -15452,7 +15478,8 @@ }, "minimist": { "version": "1.2.0", - "resolved": "", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -15619,12 +15646,14 @@ "mime-db": { "version": "1.35.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "dev": true }, "mime-types": { "version": "2.1.19", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, "requires": { "mime-db": "~1.35.0" } @@ -15704,7 +15733,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -15887,9 +15916,9 @@ "dev": true }, "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true }, "nanomatch": { @@ -16119,9 +16148,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -16141,18 +16170,18 @@ } }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -16162,12 +16191,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -16232,7 +16255,7 @@ "dependencies": { "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -16372,11 +16395,6 @@ "resolved": "http://registry.npmjs.org/numeral/-/numeral-2.0.4.tgz", "integrity": "sha1-VFoMcJ4JCpz3m+vsgCuT9gBh8Dg=" }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -16386,7 +16404,8 @@ "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -16521,11 +16540,6 @@ } } }, - "omggif": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.7.tgz", - "integrity": "sha1-WdLuywJj3oRjWz/riHwMmXPx5J0=" - }, "omit.js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz", @@ -16564,6 +16578,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -17175,7 +17190,8 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true }, "prepend-http": { "version": "1.0.4", @@ -17358,7 +17374,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -17468,9 +17484,9 @@ } }, "pubsub-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.7.0.tgz", - "integrity": "sha512-Pb68P9qFZxnvDipHMuj9oT1FoIgBcXJ9C9eWdHCLZAnulaUoJ3+Y87RhGMYilWpun6DMWVmvK70T4RP4drZMSA==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.3.tgz", + "integrity": "sha512-FhYYlPNOywTh7zN38u5AlG67emA47w6JZd7YgdQU1w8gQbZhhIGxVM0AQosdaINHb2ALb+fhfnVyBJAt4D4IzA==" }, "pump": { "version": "2.0.1", @@ -17494,7 +17510,8 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "q": { "version": "1.5.1", @@ -17684,7 +17701,8 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "query-string": { "version": "6.1.0", @@ -18007,9 +18025,9 @@ } }, "rc-form": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.11.tgz", - "integrity": "sha512-8BL+FNlFLTOY/A5X6tU35GQJLSIpsmqpwn/tFAYQTczXc4dMJ33ggtH248Cum8+LS0jLTsJKG2L4Qp+1CkY+sA==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.12.tgz", + "integrity": "sha512-sHfyWRrnjCHkeCYfYAGop2GQBUC6CKMPcJF9h/gL/vTmZB/RN6fNOGKjXrXjFbwFwKXUWBoPtIDDDmXQW9xNdw==", "requires": { "async-validator": "~1.11.3", "babel-runtime": "6.x", @@ -18018,6 +18036,7 @@ "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.4", "rc-util": "^4.15.3", + "react-is": "^16.13.1", "warning": "^4.0.3" }, "dependencies": { @@ -18660,11 +18679,11 @@ } }, "react-debounce-render": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-debounce-render/-/react-debounce-render-4.0.3.tgz", - "integrity": "sha512-bjbpWHE0gRhkZoH0F+G3Azc7Zceb/Et1fwMJuKYagRnd0LqwcaC/JuECyPlFKK36HiRhzMO9kQplGLF/nlt7Lg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-debounce-render/-/react-debounce-render-7.0.0.tgz", + "integrity": "sha512-OaI1RhLxchlV2nKukQgbq2CZG5DQoNkHG1O9vMw8fnY4bLCIdKPDy2EL4aQY9cdeXW/NkYkso7O/5ARbs/XI6w==", "requires": { - "lodash": "^4.17.10", + "hoist-non-react-statics": "^3.3.2", "lodash.debounce": "^4.0.8" } }, @@ -18686,7 +18705,7 @@ "classnames": "^2.2.1", "create-react-class": "^15.6.3", "exenv": "^1.2.2", - "foundation-apps": "git+https://github.com/zurb/foundation-apps.git#2b311d183325811cca371826667eacadf6b09bff", + "foundation-apps": "git+https://github.com/zurb/foundation-apps.git", "object-assign": ">=4.0.*", "pubsub-js": "^1.5.x", "tether": "^0.6.5" @@ -18694,7 +18713,7 @@ "dependencies": { "foundation-apps": { "version": "git+https://github.com/zurb/foundation-apps.git#2b311d183325811cca371826667eacadf6b09bff", - "from": "git+https://github.com/zurb/foundation-apps.git#2b311d183325811cca371826667eacadf6b09bff" + "from": "git+https://github.com/zurb/foundation-apps.git" }, "tether": { "version": "0.6.5", @@ -19442,6 +19461,7 @@ "version": "2.87.0", "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.6.0", @@ -19616,7 +19636,8 @@ "rgbcolor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", - "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=" + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true }, "rimraf": { "version": "2.6.2", @@ -19837,12 +19858,6 @@ "locate-path": "^3.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -19957,7 +19972,8 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "scheduler": { "version": "0.19.1", @@ -20354,7 +20370,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -20464,6 +20481,7 @@ "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -20496,15 +20514,11 @@ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, - "stackblur": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stackblur/-/stackblur-1.0.0.tgz", - "integrity": "sha1-tAen4FyTsI1miDu4CNfLo6UD8S8=" - }, "stackblur-canvas": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz", - "integrity": "sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs=" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true }, "stat-mode": { "version": "0.3.0", @@ -20688,7 +20702,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -20790,6 +20804,12 @@ "integrity": "sha1-YBqy/aodra48qZdbVQ3pKgfh2Ss=", "dev": true }, + "svg-pathdata": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-5.0.5.tgz", + "integrity": "sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==", + "optional": true + }, "svgo": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", @@ -20940,7 +20960,8 @@ "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true }, "table": { "version": "4.0.2", @@ -21691,6 +21712,7 @@ "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, "requires": { "punycode": "^1.4.1" } @@ -21763,6 +21785,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -21771,12 +21794,14 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, "optional": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -22460,6 +22485,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -23231,7 +23257,7 @@ }, "whatwg-fetch": { "version": "2.0.4", - "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" }, "whatwg-mimetype": { @@ -23341,7 +23367,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -23404,7 +23430,8 @@ "xmldom": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true }, "xss": { "version": "1.0.3", diff --git a/package.json b/package.json index 2e607480d3..8a2894d10c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "BitShares2-light", - "version": "4.0.0", + "version": "5.0.20210216", "description": "Reference UI to showcase all features of the BitShares blockchain.", "homepage": "https://github.com/bitshares/bitshares-ui", "author": "BitShares UI Worker ", @@ -23,8 +23,8 @@ "main": "build/electron/index.js", "scripts": { "postinstall": "npm run install-charting-library", - "compile-tv-css": "node-sass ./charting_library/static/scss/ --output ./charting_library/static/ --output-style compressed", - "install-charting-library": "node ./charting_library/install-charting-library.js", + "compile-tv-css": "node-sass ./charting_library/scss/ --output ./charting_library/ --output-style compressed", + "install-charting-library": "node ./charting_library/install-charting-library.js && npm run compile-tv-css", "test:market": "cross-env NODE_ENV=test mocha --require babel-core/register --watch --watch-extensions js ./app/test/marketTests", "bench:market": "cross-env NODE_ENV=test babel ./lib/common/MarketClasses.js -o ./app/test/MarketClasses.js && cross-env NODE_ENV=test node --harmony ./test/marketBenchmark", "profile-dev": "webpack --env.dev --env.profile --profile --json > stats-dev.json", @@ -165,7 +165,7 @@ "jdenticon": "git+https://github.com/cryptonomex/jdenticon.git", "js-sha256": "^0.2.3", "jsonschema": "^1.2.4", - "jspdf": "^1.4.1", + "jspdf": "^2.3.1", "jspdf-autotable": "^3.1.1", "lodash-es": "^4.17.10", "lzma": "2.1.6", @@ -186,7 +186,7 @@ "react-clipboard.js": "^1.0.1", "react-copy-to-clipboard": "^5.0.2", "react-datepicker2": "git+https://github.com/bitshares/react-datepicker2.git#9d4c2c28a23c970badcf765c35c5493d5a49afde", - "react-debounce-render": "^4.0.2", + "react-debounce-render": "^7.0.0", "react-dom": "^16.11.0", "react-foundation-apps": "git+https://github.com/bitshares/react-foundation-apps.git", "react-highcharts": "^16.1.0",