@aioha/react-ui
Version:
Ready-made React modal for Aioha
48 lines (47 loc) • 4.77 kB
JavaScript
import React from 'react';
import { Providers } from '@aioha/aioha';
import { useAioha } from '@aioha/react-provider';
import { ProviderInfo } from '../ProviderInfo.js';
import { CloseIcon } from '../../icons/CloseIcon.js';
export const Badge = ({ children }) => {
return (React.createElement("span", { className: "inline-flex items-center justify-center px-2 py-0.5 ms-3 text-xs font-medium text-gray-500 bg-gray-200 rounded-sm dark:bg-gray-700 dark:text-gray-400" }, children));
};
const ProviderBtn = ({ provider, forceShow, onClick }) => {
const { aioha } = useAioha();
const { name, icon, iconDark, loginBadge } = ProviderInfo[provider];
return aioha.isProviderEnabled(provider) || (forceShow && aioha.isProviderRegistered(provider)) ? (React.createElement("li", null,
React.createElement("a", { className: "flex items-center p-3 text-base font-bold text-gray-900 rounded-lg bg-gray-50 hover:bg-gray-100 group hover:shadow-sm hover:cursor-pointer dark:bg-gray-600 dark:hover:bg-gray-500 dark:text-white", onClick: () => onClick(provider) },
React.createElement("svg", { "aria-hidden": "true", className: `h-5 aspect-square` },
React.createElement("image", { href: icon, className: `h-5 ${iconDark ? 'block dark:hidden' : ''}` }),
iconDark ? React.createElement("image", { href: iconDark, className: `h-5 hidden dark:block` }) : null),
React.createElement("span", { className: "flex-1 ms-3 whitespace-nowrap" }, name),
loginBadge ? React.createElement(Badge, null, loginBadge) : null))) : null;
};
const ProviderBtnGrid = ({ provider, forceShow, onClick }) => {
const { aioha } = useAioha();
const { name, icon, iconDark } = ProviderInfo[provider];
return aioha.isProviderEnabled(provider) || (forceShow && aioha.isProviderRegistered(provider)) ? (React.createElement("a", { className: "flex flex-col items-center w-34 p-6 rounded-lg bg-gray-50 hover:bg-gray-100 group hover:shadow-sm hover:cursor-pointer dark:bg-gray-700 dark:hover:bg-gray-600 dark:text-white", onClick: () => onClick(provider) },
React.createElement("svg", { "aria-hidden": "true", className: `h-12 aspect-square` },
React.createElement("image", { href: icon, className: `h-12 ${iconDark ? 'block dark:hidden' : ''}` }),
iconDark ? React.createElement("image", { href: iconDark, className: `h-12 hidden dark:block` }) : null),
React.createElement("span", { className: "mt-4 text-base font-bold dark:text-white whitespace-nowrap" }, name))) : null;
};
const ProvidersSeq = [
Providers.Keychain,
Providers.PeakVault,
Providers.HiveAuth,
Providers.HiveSigner,
Providers.Ledger
]; // in this particular order
export const ProviderSelection = ({ helpUrl, forceShow, onSelected, arrangement, onCancel }) => {
return (React.createElement(React.Fragment, null,
React.createElement("p", { className: "text-sm font-normal text-gray-500 dark:text-gray-400" }, "Connect with one of our available Hive wallet providers."),
arrangement === 'list' ? (React.createElement("ul", { className: "mt-4 mb-2 space-y-3" }, ProvidersSeq.map((p, i) => (React.createElement(ProviderBtn, { key: i, provider: p, forceShow: forceShow.includes(p), onClick: onSelected }))))) : (React.createElement("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4 mt-4 mb-2" }, ProvidersSeq.map((p, i) => (React.createElement(ProviderBtnGrid, { key: i, provider: p, forceShow: forceShow.includes(p), onClick: onSelected }))))),
helpUrl ? (React.createElement("a", { href: helpUrl, target: "_blank", className: "inline-flex items-center mt-2 text-xs font-normal text-gray-500 hover:underline dark:text-gray-400" },
React.createElement("svg", { className: "w-3 h-3 me-2", "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 20 20" },
React.createElement("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M7.529 7.988a2.502 2.502 0 0 1 5 .191A2.441 2.441 0 0 1 10 10.582V12m-.01 3.008H10M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" })),
"Need help connecting a wallet?")) : null,
typeof onCancel === 'function' ? (React.createElement("button", { type: "button", className: "flex gap-2 items-center justify-center my-3 ml-auto mr-auto text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 font-medium rounded-lg text-sm px-5 py-2.5 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-800 enabled:hover:cursor-pointer disabled:hover:cursor-not-allowed", onClick: onCancel },
React.createElement(CloseIcon, { srDesc: "Cancel button" }),
"Cancel")) : null));
};