Compare commits

..
46 Commits
Author SHA1 Message Date
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
github-actions[bot] bbf77d7b84 [CI Skip] release/stable 3.1.2
skip-checks: true
2023-03-25 08:06:33 +00:00
Jaco 3250187fbb 3.1.2 (#742)
* 3.1.2

* Remove assert usage

* Unsubscribe on open observable

* Attempt a clear

* Final attempt before skip

* .skip for problematic
2023-03-25 10:04:20 +02:00
github-actions[bot] e3168c8231 [CI Skip] bump/beta 3.1.2-1-x
skip-checks: true
2023-03-23 10:45:06 +00:00
Jaco 6d98c56e7a Small adjustments to icon calculations (#741)
* Small adjustments to icon calculations

* Keep original naming
2023-03-23 12:42:16 +02:00
github-actions[bot] bf986c079f [CI Skip] bump/beta 3.1.2-0-x
skip-checks: true
2023-03-23 09:09:10 +00:00
Jaco f0d21fa985 Cater for Ethereum-compatible multisig addresses (#740) 2023-03-23 11:06:46 +02:00
github-actions[bot] aad690bfda [CI Skip] release/stable 3.1.1
skip-checks: true
2023-03-19 08:12:45 +00:00
Jaco 6e30befa0f 3.1.1 (#739) 2023-03-19 10:10:29 +02:00
github-actions[bot] 4217c67acd [CI Skip] bump/beta 3.0.3-7-x
skip-checks: true
2023-03-18 10:42:30 +00:00
Jaco b181da4919 Bump dev deps (#738) 2023-03-18 12:39:38 +02:00
github-actions[bot] 6907d0c30a [CI Skip] bump/beta 3.0.3-6-x
skip-checks: true
2023-03-17 06:00:24 +00:00
Jaco 22c8d7ac0c Bump to TS 5.0 (#737)
* Bump to TS 5.0

* Adjust global dev-test imports
2023-03-17 07:58:03 +02:00
github-actions[bot] a3a918b2cb [CI Skip] bump/beta 3.0.3-5-x
skip-checks: true
2023-03-15 15:16:52 +00:00
Jaco 656be6550a Bump dev (#736)
* Bump dev

* Adjust types ref
2023-03-15 17:14:16 +02:00
github-actions[bot] fa8697331b [CI Skip] bump/beta 3.0.3-4-x
skip-checks: true
2023-03-14 10:55:42 +00:00
Jaco e392d52924 Remove stale workflow (#735) 2023-03-14 12:53:13 +02:00
github-actions[bot] 975b0a9fa2 [CI Skip] bump/beta 3.0.3-3-x
skip-checks: true
2023-03-13 12:58:31 +00:00
Jaco 8bd9b7b908 Adjust default.ts exports (#734) 2023-03-13 14:56:04 +02:00
github-actions[bot] 1a230f95f6 [CI Skip] bump/beta 3.0.3-2-x
skip-checks: true
2023-03-13 10:57:53 +00:00
Jaco c1b3cc87ee Swap from color to colord for color manipulation (#733) 2023-03-13 12:55:30 +02:00
github-actions[bot] e1f96f1fcf [CI Skip] bump/beta 3.0.3-1-x
skip-checks: true
2023-03-12 11:32:18 +00:00
Jaco 45b330aa90 Swap to using defineComponent for Vue (req. 2.7+) (#732)
* Swap to using definedComponent for Vue (req. 2.7+)

* Adjust

* Adjust

* CHANGELOG
2023-03-12 13:29:49 +02:00
github-actions[bot] 172051cedc [CI Skip] bump/beta 3.0.3-0-x
skip-checks: true
2023-03-12 10:03:45 +00:00
Jaco 0310baa9ee Bump dev (#731)
* Bump dev

* Adjust dev/node/test/node.d.ts imports

* Node resolution

* Revert dev/node/test/node.d.ts import
2023-03-12 12:01:20 +02:00
80 changed files with 1214 additions and 1302 deletions
+4 -4
View File
@@ -13,13 +13,13 @@ jobs:
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
with:
github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7'
issue-lock-comment: >
issue-inactive-days: '7'
issue-comment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query.
pr-lock-inactive-days: '2'
pr-lock-comment: >
pr-inactive-days: '2'
pr-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
-19
View File
@@ -1,19 +0,0 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '40 2/3 * * *'
jobs:
stale:
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/stale@v7
with:
repo-token: ${{ secrets.GH_PAT_BOT }}
stale-issue-message: 'This issue has been open for 365 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
stale-issue-label: 'stale'
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug]'
days-before-stale: 365
days-before-close: 7
+47
View File
@@ -1,5 +1,52 @@
# CHANGELOG
## 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
Changes:
- Cater for Ethereum-compatible multisig addresses
- Bump to `@polkadot/util` 11.1.2
## 3.1.1 Mar 19, 2023
Changes:
- Swap `vue-identitycon` to use `defineComponent` (requires vue 2.7+)
- Swap `BeachballIcon` to use `colord` library (ESM + CJS, smaller)
- Bump to `@polkadot/util` 11.1.1
## 3.0.2 Mar 11, 2023
Changes:
+1 -1
View File
@@ -1,4 +1,4 @@
687 Jaco 3.0.2 (#730)
710 Jaco 3.2.2 (#754)
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
4 Antoine Estienne Refactor logic to better use prefix (#491)
4 kwingram25 fix ff api url issue (#289)
+11 -8
View File
@@ -1,6 +1,9 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"engines": {
"node": ">=18.14"
},
"homepage": "https://github.com/polkadot-js/ui#readme",
"license": "Apache-2.0",
"packageManager": "yarn@3.2.0",
@@ -11,10 +14,10 @@
},
"sideEffects": false,
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"versions": {
"git": "3.0.2",
"npm": "3.0.2"
"git": "3.2.2",
"npm": "3.2.2"
},
"workspaces": [
"packages/*"
@@ -30,15 +33,15 @@
"test:one": "polkadot-dev-run-test --env browser"
},
"devDependencies": {
"@polkadot/dev": "^0.71.4",
"@polkadot/x-bundle": "^11.0.2",
"@types/node": "^18.15.0",
"@polkadot/dev": "^0.73.6",
"@polkadot/x-bundle": "^12.1.1",
"@types/node": "^18.16.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-is": "^18.2.0",
"react-native": "^0.71.4"
"react-native": "^0.71.7"
},
"resolutions": {
"typescript": "^4.9.5"
"typescript": "^5.0.4"
}
}
+12 -14
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/react-identicon",
"repository": {
"directory": "packages/react-identicon",
@@ -17,26 +18,24 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.2",
"@polkadot/ui-settings": "3.0.2",
"@polkadot/ui-shared": "3.0.2",
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"color": "^3.2.1",
"@polkadot/keyring": "^12.1.1",
"@polkadot/ui-settings": "3.2.2",
"@polkadot/ui-shared": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"ethereum-blockies-base64": "^1.0.2",
"jdenticon": "3.2.0",
"react-copy-to-clipboard": "^5.1.0",
"styled-components": "^5.3.8",
"styled-components": "^5.3.10",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.0.11",
"@types/react-dom": "^18.2.1",
"@types/styled-components": "^5.1.26",
"styled-components": "^5.3.8",
"xmlserializer": "^0.6.1"
},
"peerDependencies": {
@@ -45,7 +44,6 @@
"@polkadot/util-crypto": "*",
"react": "*",
"react-dom": "*",
"react-is": "*",
"styled-components": "*"
"react-is": "*"
}
}
+3 -13
View File
@@ -6,23 +6,13 @@ import type { IdentityProps as Props, Props as ComponentProps } from './types.js
import React from 'react';
import CopyToClipboard from 'react-copy-to-clipboard';
import styledComponents, { StyledInterface } from 'styled-components';
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.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
);
import { styled } from './styled.js';
const Fallback = Beachball;
@@ -74,7 +64,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
address,
publicKey
};
} catch (error) {
} catch {
return {
address: '',
publicKey: '0x'
@@ -99,7 +89,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
}
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
? Empty
: Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback;
-1
View File
@@ -2,6 +2,5 @@
// SPDX-License-Identifier: Apache-2.0
export * from './icons/index.js';
export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js';
@@ -7,7 +7,7 @@ import React, { useCallback } from 'react';
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(
(node: HTMLDivElement): void => {
node && node.appendChild(
+1 -1
View File
@@ -5,7 +5,7 @@ import type { Props } from '../types.js';
import React from 'react';
function Identicon ({ className = '', size, style }: Props): React.ReactElement<Props> {
function Identicon ({ className = '', size, style = {} }: Props): React.ReactElement<Props> {
return (
<svg
className={className}
@@ -5,23 +5,14 @@ import type { Props } from '../types.js';
import makeBlockie from 'ethereum-blockies-base64';
import React, { useMemo } from 'react';
import styledComponents, { StyledInterface } from 'styled-components';
// 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
);
import { styled } from '../styled.js';
interface ImgProps {
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(
() => makeBlockie(address),
[address]
@@ -6,7 +6,7 @@ import type { Props } from '../types.js';
import * as jdenticon from 'jdenticon';
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(
() => ({ __html: jdenticon.toSvg(publicKey.substring(2), 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(
() => polkadotIcon(address, { isAlternative }),
[address, isAlternative]
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
+16
View File
@@ -0,0 +1,16 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { StyledInterface } from 'styled-components';
import styledComponents from 'styled-components';
// 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
export const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
+2 -5
View File
@@ -1,10 +1,9 @@
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type React from 'react';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import React from 'react';
export interface BaseProps {
className?: string;
style?: React.CSSProperties;
@@ -12,11 +11,9 @@ export interface BaseProps {
export interface Props extends BaseProps {
address: string;
isAlternative?: boolean;
className?: string;
isAlternative?: boolean | undefined;
publicKey: string;
size: number;
style?: React.CSSProperties;
}
export interface IdentityProps extends BaseProps {
+9 -8
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Generates and reads QR codes",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/react-qr",
"repository": {
"directory": "packages/react-qr",
@@ -17,15 +18,15 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-settings": "3.0.2",
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"@polkadot/ui-settings": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"qrcode-generator": "^1.4.4",
"react-qr-reader": "^2.2.1",
"styled-components": "^5.3.8",
"styled-components": "^5.3.10",
"tslib": "^2.5.0"
},
"devDependencies": {
@@ -37,6 +38,6 @@
"@polkadot/util-crypto": "*",
"react": "*",
"react-dom": "*",
"styled-components": "*"
"react-is": "*"
}
}
+6 -16
View File
@@ -2,30 +2,20 @@
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useMemo, useRef, useState } from 'react';
import styledComponents, { StyledInterface } from 'styled-components';
import { objectSpread } from '@polkadot/util';
import { xxhashAsHex } from '@polkadot/util-crypto';
import { qrcode } from './qrcode.js';
import { styled } from './styled.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 {
className?: string;
size?: string | number;
className?: string | undefined;
size?: string | number | undefined;
skipEncoding?: boolean;
style?: React.CSSProperties;
timerDelay?: number;
style?: React.CSSProperties | undefined;
timerDelay?: number | undefined;
value: Uint8Array;
}
@@ -55,7 +45,7 @@ function getDataUrl (value: Uint8Array): string {
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 timerRef = useRef<TimerState>({ timerDelay, timerId: null });
+6 -16
View File
@@ -3,27 +3,17 @@
import React, { useCallback, useMemo } from 'react';
import Reader from 'react-qr-reader';
import styledComponents, { StyledInterface } from 'styled-components';
import { styled } from './styled.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 {
className?: string;
className?: string | undefined;
delay?: number;
onError?: (error: Error) => void;
onError?: undefined | ((error: Error) => void);
onScan: (data: string) => void;
size?: string | number;
style?: React.CSSProperties;
size?: string | number | undefined;
style?: React.CSSProperties | undefined;
}
const DEFAULT_DELAY = 150;
@@ -32,7 +22,7 @@ const DEFAULT_ERROR = (error: Error): void => {
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(
() => createImgSize(size),
[size]
+4 -3
View File
@@ -3,7 +3,6 @@
import React, { useCallback } from 'react';
import { assert } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
@@ -13,7 +12,7 @@ interface ScanType {
isAddress: boolean;
content: string;
genesisHash: string;
name?: string;
name?: string | undefined;
}
interface Props {
@@ -43,7 +42,9 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
const expectedPrefix = (isEthereum ? 'ethereum' : ADDRESS_PREFIX);
const isValidPrefix = (prefix === expectedPrefix) || (prefix === SEED_PREFIX);
assert(isValidPrefix, `Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
if (!isValidPrefix) {
throw new Error(`Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
}
const isAddress = prefix === expectedPrefix;
+2 -2
View File
@@ -3,7 +3,7 @@
export { QrDisplayAddress } from './DisplayAddress.js';
export { QrDisplayPayload } from './DisplayPayload.js';
export { QrScanAddress } from './ScanAddress.js';
export { QrScanSignature } from './ScanSignature.js';
export { QrNetworkSpecs } from './NetworkSpecs.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
// SPDX-License-Identifier: Apache-2.0
const ADDRESS_PREFIX = 'substrate';
const SEED_PREFIX = 'secret';
const FRAME_SIZE = 1024;
const SUBSTRATE_ID = new Uint8Array([0x53]);
const CRYPTO_SR25519 = new Uint8Array([0x01]);
const CMD_SIGN_TX = new Uint8Array([0]);
const CMD_SIGN_TX_HASH = new Uint8Array([1]);
const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
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
};
export const ADDRESS_PREFIX = 'substrate';
export const SEED_PREFIX = 'secret';
export const FRAME_SIZE = 1024;
export const SUBSTRATE_ID = new Uint8Array([0x53]);
export const CRYPTO_SR25519 = new Uint8Array([0x01]);
export const CMD_SIGN_TX = new Uint8Array([0]);
export const CMD_SIGN_TX_HASH = new Uint8Array([1]);
export const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
export const CMD_SIGN_MSG = new Uint8Array([3]);
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.2.2' };
+16
View File
@@ -0,0 +1,16 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { StyledInterface } from 'styled-components';
import styledComponents from 'styled-components';
// 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
export const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { u8aConcat, u8aToHex, u8aToString } from '@polkadot/util';
import { randomAsU8a } from '@polkadot/util-crypto';
+3 -2
View File
@@ -13,9 +13,10 @@ export function encodeNumber (value: number): 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);
}
+8 -7
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/reactnative-identicon",
"repository": {
"directory": "packages/reactnative-identicon",
@@ -17,17 +18,17 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-shared": "3.0.2",
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"@polkadot/ui-shared": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"react-native-svg": "^12.5.1",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/react-native": "^0.71.3"
"@types/react-native": "^0.71.6"
},
"peerDependencies": {
"@polkadot/util": "*",
@@ -54,7 +54,7 @@ export default class IdentityIcon extends React.PureComponent<Props, State> {
return address === prevState.address
? null
: { address, publicKey };
} catch (error) {
} catch {
return {
address: '',
publicKey: '0x'
@@ -5,7 +5,7 @@ import type { Props } from '../types.js';
import React from 'react';
import { View } from 'react-native';
import Svg, { Circle } from 'react-native-svg';
import { Circle, Svg } from 'react-native-svg';
export default function Empty ({ size }: Props): React.ReactElement<Props> {
return (
@@ -6,7 +6,7 @@ import type { Props } from '../types.js';
import React, { useMemo } from 'react';
import { View } from 'react-native';
import Svg, { Circle as SvgCircle } from 'react-native-svg';
import { Circle as SvgCircle, Svg } from 'react-native-svg';
import { polkadotIcon } from '@polkadot/ui-shared';
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
+11 -10
View File
@@ -1,10 +1,11 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-keyring",
"repository": {
"directory": "packages/ui-keyring",
@@ -16,20 +17,20 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.2",
"@polkadot/ui-settings": "3.0.2",
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"mkdirp": "^2.1.5",
"rxjs": "^7.8.0",
"@polkadot/keyring": "^12.1.1",
"@polkadot/ui-settings": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"mkdirp": "^2.1.6",
"rxjs": "^7.8.1",
"store": "^2.0.12",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/mkdirp": "^1.0.2",
"@types/mkdirp": "^2.0.0",
"@types/store": "^2.0.2"
},
"peerDependencies": {
+11 -1
View File
@@ -22,11 +22,13 @@ export class Base {
#contracts: AddressSubject;
#isEthereum: boolean;
#keyring?: KeyringInstance;
protected _store: KeyringStore;
protected _genesisHash?: string;
protected _genesisHash?: string | undefined;
protected _genesisHashAdd: string[] = [];
@@ -34,6 +36,7 @@ export class Base {
this.#accounts = accounts;
this.#addresses = addresses;
this.#contracts = contracts;
this.#isEthereum = false;
this._store = new BrowserStore();
}
@@ -49,6 +52,10 @@ export class Base {
return this.#contracts;
}
public get isEthereum (): boolean {
return this.#isEthereum;
}
public get keyring (): KeyringInstance {
if (this.#keyring) {
return this.#keyring;
@@ -117,6 +124,9 @@ export class Base {
this.setDevMode(options.isDevelopment);
}
// set Ethereum state
this.#isEthereum = keyring.type === 'ethereum';
this.#keyring = keyring;
this._genesisHash = options.genesisHash && (
isString(options.genesisHash)
+14 -4
View File
@@ -46,10 +46,20 @@ export class Keyring extends Base implements KeyringStruct {
}
public addMultisig (addresses: (string | Uint8Array)[], threshold: bigint | BN | number, meta: KeyringPair$Meta = {}): CreateResult {
const address = createKeyMulti(addresses, threshold);
let address = createKeyMulti(addresses, threshold);
// For Ethereum chains, the first 20 bytes of the hash indicates the actual address
// Testcases via creation and on-chain events:
// - input: 0x7a1671a0224c8927b08f978027d586ab6868de0d31bb5bc956b625ced2ab18c4
// - output: 0x7a1671a0224c8927b08f978027d586ab6868de0d
if (this.isEthereum) {
address = address.slice(0, 20);
}
// we could use `sortAddresses`, but rather use internal encode/decode so we are 100%
const who = u8aSorted(addresses.map((who) => this.decodeAddress(who))).map((who) => this.encodeAddress(who));
const who = u8aSorted(
addresses.map((who) => this.decodeAddress(who))
).map((who) => this.encodeAddress(who));
return this.addExternal(address, objectSpread<KeyringPair$Meta>({}, meta, { isMultisig: true, threshold: bnToBn(threshold).toNumber(), who }));
}
@@ -289,7 +299,7 @@ export class Keyring extends Base implements KeyringStruct {
this.loadContract(json, key);
}
}
} catch (error) {
} catch {
console.warn(`Keyring: Unable to load ${key}:${stringify(json)}`);
}
}
@@ -299,7 +309,7 @@ export class Keyring extends Base implements KeyringStruct {
if (this.allowGenesis(account)) {
try {
this.loadInjected(account.address, account.meta, account.type);
} catch (error) {
} catch {
console.warn(`Keyring: Unable to inject ${stringify(account)}`);
}
}
+2 -2
View File
@@ -5,6 +5,6 @@ import { Keyring } from './Keyring.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 =>
`${ACCOUNT_PREFIX}${toHex(address)}`;
export function accountKey (address: string): string {
return `${ACCOUNT_PREFIX}${toHex(address)}`;
}
const addressKey = (address: string): string =>
`${ADDRESS_PREFIX}${toHex(address)}`;
export function addressKey (address: string): string {
return `${ADDRESS_PREFIX}${toHex(address)}`;
}
const contractKey = (address: string): string =>
`${CONTRACT_PREFIX}${toHex(address)}`;
export function contractKey (address: string): string {
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 {
accountKey,
accountRegex,
addressKey,
addressRegex,
contractKey,
contractRegex
};
export const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
@@ -4,4 +4,4 @@
import { accountKey } from '../defaults.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 { 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 { 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;
}
export const obervableAll = combineLatest([
export const obervableAll = /*#__PURE__*/ combineLatest([
accounts.subject,
addresses.subject,
contracts.subject
+1 -1
View File
@@ -9,7 +9,7 @@ import type { KeyringJson, KeyringStore } from '../types.js';
export interface SingleAddress {
json: KeyringJson;
option: KeyringSectionOption;
type?: KeypairType;
type?: KeypairType | undefined;
}
export interface SubjectInfo {
+10 -7
View File
@@ -1,24 +1,27 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { KeyringStruct } from '../types.js';
import { KeyringOption } from './index.js';
const keyringOption = new KeyringOption();
describe('KeyringOption', (): void => {
it('should not allow initOptions to be called more than once', (): void => {
const state: Partial<KeyringStruct> = {};
// 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 as KeyringStruct);
keyringOption.init(state);
// second call
expect(
() => keyringOption.init(state as KeyringStruct)
() => keyringOption.init(state)
).toThrow('Unable to initialise options more than once');
// cleanup?
keyringOption.clear();
});
});
+13 -4
View File
@@ -1,14 +1,13 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Subscription } from 'rxjs';
import type { SingleAddress } from '../observable/types.js';
import type { KeyringStruct } from '../types.js';
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types.js';
import { BehaviorSubject } from 'rxjs';
import { assert } from '@polkadot/util';
import { obervableAll } from '../observable/index.js';
let hasCalledInitOptions = false;
@@ -36,6 +35,8 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
};
export class KeyringOption implements KeyringOptionInstance {
#allSub: Subscription | null = null;
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
public createOptionHeader (name: string): KeyringSectionOption {
@@ -47,9 +48,11 @@ export class KeyringOption implements KeyringOptionInstance {
}
public init (keyring: KeyringStruct): void {
assert(!hasCalledInitOptions, 'Unable to initialise options more than once');
if (hasCalledInitOptions) {
throw new Error('Unable to initialise options more than once');
}
obervableAll.subscribe((): void => {
this.#allSub = obervableAll.subscribe((): void => {
const opts = this.emptyOptions();
this.addAccounts(keyring, opts);
@@ -68,6 +71,12 @@ export class KeyringOption implements KeyringOptionInstance {
hasCalledInitOptions = true;
}
public clear (): void {
if (this.#allSub) {
this.#allSub.unsubscribe();
}
}
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
const options = items[header];
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.2.2' };
+3 -3
View File
@@ -7,8 +7,6 @@ import mkdirp from 'mkdirp';
import fs from 'node:fs';
import path from 'node:path';
import { assert } from '@polkadot/util';
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
export class FileStore implements KeyringStore {
#path: string;
@@ -35,7 +33,9 @@ export class FileStore implements KeyringStore {
public get (key: string, fn: (value: KeyringJson) => void): void {
const value = this._readKey(key);
assert(value?.address, `Invalid JSON found for ${key}`);
if (!value?.address) {
throw new Error(`Invalid JSON found for ${key}`);
}
fn(value);
}
+2 -2
View File
@@ -13,7 +13,7 @@ export interface ContractMeta {
export interface KeyringJson$Meta {
contract?: ContractMeta;
genesisHash?: string | null;
genesisHash?: string | null | undefined;
hardwareType?: 'ledger';
isHardware?: boolean;
isInjected?: boolean;
@@ -70,7 +70,7 @@ export interface KeyringStruct {
readonly addresses: AddressSubject;
readonly contracts: AddressSubject;
readonly keyring: BaseKeyringInstance | undefined;
readonly genesisHash?: string;
readonly genesisHash?: string | undefined;
addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult;
addPair: (pair: KeyringPair, password: string) => CreateResult;
+7 -6
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Manages app settings",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-settings",
"repository": {
"directory": "packages/ui-settings",
@@ -17,12 +18,12 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/networks": "^11.0.2",
"@polkadot/util": "^11.0.2",
"eventemitter3": "^4.0.7",
"@polkadot/networks": "^12.1.1",
"@polkadot/util": "^12.1.1",
"eventemitter3": "^5.0.0",
"store": "^2.0.12",
"tslib": "^2.5.0"
},
+1 -1
View File
@@ -3,7 +3,7 @@
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'eventemitter3';
import store from 'store';
import { hasProcess, isUndefined } from '@polkadot/util';
+2 -2
View File
@@ -3,8 +3,8 @@
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 { 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 { settings, Settings };
export { Settings, settings };
+1 -3
View File
@@ -6,8 +6,6 @@ import { objectSpread } from '@polkadot/util';
type ChainDef = string[];
const chains: Record <string, ChainDef> = selectableNetworks
export const chains: Record <string, ChainDef> = /*#__PURE__*/ selectableNetworks
.filter((n) => n.genesisHash.length)
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
export { chains };
@@ -3,10 +3,12 @@
import type { Option } from '../types.js';
export const ENDPOINTS: Option[] = [{
info: 'local',
text: 'Local Node (Own, 127.0.0.1:9944)',
value: 'ws://127.0.0.1:9944/'
}];
export const ENDPOINTS: Option[] = [
{
info: 'local',
text: 'Local Node (Own, 127.0.0.1:9944)',
value: 'ws://127.0.0.1:9944/'
}
];
export const ENDPOINT_DEFAULT = ENDPOINTS[0];
+14 -43
View File
@@ -3,15 +3,15 @@
import type { Option } from '../types.js';
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
import { 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 { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
export { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
export { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
export { PREFIX_DEFAULT, PREFIXES } from './ss58.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',
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',
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',
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',
text: 'Allow local in-browser account storage',
@@ -70,32 +70,3 @@ const STORAGE: Option[] = [
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';
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'
: 'full';
const UIMODES: Option[] = [
export const UIMODES: Option[] = [
{
info: 'full',
text: 'Fully featured',
@@ -24,11 +24,11 @@ const UIMODES: Option[] = [
}
];
const UITHEME_DEFAULT = isPolkadot
export const UITHEME_DEFAULT = isPolkadot
? 'polkadot'
: 'substrate';
const UITHEMES: Option[] = [
export const UITHEMES: Option[] = [
{
info: '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'
: 'substrate';
const ICONS: Option[] = [
export const ICONS: Option[] = [
{
info: 'default',
text: 'Default for the connected node',
@@ -70,16 +70,4 @@ const ICONS: Option[] = [
}
];
const NOTIFICATION_DEFAULT = 'popup';
export {
ICON_DEFAULT,
ICON_DEFAULT_HOST,
ICONS,
LANGUAGE_DEFAULT,
NOTIFICATION_DEFAULT,
UIMODE_DEFAULT,
UIMODES,
UITHEME_DEFAULT,
UITHEMES
};
export const NOTIFICATION_DEFAULT = 'popup';
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.2.2' };
+7 -7
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Shared logic that is usable accross all frameworks-specific areas",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-shared",
"repository": {
"directory": "packages/ui-shared",
@@ -17,16 +18,15 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"color": "^3.2.1",
"colord": "^2.9.3",
"tslib": "^2.5.0"
},
"devDependencies": {
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"@types/color": "^3.0.3",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"@types/xmlserializer": "^0.6.3",
"xmlserializer": "^0.6.1"
},
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { ColorGen } from './types.js';
@@ -19,8 +19,9 @@ describe('colors', (): void => {
expect(
colors()
).toEqual(
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.9)'
'hsl(37.19999999999999, 100%, 54.9%)'
// with original color ...
// 'hsl(37.19999999999999, 100%, 54.9%)'
'hsl(37, 100%, 55%)'
);
});
@@ -28,17 +29,22 @@ describe('colors', (): void => {
expect(
colors(0.5)
).toEqual(
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.5)'
'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
// with original color ...
// 'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
'hsla(37, 100%, 55%, 0.5)'
);
});
it('rolates colors', (): void => {
colors();
const orig = colors();
expect(
orig
).toEqual('hsl(37, 100%, 55%)');
expect(
colors()
).not.toEqual('hsla(166.70000000000005, 98.6%, 27.6%, 0.9)');
).not.toEqual(orig);
});
it('works in edge conditions (0xff)', (): void => {
@@ -53,8 +59,9 @@ describe('colors', (): void => {
expect(
colors()
).toEqual(
// 'hsla(234.39999999999998, 75.9%, 51.2%, 0.9)'
'hsl(15, 0%, 100%)'
// with original color ...
// 'hsl(15, 0%, 100%)'
'hsl(0, 0%, 100%)'
);
});
});
@@ -3,9 +3,10 @@
// Copyright 2016 Dan Finlay
import type { Colord } from 'colord';
import type { ColorGen, Seeder } from './types.js';
import Color from 'color';
import { colord } from 'colord';
import { COLORS } from './defaults.js';
@@ -13,8 +14,8 @@ const WOBBLE = 30;
export function colors (seeder: Seeder): ColorGen {
const amount = (seeder() * WOBBLE) - (WOBBLE / 2);
const all = COLORS.map((hex): Color =>
Color(hex).rotate(amount)
const all = COLORS.map((hex): Colord =>
colord(hex).rotate(amount)
);
return (alpha = 1): string => {
@@ -22,6 +23,6 @@ export function colors (seeder: Seeder): ColorGen {
return all.splice(index, 1)[0]
.alpha(alpha)
.string();
.toHslString();
};
}
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { container } from './container.js';
@@ -3,14 +3,9 @@
// Copyright 2016 Dan Finlay
const COLORS: string[] = [
export const COLORS: readonly string[] = [
// https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
'#ffe119', '#4363d8', '#f58231', '#fabebe', '#e6beff', '#800000', '#000075', '#a9a9a9', '#ffffff', '#000000'
];
] as const;
const SHAPE_COUNT = 5;
export {
COLORS,
SHAPE_COUNT
};
export const SHAPE_COUNT = 5 as const;
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xmlserializer from 'xmlserializer';
@@ -15,7 +15,9 @@ describe('identicon', (): void => {
beachballIcon(new Uint8Array(32), { isAlternative: false, size: 256 }) as any
)
).toEqual(
'<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
// with original color ...
// '<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
'<div xmlns="http://www.w3.org/1999/xhtml" class="" style="background: white; border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><div class="" style="background: rgb(26, 26, 26); border-radius: 128px; display: inline-block; height: 256px; margin: 0px; overflow: hidden; padding: 0px; width: 256px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="256" height="256"><circle cx="128" cy="140.8" r="128" fill="hsl(212, 66%, 55%)"/><circle cx="128" cy="153.6" r="102.4" fill="hsl(10, 91%, 58%)"/><circle cx="128" cy="166.4" r="76.8" fill="hsl(345, 86%, 86%)"/><circle cx="128" cy="179.2" r="51.2" fill="hsl(262, 100%, 87%)"/><circle cx="128" cy="192" r="25.6" fill="hsl(345, 100%, 25%)"/></svg></div></div>'
);
});
@@ -26,7 +28,9 @@ describe('identicon', (): void => {
beachballIcon(new Uint8Array(32), { isAlternative: false, size: 100 }, 'testClass', { display: 'block' }) as any
)
).toEqual(
'<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="50" cy="60" r="40" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="50" cy="70" r="20" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
// with original color ...
// '<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(20, 20, 20); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212.10000000000002, 65.6%, 55.5%)"/><circle cx="50" cy="60" r="40" fill="hsl(9.800000000000011, 90.7%, 57.6%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 85.7%, 86.3%)"/><circle cx="50" cy="70" r="20" fill="hsl(261.9, 100%, 87.3%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25.1%)"/></svg></div></div>'
'<div xmlns="http://www.w3.org/1999/xhtml" class="testClass" style="background: white; border-radius: 50px; display: block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><div class="" style="background: rgb(26, 26, 26); border-radius: 50px; display: inline-block; height: 100px; margin: 0px; overflow: hidden; padding: 0px; width: 100px;"><svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="100" height="100"><circle cx="50" cy="55" r="50" fill="hsl(212, 66%, 55%)"/><circle cx="50" cy="60" r="40" fill="hsl(10, 91%, 58%)"/><circle cx="50" cy="65" r="30" fill="hsl(345, 86%, 86%)"/><circle cx="50" cy="70" r="20" fill="hsl(262, 100%, 87%)"/><circle cx="50" cy="75" r="10" fill="hsl(345, 100%, 25%)"/></svg></div></div>'
);
});
});
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { Seeder } from './types.js';
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xmlserializer from 'xmlserializer';
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
@@ -1,7 +1,7 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { polkadotIcon } from './polkadot.js';
+20 -22
View File
@@ -13,27 +13,26 @@ import { blake2AsU8a, decodeAddress } from '@polkadot/util-crypto';
interface Scheme {
freq: number;
colors: number[];
colors: readonly number[];
}
const blake2 = (value: Uint8Array): Uint8Array =>
blake2AsU8a(value, 512);
const S = 64;
const C = S / 2;
const Z = S / 64 * 5;
/* eslint-disable sort-keys */
const SCHEMA: { [index: string]: Scheme } = {
target: { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
cube: { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
quazar: { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
flower: { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
cyclic: { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
vmirror: { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
hmirror: { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
};
/* eslint-enable sort-keys */
const SCHEMES: readonly Scheme[] = [
/* target */ { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
/* cube */ { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
/* quazar */ { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
/* flower */ { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
/* cyclic */ { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
/* vmirror */ { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
/* hmirror */ { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
];
const SCHEMES_TOTAL = SCHEMES
.map((s): number => s.freq)
.reduce((a, b): number => a + b);
const OUTER_CIRCLE: Circle = {
cx: C,
@@ -57,7 +56,7 @@ function getRotation (isSixPoint: boolean): { r: number; ro2: number; r3o4: numb
return { r, r3o4, ro2, ro4, rroot3o2, rroot3o4 };
}
function getCircleXY (isSixPoint: boolean): [number, number][] {
function getCircleXY (isSixPoint = false): [number, number][] {
const { r, r3o4, ro2, ro4, rroot3o2, rroot3o4 } = getRotation(isSixPoint);
return [
@@ -85,7 +84,7 @@ function getCircleXY (isSixPoint: boolean): [number, number][] {
function findScheme (d: number): Scheme {
let cum = 0;
const schema = Object.values(SCHEMA).find((schema): boolean => {
const schema = SCHEMES.find((schema): boolean => {
cum += schema.freq;
return d < cum;
@@ -100,16 +99,15 @@ function findScheme (d: number): Scheme {
function addressToId (address: string): Uint8Array {
if (!zeroHash.length) {
zeroHash = blake2(new Uint8Array(32));
zeroHash = blake2AsU8a(new Uint8Array(32), 512);
}
return blake2(decodeAddress(address)).map((x, i) => (x + 256 - zeroHash[i]) % 256);
return blake2AsU8a(decodeAddress(address), 512).map((x, i) => (x + 256 - zeroHash[i]) % 256);
}
function getColors (address: string): string[] {
const total = Object.values(SCHEMA).map((s): number => s.freq).reduce((a, b): number => a + b);
const id = addressToId(address);
const d = Math.floor((id[30] + id[31] * 256) % total);
const d = Math.floor((id[30] + id[31] * 256) % SCHEMES_TOTAL);
const rot = (id[28] % 6) * 3;
const sat = (Math.floor(id[29] * 70 / 256 + 26) % 80) + 30;
const scheme = findScheme(d);
@@ -134,7 +132,7 @@ function getColors (address: string): string[] {
}
/**
* @description Generate a array of the circles that make up an identicon
* @description Generates an array of the circles that make up an identicon
*/
export function polkadotIcon (address: string, { isAlternative }: Options): Circle[] {
const xy = getCircleXY(isAlternative);
+1 -1
View File
@@ -9,6 +9,6 @@ export interface Circle {
}
export interface Options {
isAlternative: boolean;
isAlternative?: boolean;
size?: number;
}
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.2.2' };
+8 -7
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/vue-identicon#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/vue-identicon",
"repository": {
"directory": "packages/vue-identicon",
@@ -17,12 +18,12 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.2",
"version": "3.2.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-shared": "3.0.2",
"@polkadot/util": "^11.0.2",
"@polkadot/util-crypto": "^11.0.2",
"@polkadot/ui-shared": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"jdenticon": "3.2.0",
"tslib": "^2.5.0"
},
@@ -32,6 +33,6 @@
"peerDependencies": {
"@polkadot/util": "*",
"@polkadot/util-crypto": "*",
"vue": "*"
"vue": "^2.7"
}
}
+31 -12
View File
@@ -1,9 +1,10 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { VNode } from 'vue';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import Vue, { VNode } from 'vue';
import { defineComponent } from 'vue';
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
@@ -33,7 +34,7 @@ function encodeAccount (value: string | Uint8Array, prefix?: Prefix): Account {
const publicKey = u8aToHex(decodeAddress(address, false, prefix));
return { address, publicKey };
} catch (error) {
} catch {
return { address: '', publicKey: '0x' };
}
}
@@ -46,7 +47,7 @@ function encodeAccount (value: string | Uint8Array, prefix?: Prefix): Account {
* <Identicon :size="128" :theme="polkadot" :value="..." />
* ```
*/
export const Identicon = Vue.extend({
export const Identicon = defineComponent({
components: {
Beachball,
Empty,
@@ -81,19 +82,37 @@ export const Identicon = Vue.extend({
},
props: ['prefix', 'isAlternative', 'size', 'theme', 'value'],
render (h): VNode {
const { address, iconSize, isAlternativeIcon, publicKey, type } = this.$data as Data;
const { address, iconSize, isAlternativeIcon, publicKey, type } = this.$data;
if (type === 'empty') {
return h('Empty', { attrs: { key: address, size: iconSize } }, []);
return h('Empty', {
attrs: {
key: address,
size: iconSize
}
}, []);
} else if (type === 'jdenticon') {
return h('Jdenticon', { attrs: { key: address, publicKey, size: iconSize } }, []);
} else {
// handles: beachball and polkadot
// TODO: substrate
const cmp = type.charAt(0).toUpperCase() + type.slice(1);
return h(cmp, { attrs: { address, isAlternative: isAlternativeIcon, key: address, size: iconSize } }, []);
return h('Jdenticon', {
attrs: {
key: address,
publicKey,
size: iconSize
}
}, []);
} else if (type === 'substrate') {
throw new Error('substrate type is not supported');
}
const cmp = type.charAt(0).toUpperCase() + type.slice(1);
return h(cmp, {
attrs: {
address,
isAlternative: isAlternativeIcon,
key: address,
size: iconSize
}
}, []);
},
watch: {
value: function (): void {
-1
View File
@@ -2,5 +2,4 @@
// SPDX-License-Identifier: Apache-2.0
export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js';
+12 -7
View File
@@ -1,11 +1,13 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import Vue, { VNode } from 'vue';
import type { VNode } from 'vue';
import { defineComponent } from 'vue';
import { beachballIcon } from '@polkadot/ui-shared';
type propsType = {
type PropsType = {
address: string;
size: number;
isAlternative: boolean;
@@ -15,13 +17,16 @@ type propsType = {
* @name Beachball
* @description The Beachball identicon
*/
export const Beachball = Vue.extend({
export const Beachball = defineComponent({
props: ['address', 'size', 'isAlternative'],
// eslint-disable-next-line quotes
render (h): VNode {
const { address, isAlternative, size } = this.$props as propsType;
const bb = beachballIcon(address, { isAlternative, size });
const { address, isAlternative, size } = this.$props as PropsType;
return h(Vue.component('VCBeachball', { template: bb.outerHTML }));
return h({
template: beachballIcon(address, {
isAlternative,
size
}).outerHTML
});
}
});
+2 -2
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import Vue from 'vue';
import { defineComponent } from 'vue';
/**
* @name Empty
* @description An empty identicon
*/
export const Empty = Vue.extend({
export const Empty = defineComponent({
props: ['size'],
template: `
<svg :height="size" :width="size" viewBox="0 0 64 64">
+10 -8
View File
@@ -1,10 +1,12 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import * as jdenticon from 'jdenticon';
import Vue, { VNode } from 'vue';
import type { VNode } from 'vue';
type propsType = {
import * as jdenticon from 'jdenticon';
import { defineComponent } from 'vue';
type PropsType = {
publicKey: string,
size: number
}
@@ -13,13 +15,13 @@ type propsType = {
* @name Jdenticon
* @description The substrate default via Jdenticon
*/
export const Jdenticon = Vue.extend({
export const Jdenticon = defineComponent({
props: ['publicKey', 'size'],
// eslint-disable-next-line quotes
render (h): VNode {
const { publicKey, size } = this.$props as propsType;
const cmp = Vue.component('CJdenticon', { template: jdenticon.toSvg(publicKey.substring(2), size) });
const { publicKey, size } = this.$props as PropsType;
return h(cmp);
return h({
template: jdenticon.toSvg(publicKey.substring(2), size)
});
}
});
+13 -12
View File
@@ -1,7 +1,9 @@
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import Vue, { VNode } from 'vue';
import type { VNode } from 'vue';
import { defineComponent } from 'vue';
import { polkadotIcon } from '@polkadot/ui-shared';
@@ -15,21 +17,20 @@ type propsType = {
* @name Polkadot
* @description The Polkadot default identicon
*/
export const Polkadot = Vue.extend({
export const Polkadot = defineComponent({
props: ['address', 'isAlternative', 'size'],
// eslint-disable-next-line quotes
render (h): VNode {
const { address, isAlternative, size } = this.$props as propsType;
const circles = polkadotIcon(address, {
isAlternative: isAlternative || false
}).map(({ cx,
cy,
fill,
r }) => {
return h('circle', { attrs: { cx, cy, fill, r } }, []);
}
const circles = polkadotIcon(address, { isAlternative }).map(({ cx, cy, fill, r }) =>
h('circle', { attrs: { cx, cy, fill, r } }, [])
);
return h('svg', { attrs: { height: size, viewBox: '0 0 64 64', width: size } }, circles);
return h('svg', {
attrs: {
height: size,
viewBox: '0 0 64 64',
width: size
}
}, circles);
}
});
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.0.2' };
export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
+1 -2
View File
@@ -14,7 +14,6 @@
"@polkadot/ui-shared/icons/*": ["ui-shared/src/icons/*.ts"],
"@polkadot/ui-shared/packageInfo": ["ui-shared/src/packageInfo.ts"],
"@polkadot/vue-identicon": ["vue-identicon/src/index.ts"],
},
"skipLibCheck": true
}
}
}
+770 -886
View File
File diff suppressed because it is too large Load Diff