Compare commits

...

36 Commits

Author SHA1 Message Date
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
github-actions[bot]
78029388e5 [CI Skip] release/stable 3.0.2
skip-checks: true
2023-03-11 09:25:49 +00:00
Jaco
b9b1b296a3 3.0.2 (#730) 2023-03-11 11:23:35 +02:00
github-actions[bot]
32086c0fc7 [CI Skip] bump/beta 3.0.2-4-x
skip-checks: true
2023-03-10 06:23:20 +00:00
Jaco
01d7661a5f Update GH actions (#729) 2023-03-10 08:19:48 +02:00
github-actions[bot]
6e97f75824 [CI Skip] bump/beta 3.0.2-3-x
skip-checks: true
2023-03-09 14:56:44 +00:00
Jaco
86281dca3a Align tsconfig to allow moduleResolution: nodenext (#728)
* Align tsconfig to allow moduleResolution: nodenext

* Adjust

* Default target flag
2023-03-09 16:53:32 +02:00
github-actions[bot]
faed5b1474 [CI Skip] bump/beta 3.0.2-2-x
skip-checks: true
2023-03-09 08:46:02 +00:00
Jaco
0e0de28da4 Use .js imports in src (#727)
* Use .js in src imports

* Bump dev
2023-03-09 10:43:31 +02:00
github-actions[bot]
2e99e0154f [CI Skip] bump/beta 3.0.2-1-x
skip-checks: true
2023-03-06 12:12:52 +00:00
Jaco
0cbf187979 Bump dev deps (#726) 2023-03-06 14:10:28 +02:00
github-actions[bot]
0aee857525 [CI Skip] bump/beta 3.0.2-0-x
skip-checks: true
2023-03-05 11:40:46 +00:00
Jaco
306f30d2b5 Update dev 2023-03-05 13:38:19 +02:00
114 changed files with 1112 additions and 1883 deletions

View File

@@ -10,7 +10,7 @@ jobs:
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: dessant/lock-threads@f1a42f0f44eb83361d617a014663e1a76cf282d2
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
with:
github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7'

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@98ed4cb500039dbcccf4bd9bedada4d0187f2757
with:
repo-token: ${{ secrets.GH_PAT_BOT }}
stale-issue-message: 'This issue has been open for 21 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: 21
days-before-close: 7

View File

@@ -1,5 +1,30 @@
# CHANGELOG
## 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:
- Use consistent `.js` imports in source files (TS moduleResolution)
- Bump to `@polkadot/util` 11.0.2
## 3.0.1 Mar 5, 2023
Changes:

View File

@@ -1,4 +1,4 @@
681 Jaco 3.0.1 (#725)
699 Jaco 3.1.2 (#742)
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)

View File

@@ -1,6 +1,9 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"engines": {
"node": ">=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.1",
"version": "3.1.2",
"versions": {
"git": "3.0.1",
"npm": "3.0.1"
"git": "3.1.2",
"npm": "3.1.2"
},
"workspaces": [
"packages/*"
@@ -30,15 +33,15 @@
"test:one": "polkadot-dev-run-test --env browser"
},
"devDependencies": {
"@polkadot/dev": "^0.69.27",
"@polkadot/x-bundle": "^11.0.1",
"@types/node": "^18.14.6",
"@polkadot/dev": "^0.72.22",
"@polkadot/x-bundle": "^11.1.2",
"@types/node": "^18.15.9",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-is": "^18.2.0",
"react-native": "^0.71.3"
"react-native": "^0.71.4"
},
"resolutions": {
"typescript": "^4.9.5"
"typescript": "^5.0.2"
}
}

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": ">=14"
},
"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,25 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.1",
"@polkadot/ui-settings": "3.0.1",
"@polkadot/ui-shared": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"color": "^3.2.1",
"@polkadot/keyring": "^11.1.2",
"@polkadot/ui-settings": "3.1.2",
"@polkadot/ui-shared": "3.1.2",
"@polkadot/util": "^11.1.2",
"@polkadot/util-crypto": "^11.1.2",
"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.9",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.0.11",
"@types/styled-components": "^5.1.26",
"styled-components": "^5.3.8",
"styled-components": "^5.3.9",
"xmlserializer": "^0.6.1"
},
"peerDependencies": {

View File

@@ -2,26 +2,26 @@
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { IdentityProps as Props, Props as ComponentProps } from './types';
import type { IdentityProps as Props, Props as ComponentProps } from './types.js';
import React from 'react';
import CopyToClipboard from 'react-copy-to-clipboard';
import styledComponents from 'styled-components';
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';
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: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
const Fallback = Beachball;
@@ -74,7 +74,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
address,
publicKey
};
} catch (error) {
} catch {
return {
address: '',
publicKey: '0x'

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export * from './icons/index.js';
export { Identicon } from './Identicon';
export { packageInfo } from './packageInfo';
export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js';

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import React, { useCallback } from 'react';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import React from 'react';

View File

@@ -1,20 +1,20 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import makeBlockie from 'ethereum-blockies-base64';
import React, { useMemo } from 'react';
import styledComponents from 'styled-components';
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: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface ImgProps {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import * as jdenticon from 'jdenticon';
import React, { useMemo } from 'react';

View File

@@ -17,7 +17,7 @@
// - Overall it is now just a static component, expecting an address as an input value
import type { Circle } from '@polkadot/ui-shared/icons/types';
import type { Props } from '../types';
import type { Props } from '../types.js';
import React, { useMemo } from 'react';

View File

@@ -1,8 +1,8 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { Beachball } from './Beachball';
export { Empty } from './Empty';
export { Ethereum } from './Ethereum';
export { Jdenticon } from './Jdenticon';
export { Polkadot } from './Polkadot';
export { Beachball } from './Beachball.js';
export { Empty } from './Empty.js';
export { Ethereum } from './Ethereum.js';
export { Jdenticon } from './Jdenticon.js';
export { Polkadot } from './Polkadot.js';

View File

@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import { Identicon } from './bundle';
import { Identicon } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default Identicon;

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.1' };
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.1.2' };

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": ">=14"
},
"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.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-settings": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@polkadot/ui-settings": "3.1.2",
"@polkadot/util": "^11.1.2",
"@polkadot/util-crypto": "^11.1.2",
"qrcode-generator": "^1.4.4",
"react-qr-reader": "^2.2.1",
"styled-components": "^5.3.8",
"styled-components": "^5.3.9",
"tslib": "^2.5.0"
},
"devDependencies": {

View File

@@ -2,22 +2,22 @@
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useMemo, useRef, useState } from 'react';
import styledComponents from 'styled-components';
import styledComponents, { StyledInterface } from 'styled-components';
import { objectSpread } from '@polkadot/util';
import { xxhashAsHex } from '@polkadot/util-crypto';
import { qrcode } from './qrcode';
import { createFrames, createImgSize } from './util';
import { qrcode } from './qrcode.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: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface Props {

View File

@@ -3,8 +3,8 @@
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { createAddressPayload } from './util';
import { QrDisplay } from './Display.js';
import { createAddressPayload } from './util.js';
interface Props {
address: string;

View File

@@ -3,8 +3,8 @@
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { createSignPayload } from './util';
import { QrDisplay } from './Display.js';
import { createSignPayload } from './util.js';
interface Props {
address: string;

View File

@@ -5,8 +5,8 @@ import type { NetworkSpecsStruct } from '@polkadot/ui-settings/types';
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { encodeString } from './util';
import { QrDisplay } from './Display.js';
import { encodeString } from './util.js';
interface Props {
className?: string;

View File

@@ -3,18 +3,18 @@
import React, { useCallback, useMemo } from 'react';
import Reader from 'react-qr-reader';
import styledComponents from 'styled-components';
import styledComponents, { StyledInterface } from 'styled-components';
import { createImgSize } from './util';
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: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
interface Props {

View File

@@ -3,11 +3,10 @@
import React, { useCallback } from 'react';
import { assert } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants';
import { QrScan } from './Scan';
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
import { QrScan } from './Scan.js';
interface ScanType {
isAddress: boolean;
@@ -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;

View File

@@ -5,7 +5,7 @@ import type { HexString } from '@polkadot/util/types';
import React, { useCallback } from 'react';
import { QrScan } from './Scan';
import { QrScan } from './Scan.js';
interface ScanType {
signature: HexString;

View File

@@ -1,9 +1,9 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { QrDisplayAddress } from './DisplayAddress';
export { QrDisplayPayload } from './DisplayPayload';
export { QrScanAddress } from './ScanAddress';
export { QrScanSignature } from './ScanSignature';
export { QrNetworkSpecs } from './NetworkSpecs';
export { packageInfo } from './packageInfo';
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';

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
export * from './bundle';
export * from './bundle.js';

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.1' };
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.1.2' };

View File

@@ -1,13 +1,12 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <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';
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util';
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util.js';
describe('util', (): void => {
describe('Uint8Array <-> string', (): void => {

View File

@@ -4,7 +4,7 @@
import { isString, u8aConcat, u8aToU8a } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants';
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants.js';
const MULTIPART = new Uint8Array([0]);

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": ">=14"
},
"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.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-shared": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@polkadot/ui-shared": "3.1.2",
"@polkadot/util": "^11.1.2",
"@polkadot/util-crypto": "^11.1.2",
"react-native-svg": "^12.5.1",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/react-native": "^0.71.3"
"@types/react-native": "^0.71.5"
},
"peerDependencies": {
"@polkadot/util": "*",

View File

@@ -2,14 +2,14 @@
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { Props as ComponentProps } from './types';
import type { Props as ComponentProps } from './types.js';
import React from 'react';
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
import { Empty, Polkadot } from './icons';
import { Empty, Polkadot } from './icons/index.js';
const Fallback = Polkadot;
@@ -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'

View File

@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export { packageInfo } from './packageInfo';
export * from './icons/index.js';
export { packageInfo } from './packageInfo.js';

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,11 +1,11 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
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 (

View File

@@ -2,11 +2,11 @@
// SPDX-License-Identifier: Apache-2.0
import type { Circle as CircleType } from '@polkadot/ui-shared/icons/types';
import type { Props } from '../types';
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';

View File

@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as Empty } from './Empty';
export { default as Polkadot } from './Polkadot';
export { default as Empty } from './Empty.js';
export { default as Polkadot } from './Polkadot.js';

View File

@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import Identicon from './Identicon';
import Identicon from './Identicon.js';
export * from './bundle';
export * from './bundle.js';
export default Identicon;

View File

@@ -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.1' };
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.1.2' };

View File

@@ -1,10 +1,11 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"engines": {
"node": ">=14"
},
"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.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.1",
"@polkadot/ui-settings": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"mkdirp": "^2.1.5",
"@polkadot/keyring": "^11.1.2",
"@polkadot/ui-settings": "3.1.2",
"@polkadot/util": "^11.1.2",
"@polkadot/util-crypto": "^11.1.2",
"mkdirp": "^2.1.6",
"rxjs": "^7.8.0",
"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": {

View File

@@ -3,17 +3,17 @@
import type { KeyringInstance, KeyringPair } from '@polkadot/keyring/types';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { AddressSubject } from './observable/types';
import type { KeyringOptions, KeyringStore } from './types';
import type { AddressSubject } from './observable/types.js';
import type { KeyringOptions, KeyringStore } from './types.js';
import { createTestKeyring } from '@polkadot/keyring';
import { isBoolean, isNumber, isString } from '@polkadot/util';
import { accounts } from './observable/accounts';
import { addresses } from './observable/addresses';
import { contracts } from './observable/contracts';
import { env } from './observable/env';
import { BrowserStore } from './stores/Browser'; // direct import (skip index with all)
import { accounts } from './observable/accounts.js';
import { addresses } from './observable/addresses.js';
import { contracts } from './observable/contracts.js';
import { env } from './observable/env.js';
import { BrowserStore } from './stores/Browser.js'; // direct import (skip index with all)
export class Base {
#accounts: AddressSubject;
@@ -22,6 +22,8 @@ export class Base {
#contracts: AddressSubject;
#isEthereum: boolean;
#keyring?: KeyringInstance;
protected _store: KeyringStore;
@@ -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)

View File

@@ -5,18 +5,18 @@ import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/
import type { BN } from '@polkadot/util';
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types';
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './types';
import type { AddressSubject, SingleAddress } from './observable/types.js';
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './types.js';
import { createPair } from '@polkadot/keyring';
import { chains } from '@polkadot/ui-settings';
import { bnToBn, hexToU8a, isFunction, isHex, isString, objectSpread, stringify, stringToU8a, u8aSorted, u8aToString } from '@polkadot/util';
import { base64Decode, createKeyMulti, jsonDecrypt, jsonEncrypt } from '@polkadot/util-crypto';
import { env } from './observable/env';
import { Base } from './Base';
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults';
import { KeyringOption } from './options';
import { env } from './observable/env.js';
import { KeyringOption } from './options/index.js';
import { Base } from './Base.js';
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults.js';
const RECENT_EXPIRY = 24 * 60 * 60;
@@ -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)}`);
}
}

View File

@@ -1,9 +1,9 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keyring } from './Keyring';
import { Keyring } from './Keyring.js';
export { packageInfo } from './packageInfo';
export { packageInfo } from './packageInfo.js';
const keyring = new Keyring();

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import { keyring } from './bundle';
import { keyring } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default keyring;

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { accountKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { accountKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const accounts = genericSubject(accountKey, true);

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { addressKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { addressKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const addresses = genericSubject(addressKey);

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { contractKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { contractKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const contracts = genericSubject(contractKey);

View File

@@ -2,15 +2,15 @@
// SPDX-License-Identifier: Apache-2.0
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringJson, KeyringStore } from '../types';
import type { AddressSubject, SingleAddress, SubjectInfo } from './types';
import type { KeyringJson, KeyringStore } from '../types.js';
import type { AddressSubject, SingleAddress, SubjectInfo } from './types.js';
import { BehaviorSubject } from 'rxjs';
import { objectCopy, objectSpread } from '@polkadot/util';
import { createOptionItem } from '../options/item';
import { env } from './env';
import { createOptionItem } from '../options/item.js';
import { env } from './env.js';
function callNext (current: SubjectInfo, subject: BehaviorSubject<SubjectInfo>, withTest: boolean): void {
const isDevMode = env.isDevelopment();

View File

@@ -1,13 +1,13 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { SubjectInfo } from './types';
import type { SubjectInfo } from './types.js';
import { combineLatest, map } from 'rxjs';
import { accounts } from './accounts';
import { addresses } from './addresses';
import { contracts } from './contracts';
import { accounts } from './accounts.js';
import { addresses } from './addresses.js';
import { contracts } from './contracts.js';
interface Result {
accounts: SubjectInfo;

View File

@@ -3,8 +3,8 @@
import type { BehaviorSubject } from 'rxjs';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringSectionOption } from '../options/types';
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringSectionOption } from '../options/types.js';
import type { KeyringJson, KeyringStore } from '../types.js';
export interface SingleAddress {
json: KeyringJson;

View File

@@ -1,25 +1,27 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { KeyringStruct } from '../types';
import type { KeyringStruct } from '../types.js';
import { KeyringOption } from '.';
const keyringOption = new KeyringOption();
import { KeyringOption } from './index.js';
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();
});
});

View File

@@ -1,15 +1,14 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { SingleAddress } from '../observable/types';
import type { KeyringStruct } from '../types';
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types';
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';
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];

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringSectionOption } from './types';
import type { KeyringSectionOption } from './types.js';
import { isUndefined } from '@polkadot/util';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringItemType, KeyringStruct } from '../types';
import type { KeyringItemType, KeyringStruct } from '../types.js';
export interface KeyringSectionOption {
key: string | null;

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.1' };
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.1.2' };

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringJson, KeyringStore } from '../types.js';
import store from 'store';

View File

@@ -1,13 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringJson, KeyringStore } from '../types.js';
import fs from 'fs';
import mkdirp from 'mkdirp';
import path from 'path';
import { assert } from '@polkadot/util';
import fs from 'node:fs';
import path from 'node:path';
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
export class FileStore implements KeyringStore {
@@ -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);
}

View File

@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { BrowserStore } from './Browser';
export { FileStore } from './File';
export { BrowserStore } from './Browser.js';
export { FileStore } from './File.js';

View File

@@ -4,7 +4,7 @@
import type { KeyringInstance as BaseKeyringInstance, KeyringOptions as KeyringOptionsBase, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types';
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types';
import type { AddressSubject, SingleAddress } from './observable/types.js';
export interface ContractMeta {
abi: string;

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": ">=14"
},
"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,11 +18,11 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"@polkadot/networks": "^11.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/networks": "^11.1.2",
"@polkadot/util": "^11.1.2",
"eventemitter3": "^4.0.7",
"store": "^2.0.12",
"tslib": "^2.5.0"

View File

@@ -1,14 +1,14 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types';
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
import EventEmitter from 'eventemitter3';
import store from 'store';
import { hasProcess, isUndefined } from '@polkadot/util';
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults';
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
type ChangeCallback = (settings: SettingsStruct) => void;
type OnTypes = 'change';

View File

@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Settings, settings } from './Settings';
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';
export { chains } from './defaults/chains';
export { packageInfo } from './packageInfo';
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 { packageInfo } from './packageInfo.js';
export { settings, Settings };

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const CRYPTOS: Option[] = [
{

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const ENDPOINTS: Option[] = [{
info: 'local',

View File

@@ -1,13 +1,13 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto';
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints';
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger';
import { PREFIX_DEFAULT, PREFIXES } from './ss58';
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui';
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';
const CAMERA_DEFAULT = 'off';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const LEDGER_CONN_DEFAULT = 'none';

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { availableNetworks } from '@polkadot/networks';

View File

@@ -1,9 +1,9 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { isPolkadot } from './type';
import { isPolkadot } from './type.js';
const LANGUAGE_DEFAULT = 'default';

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,8 +1,8 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { settings } from './bundle';
import { settings } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default settings;

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.1' };
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.1.2' };

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": ">=14"
},
"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.1",
"version": "3.1.2",
"main": "index.js",
"dependencies": {
"color": "^3.2.1",
"colord": "^2.9.3",
"tslib": "^2.5.0"
},
"devDependencies": {
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@types/color": "^3.0.3",
"@polkadot/util": "^11.1.2",
"@polkadot/util-crypto": "^11.1.2",
"@types/xmlserializer": "^0.6.3",
"xmlserializer": "^0.6.1"
},

View File

@@ -1,5 +1,5 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export { packageInfo } from './packageInfo';
export * from './icons/index.js';
export { packageInfo } from './packageInfo.js';

View File

@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);

View File

@@ -1,13 +1,12 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { ColorGen } from './types';
import type { ColorGen } from './types.js';
import { colors as newColors } from './colors';
import { seeder as newSeeder } from './seeder';
import { colors as newColors } from './colors.js';
import { seeder as newSeeder } from './seeder.js';
describe('colors', (): void => {
let colors: ColorGen;
@@ -20,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%)'
);
});
@@ -29,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 => {
@@ -54,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%)'
);
});
});

View File

@@ -3,18 +3,19 @@
// Copyright 2016 Dan Finlay
import type { ColorGen, Seeder } from './types';
import type { Colord } from 'colord';
import type { ColorGen, Seeder } from './types.js';
import Color from 'color';
import { colord } from 'colord';
import { COLORS } from './defaults';
import { COLORS } from './defaults.js';
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();
};
}

View File

@@ -1,10 +1,9 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { container } from './container';
import { container } from './container.js';
describe('container', (): void => {
it('applies default styles', (): void => {

View File

@@ -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;

View File

@@ -6,7 +6,7 @@
import { isNull } from '@polkadot/util';
import { encodeAddress, randomAsU8a } from '@polkadot/util-crypto';
import { beachballIcon } from '.';
import { beachballIcon } from './index.js';
const element = document.getElementById('demo');

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xmlserializer from 'xmlserializer';
import { beachballIcon } from '.';
import { beachballIcon } from './index.js';
describe('identicon', (): void => {
it('generates a basic [0,..,0] identicon', (): void => {
@@ -16,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>'
);
});
@@ -27,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>'
);
});
});

View File

@@ -3,14 +3,14 @@
// Copyright 2016 Dan Finlay
import type { Options } from '../types';
import type { Options } from '../types.js';
import { circle } from './shape/circle';
import { element } from './svg/element';
import { colors } from './colors';
import { container as newContainer } from './container';
import { SHAPE_COUNT } from './defaults';
import { seeder as newSeeder } from './seeder';
import { circle } from './shape/circle.js';
import { element } from './svg/element.js';
import { colors } from './colors.js';
import { container as newContainer } from './container.js';
import { SHAPE_COUNT } from './defaults.js';
import { seeder as newSeeder } from './seeder.js';
export function beachballIcon (seed: string | Uint8Array, { size = 256 }: Options, className = '', style?: { [index: string]: string }): HTMLElement {
const seeder = newSeeder(seed);

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { Seeder } from './types';
import type { Seeder } from './types.js';
import { seeder as newSeeder } from './seeder';
import { seeder as newSeeder } from './seeder.js';
describe('seeder', (): void => {
let seeder: Seeder;

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Seeder } from './types';
import type { Seeder } from './types.js';
import { isU8a, stringToU8a } from '@polkadot/util';

View File

@@ -1,13 +1,12 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xmlserializer from 'xmlserializer';
import { seeder } from '../seeder';
import { circle } from './circle';
import { seeder } from '../seeder.js';
import { circle } from './circle.js';
describe('circle', (): void => {
it('creates a circle shape', (): void => {

View File

@@ -3,10 +3,10 @@
// Copyright 2016 Dan Finlay
import type { Seeder } from '../types';
import type { Seeder } from '../types.js';
import { SHAPE_COUNT } from '../defaults';
import { circle as newCircle } from '../svg/circle';
import { SHAPE_COUNT } from '../defaults.js';
import { circle as newCircle } from '../svg/circle.js';
export function circle (seeder: Seeder, fill: string, diameter: number, count: number): Element {
const center = diameter / 2;

View File

@@ -3,10 +3,10 @@
// Copyright 2016 Dan Finlay
import type { Seeder } from '../types';
import type { Seeder } from '../types.js';
import { SHAPE_COUNT } from '../defaults';
import { rect as newRect } from '../svg/rect';
import { SHAPE_COUNT } from '../defaults.js';
import { rect as newRect } from '../svg/rect.js';
export function square (seeder: Seeder, fill: string, diameter: number, count: number): Element {
const center = diameter / 2;

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
import { circle } from './circle';
import { circle } from './circle.js';
describe('circle', (): void => {
it('creates a basic SVG circle element', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { svg } from './svg';
import { svg } from './svg.js';
export function circle (r: number, cx: number, cy: number): Element {
const elem = svg('circle');

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
import { element } from './element';
import { element } from './element.js';
describe('element', (): void => {
it('creates a basic SVG element', (): void => {

View File

@@ -3,7 +3,7 @@
// Copyright 2016 Dan Finlay
import { svg } from './svg';
import { svg } from './svg.js';
export function element (size: number, type = 'svg', x = 0, y = 0): Element {
const elem = svg(type);

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
import { rect } from './rect';
import { rect } from './rect.js';
describe('rect', (): void => {
it('creates a basic SVG rect element', (): void => {

View File

@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { element } from './element';
import { element } from './element.js';
export function rect (size: number): Element {
const elem = element(size, 'rect');

View File

@@ -1,12 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import xs from 'xmlserializer';
import { svg } from './svg';
import { svg } from './svg.js';
describe('svg', (): void => {
it('creates a basic SVG element', (): void => {

View File

@@ -1,5 +1,5 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { beachballIcon } from './beachball';
export { polkadotIcon } from './polkadot';
export { beachballIcon } from './beachball/index.js';
export { polkadotIcon } from './polkadot.js';

View File

@@ -1,10 +1,9 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { polkadotIcon } from './polkadot';
import { polkadotIcon } from './polkadot.js';
describe('polkadotIcon', (): void => {
it('generates the correct points from known', (): void => {

View File

@@ -7,33 +7,32 @@
//
// https://github.com/paritytech/oo7/blob/251ba2b7c45503b68eab4320c270b5afa9bccb60/packages/polkadot-identicon/src/index.jsx
import type { Circle, Options } from './types';
import type { Circle, Options } from './types.js';
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);

View File

@@ -9,6 +9,6 @@ export interface Circle {
}
export interface Options {
isAlternative: boolean;
isAlternative?: boolean;
size?: number;
}

View File

@@ -1,6 +1,6 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
export * from './bundle';
export * from './bundle.js';

Some files were not shown because too many files have changed in this diff Show More