feat: initial Pezkuwi Apps rebrand from polkadot-apps

Rebranded terminology:
- Polkadot → Pezkuwi
- Kusama → Dicle
- Westend → Zagros
- Rococo → PezkuwiChain
- Substrate → Bizinikiwi
- parachain → teyrchain

Custom logos with Kurdistan brand colors (#e6007a → #86e62a):
- bizinikiwi-hexagon.svg
- sora-bizinikiwi.svg
- hezscanner.svg
- heztreasury.svg
- pezkuwiscan.svg
- pezkuwistats.svg
- pezkuwiassembly.svg
- pezkuwiholic.svg
This commit is contained in:
2026-01-07 13:05:27 +03:00
commit d21bfb1320
5867 changed files with 329019 additions and 0 deletions
@@ -0,0 +1,23 @@
// Copyright 2017-2025 @pezkuwi/app-accounts authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Environment } from '../types.js';
// https://github.com/electron/electron/issues/2288
function isElectron () {
if (process?.versions?.electron) {
return true;
} else if ((window?.process as unknown as (Record<string, string> | undefined))?.type === 'renderer') {
return true;
}
return navigator?.userAgent?.indexOf('Electron') >= 0;
}
export function getEnvironment (): Environment {
if (isElectron()) {
return 'app';
}
return 'web';
}
+15
View File
@@ -0,0 +1,15 @@
// Copyright 2017-2025 @pezkuwi/react-api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Hash } from '@pezkuwi/types/interfaces';
import type { Codec } from '@pezkuwi/types/types';
type AtQuery <I extends unknown[]> = (hash: string | Uint8Array, ...params: I) => Promise<Codec>;
export async function getHistoric <T extends Codec, I extends unknown[] = unknown[]> (atQuery: AtQuery<I>, params: I, hashes: Hash[]): Promise<[Hash, T][]> {
return Promise
.all(hashes.map((hash): Promise<T> => atQuery(hash, ...params) as Promise<T>))
.then((results): [Hash, T][] =>
results.map((value, index): [Hash, T] => [hashes[index], value])
);
}
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2017-2025 @pezkuwi/react-api authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { getEnvironment } from './getEnvironment.js';
export { getHistoric } from './historic.js';
export { intervalObservable } from './intervalObservable.js';
export { isEqual } from './isEqual.js';
export { triggerChange } from './triggerChange.js';
@@ -0,0 +1,23 @@
// Copyright 2017-2025 @pezkuwi/react-api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type React from 'react';
import type { Subscription } from 'rxjs';
import type { CallState } from '../types.js';
import { interval } from 'rxjs';
const interval$ = interval(500);
export function intervalObservable<Props, State extends CallState> (that: React.Component<Props, State>): Subscription {
return interval$.subscribe((): void => {
const elapsed = Date.now() - (that.state.callUpdatedAt || 0);
const callUpdated = elapsed <= 1500;
if (callUpdated !== that.state.callUpdated) {
that.setState({
callUpdated
});
}
});
}
+16
View File
@@ -0,0 +1,16 @@
// Copyright 2017-2025 @pezkuwi/react-api authors & contributors
// SPDX-License-Identifier: Apache-2.0
function flatten (_key: string | null, value?: unknown): unknown {
return !value
? value
: (value as Record<string, unknown>).$$typeof
? ''
: Array.isArray(value)
? value.map((item) => flatten(null, item))
: value;
}
export function isEqual <T> (a?: T, b?: T): boolean {
return JSON.stringify({ test: a }, flatten) === JSON.stringify({ test: b }, flatten);
}
@@ -0,0 +1,20 @@
// Copyright 2017-2025 @pezkuwi/react-api authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { OnChangeCb } from '../types.js';
import { isFunction, isObservable } from '@pezkuwi/util';
export function triggerChange (value?: unknown, ...callOnResult: (OnChangeCb | undefined)[]): void {
if (!callOnResult?.length) {
return;
}
callOnResult.forEach((callOnResult): void => {
if (isObservable(callOnResult)) {
callOnResult.next(value);
} else if (isFunction(callOnResult)) {
callOnResult(value);
}
});
}