Compare commits

...
66 Commits
Author SHA1 Message Date
github-actions[bot] 8d762218b4 [CI Skip] release/stable 3.6.4
skip-checks: true
2023-11-18 08:38:49 +00:00
Jaco 63be1a965b 3.6.4 (#776) 2023-11-18 10:37:12 +02:00
github-actions[bot] 0837376d00 [CI Skip] bump/beta 3.6.4-0-x
skip-checks: true
2023-10-15 10:43:44 +00:00
Jaco 1fbb4d67bb Bump TS (#775) 2023-10-15 13:41:12 +03:00
github-actions[bot] dd83ad69a9 [CI Skip] release/stable 3.6.3
skip-checks: true
2023-09-15 06:58:37 +00:00
Jaco ff73cc86fb 3.6.3 (#774) 2023-09-15 09:56:27 +03:00
github-actions[bot] c93438754f [CI Skip] release/stable 3.6.2
skip-checks: true
2023-08-23 10:37:54 +00:00
Jaco 3b542acc47 3.6.2 (#773) 2023-08-23 13:35:47 +03:00
github-actions[bot] 473b455373 [CI Skip] bump/beta 3.6.2-0-x
skip-checks: true
2023-08-22 11:40:56 +00:00
Jeeyong Um 4ecdd4d803 Fix outdated links in README.md (#772) 2023-08-22 14:38:40 +03:00
github-actions[bot] 9a67ff2fc1 [CI Skip] release/stable 3.6.1
skip-checks: true
2023-08-21 07:48:06 +00:00
Jaco eebe754c92 3.6.1 (#771) 2023-08-21 10:45:53 +03:00
github-actions[bot] f285f2ff58 [CI Skip] bump/beta 3.5.2-3-x
skip-checks: true
2023-08-20 06:49:25 +00:00
Jaco cf28882540 Bump deps (#770) 2023-08-20 09:47:09 +03:00
github-actions[bot] fc08babdaf [CI Skip] bump/beta 3.5.2-2-x
skip-checks: true
2023-08-18 07:24:30 +00:00
Jaco 666fc8f702 Bump deps (#769) 2023-08-18 10:22:13 +03:00
github-actions[bot] d2a28ca315 [CI Skip] bump/beta 3.5.2-1-x
skip-checks: true
2023-07-06 07:46:28 +00:00
Jaco 67e867a72e Bump deps (#768)
* Bump deps

* Fix build
2023-07-06 10:44:14 +03:00
github-actions[bot] abe4e5b340 [CI Skip] bump/beta 3.5.2-0-x
skip-checks: true
2023-06-18 08:40:11 +00:00
Jaco a5fdaf1f1c Bump deps (#767) 2023-06-18 11:37:13 +03:00
github-actions[bot] 3b7b85e835 [CI Skip] release/stable 3.5.1
skip-checks: true
2023-06-11 14:32:41 +00:00
Jaco 6119c57d46 3.5.1 (#766) 2023-06-11 17:30:29 +03:00
github-actions[bot] 6279b3b926 [CI Skip] bump/beta 3.4.3-0-x
skip-checks: true
2023-06-11 07:19:04 +00:00
Jaco 50b4e2bd07 Adjust object index typings (#765)
* Adjust object index typings

* CHANGELOG

* Bump common
2023-06-11 10:16:28 +03:00
github-actions[bot] 252a8a8554 [CI Skip] release/stable 3.4.2
skip-checks: true
2023-06-05 04:55:41 +00:00
Jaco 83fd6ad0c0 3.4.2 (#764)
* 3.4.2

* Correct CHANGELOG
2023-06-05 07:53:12 +03:00
github-actions[bot] 420f8f095b [CI Skip] bump/beta 3.4.2-3-x
skip-checks: true
2023-06-02 10:22:02 +00:00
Jaco 8a3ee3588d Bump deps (w/ TS 5.1) (#763) 2023-06-02 13:19:08 +03:00
github-actions[bot] 62e5e5e23e [CI Skip] bump/beta 3.4.2-2-x
skip-checks: true
2023-05-25 07:27:44 +00:00
Jaco a456a4c9df jg-bump-deps (#762) 2023-05-25 10:25:30 +03:00
github-actions[bot] 9a9c1f50ee [CI Skip] bump/beta 3.4.2-1-x
skip-checks: true
2023-05-21 09:41:53 +00:00
Jaco 7ad8333f2e Bump dev (w/ eslint config adj) (#761) 2023-05-21 12:39:43 +03:00
github-actions[bot] ec99102a78 [CI Skip] bump/beta 3.4.2-0-x
skip-checks: true
2023-05-18 09:13:06 +00:00
Jaco 36c7da623b Adjust tsconfig usage (#760) 2023-05-18 12:10:56 +03:00
github-actions[bot] 7bb148eea9 [CI Skip] release/stable 3.4.1
skip-checks: true
2023-05-13 08:55:51 +00:00
Jaco ee039545be 3.4.1 (#759) 2023-05-13 11:53:20 +03:00
github-actions[bot] e15651ac9c [CI Skip] bump/beta 3.3.2-0-x
skip-checks: true
2023-05-09 06:06:40 +00:00
Jaco f92e276a0d Bump deps (#758) 2023-05-09 09:04:24 +03:00
github-actions[bot] a51ef7bccc [CI Skip] release/stable 3.3.1
skip-checks: true
2023-05-07 11:13:05 +00:00
Jaco bf8a295d64 3.3.1 (#757) 2023-05-07 14:10:54 +03:00
github-actions[bot] d2bbf6bb0e [CI Skip] bump/beta 3.2.3-1-x
skip-checks: true
2023-05-05 06:31:40 +00:00
Jaco 60cc5fbd4b Bump deps & adjust CHANGELOG (#756) 2023-05-05 09:29:17 +03:00
github-actions[bot] dae851297b [CI Skip] bump/beta 3.2.3-0-x
skip-checks: true
2023-05-05 06:00:24 +00:00
Zenandgithub-actions[bot] fa9eef757a feat: adapt Vue 3.x (#755)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-05 08:57:35 +03:00
github-actions[bot] 84c36c5c68 [CI Skip] release/stable 3.2.2
skip-checks: true
2023-04-29 06:49:06 +00:00
Jaco 4a71023452 3.2.2 (#754) 2023-04-29 09:47:02 +03:00
github-actions[bot] 359230bfb3 [CI Skip] bump/beta 3.2.2-0-x
skip-checks: true
2023-04-24 10:50:36 +00:00
Jaco 19fa38e441 Update dependencies (w/ react-is as peer) (#753)
* Update dependencies (w/ react-is as peer)

* Update styled-components deps
2023-04-24 13:48:24 +03:00
github-actions[bot] e6105e19a5 [CI Skip] release/stable 3.2.1
skip-checks: true
2023-04-22 09:32:36 +00:00
Jaco e8b9f2aafc 3.2.1 (#752) 2023-04-22 12:30:25 +03:00
github-actions[bot] bcdd6e42ec [CI Skip] bump/beta 3.1.5-4-x
skip-checks: true
2023-04-14 09:22:19 +00:00
Jaco b14dc3bcc3 Bump deps (#751) 2023-04-14 12:20:04 +03:00
github-actions[bot] 798a9fb453 [CI Skip] bump/beta 3.1.5-3-x
skip-checks: true
2023-04-10 07:23:33 +00:00
Jaco c81c08271b Bump dev (w/ eslint adjustments) (#750) 2023-04-10 10:21:15 +03:00
github-actions[bot] 0957599bdb [CI Skip] bump/beta 3.1.5-2-x
skip-checks: true
2023-04-08 07:06:11 +00:00
Jaco 4ec2f6730b Bump TypeScript (#749) 2023-04-08 10:03:58 +03:00
github-actions[bot] 701439d6bc [CI Skip] bump/beta 3.1.5-1-x
skip-checks: true
2023-04-04 05:31:11 +00:00
Jaco cade4a9051 Update lock wf (#748) 2023-04-04 08:27:57 +03:00
github-actions[bot] d4bec36fa7 [CI Skip] bump/beta 3.1.5-0-x
skip-checks: true
2023-04-02 08:54:33 +00:00
Jaco b83073f588 Move type-only imports (w/ verbatimModuleSyntax) (#746) 2023-04-02 11:51:38 +03:00
github-actions[bot] f36a80ad8b [CI Skip] release/stable 3.1.4
skip-checks: true
2023-04-01 07:31:31 +00:00
Jaco e2f16b8e2e 3.1.4 (#745) 2023-04-01 10:29:22 +03:00
github-actions[bot] 8470b347a4 [CI Skip] bump/beta 3.1.4-0-x
skip-checks: true
2023-03-25 15:43:07 +00:00
Jaco 24f1cf7e17 Add repo dev req. for Node.js (#744) 2023-03-25 17:40:48 +02:00
github-actions[bot] aac0aa43d0 [CI Skip] release/stable 3.1.3
skip-checks: true
2023-03-25 10:59:42 +00:00
Jaco 2c5db364ba Bump dev (w/ some node:test adjustments) (#743)
* Bump dev (w/ some node:test adjustments)

* Adjust EventEmitter import

* 3.1.3
2023-03-25 12:57:09 +02:00
83 changed files with 3029 additions and 3174 deletions
-19
View File
@@ -1,19 +0,0 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
...base.ignorePatterns,
'jest/**/*',
'**/*.d.ts'
],
parserOptions: {
...base.parserOptions,
project: [
'./tsconfig.eslint.json'
]
}
};
+4 -4
View File
@@ -13,13 +13,13 @@ jobs:
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836 - uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
with: with:
github-token: ${{ secrets.GH_PAT_BOT }} github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7' issue-inactive-days: '7'
issue-lock-comment: > issue-comment: >
This thread has been automatically locked since there has not been This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query. if you think you have a related problem or query.
pr-lock-inactive-days: '2' pr-inactive-days: '2'
pr-lock-comment: > pr-comment: >
This pull request has been automatically locked since there This pull request has been automatically locked since there
has not been any recent activity after it was closed. has not been any recent activity after it was closed.
Please open a new issue for related bugs. Please open a new issue for related bugs.
+1 -1
View File
@@ -17,5 +17,5 @@ jobs:
node-version: 'lts/*' node-version: 'lts/*'
- name: ${{ matrix.step }} - name: ${{ matrix.step }}
run: | run: |
yarn install --immutable | grep -v 'YN0013' yarn install --immutable
yarn ${{ matrix.step }} yarn ${{ matrix.step }}
+1 -1
View File
@@ -27,5 +27,5 @@ jobs:
node-version: 'lts/*' node-version: 'lts/*'
- name: ${{ matrix.step }} - name: ${{ matrix.step }}
run: | run: |
yarn install --immutable | grep -v 'YN0013' yarn install --immutable
yarn ${{ matrix.step }} yarn ${{ matrix.step }}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors // Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/prettier.cjs'); module.exports = require('@polkadot/dev/config/prettier.cjs');
+4
View File
@@ -0,0 +1,4 @@
{
"eslint.enable": true,
"eslint.experimental.useFlatConfig": true
}
+5
View File
@@ -2,6 +2,11 @@ enableImmutableInstalls: false
enableProgressBars: false enableProgressBars: false
logFilters:
# Discard any "cannot be found in cache" messages
- code: YN0013
level: discard
nodeLinker: node-modules nodeLinker: node-modules
plugins: plugins:
+91
View File
@@ -1,5 +1,96 @@
# CHANGELOG # CHANGELOG
## 3.6.4 Nov 18, 2023
Changes:
- Bump to `@polkadot/util` 12.6.1
## 3.6.3 Sep 15, 2023
Changes:
- Bump to `@polkadot/util` 12.5.1
## 3.6.2 Aug 23, 2023
Changes:
- Bump to `@polkadot/util` 12.4.2
## 3.6.1 Aug 21, 2023
Changes:
- Update to latest React `styled-components`
- Bump to `@polkadot/util` 12.4.1
## 3.5.1 Jun 11, 2023
Changes:
- Adjust object index access for stricter tsconfig settings
- Bump to `@polkadot/util` 12.3.1
## 3.4.2 Jun 5, 2023
- Bump to `@polkadot/util` 12.2.2
## 3.4.1 May 13, 2023
Changes:
- Add `module` to `package.json` export map (ESM-only)
- Bump to `@polkadot/util` 12.2.1
## 3.3.1 May 7, 2023
Contributed:
- Adjust `vue-identicon` to be Vue 3 compatible (Thanks to https://github.com/Gavin-Gong)
Changes:
- Bump to `@polkadot/util` 12.1.2
## 3.2.2 Apr 29, 2023
Changes:
- Add missing `react-is` peer dependency for `styled-components`
- Adjust compilation output for `__internal__` class fields
- Bump to `@polkadot/util` 12.1.1
## 3.2.1 Apr 22, 2023
Changes:
- Bump to `@polkadot/util` 12.0.1
## 3.1.4 Apr 1, 2023
Changes:
- Bump to `@polkadot/util` 11.1.3
## 3.1.3 Mar 25, 2023
Changes:
- Align `eventemitter` version with `@polkadot/api`
## 3.1.2 Mar 25, 2023 ## 3.1.2 Mar 25, 2023
Changes: Changes:
+3 -1
View File
@@ -1,4 +1,4 @@
699 Jaco 3.1.2 (#742) 730 Jaco 3.6.4 (#776)
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225) 7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
4 Antoine Estienne Refactor logic to better use prefix (#491) 4 Antoine Estienne Refactor logic to better use prefix (#491)
4 kwingram25 fix ff api url issue (#289) 4 kwingram25 fix ff api url issue (#289)
@@ -21,6 +21,7 @@
1 Derek Colley Remove redundant `div` wrappers in vue-identicon (#643) 1 Derek Colley Remove redundant `div` wrappers in vue-identicon (#643)
1 Harry Liu Update README.md (#166) 1 Harry Liu Update README.md (#166)
1 Jake Naviasky Add Edgeware chain prefix to settings. (#317) 1 Jake Naviasky Add Edgeware chain prefix to settings. (#317)
1 Jeeyong Um Fix outdated links in README.md (#772)
1 Logan Saether Propose W3F node (#188) 1 Logan Saether Propose W3F node (#188)
1 Lovesh Harchandani Allow Ledger support for Dock (#425) 1 Lovesh Harchandani Allow Ledger support for Dock (#425)
1 Luke Schoen Fix typo in heading (#114) 1 Luke Schoen Fix typo in heading (#114)
@@ -33,4 +34,5 @@
1 WoeOm add darwinia ss58 (#379) 1 WoeOm add darwinia ss58 (#379)
1 yuhui1208 [Stores] make FileStroe read key safely (#338) 1 yuhui1208 [Stores] make FileStroe read key safely (#338)
1 Yuri Add webpack 5 support (#557) 1 Yuri Add webpack 5 support (#557)
1 Zen feat: adapt Vue 3.x (#755)
1 菩提 fix some bugs (#260) 1 菩提 fix some bugs (#260)
+1 -1
View File
@@ -13,6 +13,6 @@ The following UI components are currently available -
Additionally some shared libraries, that are not dependent on any framework - Additionally some shared libraries, that are not dependent on any framework -
- [ui-keyring](packages/ui-keyring/) A browser-specific wrapper around the base [@polkadot/util-keyring](https://github.com/polkadot-js/util/) library - [ui-keyring](packages/ui-keyring/) A browser-specific wrapper around the base [@polkadot/keyring](https://github.com/polkadot-js/common/) library
- [ui-settings](packages/ui-settings/) A browser local storage wrapper for app settings & configuration - [ui-settings](packages/ui-settings/) A browser local storage wrapper for app settings & configuration
- [ui-shared](packages/ui-shared) Shared logic that is used across UI components, e.g. for icon generation - [ui-shared](packages/ui-shared) Shared logic that is used across UI components, e.g. for icon generation
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import baseConfig from '@polkadot/dev/config/eslint';
export default [
...baseConfig
];
+9 -9
View File
@@ -2,7 +2,7 @@
"author": "Jaco Greeff <jacogr@gmail.com>", "author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"engines": { "engines": {
"node": ">=14" "node": ">=18.14"
}, },
"homepage": "https://github.com/polkadot-js/ui#readme", "homepage": "https://github.com/polkadot-js/ui#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -14,10 +14,10 @@
}, },
"sideEffects": false, "sideEffects": false,
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"versions": { "versions": {
"git": "3.1.2", "git": "3.6.4",
"npm": "3.1.2" "npm": "3.6.4"
}, },
"workspaces": [ "workspaces": [
"packages/*" "packages/*"
@@ -33,15 +33,15 @@
"test:one": "polkadot-dev-run-test --env browser" "test:one": "polkadot-dev-run-test --env browser"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/dev": "^0.72.22", "@polkadot/dev": "^0.77.1",
"@polkadot/x-bundle": "^11.1.2", "@polkadot/x-bundle": "^12.6.1",
"@types/node": "^18.15.9", "@types/node": "^20.9.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-is": "^18.2.0", "react-is": "^18.2.0",
"react-native": "^0.71.4" "react-native": "^0.72.7"
}, },
"resolutions": { "resolutions": {
"typescript": "^5.0.2" "typescript": "^5.2.2"
} }
} }
+12 -15
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Renders an SVG picture representing an address", "description": "Renders an SVG picture representing an address",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,25 +18,23 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/keyring": "^11.1.2", "@polkadot/keyring": "^12.6.1",
"@polkadot/ui-settings": "3.1.2", "@polkadot/ui-settings": "3.6.4",
"@polkadot/ui-shared": "3.1.2", "@polkadot/ui-shared": "3.6.4",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"ethereum-blockies-base64": "^1.0.2", "ethereum-blockies-base64": "^1.0.2",
"jdenticon": "3.2.0", "jdenticon": "3.2.0",
"react-copy-to-clipboard": "^5.1.0", "react-copy-to-clipboard": "^5.1.0",
"styled-components": "^5.3.9", "styled-components": "^6.1.1",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@types/react-copy-to-clipboard": "^5.0.4", "@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.2.15",
"@types/styled-components": "^5.1.26",
"styled-components": "^5.3.9",
"xmlserializer": "^0.6.1" "xmlserializer": "^0.6.1"
}, },
"peerDependencies": { "peerDependencies": {
@@ -45,7 +43,6 @@
"@polkadot/util-crypto": "*", "@polkadot/util-crypto": "*",
"react": "*", "react": "*",
"react-dom": "*", "react-dom": "*",
"react-is": "*", "react-is": "*"
"styled-components": "*"
} }
} }
+2 -12
View File
@@ -6,23 +6,13 @@ import type { IdentityProps as Props, Props as ComponentProps } from './types.js
import React from 'react'; import React from 'react';
import CopyToClipboard from 'react-copy-to-clipboard'; import CopyToClipboard from 'react-copy-to-clipboard';
import styledComponents, { StyledInterface } from 'styled-components';
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings'; import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
import { isHex, isU8a, u8aToHex } from '@polkadot/util'; import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto'; import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js'; import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js';
import { styled } from './styled.js';
// In styled-components v6, there is a named export which can be used
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
const Fallback = Beachball; const Fallback = Beachball;
@@ -99,7 +89,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
} }
private getWrapped ({ address, publicKey }: State, { Custom }: Props): React.ReactNode { private getWrapped ({ address, publicKey }: State, { Custom }: Props): React.ReactNode {
const { className = '', isAlternative, isHighlight, size = DEFAULT_SIZE, style, theme = settings.icon } = this.props; const { className = '', isAlternative, isHighlight, size = DEFAULT_SIZE, style = {}, theme = settings.icon } = this.props;
const Component = !address const Component = !address
? Empty ? Empty
: Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback; : Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback;
-1
View File
@@ -2,6 +2,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
export * from './icons/index.js'; export * from './icons/index.js';
export { Identicon } from './Identicon.js'; export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
@@ -7,10 +7,10 @@ import React, { useCallback } from 'react';
import { beachballIcon } from '@polkadot/ui-shared'; import { beachballIcon } from '@polkadot/ui-shared';
function Identicon ({ address, className = '', size, style }: Props): React.ReactElement<Props> { function Identicon ({ address, className = '', size, style = {} }: Props): React.ReactElement<Props> {
const updateElem = useCallback( const updateElem = useCallback(
(node: HTMLDivElement): void => { (node: HTMLDivElement): void => {
node && node.appendChild( node?.appendChild(
beachballIcon(address, { isAlternative: false, size }) beachballIcon(address, { isAlternative: false, size })
); );
}, },
+1 -1
View File
@@ -5,7 +5,7 @@ import type { Props } from '../types.js';
import React from 'react'; import React from 'react';
function Identicon ({ className = '', size, style }: Props): React.ReactElement<Props> { function Identicon ({ className = '', size, style = {} }: Props): React.ReactElement<Props> {
return ( return (
<svg <svg
className={className} className={className}
@@ -5,23 +5,14 @@ import type { Props } from '../types.js';
import makeBlockie from 'ethereum-blockies-base64'; import makeBlockie from 'ethereum-blockies-base64';
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
import styledComponents, { StyledInterface } from 'styled-components';
// In styled-components v6, there is a named export which can be used import { styled } from '../styled.js';
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface ImgProps { interface ImgProps {
size: number; size: number;
} }
function Identicon ({ address, className = '', size, style }: Props): React.ReactElement<Props> { function Identicon ({ address, className = '', size, style = {} }: Props): React.ReactElement<Props> {
const imgSrc = useMemo( const imgSrc = useMemo(
() => makeBlockie(address), () => makeBlockie(address),
[address] [address]
@@ -37,7 +28,7 @@ function Identicon ({ address, className = '', size, style }: Props): React.Reac
); );
} }
const StyledImg = styled.img(({ size }: ImgProps) => ` const StyledImg = styled.img<ImgProps>(({ size }) => `
display: block; display: block;
height: ${size}px; height: ${size}px;
width: ${size}px; width: ${size}px;
@@ -6,7 +6,7 @@ import type { Props } from '../types.js';
import * as jdenticon from 'jdenticon'; import * as jdenticon from 'jdenticon';
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
function Identicon ({ className = '', publicKey, size, style }: Props): React.ReactElement<Props> { function Identicon ({ className = '', publicKey, size, style = {} }: Props): React.ReactElement<Props> {
const html = useMemo( const html = useMemo(
() => ({ __html: jdenticon.toSvg(publicKey.substring(2), size) }), () => ({ __html: jdenticon.toSvg(publicKey.substring(2), size) }),
[publicKey, size] [publicKey, size]
@@ -35,7 +35,7 @@ function renderCircle ({ cx, cy, fill, r }: Circle, key: number): React.ReactNod
); );
} }
function Identicon ({ address, className = '', isAlternative = false, size, style }: Props): React.ReactElement<Props> { function Identicon ({ address, className = '', isAlternative = false, size, style = {} }: Props): React.ReactElement<Props> {
const circles = useMemo( const circles = useMemo(
() => polkadotIcon(address, { isAlternative }), () => polkadotIcon(address, { isAlternative }),
[address, isAlternative] [address, isAlternative]
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.6.4' };
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { styled } from 'styled-components';
+2 -5
View File
@@ -1,10 +1,9 @@
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors // Copyright 2018-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type React from 'react';
import type { Prefix } from '@polkadot/util-crypto/address/types'; import type { Prefix } from '@polkadot/util-crypto/address/types';
import React from 'react';
export interface BaseProps { export interface BaseProps {
className?: string; className?: string;
style?: React.CSSProperties; style?: React.CSSProperties;
@@ -12,11 +11,9 @@ export interface BaseProps {
export interface Props extends BaseProps { export interface Props extends BaseProps {
address: string; address: string;
isAlternative?: boolean; isAlternative?: boolean | undefined;
className?: string;
publicKey: string; publicKey: string;
size: number; size: number;
style?: React.CSSProperties;
} }
export interface IdentityProps extends BaseProps { export interface IdentityProps extends BaseProps {
+9 -10
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Generates and reads QR codes", "description": "Generates and reads QR codes",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,26 +18,25 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/ui-settings": "3.1.2", "@polkadot/ui-settings": "3.6.4",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"qrcode-generator": "^1.4.4", "qrcode-generator": "^1.4.4",
"react-qr-reader": "^2.2.1", "react-qr-reader": "^2.2.1",
"styled-components": "^5.3.9", "styled-components": "^6.1.1",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@types/react-qr-reader": "^2.1.4", "@types/react-qr-reader": "^2.1.7"
"@types/styled-components": "^5.1.26"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/util": "*", "@polkadot/util": "*",
"@polkadot/util-crypto": "*", "@polkadot/util-crypto": "*",
"react": "*", "react": "*",
"react-dom": "*", "react-dom": "*",
"styled-components": "*" "react-is": "*"
} }
} }
+6 -16
View File
@@ -2,30 +2,20 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useMemo, useRef, useState } from 'react'; import React, { useEffect, useMemo, useRef, useState } from 'react';
import styledComponents, { StyledInterface } from 'styled-components';
import { objectSpread } from '@polkadot/util'; import { objectSpread } from '@polkadot/util';
import { xxhashAsHex } from '@polkadot/util-crypto'; import { xxhashAsHex } from '@polkadot/util-crypto';
import { qrcode } from './qrcode.js'; import { qrcode } from './qrcode.js';
import { styled } from './styled.js';
import { createFrames, createImgSize } from './util.js'; import { createFrames, createImgSize } from './util.js';
// In styled-components v6, there is a named export which can be used
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface Props { interface Props {
className?: string; className?: string | undefined;
size?: string | number; size?: string | number | undefined;
skipEncoding?: boolean; skipEncoding?: boolean;
style?: React.CSSProperties; style?: React.CSSProperties | undefined;
timerDelay?: number; timerDelay?: number | undefined;
value: Uint8Array; value: Uint8Array;
} }
@@ -55,7 +45,7 @@ function getDataUrl (value: Uint8Array): string {
return qr.createDataURL(16, 0); return qr.createDataURL(16, 0);
} }
function Display ({ className, size, skipEncoding, style, timerDelay = DEFAULT_FRAME_DELAY, value }: Props): React.ReactElement<Props> | null { function Display ({ className = '', size, skipEncoding, style = {}, timerDelay = DEFAULT_FRAME_DELAY, value }: Props): React.ReactElement<Props> | null {
const [{ image }, setFrameState] = useState<FrameState>({ frameIdx: 0, frames: [], image: null, valueHash: null }); const [{ image }, setFrameState] = useState<FrameState>({ frameIdx: 0, frames: [], image: null, valueHash: null });
const timerRef = useRef<TimerState>({ timerDelay, timerId: null }); const timerRef = useRef<TimerState>({ timerDelay, timerId: null });
+6 -16
View File
@@ -3,27 +3,17 @@
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import Reader from 'react-qr-reader'; import Reader from 'react-qr-reader';
import styledComponents, { StyledInterface } from 'styled-components';
import { styled } from './styled.js';
import { createImgSize } from './util.js'; import { createImgSize } from './util.js';
// In styled-components v6, there is a named export which can be used
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface Props { interface Props {
className?: string; className?: string | undefined;
delay?: number; delay?: number;
onError?: (error: Error) => void; onError?: undefined | ((error: Error) => void);
onScan: (data: string) => void; onScan: (data: string) => void;
size?: string | number; size?: string | number | undefined;
style?: React.CSSProperties; style?: React.CSSProperties | undefined;
} }
const DEFAULT_DELAY = 150; const DEFAULT_DELAY = 150;
@@ -32,7 +22,7 @@ const DEFAULT_ERROR = (error: Error): void => {
console.error('@polkadot/react-qr:Scan', error.message); console.error('@polkadot/react-qr:Scan', error.message);
}; };
function Scan ({ className, delay = DEFAULT_DELAY, onError = DEFAULT_ERROR, onScan, size, style }: Props): React.ReactElement<Props> { function Scan ({ className = '', delay = DEFAULT_DELAY, onError = DEFAULT_ERROR, onScan, size, style = {} }: Props): React.ReactElement<Props> {
const containerStyle = useMemo( const containerStyle = useMemo(
() => createImgSize(size), () => createImgSize(size),
[size] [size]
+10 -5
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors // Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { decodeAddress } from '@polkadot/util-crypto'; import { decodeAddress } from '@polkadot/util-crypto';
@@ -11,8 +13,8 @@ import { QrScan } from './Scan.js';
interface ScanType { interface ScanType {
isAddress: boolean; isAddress: boolean;
content: string; content: string;
genesisHash: string; genesisHash: HexString | null;
name?: string; name?: string | undefined;
} }
interface Props { interface Props {
@@ -29,13 +31,16 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
(data: string | null): void => { (data: string | null): void => {
if (data) { if (data) {
try { try {
let prefix: string, content: string, genesisHash: string, name: string[]; let prefix: string;
let content: string;
let genesisHash: string | null;
let name: string[];
if (!isEthereum) { if (!isEthereum) {
[prefix, content, genesisHash, ...name] = data.split(':'); [prefix, content, genesisHash, ...name] = data.split(':');
} else { } else {
[prefix, content, ...name] = data.split(':'); [prefix, content, ...name] = data.split(':');
genesisHash = ''; genesisHash = null;
content = content.substring(0, 42); content = content.substring(0, 42);
} }
@@ -52,7 +57,7 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
decodeAddress(content); decodeAddress(content);
} }
onScan({ content, genesisHash, isAddress, name: name?.length ? name.join(':') : undefined }); onScan({ content, genesisHash: genesisHash as HexString, isAddress, name: name?.length ? name.join(':') : undefined });
} catch (error) { } catch (error) {
onError && onError(error as Error); onError && onError(error as Error);
+2 -2
View File
@@ -3,7 +3,7 @@
export { QrDisplayAddress } from './DisplayAddress.js'; export { QrDisplayAddress } from './DisplayAddress.js';
export { QrDisplayPayload } from './DisplayPayload.js'; export { QrDisplayPayload } from './DisplayPayload.js';
export { QrScanAddress } from './ScanAddress.js';
export { QrScanSignature } from './ScanSignature.js';
export { QrNetworkSpecs } from './NetworkSpecs.js'; export { QrNetworkSpecs } from './NetworkSpecs.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
export { QrScanAddress } from './ScanAddress.js';
export { QrScanSignature } from './ScanSignature.js';
+9 -21
View File
@@ -1,24 +1,12 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors // Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
const ADDRESS_PREFIX = 'substrate'; export const ADDRESS_PREFIX = 'substrate';
const SEED_PREFIX = 'secret'; export const SEED_PREFIX = 'secret';
const FRAME_SIZE = 1024; export const FRAME_SIZE = 1024;
const SUBSTRATE_ID = new Uint8Array([0x53]); export const SUBSTRATE_ID = new Uint8Array([0x53]);
const CRYPTO_SR25519 = new Uint8Array([0x01]); export const CRYPTO_SR25519 = new Uint8Array([0x01]);
const CMD_SIGN_TX = new Uint8Array([0]); export const CMD_SIGN_TX = new Uint8Array([0]);
const CMD_SIGN_TX_HASH = new Uint8Array([1]); export const CMD_SIGN_TX_HASH = new Uint8Array([1]);
const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]); export const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
const CMD_SIGN_MSG = new Uint8Array([3]); export const CMD_SIGN_MSG = new Uint8Array([3]);
export {
ADDRESS_PREFIX,
CMD_SIGN_TX,
CMD_SIGN_TX_HASH,
CMD_SIGN_IMMORTAL_TX,
CMD_SIGN_MSG,
CRYPTO_SR25519,
FRAME_SIZE,
SEED_PREFIX,
SUBSTRATE_ID
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.6.4' };
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { styled } from 'styled-components';
+3 -2
View File
@@ -13,9 +13,10 @@ export function encodeNumber (value: number): Uint8Array {
} }
export function encodeString (value: string): Uint8Array { export function encodeString (value: string): Uint8Array {
const u8a = new Uint8Array(value.length); const count = value.length;
const u8a = new Uint8Array(count);
for (let i = 0; i < value.length; i++) { for (let i = 0; i < count; i++) {
u8a[i] = value.charCodeAt(i); u8a[i] = value.charCodeAt(i);
} }
+3
View File
@@ -5,6 +5,9 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/*.spec.ts"
],
"references": [ "references": [
{ "path": "../ui-settings/tsconfig.build.json" } { "path": "../ui-settings/tsconfig.build.json" }
] ]
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../react-qr/tsconfig.build.json" }
]
}
+7 -7
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Renders an SVG picture representing an address", "description": "Renders an SVG picture representing an address",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,17 +18,17 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/ui-shared": "3.1.2", "@polkadot/ui-shared": "3.6.4",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"react-native-svg": "^12.5.1", "react-native-svg": "^12.5.1",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@types/react-native": "^0.71.5" "@types/react-native": "^0.72.6"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/util": "*", "@polkadot/util": "*",
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.6.4' };
+1 -1
View File
@@ -123,7 +123,7 @@ class MyReactComponent extends React.PureComponent<State> {
- What are 'external' accounts, i.e. when to set the `isExternal` meta key to true? - What are 'external' accounts, i.e. when to set the `isExternal` meta key to true?
- An external account is one where the keys are not managed by keyring, e.g. in Parity Signer or Ledger Nano. - An external account is one where the keys are not managed by keyring, e.g. in Parity Signer or Ledger Nano.
- SS58 Encode / Decode? - SS58 Encode / Decode?
- SS58 is a simple address format designed for Substrate based chains. You can read about its specification in more detail in the [Parity Wiki](https://wiki.parity.io/External-Address-Format-(SS58)). - SS58 is a simple address format designed for Substrate based chains. You can read about its specification in more detail in the [Substrate Documentation](https://docs.substrate.io/reference/address-formats/).
**If you have any unanswered/undocumented questions, please raise an issue [here](https://github.com/polkadot-js/ui/issues).** **If you have any unanswered/undocumented questions, please raise an issue [here](https://github.com/polkadot-js/ui/issues).**
+10 -10
View File
@@ -2,7 +2,7 @@
"author": "Jaco Greeff <jacogr@gmail.com>", "author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -17,21 +17,21 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/keyring": "^11.1.2", "@polkadot/keyring": "^12.6.1",
"@polkadot/ui-settings": "3.1.2", "@polkadot/ui-settings": "3.6.4",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"mkdirp": "^2.1.6", "mkdirp": "^3.0.1",
"rxjs": "^7.8.0", "rxjs": "^7.8.1",
"store": "^2.0.12", "store": "^2.0.12",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@types/mkdirp": "^2.0.0", "@types/mkdirp": "^2.0.0",
"@types/store": "^2.0.2" "@types/store": "^2.0.5"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/keyring": "*", "@polkadot/keyring": "*",
+6 -5
View File
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { KeyringInstance, KeyringPair } from '@polkadot/keyring/types'; import type { KeyringInstance, KeyringPair } from '@polkadot/keyring/types';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from '@polkadot/util-crypto/address/types'; import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { AddressSubject } from './observable/types.js'; import type { AddressSubject } from './observable/types.js';
import type { KeyringOptions, KeyringStore } from './types.js'; import type { KeyringOptions, KeyringStore } from './types.js';
@@ -28,9 +29,9 @@ export class Base {
protected _store: KeyringStore; protected _store: KeyringStore;
protected _genesisHash?: string; protected _genesisHash?: HexString | undefined;
protected _genesisHashAdd: string[] = []; protected _genesisHashAdd: HexString[] = [];
constructor () { constructor () {
this.#accounts = accounts; this.#accounts = accounts;
@@ -64,11 +65,11 @@ export class Base {
throw new Error('Keyring should be initialised via \'loadAll\' before use'); throw new Error('Keyring should be initialised via \'loadAll\' before use');
} }
public get genesisHash (): string | undefined { public get genesisHash (): HexString | undefined {
return this._genesisHash; return this._genesisHash;
} }
public get genesisHashes (): string[] { public get genesisHashes (): HexString[] {
return this._genesisHash return this._genesisHash
? [this._genesisHash, ...this._genesisHashAdd] ? [this._genesisHash, ...this._genesisHashAdd]
: [...this._genesisHashAdd]; : [...this._genesisHashAdd];
@@ -130,7 +131,7 @@ export class Base {
this.#keyring = keyring; this.#keyring = keyring;
this._genesisHash = options.genesisHash && ( this._genesisHash = options.genesisHash && (
isString(options.genesisHash) isString(options.genesisHash)
? options.genesisHash.toString() ? options.genesisHash.toString() as HexString
: options.genesisHash.toHex() : options.genesisHash.toHex()
); );
this._genesisHashAdd = options.genesisHashAdd || []; this._genesisHashAdd = options.genesisHashAdd || [];
+16 -8
View File
@@ -152,8 +152,14 @@ export class Keyring extends Base implements KeyringStruct {
return Object return Object
.keys(available) .keys(available)
.map((address): KeyringAddress => this.getAddress(address, 'account') as KeyringAddress) .map((address) => this.getAddress(address, 'account'))
.filter((account) => env.isDevelopment() || account.meta.isTesting !== true); .filter((account): account is KeyringAddress =>
!!account &&
(
env.isDevelopment() ||
account.meta.isTesting !== true
)
);
} }
public getAddress (_address: string | Uint8Array, type: KeyringItemType | null = null): KeyringAddress | undefined { public getAddress (_address: string | Uint8Array, type: KeyringItemType | null = null): KeyringAddress | undefined {
@@ -180,7 +186,8 @@ export class Keyring extends Base implements KeyringStruct {
return Object return Object
.keys(available) .keys(available)
.map((address): KeyringAddress => this.getAddress(address) as KeyringAddress); .map((address) => this.getAddress(address))
.filter((account): account is KeyringAddress => !!account);
} }
public getContract (address: string | Uint8Array): KeyringAddress | undefined { public getContract (address: string | Uint8Array): KeyringAddress | undefined {
@@ -195,11 +202,12 @@ export class Keyring extends Base implements KeyringStruct {
.filter(([, { json: { meta: { contract } } }]): boolean => .filter(([, { json: { meta: { contract } } }]): boolean =>
!!contract && contract.genesisHash === this.genesisHash !!contract && contract.genesisHash === this.genesisHash
) )
.map(([address]) => this.getContract(address) as KeyringAddress); .map(([address]) => this.getContract(address))
.filter((account): account is KeyringAddress => !!account);
} }
private rewriteKey (json: KeyringJson, key: string, hexAddr: string, creator: (addr: string) => string): void { private rewriteKey (json: KeyringJson, key: string, hexAddr: string, creator: (addr: string) => string): void {
if (hexAddr.substring(0, 2) === '0x') { if (hexAddr.startsWith('0x')) {
return; return;
} }
@@ -252,7 +260,7 @@ export class Keyring extends Base implements KeyringStruct {
const [, hexAddr] = key.split(':'); const [, hexAddr] = key.split(':');
// move genesisHash to top-level (TODO Remove from contracts section?) // move genesisHash to top-level (TODO Remove from contracts section?)
json.meta.genesisHash = json.meta.genesisHash || (json.meta.contract && json.meta.contract.genesisHash); json.meta.genesisHash = json.meta.genesisHash || (json.meta.contract?.genesisHash);
this.contracts.add(this._store, address, json); this.contracts.add(this._store, address, json);
this.rewriteKey(json, key, hexAddr, contractKey); this.rewriteKey(json, key, hexAddr, contractKey);
@@ -269,7 +277,7 @@ export class Keyring extends Base implements KeyringStruct {
} }
private allowGenesis (json?: KeyringJson | { meta: KeyringJson$Meta } | null): boolean { private allowGenesis (json?: KeyringJson | { meta: KeyringJson$Meta } | null): boolean {
if (json && json.meta && this.genesisHash) { if (json?.meta && this.genesisHash) {
const hashes: (string | null | undefined)[] = Object.values(chains).find((hashes): boolean => const hashes: (string | null | undefined)[] = Object.values(chains).find((hashes): boolean =>
hashes.includes(this.genesisHash || '') hashes.includes(this.genesisHash || '')
) || [this.genesisHash]; ) || [this.genesisHash];
@@ -370,7 +378,7 @@ export class Keyring extends Base implements KeyringStruct {
public saveAddress (address: string, meta: KeyringPair$Meta, type: KeyringAddressType = 'address'): KeyringPair$Json { public saveAddress (address: string, meta: KeyringPair$Meta, type: KeyringAddressType = 'address'): KeyringPair$Json {
const available = this.addresses.subject.getValue(); const available = this.addresses.subject.getValue();
const json = (available[address] && available[address].json) || { const json = available[address]?.json || {
address, address,
meta: { meta: {
isRecent: undefined, isRecent: undefined,
+2 -2
View File
@@ -5,6 +5,6 @@ import { Keyring } from './Keyring.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
const keyring = new Keyring(); export const keyring = new Keyring();
export { Keyring, keyring }; export { Keyring };
+12 -18
View File
@@ -15,26 +15,20 @@ function toHex (address: string): string {
); );
} }
const accountKey = (address: string): string => export function accountKey (address: string): string {
`${ACCOUNT_PREFIX}${toHex(address)}`; return `${ACCOUNT_PREFIX}${toHex(address)}`;
}
const addressKey = (address: string): string => export function addressKey (address: string): string {
`${ADDRESS_PREFIX}${toHex(address)}`; return `${ADDRESS_PREFIX}${toHex(address)}`;
}
const contractKey = (address: string): string => export function contractKey (address: string): string {
`${CONTRACT_PREFIX}${toHex(address)}`; return `${CONTRACT_PREFIX}${toHex(address)}`;
}
const accountRegex = new RegExp(`^${ACCOUNT_PREFIX}0x[0-9a-f]*`, ''); export const accountRegex = new RegExp(`^${ACCOUNT_PREFIX}0x[0-9a-f]*`, '');
const addressRegex = new RegExp(`^${ADDRESS_PREFIX}0x[0-9a-f]*`, ''); export const addressRegex = new RegExp(`^${ADDRESS_PREFIX}0x[0-9a-f]*`, '');
const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, ''); export const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
export {
accountKey,
accountRegex,
addressKey,
addressRegex,
contractKey,
contractRegex
};
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/util authors & contributors // Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// Be able to import json in TS // Be able to import json in TS
@@ -4,4 +4,4 @@
import { accountKey } from '../defaults.js'; import { accountKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js'; import { genericSubject } from './genericSubject.js';
export const accounts = genericSubject(accountKey, true); export const accounts = /*#__PURE__*/ genericSubject(accountKey, true);
@@ -4,4 +4,4 @@
import { addressKey } from '../defaults.js'; import { addressKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js'; import { genericSubject } from './genericSubject.js';
export const addresses = genericSubject(addressKey); export const addresses = /*#__PURE__*/ genericSubject(addressKey);
@@ -4,4 +4,4 @@
import { contractKey } from '../defaults.js'; import { contractKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js'; import { genericSubject } from './genericSubject.js';
export const contracts = genericSubject(contractKey); export const contracts = /*#__PURE__*/ genericSubject(contractKey);
+1 -1
View File
@@ -15,7 +15,7 @@ interface Result {
contracts: SubjectInfo; contracts: SubjectInfo;
} }
export const obervableAll = combineLatest([ export const obervableAll = /*#__PURE__*/ combineLatest([
accounts.subject, accounts.subject,
addresses.subject, addresses.subject,
contracts.subject contracts.subject
+2 -4
View File
@@ -9,12 +9,10 @@ import type { KeyringJson, KeyringStore } from '../types.js';
export interface SingleAddress { export interface SingleAddress {
json: KeyringJson; json: KeyringJson;
option: KeyringSectionOption; option: KeyringSectionOption;
type?: KeypairType; type?: KeypairType | undefined;
} }
export interface SubjectInfo { export type SubjectInfo = Record<string, SingleAddress>;
[index: string]: SingleAddress;
}
export interface AddressSubject { export interface AddressSubject {
add: (store: KeyringStore, address: string, json: KeyringJson, type?: KeypairType) => SingleAddress; add: (store: KeyringStore, address: string, json: KeyringJson, type?: KeypairType) => SingleAddress;
@@ -1,27 +0,0 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { KeyringStruct } from '../types.js';
import { KeyringOption } from './index.js';
describe('KeyringOption', (): void => {
// Warning: Test "should not allow initOptions to be called more than once" generated asynchronous activity after the test ended. This activity created the error "TypeError: Cannot read properties of undefined (reading 'subject')" and would have caused the test to fail, but instead triggered an uncaughtException event.
it.skip('should not allow initOptions to be called more than once', (): void => {
const keyringOption = new KeyringOption();
const state = {} as KeyringStruct;
// first call
keyringOption.init(state);
// second call
expect(
() => keyringOption.init(state)
).toThrow('Unable to initialise options more than once');
// cleanup?
keyringOption.clear();
});
});
+2 -2
View File
@@ -37,7 +37,7 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
export class KeyringOption implements KeyringOptionInstance { export class KeyringOption implements KeyringOptionInstance {
#allSub: Subscription | null = null; #allSub: Subscription | null = null;
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions()); public readonly optionsSubject = new BehaviorSubject<KeyringOptions>(this.emptyOptions());
public createOptionHeader (name: string): KeyringSectionOption { public createOptionHeader (name: string): KeyringSectionOption {
return { return {
@@ -77,7 +77,7 @@ export class KeyringOption implements KeyringOptionInstance {
} }
} }
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions { private linkItems (items: Record<string, KeyringSectionOptions>): KeyringSectionOptions {
return Object.keys(items).reduce((result, header): KeyringSectionOptions => { return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
const options = items[header]; const options = items[header];
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.6.4' };
+2 -2
View File
@@ -3,7 +3,7 @@
import type { KeyringJson, KeyringStore } from '../types.js'; import type { KeyringJson, KeyringStore } from '../types.js';
import mkdirp from 'mkdirp'; import { mkdirpSync } from 'mkdirp';
import fs from 'node:fs'; import fs from 'node:fs';
import path from 'node:path'; import path from 'node:path';
@@ -13,7 +13,7 @@ export class FileStore implements KeyringStore {
constructor (path: string) { constructor (path: string) {
if (!fs.existsSync(path)) { if (!fs.existsSync(path)) {
mkdirp.sync(path); mkdirpSync(path);
} }
this.#path = path; this.#path = path;
+6 -21
View File
@@ -2,29 +2,14 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { KeyringInstance as BaseKeyringInstance, KeyringOptions as KeyringOptionsBase, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types'; import type { KeyringInstance as BaseKeyringInstance, KeyringOptions as KeyringOptionsBase, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types';
import type { HexString } from '@polkadot/util/types';
import type { EncryptedJson } from '@polkadot/util-crypto/json/types'; import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
import type { KeypairType } from '@polkadot/util-crypto/types'; import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types.js'; import type { AddressSubject, SingleAddress } from './observable/types.js';
export interface ContractMeta { export type ContractMeta = NonNullable<KeyringPair$Meta['contract']>;
abi: string;
genesisHash?: string | null;
}
export interface KeyringJson$Meta { export type KeyringJson$Meta = KeyringPair$Meta;
contract?: ContractMeta;
genesisHash?: string | null;
hardwareType?: 'ledger';
isHardware?: boolean;
isInjected?: boolean;
isRecent?: boolean;
isTesting?: boolean;
name?: string;
whenCreated?: number;
whenEdited?: number;
whenUsed?: number;
[index: string]: unknown;
}
export interface KeyringJson { export interface KeyringJson {
address: string; address: string;
@@ -44,8 +29,8 @@ export interface KeyringStore {
export interface KeyringOptions extends KeyringOptionsBase { export interface KeyringOptions extends KeyringOptionsBase {
filter?: (json: KeyringJson) => boolean; filter?: (json: KeyringJson) => boolean;
genesisHash?: string | { toHex: () => string }; genesisHash?: HexString | { toHex: () => HexString };
genesisHashAdd?: string[]; genesisHashAdd?: HexString[];
isDevelopment?: boolean; isDevelopment?: boolean;
store?: KeyringStore; store?: KeyringStore;
} }
@@ -70,7 +55,7 @@ export interface KeyringStruct {
readonly addresses: AddressSubject; readonly addresses: AddressSubject;
readonly contracts: AddressSubject; readonly contracts: AddressSubject;
readonly keyring: BaseKeyringInstance | undefined; readonly keyring: BaseKeyringInstance | undefined;
readonly genesisHash?: string; readonly genesisHash?: string | undefined;
addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult; addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult;
addPair: (pair: KeyringPair, password: string) => CreateResult; addPair: (pair: KeyringPair, password: string) => CreateResult;
+3
View File
@@ -5,6 +5,9 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/*.spec.ts"
],
"references": [ "references": [
{ "path": "../ui-settings/tsconfig.build.json" } { "path": "../ui-settings/tsconfig.build.json" }
] ]
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../ui-keyring/tsconfig.build.json" }
]
}
+7 -7
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Manages app settings", "description": "Manages app settings",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,17 +18,17 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/networks": "^11.1.2", "@polkadot/networks": "^12.6.1",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"eventemitter3": "^4.0.7", "eventemitter3": "^5.0.1",
"store": "^2.0.12", "store": "^2.0.12",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@types/store": "^2.0.2" "@types/store": "^2.0.5"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/networks": "*", "@polkadot/networks": "*",
+2 -2
View File
@@ -3,7 +3,7 @@
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js'; import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
import EventEmitter from 'eventemitter3'; import { EventEmitter } from 'eventemitter3';
import store from 'store'; import store from 'store';
import { hasProcess, isUndefined } from '@polkadot/util'; import { hasProcess, isUndefined } from '@polkadot/util';
@@ -57,7 +57,7 @@ export class Settings implements SettingsStruct {
this.#emitter = new EventEmitter(); this.#emitter = new EventEmitter();
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead // will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env && process.env.WS_URL) || (ENDPOINT_DEFAULT.value as string); this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env?.['WS_URL']) || (ENDPOINT_DEFAULT.value as string);
this.#apiType = { param: this.#apiUrl, type: 'json-rpc' as EndpointType }; this.#apiType = { param: this.#apiUrl, type: 'json-rpc' as EndpointType };
this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT);
this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT);
+2 -2
View File
@@ -3,8 +3,8 @@
import { Settings, settings } from './Settings.js'; import { Settings, settings } from './Settings.js';
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults/index.js';
export { chains } from './defaults/chains.js'; export { chains } from './defaults/chains.js';
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults/index.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
export { settings, Settings }; export { Settings, settings };
+1 -3
View File
@@ -6,8 +6,6 @@ import { objectSpread } from '@polkadot/util';
type ChainDef = string[]; type ChainDef = string[];
const chains: Record <string, ChainDef> = selectableNetworks export const chains: Record <string, ChainDef> = /*#__PURE__*/ selectableNetworks
.filter((n) => n.genesisHash.length) .filter((n) => n.genesisHash.length)
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {}); .reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
export { chains };
@@ -3,10 +3,12 @@
import type { Option } from '../types.js'; import type { Option } from '../types.js';
export const ENDPOINTS: Option[] = [{ export const ENDPOINTS: Option[] = [
info: 'local', {
text: 'Local Node (Own, 127.0.0.1:9944)', info: 'local',
value: 'ws://127.0.0.1:9944/' text: 'Local Node (Own, 127.0.0.1:9944)',
}]; value: 'ws://127.0.0.1:9944/'
}
];
export const ENDPOINT_DEFAULT = ENDPOINTS[0]; export const ENDPOINT_DEFAULT = ENDPOINTS[0];
+14 -43
View File
@@ -3,15 +3,15 @@
import type { Option } from '../types.js'; import type { Option } from '../types.js';
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js'; export { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js'; export { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js'; export { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
import { PREFIX_DEFAULT, PREFIXES } from './ss58.js'; export { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.js'; export { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.js';
const CAMERA_DEFAULT = 'off'; export const CAMERA_DEFAULT = 'off';
const CAMERA: Option[] = [ export const CAMERA: Option[] = [
{ {
info: 'on', info: 'on',
text: 'Allow camera access', text: 'Allow camera access',
@@ -24,11 +24,11 @@ const CAMERA: Option[] = [
} }
]; ];
const LANGUAGE_DEFAULT = 'default'; export const LANGUAGE_DEFAULT = 'default';
const LOCKING_DEFAULT = 'session'; export const LOCKING_DEFAULT = 'session';
const LOCKING: Option[] = [ export const LOCKING: Option[] = [
{ {
info: 'session', info: 'session',
text: 'Once per session', text: 'Once per session',
@@ -41,9 +41,9 @@ const LOCKING: Option[] = [
} }
]; ];
const METADATA_UP_DEFAULT = 'off'; export const METADATA_UP_DEFAULT = 'off';
const METADATA_UP: Option[] = [ export const METADATA_UP: Option[] = [
{ {
info: 'off', info: 'off',
text: 'Do not auto-update extension metadata', text: 'Do not auto-update extension metadata',
@@ -56,9 +56,9 @@ const METADATA_UP: Option[] = [
} }
]; ];
const STORAGE_DEFAULT = 'off'; export const STORAGE_DEFAULT = 'off';
const STORAGE: Option[] = [ export const STORAGE: Option[] = [
{ {
info: 'on', info: 'on',
text: 'Allow local in-browser account storage', text: 'Allow local in-browser account storage',
@@ -70,32 +70,3 @@ const STORAGE: Option[] = [
value: 'off' value: 'off'
} }
]; ];
export {
CAMERA_DEFAULT,
CAMERA,
CRYPTOS,
CRYPTOS_ETH,
CRYPTOS_LEDGER,
ENDPOINT_DEFAULT,
ENDPOINTS,
ICON_DEFAULT,
ICON_DEFAULT_HOST,
ICONS,
LANGUAGE_DEFAULT,
LEDGER_CONN_DEFAULT,
LEDGER_CONN,
LOCKING_DEFAULT,
LOCKING,
METADATA_UP,
METADATA_UP_DEFAULT,
NOTIFICATION_DEFAULT,
PREFIX_DEFAULT,
PREFIXES,
STORAGE,
STORAGE_DEFAULT,
UIMODE_DEFAULT,
UIMODES,
UITHEME_DEFAULT,
UITHEMES
};
+9 -21
View File
@@ -5,13 +5,13 @@ import type { Option } from '../types.js';
import { isPolkadot } from './type.js'; import { isPolkadot } from './type.js';
const LANGUAGE_DEFAULT = 'default'; export const LANGUAGE_DEFAULT = 'default';
const UIMODE_DEFAULT = !isPolkadot && typeof window !== 'undefined' && window.location.host.includes('ui-light') export const UIMODE_DEFAULT = !isPolkadot && typeof window !== 'undefined' && window.location.host.includes('ui-light')
? 'light' ? 'light'
: 'full'; : 'full';
const UIMODES: Option[] = [ export const UIMODES: Option[] = [
{ {
info: 'full', info: 'full',
text: 'Fully featured', text: 'Fully featured',
@@ -24,11 +24,11 @@ const UIMODES: Option[] = [
} }
]; ];
const UITHEME_DEFAULT = isPolkadot export const UITHEME_DEFAULT = isPolkadot
? 'polkadot' ? 'polkadot'
: 'substrate'; : 'substrate';
const UITHEMES: Option[] = [ export const UITHEMES: Option[] = [
{ {
info: 'polkadot', info: 'polkadot',
text: 'Polkadot', text: 'Polkadot',
@@ -41,13 +41,13 @@ const UITHEMES: Option[] = [
} }
]; ];
const ICON_DEFAULT = 'default'; export const ICON_DEFAULT = 'default';
const ICON_DEFAULT_HOST = isPolkadot export const ICON_DEFAULT_HOST = isPolkadot
? 'polkadot' ? 'polkadot'
: 'substrate'; : 'substrate';
const ICONS: Option[] = [ export const ICONS: Option[] = [
{ {
info: 'default', info: 'default',
text: 'Default for the connected node', text: 'Default for the connected node',
@@ -70,16 +70,4 @@ const ICONS: Option[] = [
} }
]; ];
const NOTIFICATION_DEFAULT = 'popup'; export const NOTIFICATION_DEFAULT = 'popup';
export {
ICON_DEFAULT,
ICON_DEFAULT_HOST,
ICONS,
LANGUAGE_DEFAULT,
NOTIFICATION_DEFAULT,
UIMODE_DEFAULT,
UIMODES,
UITHEME_DEFAULT,
UITHEMES
};
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.6.4' };
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors // Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
export type Option = { export interface Option {
disabled?: boolean; disabled?: boolean;
info: string; info: string;
text: string; text: string;
+6 -6
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Shared logic that is usable accross all frameworks-specific areas", "description": "Shared logic that is usable accross all frameworks-specific areas",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,16 +18,16 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"colord": "^2.9.3", "colord": "^2.9.3",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"@types/xmlserializer": "^0.6.3", "@types/xmlserializer": "^0.6.6",
"xmlserializer": "^0.6.1" "xmlserializer": "^0.6.1"
}, },
"peerDependencies": { "peerDependencies": {
@@ -3,7 +3,7 @@
// Copyright 2016 Dan Finlay // Copyright 2016 Dan Finlay
export function container (diameter: number, background = 'white', className = '', _style: { [index: string]: string } = {}): HTMLElement { export function container (diameter: number, background = 'white', className = '', _style: Record<string, string> = {}): HTMLElement {
const element = document.createElement('div'); const element = document.createElement('div');
const style = Object.assign({ const style = Object.assign({
background, background,
@@ -12,7 +12,7 @@ import { container as newContainer } from './container.js';
import { SHAPE_COUNT } from './defaults.js'; import { SHAPE_COUNT } from './defaults.js';
import { seeder as newSeeder } from './seeder.js'; import { seeder as newSeeder } from './seeder.js';
export function beachballIcon (seed: string | Uint8Array, { size = 256 }: Options, className = '', style?: { [index: string]: string }): HTMLElement { export function beachballIcon (seed: string | Uint8Array, { size = 256 }: Options, className = '', style?: Record<string, string>): HTMLElement {
const seeder = newSeeder(seed); const seeder = newSeeder(seed);
const colorGen = colors(seeder); const colorGen = colors(seeder);
const outer = newContainer(size, 'white', className, style); const outer = newContainer(size, 'white', className, style);
@@ -3,6 +3,4 @@
export type Seeder = () => number; export type Seeder = () => number;
export interface ColorGen { export type ColorGen = (alpha?: number) => string;
(alpha?: number): string;
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.6.4' };
+3
View File
@@ -5,5 +5,8 @@
"outDir": "./build", "outDir": "./build",
"rootDir": "./src" "rootDir": "./src"
}, },
"exclude": [
"**/*.spec.ts"
],
"references": [] "references": []
} }
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../ui-shared/tsconfig.build.json" }
]
}
+7 -7
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues", "bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Renders an SVG picture representing an address", "description": "Renders an SVG picture representing an address",
"engines": { "engines": {
"node": ">=14" "node": ">=18"
}, },
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/vue-identicon#readme", "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/vue-identicon#readme",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -18,17 +18,17 @@
"./detectPackage.cjs" "./detectPackage.cjs"
], ],
"type": "module", "type": "module",
"version": "3.1.2", "version": "3.6.4",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@polkadot/ui-shared": "3.1.2", "@polkadot/ui-shared": "3.6.4",
"@polkadot/util": "^11.1.2", "@polkadot/util": "^12.6.1",
"@polkadot/util-crypto": "^11.1.2", "@polkadot/util-crypto": "^12.6.1",
"jdenticon": "3.2.0", "jdenticon": "3.2.0",
"tslib": "^2.5.0" "tslib": "^2.6.2"
}, },
"devDependencies": { "devDependencies": {
"vue": "^2.7.14" "vue": "^2.7.15"
}, },
"peerDependencies": { "peerDependencies": {
"@polkadot/util": "*", "@polkadot/util": "*",
+32 -20
View File
@@ -1,14 +1,16 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors // Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import type { VNode } from 'vue';
import type { Prefix } from '@polkadot/util-crypto/address/types'; import type { Prefix } from '@polkadot/util-crypto/address/types';
import { defineComponent, VNode } from 'vue'; import { defineComponent, h } from 'vue';
import { isHex, isU8a, u8aToHex } from '@polkadot/util'; import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto'; import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
import { Beachball, Empty, Jdenticon, Polkadot } from './icons/index.js'; import { Beachball, Empty, Jdenticon, Polkadot } from './icons/index.js';
import { adaptVNodeAttrs } from './util.js';
interface Account { interface Account {
address: string; address: string;
@@ -25,7 +27,7 @@ interface Data {
const DEFAULT_SIZE = 64; const DEFAULT_SIZE = 64;
function encodeAccount (value: string | Uint8Array, prefix?: Prefix): Account { export function encodeAccount (value: string | Uint8Array, prefix?: Prefix): Account {
try { try {
const address = isU8a(value) || isHex(value) const address = isU8a(value) || isHex(value)
? encodeAddress(value as string, prefix) ? encodeAddress(value as string, prefix)
@@ -80,23 +82,25 @@ export const Identicon = defineComponent({
} }
}, },
props: ['prefix', 'isAlternative', 'size', 'theme', 'value'], props: ['prefix', 'isAlternative', 'size', 'theme', 'value'],
render (h): VNode { render (): VNode {
const { address, iconSize, isAlternativeIcon, publicKey, type } = this.$data; const { address, iconSize, isAlternativeIcon, publicKey, type } = this.$data;
if (type === 'empty') { if (type === 'empty') {
return h('Empty', { return h(Empty, {
attrs: { ...adaptVNodeAttrs({
key: address, key: address,
size: iconSize size: iconSize
} })
}, []); }, []);
} else if (type === 'jdenticon') { } else if (type === 'jdenticon') {
return h('Jdenticon', { return h(Jdenticon, {
attrs: { ...adaptVNodeAttrs(
key: address, {
publicKey, key: address,
size: iconSize publicKey,
} size: iconSize
}
)
}, []); }, []);
} else if (type === 'substrate') { } else if (type === 'substrate') {
throw new Error('substrate type is not supported'); throw new Error('substrate type is not supported');
@@ -104,14 +108,22 @@ export const Identicon = defineComponent({
const cmp = type.charAt(0).toUpperCase() + type.slice(1); const cmp = type.charAt(0).toUpperCase() + type.slice(1);
return h(cmp, { if (['Beachball', 'Polkadot'].includes(cmp)) {
attrs: { const component = cmp === 'Beachball'
address, ? Beachball
isAlternative: isAlternativeIcon, : Polkadot;
key: address,
size: iconSize return h(component, {
} ...adaptVNodeAttrs({
}, []); address,
isAlternative: isAlternativeIcon,
key: address,
size: iconSize
})
}, []);
} else {
return h(cmp, {}, []);
}
}, },
watch: { watch: {
value: function (): void { value: function (): void {
-1
View File
@@ -2,5 +2,4 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
export { Identicon } from './Identicon.js'; export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js'; export { packageInfo } from './packageInfo.js';
@@ -1,11 +1,13 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors // Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import { defineComponent, VNode } from 'vue'; import type { VNode } from 'vue';
import { defineComponent, h } from 'vue';
import { beachballIcon } from '@polkadot/ui-shared'; import { beachballIcon } from '@polkadot/ui-shared';
type PropsType = { interface PropsType {
address: string; address: string;
size: number; size: number;
isAlternative: boolean; isAlternative: boolean;
@@ -17,7 +19,7 @@ type PropsType = {
*/ */
export const Beachball = defineComponent({ export const Beachball = defineComponent({
props: ['address', 'size', 'isAlternative'], props: ['address', 'size', 'isAlternative'],
render (h): VNode { render (): VNode {
const { address, isAlternative, size } = this.$props as PropsType; const { address, isAlternative, size } = this.$props as PropsType;
return h({ return h({
@@ -1,10 +1,12 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors // Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import * as jdenticon from 'jdenticon'; import type { VNode } from 'vue';
import { defineComponent, VNode } from 'vue';
type PropsType = { import * as jdenticon from 'jdenticon';
import { defineComponent, h } from 'vue';
interface PropsType {
publicKey: string, publicKey: string,
size: number size: number
} }
@@ -15,7 +17,7 @@ type PropsType = {
*/ */
export const Jdenticon = defineComponent({ export const Jdenticon = defineComponent({
props: ['publicKey', 'size'], props: ['publicKey', 'size'],
render (h): VNode { render (): VNode {
const { publicKey, size } = this.$props as PropsType; const { publicKey, size } = this.$props as PropsType;
return h({ return h({
+10 -6
View File
@@ -1,11 +1,15 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors // Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import { defineComponent, VNode } from 'vue'; import type { VNode } from 'vue';
import { defineComponent, h } from 'vue';
import { polkadotIcon } from '@polkadot/ui-shared'; import { polkadotIcon } from '@polkadot/ui-shared';
type propsType = { import { adaptVNodeAttrs } from '../util.js';
interface propsType {
address: string; address: string;
isAlternative: boolean; isAlternative: boolean;
size: number; size: number;
@@ -17,18 +21,18 @@ type propsType = {
*/ */
export const Polkadot = defineComponent({ export const Polkadot = defineComponent({
props: ['address', 'isAlternative', 'size'], props: ['address', 'isAlternative', 'size'],
render (h): VNode { render (): VNode {
const { address, isAlternative, size } = this.$props as propsType; const { address, isAlternative, size } = this.$props as propsType;
const circles = polkadotIcon(address, { isAlternative }).map(({ cx, cy, fill, r }) => const circles = polkadotIcon(address, { isAlternative }).map(({ cx, cy, fill, r }) =>
h('circle', { attrs: { cx, cy, fill, r } }, []) h('circle', { ...adaptVNodeAttrs({ cx, cy, fill, r }) }, [])
); );
return h('svg', { return h('svg', {
attrs: { ...adaptVNodeAttrs({
height: size, height: size,
viewBox: '0 0 64 64', viewBox: '0 0 64 64',
width: size width: size
} })
}, circles); }, circles);
} }
}); });
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev // Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.1.2' }; export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.6.4' };
+17
View File
@@ -0,0 +1,17 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { version } from 'vue';
const isV3 = version.startsWith('3.');
/**
* @internal
*
* Adjust attributes to be usable in both Vue 2 and Vue 3 components.
*/
export function adaptVNodeAttrs (data: Record<string, unknown>): Record<string, unknown> {
return isV3
? data
: { attrs: data };
}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors // Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
import path from 'path'; import path from 'path';
+3
View File
@@ -6,10 +6,13 @@
"references": [ "references": [
{ "path": "./packages/react-identicon/tsconfig.build.json" }, { "path": "./packages/react-identicon/tsconfig.build.json" },
{ "path": "./packages/react-qr/tsconfig.build.json" }, { "path": "./packages/react-qr/tsconfig.build.json" },
{ "path": "./packages/react-qr/tsconfig.spec.json" },
{ "path": "./packages/reactnative-identicon/tsconfig.build.json" }, { "path": "./packages/reactnative-identicon/tsconfig.build.json" },
{ "path": "./packages/ui-keyring/tsconfig.build.json" }, { "path": "./packages/ui-keyring/tsconfig.build.json" },
{ "path": "./packages/ui-keyring/tsconfig.spec.json" },
{ "path": "./packages/ui-settings/tsconfig.build.json" }, { "path": "./packages/ui-settings/tsconfig.build.json" },
{ "path": "./packages/ui-shared/tsconfig.build.json" }, { "path": "./packages/ui-shared/tsconfig.build.json" },
{ "path": "./packages/ui-shared/tsconfig.spec.json" },
{ "path": "./packages/vue-identicon/tsconfig.build.json" } { "path": "./packages/vue-identicon/tsconfig.build.json" }
] ]
} }
+3 -2
View File
@@ -6,8 +6,9 @@
}, },
"include": [ "include": [
"packages/**/src/**/*", "packages/**/src/**/*",
"packages/**/*.cjs", ".prettierrc.cjs",
"packages/**/*.js" "eslint.config.js",
"rollup.config.js"
], ],
"exclude": [ "exclude": [
"**/node_modules/**/*" "**/node_modules/**/*"
+2553 -2757
View File
File diff suppressed because it is too large Load Diff