@kodiak-finance/orderly-ui-connector 2.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +110 -0
- package/dist/index.d.ts +110 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +14 -0
- package/dist/index.mjs.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +45 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as _kodiak_finance_orderly_types from '@kodiak-finance/orderly-types';
|
|
3
|
+
import { AccountStatusEnum, NetworkId } from '@kodiak-finance/orderly-types';
|
|
4
|
+
import * as React$1 from 'react';
|
|
5
|
+
import React__default, { ReactElement, PropsWithChildren } from 'react';
|
|
6
|
+
import { ButtonProps, DataTableProps } from '@kodiak-finance/orderly-ui';
|
|
7
|
+
|
|
8
|
+
type WalletConnectContentProps = {
|
|
9
|
+
initAccountState: AccountStatusEnum;
|
|
10
|
+
signIn: () => Promise<any>;
|
|
11
|
+
enableTrading: (remember: boolean) => Promise<any>;
|
|
12
|
+
enableTradingComplted?: () => Promise<void>;
|
|
13
|
+
onCompleted?: () => void;
|
|
14
|
+
close?: () => void;
|
|
15
|
+
refCode: string;
|
|
16
|
+
setRefCode: React.Dispatch<React.SetStateAction<string>>;
|
|
17
|
+
helpText?: string;
|
|
18
|
+
showRefCodeInput: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare const WalletConnectContent: (props: WalletConnectContentProps) => react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
22
|
+
declare const WalletConnectorModalId: "walletConnector";
|
|
23
|
+
declare const WalletConnectorSheetId: "walletConnectorSheet";
|
|
24
|
+
declare const WalletConnectorWidget: React__default.FC<any>;
|
|
25
|
+
|
|
26
|
+
declare const useWalletConnectorBuilder: () => {
|
|
27
|
+
readonly enableTrading: (remember: boolean) => Promise<any>;
|
|
28
|
+
readonly initAccountState: _kodiak_finance_orderly_types.AccountStatusEnum;
|
|
29
|
+
readonly signIn: () => Promise<any>;
|
|
30
|
+
readonly enableTradingComplted: () => void;
|
|
31
|
+
readonly refCode: string;
|
|
32
|
+
readonly setRefCode: React$1.Dispatch<React$1.SetStateAction<string>>;
|
|
33
|
+
readonly helpText: string;
|
|
34
|
+
readonly showRefCodeInput: boolean;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type alertMessages = {
|
|
38
|
+
connectWallet?: string;
|
|
39
|
+
switchChain?: string;
|
|
40
|
+
enableTrading?: string;
|
|
41
|
+
signin?: string;
|
|
42
|
+
};
|
|
43
|
+
type AuthGuardProps$2 = React__default.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
44
|
+
fallback?: (props: {
|
|
45
|
+
validating: boolean;
|
|
46
|
+
status: AccountStatusEnum;
|
|
47
|
+
wrongNetwork: boolean;
|
|
48
|
+
}) => ReactElement;
|
|
49
|
+
/**
|
|
50
|
+
* Required state to be satisfied
|
|
51
|
+
* @default AccountStatusEnum.EnableTrading
|
|
52
|
+
*/
|
|
53
|
+
status?: AccountStatusEnum;
|
|
54
|
+
bridgeLessOnly?: boolean;
|
|
55
|
+
buttonProps?: ButtonProps;
|
|
56
|
+
descriptions?: alertMessages;
|
|
57
|
+
labels?: alertMessages;
|
|
58
|
+
classNames?: {
|
|
59
|
+
root?: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
};
|
|
62
|
+
networkId?: NetworkId;
|
|
63
|
+
};
|
|
64
|
+
declare const AuthGuard: React__default.FC<React__default.PropsWithChildren<AuthGuardProps$2>>;
|
|
65
|
+
|
|
66
|
+
declare const AuthGuardDataTable: <RecordType>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps, "status"> & {
|
|
67
|
+
status?: AccountStatusEnum;
|
|
68
|
+
classNames?: DataTableProps<RecordType>["classNames"] & {
|
|
69
|
+
authGuardDescription?: string;
|
|
70
|
+
};
|
|
71
|
+
}>) => react_jsx_runtime.JSX.Element;
|
|
72
|
+
type GuardViewProps = {
|
|
73
|
+
status: AccountStatusEnum;
|
|
74
|
+
description?: alertMessages;
|
|
75
|
+
labels?: alertMessages;
|
|
76
|
+
className?: string;
|
|
77
|
+
visible?: boolean;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
type AuthGuardProps$1 = {
|
|
81
|
+
hint?: {
|
|
82
|
+
connectWallet?: string;
|
|
83
|
+
signIn?: string;
|
|
84
|
+
enableTrading?: string;
|
|
85
|
+
wrongNetwork?: string;
|
|
86
|
+
};
|
|
87
|
+
status?: AccountStatusEnum;
|
|
88
|
+
};
|
|
89
|
+
declare const AuthGuardEmpty: React__default.FC<React__default.PropsWithChildren<AuthGuardProps$1>>;
|
|
90
|
+
|
|
91
|
+
type AuthGuardProps = {
|
|
92
|
+
content?: string;
|
|
93
|
+
align?: "center" | "end" | "start";
|
|
94
|
+
alignOffset?: number;
|
|
95
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
96
|
+
sideOffset?: number;
|
|
97
|
+
opactiy?: number;
|
|
98
|
+
tooltip?: {
|
|
99
|
+
connectWallet?: string;
|
|
100
|
+
signIn?: string;
|
|
101
|
+
enableTrading?: string;
|
|
102
|
+
wrongNetwork?: string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
declare const AuthGuardTooltip: {
|
|
106
|
+
(props: PropsWithChildren<AuthGuardProps>): react_jsx_runtime.JSX.Element;
|
|
107
|
+
displayName: string;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as _kodiak_finance_orderly_types from '@kodiak-finance/orderly-types';
|
|
3
|
+
import { AccountStatusEnum, NetworkId } from '@kodiak-finance/orderly-types';
|
|
4
|
+
import * as React$1 from 'react';
|
|
5
|
+
import React__default, { ReactElement, PropsWithChildren } from 'react';
|
|
6
|
+
import { ButtonProps, DataTableProps } from '@kodiak-finance/orderly-ui';
|
|
7
|
+
|
|
8
|
+
type WalletConnectContentProps = {
|
|
9
|
+
initAccountState: AccountStatusEnum;
|
|
10
|
+
signIn: () => Promise<any>;
|
|
11
|
+
enableTrading: (remember: boolean) => Promise<any>;
|
|
12
|
+
enableTradingComplted?: () => Promise<void>;
|
|
13
|
+
onCompleted?: () => void;
|
|
14
|
+
close?: () => void;
|
|
15
|
+
refCode: string;
|
|
16
|
+
setRefCode: React.Dispatch<React.SetStateAction<string>>;
|
|
17
|
+
helpText?: string;
|
|
18
|
+
showRefCodeInput: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare const WalletConnectContent: (props: WalletConnectContentProps) => react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
22
|
+
declare const WalletConnectorModalId: "walletConnector";
|
|
23
|
+
declare const WalletConnectorSheetId: "walletConnectorSheet";
|
|
24
|
+
declare const WalletConnectorWidget: React__default.FC<any>;
|
|
25
|
+
|
|
26
|
+
declare const useWalletConnectorBuilder: () => {
|
|
27
|
+
readonly enableTrading: (remember: boolean) => Promise<any>;
|
|
28
|
+
readonly initAccountState: _kodiak_finance_orderly_types.AccountStatusEnum;
|
|
29
|
+
readonly signIn: () => Promise<any>;
|
|
30
|
+
readonly enableTradingComplted: () => void;
|
|
31
|
+
readonly refCode: string;
|
|
32
|
+
readonly setRefCode: React$1.Dispatch<React$1.SetStateAction<string>>;
|
|
33
|
+
readonly helpText: string;
|
|
34
|
+
readonly showRefCodeInput: boolean;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type alertMessages = {
|
|
38
|
+
connectWallet?: string;
|
|
39
|
+
switchChain?: string;
|
|
40
|
+
enableTrading?: string;
|
|
41
|
+
signin?: string;
|
|
42
|
+
};
|
|
43
|
+
type AuthGuardProps$2 = React__default.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
44
|
+
fallback?: (props: {
|
|
45
|
+
validating: boolean;
|
|
46
|
+
status: AccountStatusEnum;
|
|
47
|
+
wrongNetwork: boolean;
|
|
48
|
+
}) => ReactElement;
|
|
49
|
+
/**
|
|
50
|
+
* Required state to be satisfied
|
|
51
|
+
* @default AccountStatusEnum.EnableTrading
|
|
52
|
+
*/
|
|
53
|
+
status?: AccountStatusEnum;
|
|
54
|
+
bridgeLessOnly?: boolean;
|
|
55
|
+
buttonProps?: ButtonProps;
|
|
56
|
+
descriptions?: alertMessages;
|
|
57
|
+
labels?: alertMessages;
|
|
58
|
+
classNames?: {
|
|
59
|
+
root?: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
};
|
|
62
|
+
networkId?: NetworkId;
|
|
63
|
+
};
|
|
64
|
+
declare const AuthGuard: React__default.FC<React__default.PropsWithChildren<AuthGuardProps$2>>;
|
|
65
|
+
|
|
66
|
+
declare const AuthGuardDataTable: <RecordType>(props: PropsWithChildren<DataTableProps<RecordType> & Omit<GuardViewProps, "status"> & {
|
|
67
|
+
status?: AccountStatusEnum;
|
|
68
|
+
classNames?: DataTableProps<RecordType>["classNames"] & {
|
|
69
|
+
authGuardDescription?: string;
|
|
70
|
+
};
|
|
71
|
+
}>) => react_jsx_runtime.JSX.Element;
|
|
72
|
+
type GuardViewProps = {
|
|
73
|
+
status: AccountStatusEnum;
|
|
74
|
+
description?: alertMessages;
|
|
75
|
+
labels?: alertMessages;
|
|
76
|
+
className?: string;
|
|
77
|
+
visible?: boolean;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
type AuthGuardProps$1 = {
|
|
81
|
+
hint?: {
|
|
82
|
+
connectWallet?: string;
|
|
83
|
+
signIn?: string;
|
|
84
|
+
enableTrading?: string;
|
|
85
|
+
wrongNetwork?: string;
|
|
86
|
+
};
|
|
87
|
+
status?: AccountStatusEnum;
|
|
88
|
+
};
|
|
89
|
+
declare const AuthGuardEmpty: React__default.FC<React__default.PropsWithChildren<AuthGuardProps$1>>;
|
|
90
|
+
|
|
91
|
+
type AuthGuardProps = {
|
|
92
|
+
content?: string;
|
|
93
|
+
align?: "center" | "end" | "start";
|
|
94
|
+
alignOffset?: number;
|
|
95
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
96
|
+
sideOffset?: number;
|
|
97
|
+
opactiy?: number;
|
|
98
|
+
tooltip?: {
|
|
99
|
+
connectWallet?: string;
|
|
100
|
+
signIn?: string;
|
|
101
|
+
enableTrading?: string;
|
|
102
|
+
wrongNetwork?: string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
declare const AuthGuardTooltip: {
|
|
106
|
+
(props: PropsWithChildren<AuthGuardProps>): react_jsx_runtime.JSX.Element;
|
|
107
|
+
displayName: string;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export { AuthGuard, AuthGuardDataTable, AuthGuardEmpty, AuthGuardTooltip, WalletConnectContent, type WalletConnectContentProps, WalletConnectorModalId, WalletConnectorSheetId, WalletConnectorWidget, useWalletConnectorBuilder };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var orderlyHooks = require('@kodiak-finance/orderly-hooks');
|
|
5
|
+
var orderlyI18n = require('@kodiak-finance/orderly-i18n');
|
|
6
|
+
var orderlyTypes = require('@kodiak-finance/orderly-types');
|
|
7
|
+
var orderlyUi = require('@kodiak-finance/orderly-ui');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
var orderlyReactApp = require('@kodiak-finance/orderly-react-app');
|
|
10
|
+
var orderlyUiChainSelector = require('@kodiak-finance/orderly-ui-chain-selector');
|
|
11
|
+
|
|
12
|
+
var te=e=>{let{title:t,description:n,showDivider:o}=e;return jsxRuntime.jsxs(orderlyUi.Box,{position:"relative",className:"oui-pl-8",children:[jsxRuntime.jsxs(orderlyUi.Box,{children:[jsxRuntime.jsx(orderlyUi.Text,{as:"div",intensity:98,size:"sm",children:t}),jsxRuntime.jsx(orderlyUi.Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsxRuntime.jsx("div",{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",children:jsxRuntime.jsx(Ie,{...e})}),o&&jsxRuntime.jsx(orderlyUi.Box,{position:"absolute",left:12,top:23,bottom:-21,zIndex:0,children:jsxRuntime.jsx(orderlyUi.Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]})},Ie=e=>{let{active:t,isLoading:n,isCompleted:o}=e;return n?jsxRuntime.jsx(orderlyUi.Spinner,{size:"sm",className:"oui-ml-1"}):o?jsxRuntime.jsx(orderlyUi.CheckedCircleFillIcon,{opacity:1,className:"oui-text-primary"}):jsxRuntime.jsx(ve,{active:!!t})},ve=({active:e,className:t})=>jsxRuntime.jsx("div",{className:orderlyUi.cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var Z=e=>{let{initAccountState:t=orderlyTypes.AccountStatusEnum.NotConnected}=e,[n,o]=react.useState(true),r=orderlyHooks.useEventEmitter(),{t:i}=orderlyI18n.useTranslation(),{disconnect:g,namespace:d}=orderlyHooks.useWalletConnector(),{state:m,account:s}=orderlyHooks.useAccount(),[a,p]=react.useState(t),[l,A]=react.useState(0),[x,b]=react.useState(false),[B,T]=react.useState(false),{ledgerWallet:N,setLedgerAddress:ye}=orderlyHooks.useStorageLedgerAddress(),C=react.useRef(0),[M]=orderlyHooks.useLocalStorage("orderly-first-show-wallet-connector-dialog",void 0);react.useEffect(()=>()=>{localStorage.setItem("orderly-first-show-wallet-connector-dialog","1");},[]),react.useEffect(()=>{p(m.status);},[m]);let O=react.useMemo(()=>{let u=[];return t<orderlyTypes.AccountStatusEnum.SignedIn&&u.push({key:"signIn",title:i("connector.createAccount"),description:i("connector.createAccount.description")}),t<orderlyTypes.AccountStatusEnum.EnableTrading&&u.push({key:"enableTrading",title:i("connector.enableTrading"),description:i("connector.enableTrading.description")}),u},[t,i]);react.useEffect(()=>{if(d!=orderlyTypes.ChainNamespace.solana){T(false);return}if(!N){T(true);return}if(N&&s.address&&!N.includes(s.address)){T(true);return}T(false);},[d,s.address,N]);let Y=()=>(b(true),e.enableTrading(n).then(async u=>{C.current++,b(false),A(y=>y+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},u=>{if(b(false),u!==-1){if(u.message.indexOf("Signing off chain messages with Ledger is not yet supported")!==-1){r.emit("wallet:sign-message-with-ledger-error",{message:u.message,userAddress:s.address});return}orderlyUi.toast.error(ae(u));}}).catch(u=>{b(false);})),Te=async()=>{localStorage.removeItem("orderly_link_device"),g({label:a.connectWallet?.name}).then(()=>{s.disconnect(),typeof e.close=="function"&&e.close();});},xe=()=>(b(true),e.signIn().then(u=>{A(y=>y+1),Y();},u=>{if(b(false),u!==-1){if(u.message.indexOf("Signing off chain messages with Ledger is not yet supported")!==-1){r.emit("wallet:sign-message-with-ledger-error",{message:u.message,userAddress:s.address});return}orderlyUi.toast.error(ae(u));}}).catch(u=>{b(false);}));return jsxRuntime.jsxs(orderlyUi.Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsxRuntime.jsx(orderlyUi.Text,{intensity:54,size:"xs",children:i("connector.expired")}),jsxRuntime.jsx(orderlyUi.Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:O.map((u,y)=>{let Se=y===O.length-1;return jsxRuntime.jsx(te,{title:u.title,description:u.description,isCompleted:l>y,active:l===y,isLoading:x&&l===y,showDivider:!Se},u.key)})}),e.showRefCodeInput&&O.length==2&&jsxRuntime.jsx(Ve,{...e}),M&&jsxRuntime.jsxs(orderlyUi.Flex,{justify:"between",itemAlign:"center",children:[jsxRuntime.jsx(Ue,{}),jsxRuntime.jsx(orderlyUi.Switch,{color:"primary",checked:n,onCheckedChange:o,disabled:x,className:"data-[state=checked]:oui-bg-primary-darken"})]}),jsxRuntime.jsx(orderlyUi.Flex,{justify:"center",mt:8,className:"oui-w-full",children:jsxRuntime.jsx(orderlyUi.Box,{className:"oui-w-full",children:jsxRuntime.jsx(He,{state:a,signIn:xe,enableTrading:Y,loading:x,disabled:a>=orderlyTypes.AccountStatusEnum.EnableTrading,showLedgerButton:B})})}),a>orderlyTypes.AccountStatusEnum.NotConnected&&jsxRuntime.jsxs(orderlyUi.Flex,{justify:"center",mt:4,gap:1,className:"oui-w-full oui-cursor-pointer",onClick:Te,children:[jsxRuntime.jsx(_e,{}),jsxRuntime.jsx(orderlyUi.Text,{className:"oui-text-base-contrast-80 oui-text-sm",children:i("connector.disconnectWallet")})]})]})},_e=()=>jsxRuntime.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:jsxRuntime.jsx("path",{d:"M2.24219 5.24316C2.24219 3.58641 3.58536 2.24316 5.24219 2.24316H8.24219C9.89894 2.24316 11.2422 3.58641 11.2422 5.24316C11.2422 5.65716 10.9062 5.99316 10.4922 5.99316C10.0782 5.99316 9.74219 5.65716 9.74219 5.24316C9.74219 4.41441 9.07094 3.74316 8.24219 3.74316H5.24219C4.41374 3.74316 3.74219 4.41441 3.74219 5.24316V12.7432C3.74219 13.5719 4.41374 14.2432 5.24219 14.2432H8.24219C9.07094 14.2432 9.74219 13.5719 9.74219 12.7432C9.74219 12.3292 10.0782 11.9932 10.4922 11.9932C10.9062 11.9932 11.2422 12.3292 11.2422 12.7432C11.2422 14.3999 9.89894 15.7432 8.24219 15.7432H5.24219C3.58536 15.7432 2.24219 14.3999 2.24219 12.7432V5.24316ZM7.49219 8.99316C7.49219 8.57916 7.82819 8.24316 8.24219 8.24316H13.9144L12.4377 6.74316L13.4922 5.68866L16.2814 8.45391C16.5739 8.74716 16.5739 9.23915 16.2814 9.5324L13.4922 12.2977L12.4377 11.2432L13.9144 9.74316H8.24219C7.82819 9.74316 7.49219 9.40716 7.49219 8.99316Z",fill:"white",fillOpacity:"0.8"})}),He=({state:e,signIn:t,enableTrading:n,loading:o,disabled:r,showLedgerButton:i})=>{let{t:g}=orderlyI18n.useTranslation();return e<=orderlyTypes.AccountStatusEnum.NotSignedIn?jsxRuntime.jsxs(orderlyUi.Flex,{direction:"column",gap:3,className:"oui-w-full",children:[jsxRuntime.jsx(orderlyUi.Button,{fullWidth:true,onClick:()=>t(),loading:o,disabled:r,children:g("connector.createAccount")}),i&&jsxRuntime.jsx(se,{onClick:()=>t(),content:g("connector.createAccountWithLedger")})]}):jsxRuntime.jsxs(orderlyUi.Flex,{direction:"column",gap:3,className:"oui-w-full",children:[jsxRuntime.jsx(orderlyUi.Button,{fullWidth:true,onClick:()=>n(),loading:o,disabled:r,children:g("connector.enableTrading")}),i&&jsxRuntime.jsx(se,{onClick:()=>n(),disabled:r,content:g("connector.enableTradingWithLedger")})]})},se=({onClick:e,disabled:t,content:n})=>{let{t:o}=orderlyI18n.useTranslation(),{state:r}=orderlyHooks.useAccount(),i=r.address,{setLedgerAddress:g}=orderlyHooks.useStorageLedgerAddress();return i?jsxRuntime.jsx(orderlyUi.Button,{variant:"outlined",color:"primary",fullWidth:true,onClick:()=>{g(i),e();},disabled:t,className:"oui-w-full",children:n}):null},Ve=e=>{let{t}=orderlyI18n.useTranslation();return jsxRuntime.jsx(orderlyUi.TextField,{placeholder:t("connector.referralCode.placeholder"),fullWidth:true,label:"",value:e.refCode,onChange:n=>{let o=n.target.value.toUpperCase().replace(/[^A-Z0-9]/g,"");e.setRefCode(o);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[orderlyUi.inputFormatter.createRegexInputFormatter(n=>String(n).replace(/[a-z]/g,o=>o.toUpperCase())),orderlyUi.inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0})},Ue=()=>{let{t:e}=orderlyI18n.useTranslation(),t=()=>{window.innerWidth>768||orderlyUi.modal.alert({title:e("connector.rememberMe"),message:jsxRuntime.jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:e("connector.rememberMe.description")})});};return jsxRuntime.jsx(orderlyUi.Tooltip,{content:e("connector.rememberMe.description"),className:"oui-max-w-[300px]",children:jsxRuntime.jsx("button",{onClick:t,children:jsxRuntime.jsx(orderlyUi.Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:e("connector.rememberMe")})})})};function ae(e){Object.keys(e).forEach(n=>{});let t=orderlyI18n.i18n.t("connector.somethingWentWrong");return e.toString().includes("rejected")&&(t=orderlyI18n.i18n.t("connector.userRejected")),orderlyUi.capitalizeFirstLetter(t)??t}var K=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:o}=orderlyHooks.useAccount(),[r,i]=react.useState(""),[g,d]=react.useState(""),{t:m}=orderlyI18n.useTranslation(),{trigger:s}=orderlyHooks.useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${r}`);react.useEffect(()=>{let C=localStorage.getItem("referral_code");C!=null&&i(C);},[]);let{referral_code:a,isLoading:p}=orderlyHooks.useGetReferralCode(e.accountId),[l,{error:A,isMutating:x}]=orderlyHooks.useMutation("/v1/referral/bind","POST");react.useEffect(()=>{r.length===0&&d("");},[r]);let b=()=>{orderlyUi.toast.success(m("connector.walletConnected")),r.length>=4&&r.length<=10&&l({referral_code:r}).finally(()=>{localStorage.removeItem("referral_code");});},B=async()=>{if(r.length===0)return Promise.resolve(void 0);if(r.length>0&&(r.length<4||r.length>10))return Promise.resolve(m("connector.referralCode.invalid"));let{exist:C}=await s();return C===false?Promise.resolve(m("connector.referralCode.notExist")):Promise.resolve(void 0)},T=(a?.length||0)===0&&!p,N=async()=>{if(T){let C=await B();if(typeof C<"u")return d(C),Promise.reject(-1)}return d(""),o()};return {enableTrading:async C=>{if(T){let M=await B();if(typeof M<"u")return d(M),Promise.reject(-1)}return d(""),n(C)},initAccountState:t.status,signIn:N,enableTradingComplted:b,refCode:r,setRefCode:i,helpText:g,showRefCodeInput:T}};var D="walletConnector",F="walletConnectorSheet",Q=e=>{let t=K();return jsxRuntime.jsx(Z,{...t,...e})};orderlyUi.registerSimpleDialog(D,Q,{size:"sm",title:()=>orderlyI18n.i18n.t("connector.connectWallet")});orderlyUi.registerSimpleSheet(F,Q,{title:()=>orderlyI18n.i18n.t("connector.connectWallet")});var k=e=>{let{status:t,buttonProps:n,fallback:o,descriptions:r,classNames:i,networkId:g,id:d,bridgeLessOnly:m}=e,{t:s}=orderlyI18n.useTranslation(),{state:a}=orderlyHooks.useAccount(),{wrongNetwork:p,disabledConnect:l}=orderlyReactApp.useAppContext(),A=react.useMemo(()=>t===void 0?a.status===orderlyTypes.AccountStatusEnum.EnableTradingWithoutConnected?orderlyTypes.AccountStatusEnum.EnableTradingWithoutConnected:orderlyTypes.AccountStatusEnum.EnableTrading:t,[t,a.status]),x={connectWallet:s("connector.connectWallet"),switchChain:s("connector.wrongNetwork"),enableTrading:s("connector.enableTrading"),signin:s("connector.createAccount"),...e.labels},b=react.useMemo(()=>typeof o<"u"?o({validating:a.validating,status:a.status,wrongNetwork:p}):a.validating&&!l?jsxRuntime.jsx(R,{angle:45,disabled:true,loading:true,description:r?.connectWallet,id:d,type:"button",...n,children:x.connectWallet}):jsxRuntime.jsx(dt,{bridgeLessOnly:m,status:a.status,buttonProps:{...n,id:d,type:"button"},wrongNetwork:p,networkId:e.networkId,labels:x,descriptions:r,disabledConnect:l}),[a.status,a.validating,n,p]);return jsxRuntime.jsx(orderlyUi.Either,{value:a.status>=A&&!p&&!l,left:b,children:e.children})},lt=()=>{let{t:e}=orderlyI18n.useTranslation(),{state:t}=orderlyHooks.useAccount();return t.status<orderlyTypes.AccountStatusEnum.SignedIn?jsxRuntime.jsx(orderlyUi.Text,{children:e("connector.createAccount")}):t.status<orderlyTypes.AccountStatusEnum.EnableTrading?jsxRuntime.jsx(orderlyUi.Text,{children:e("connector.enableTrading")}):jsxRuntime.jsx(orderlyUi.Text,{children:e("connector.connectWallet")})},dt=e=>{let{buttonProps:t,labels:n,descriptions:o}=e,{t:r}=orderlyI18n.useTranslation(),{connectWallet:i}=orderlyReactApp.useAppContext(),{account:g}=orderlyHooks.useAccount(),{isMobile:d}=orderlyUi.useScreen(),m=orderlyHooks.useMediaQuery(orderlyTypes.MEDIA_TABLET),s=()=>{orderlyUi.modal.show(m?F:D,{title:jsxRuntime.jsx(lt,{})}).then(l=>{},l=>{});},a=async()=>{let l=await i();l&&(l.wrongNetwork?p():(l?.status??orderlyTypes.AccountStatusEnum.NotConnected)<orderlyTypes.AccountStatusEnum.EnableTrading&&s());},p=()=>{g.once("validate:end",l=>{l<orderlyTypes.AccountStatusEnum.EnableTrading?s():orderlyUi.toast.success(r("connector.walletConnected"));}),orderlyUi.modal.show(d?orderlyUiChainSelector.ChainSelectorSheetId:orderlyUiChainSelector.ChainSelectorDialogId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(l=>{l.wrongNetwork||e.status>=orderlyTypes.AccountStatusEnum.Connected&&(e.status<orderlyTypes.AccountStatusEnum.EnableTrading?s():orderlyUi.toast.success(r("connector.walletConnected")));},l=>{});};return e.wrongNetwork&&!e.disabledConnect?jsxRuntime.jsx(R,{color:"warning",onClick:()=>{p();},description:o?.switchChain,...t,children:n.switchChain}):e.status<=orderlyTypes.AccountStatusEnum.NotConnected||e.disabledConnect?jsxRuntime.jsx(R,{size:"lg",onClick:()=>{a();},variant:e.disabledConnect?void 0:"gradient",angle:45,description:o?.connectWallet,disabled:e.disabledConnect,...t,children:n.connectWallet}):e.status<=orderlyTypes.AccountStatusEnum.NotSignedIn?jsxRuntime.jsx(R,{size:"lg",onClick:()=>{s();},angle:45,description:o?.signin,...t,children:n.signin}):jsxRuntime.jsx(R,{size:"lg",description:o?.enableTrading,...t,onClick:()=>s(),children:n.enableTrading})};k.displayName="AuthGuard";var R=e=>{let{description:t,...n}=e;return jsxRuntime.jsxs(orderlyUi.Flex,{direction:"column",children:[jsxRuntime.jsx(orderlyUi.Button,{...n}),!!t&&jsxRuntime.jsx(orderlyUi.Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsxRuntime.jsx(orderlyUi.Text,{size:"2xs",intensity:36,children:t})})]})};var Tt=e=>{let{status:t,labels:n,description:o,dataSource:r,children:i,...g}=e,{state:d}=orderlyHooks.useAccount(),{wrongNetwork:m,disabledConnect:s}=orderlyReactApp.useAppContext(),a=react.useMemo(()=>t===void 0?d.status===orderlyTypes.AccountStatusEnum.EnableTradingWithoutConnected?orderlyTypes.AccountStatusEnum.EnableTradingWithoutConnected:orderlyTypes.AccountStatusEnum.EnableTrading:t,[t,d.status]),p=orderlyReactApp.useDataTap(r,{accountStatus:a}),l=m||s||d.status<a||e.ignoreLoadingCheck;return jsxRuntime.jsx(orderlyUi.DataTable,{dataSource:p,ignoreLoadingCheck:l,emptyView:jsxRuntime.jsx(xt,{status:a,description:o,labels:n,className:e.classNames?.authGuardDescription,visible:!d.validating}),manualPagination:true,...g,children:i})},xt=e=>{let{t}=orderlyI18n.useTranslation(),o={...{connectWallet:t("connector.trade.connectWallet.tooltip"),switchChain:t("connector.wrongNetwork.tooltip"),enableTrading:t("connector.trade.enableTrading.tooltip"),signin:t("connector.trade.createAccount.tooltip")},...e.description};return e.visible?jsxRuntime.jsx(orderlyUi.Flex,{py:8,children:jsxRuntime.jsx(k,{status:e.status,labels:e.labels,descriptions:o,buttonProps:{size:"md"},children:jsxRuntime.jsx(orderlyUi.ExtensionSlot,{position:orderlyUi.ExtensionPositionEnum.EmptyDataIdentifier})})}):null};var he=e=>{let{t}=orderlyI18n.useTranslation(),{hint:n={connectWallet:t("connector.trade.connectWallet.tooltip"),signIn:t("connector.trade.createAccount.tooltip"),enableTrading:t("connector.trade.enableTrading.tooltip"),wrongNetwork:t("connector.wrongNetwork.tooltip")},status:o}=e;return jsxRuntime.jsx(orderlyUi.Box,{my:8,children:jsxRuntime.jsx(k,{status:o,descriptions:{...n,switchChain:n.wrongNetwork},children:e.children||jsxRuntime.jsx(orderlyUi.EmptyDataState,{})})})};he.displayName="AuthGuardEmpty";var we=e=>{let{t}=orderlyI18n.useTranslation(),{opactiy:n=90,tooltip:o={connectWallet:t("connector.setUp.connectWallet.tooltip"),signIn:t("connector.setUp.createAccount.tooltip"),enableTrading:t("connector.setUp.enableTrading.tooltip"),wrongNetwork:t("connector.wrongNetwork.tooltip")}}=e,[r,i]=react.useState(false),{state:g}=orderlyHooks.useAccount(),d=true,{wrongNetwork:m}=orderlyReactApp.useAppContext(),s=react.useMemo(()=>{if(m)return o?.wrongNetwork;switch(g.status){case orderlyTypes.AccountStatusEnum.NotConnected:return o?.connectWallet;case orderlyTypes.AccountStatusEnum.NotSignedIn:return o?.signIn;case orderlyTypes.AccountStatusEnum.DisabledTrading:return o?.enableTrading;case orderlyTypes.AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,g,d,o]),a=react.useMemo(()=>{switch(g.status){case orderlyTypes.AccountStatusEnum.NotConnected:case orderlyTypes.AccountStatusEnum.NotSignedIn:return n;case orderlyTypes.AccountStatusEnum.EnableTrading:return;default:return}},[e.opactiy,g,d]);return jsxRuntime.jsx(orderlyUi.Tooltip,{open:s?r:false,onOpenChange:i,content:s,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsxRuntime.jsx("div",{style:{opacity:a},children:e.children})})};we.displayName="AuthGuardTooltip";
|
|
13
|
+
|
|
14
|
+
exports.AuthGuard = k;
|
|
15
|
+
exports.AuthGuardDataTable = Tt;
|
|
16
|
+
exports.AuthGuardEmpty = he;
|
|
17
|
+
exports.AuthGuardTooltip = we;
|
|
18
|
+
exports.WalletConnectContent = Z;
|
|
19
|
+
exports.WalletConnectorModalId = D;
|
|
20
|
+
exports.WalletConnectorSheetId = F;
|
|
21
|
+
exports.WalletConnectorWidget = Q;
|
|
22
|
+
exports.useWalletConnectorBuilder = K;
|
|
23
|
+
//# sourceMappingURL=out.js.map
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/component/authGuardDataTable.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useRef","useState","useAccount","useEventEmitter","useLocalStorage","useStorageLedgerAddress","useWalletConnector","i18n","useTranslation","AccountStatusEnum","ChainNamespace","Box","Button","capitalizeFirstLetter","Flex","inputFormatter","modal","Switch","Text","TextField","toast","Tooltip","CheckedCircleFillIcon","cn","Divider","Spinner","jsx","jsxs","StepItem","props","title","description","showDivider","Identifier","active","isLoading","isCompleted","Dot","className","WalletConnectContent","initAccountState","remember","setRemember","ee","t","disconnect","namespace","accountState","account","state","setState","activeStep","setActiveStep","loading","setLoading","showLedgerButton","setShowLedgerButton","ledgerWallet","setLedgerAddress","handleRef","firstShowDialog","steps","onEnableTrading","res","step","reject","paseErrorMsg","e","onDisconnect","onSignIn","index","isLast","ReferralCode","RememberMe","ActionButton","DisconnectIcon","signIn","enableTrading","disabled","WithLedgerButton","onClick","content","address","_value","value","char","showRememberHint","key","msg","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","useAppContext","MEDIA_TABLET","Either","useScreen","ChainSelectorDialogId","ChainSelectorSheetId","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","disabledConnect","_status","labels","Left","StatusInfo","DefaultFallback","ModalTitle","connectWallet","isMobile","matches","onConnectOrderly","r","error","onConnectWallet","switchChain","useDataTap","ExtensionPositionEnum","ExtensionSlot","DataTable","AuthGuardDataTable","dataSource","children","rest","data","ignoreLoadingCheck","GuardView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","open","setOpen","isSupport","newOpacity"],"mappings":"AAAA,OAAwB,aAAAA,EAAW,WAAAC,GAAS,UAAAC,GAAQ,YAAAC,MAAgB,QACpE,OACE,cAAAC,GACA,mBAAAC,GACA,mBAAAC,GACA,2BAAAC,GACA,sBAAAC,OACK,gCACP,OAAS,QAAAC,GAAM,kBAAAC,MAAsB,+BACrC,OACE,qBAAAC,EACA,kBAAAC,OAEK,gCACP,OACE,OAAAC,EACA,UAAAC,EACA,yBAAAC,GAEA,QAAAC,EACA,kBAAAC,GACA,SAAAC,GACA,UAAAC,GACA,QAAAC,EACA,aAAAC,GACA,SAAAC,GACA,WAAAC,OACK,6BC1BP,OACE,OAAAV,EACA,yBAAAW,GACA,MAAAC,GACA,WAAAC,GACA,WAAAC,GACA,QAAAP,MACK,6BAeD,OACE,OAAAQ,EADF,QAAAC,OAAA,oBAJC,IAAMC,GAAYC,GAAyB,CAChD,GAAM,CAAE,MAAAC,EAAO,YAAAC,EAAa,YAAAC,CAAY,EAAIH,EAC5C,OACEF,GAAChB,EAAA,CAAI,SAAS,WAAW,UAAU,WACjC,UAAAgB,GAAChB,EAAA,CACC,UAAAe,EAACR,EAAA,CAAK,GAAG,MAAM,UAAW,GAAI,KAAM,KACjC,SAAAY,EACH,EACAJ,EAACR,EAAA,CAAK,GAAG,MAAM,UAAW,GAAI,KAAM,MACjC,SAAAa,EACH,GACF,EACAL,EAAC,OAAI,UAAU,6CACb,SAAAA,EAACO,GAAA,CAAY,GAAGJ,EAAO,EACzB,EACCG,GACCN,EAACf,EAAA,CAAI,SAAU,WAAY,KAAM,GAAI,IAAK,GAAI,OAAQ,IAAK,OAAQ,EACjE,SAAAe,EAACF,GAAA,CACC,UAAW,SACX,UAAW,WACX,UAAW,GACX,UAAU,aACZ,EACF,GAEJ,CAEJ,EAEMS,GAAcJ,GAId,CACJ,GAAM,CAAE,OAAAK,EAAQ,UAAAC,EAAW,YAAAC,CAAY,EAAIP,EAE3C,OAAIM,EACKT,EAACD,GAAA,CAAQ,KAAM,KAAM,UAAW,WAAY,EAGjDW,EACKV,EAACJ,GAAA,CAAsB,QAAS,EAAG,UAAU,mBAAmB,EAGlEI,EAACW,GAAA,CAAI,OAAQ,CAAC,CAACH,EAAQ,CAkChC,EAEMG,GAAmD,CAAC,CACxD,OAAAH,EACA,UAAAI,CACF,IAEIZ,EAAC,OACC,UAAWH,GACT,iEACAe,EACAJ,EAAS,uBAAyB,eACpC,EACF,ED+FE,cAAAR,EA8BE,QAAAC,MA9BF,oBAlKC,IAAMY,EAAwBV,GAAqC,CACxE,GAAM,CAAE,iBAAAW,EAAmB/B,EAAkB,YAAa,EAAIoB,EACxD,CAACY,EAAUC,CAAW,EAAIzC,EAAS,EAAI,EACvC0C,EAAKxC,GAAgB,EACrB,CAAE,EAAAyC,CAAE,EAAIpC,EAAe,EACvB,CAAE,WAAAqC,EAAY,UAAAC,CAAU,EAAIxC,GAAmB,EAE/C,CAAE,MAAOyC,EAAc,QAAAC,CAAQ,EAAI9C,GAAW,EAC9C,CAAC+C,EAAOC,CAAQ,EAAIjD,EAASuC,CAAgB,EAC7C,CAACW,EAAYC,CAAa,EAAInD,EAAS,CAAC,EACxC,CAACoD,EAASC,CAAU,EAAIrD,EAAS,EAAK,EACtC,CAACsD,EAAkBC,CAAmB,EAAIvD,EAAS,EAAK,EACxD,CAAE,aAAAwD,EAAc,iBAAAC,EAAiB,EAAIrD,GAAwB,EAC7DsD,EAAY3D,GAAO,CAAC,EACpB,CAAC4D,CAAe,EAAIxD,GACxB,6CACA,MACF,EACAN,EAAU,IACD,IAAM,CACX,aAAa,QAAQ,6CAA8C,GAAG,CACxE,EACC,CAAC,CAAC,EAELA,EAAU,IAAM,CACdoD,EAASH,EAAa,MAAM,CAC9B,EAAG,CAACA,CAAY,CAAC,EAEjB,IAAMc,EAAQ9D,GAAQ,IAAM,CAC1B,IAAM8D,EAAQ,CAAC,EACf,OAAIrB,EAAmB/B,EAAkB,UACvCoD,EAAM,KAAK,CACT,IAAK,SACL,MAAOjB,EAAE,yBAAyB,EAClC,YAAaA,EAAE,qCAAqC,CACtD,CAAC,EAGCJ,EAAmB/B,EAAkB,eACvCoD,EAAM,KAAK,CACT,IAAK,gBACL,MAAOjB,EAAE,yBAAyB,EAClC,YAAaA,EAAE,qCAAqC,CACtD,CAAC,EAGIiB,CACT,EAAG,CAACrB,EAAkBI,CAAC,CAAC,EAExB9C,EAAU,IAAM,CACd,GAAIgD,GAAapC,GAAe,OAAQ,CACtC8C,EAAoB,EAAK,EACzB,MACF,CACA,GAAI,CAACC,EAAc,CACjBD,EAAoB,EAAI,EACxB,MACF,CACA,GAAIC,GAAgBT,EAAQ,SACtB,CAACS,EAAa,SAAST,EAAQ,OAAO,EAAG,CAC3CQ,EAAoB,EAAI,EACxB,MACF,CAEFA,EAAoB,EAAK,CAC3B,EAAG,CAACV,EAAWE,EAAQ,QAASS,CAAY,CAAC,EAE7C,IAAMK,EAAkB,KACtBR,EAAW,EAAI,EACRzB,EACJ,cAAcY,CAAQ,EACtB,KACC,MAAOsB,GAAQ,CACbJ,EAAU,UAEVL,EAAW,EAAK,EAChBF,EAAeY,GAASA,EAAO,CAAC,EAChC,GAAI,CACF,MAAMnC,EAAM,wBAAwB,CACtC,MAAY,CAAC,CACT,OAAOA,EAAM,aAAgB,WAC/BA,EAAM,YAAY,EACT,OAAOA,EAAM,OAAU,YAChCA,EAAM,MAAM,CAGhB,EACCoC,GAAW,CAEV,GADAX,EAAW,EAAK,EACZW,IAAW,GAIf,IACEA,EAAO,QAAQ,QACb,6DACF,IAAM,GACN,CACAtB,EAAG,KAAK,wCAAyC,CAC/C,QAASsB,EAAO,QAChB,YAAajB,EAAQ,OACvB,CAAC,EACD,MACF,CACA5B,GAAM,MAAM8C,GAAaD,CAAM,CAAC,EAClC,CACF,EACC,MAAOE,GAAM,CAEZb,EAAW,EAAK,CAClB,CAAC,GAGCc,GAAe,SAAY,CAC/B,aAAa,WAAW,qBAAqB,EAC7CvB,EAAW,CACT,MAAQI,EAAyB,eAAe,IAClD,CAAC,EAAE,KAAK,IAAM,CACZD,EAAQ,WAAW,EACf,OAAOnB,EAAM,OAAU,YACzBA,EAAM,MAAM,CAEhB,CAAC,CACH,EAEMwC,GAAW,KACff,EAAW,EAAI,EACRzB,EACJ,OAAO,EACP,KACEkC,GAAQ,CACPX,EAAeY,GAASA,EAAO,CAAC,EAChCF,EAAgB,CAClB,EACCG,GAAW,CAGV,GAFAX,EAAW,EAAK,EAEZW,IAAW,GAGf,IACEA,EAAO,QAAQ,QACb,6DACF,IAAM,GACN,CACAtB,EAAG,KAAK,wCAAyC,CAC/C,QAASsB,EAAO,QAChB,YAAajB,EAAQ,OACvB,CAAC,EACD,MACF,CAEA5B,GAAM,MAAM8C,GAAaD,CAAM,CAAC,EAClC,CACF,EACC,MAAOE,GAAM,CACZb,EAAW,EAAK,CAClB,CAAC,GAGL,OACE3B,EAAChB,EAAA,CAAI,GAAG,oCAAoC,UAAU,oBACpD,UAAAe,EAACR,EAAA,CAAK,UAAW,GAAI,KAAK,KACvB,SAAA0B,EAAE,mBAAmB,EACxB,EACAlB,EAACf,EAAA,CACC,EAAG,EACH,GAAI,EACJ,UAAW,IACX,EAAE,KACF,UAAU,gBACV,SAAU,WAET,SAAAkD,EAAM,IAAI,CAACG,EAAMM,IAAU,CAC1B,IAAMC,GAASD,IAAUT,EAAM,OAAS,EACxC,OACEnC,EAACE,GAAA,CACC,MAAOoC,EAAK,MACZ,YAAaA,EAAK,YAClB,YAAab,EAAamB,EAE1B,OAAQnB,IAAemB,EACvB,UAAWjB,GAAWF,IAAemB,EACrC,YAAa,CAACC,IAHTP,EAAK,GAIZ,CAEJ,CAAC,EACH,EACCnC,EAAM,kBAAoBgC,EAAM,QAAU,GACzCnC,EAAC8C,GAAA,CAAc,GAAG3C,EAAO,EAE1B+B,GACCjC,EAACb,EAAA,CAAK,QAAS,UAAW,UAAW,SACnC,UAAAY,EAAC+C,GAAA,EAAW,EACZ/C,EAACT,GAAA,CACC,MAAO,UACP,QAASwB,EACT,gBAAiBC,EACjB,SAAUW,EACV,UAAU,6CACZ,GACF,EAEF3B,EAACZ,EAAA,CAAK,QAAS,SAAU,GAAI,EAAG,UAAU,aACxC,SAAAY,EAACf,EAAA,CAAI,UAAU,aACb,SAAAe,EAACgD,GAAA,CACC,MAAOzB,EACP,OAAQoB,GACR,cAAeP,EACf,QAAST,EACT,SAAUJ,GAASxC,EAAkB,cACrC,iBAAkB8C,EACpB,EACF,EACF,EACCN,EAAQxC,EAAkB,cACzBkB,EAACb,EAAA,CACC,QAAS,SACT,GAAI,EACJ,IAAK,EACL,UAAU,gCACV,QAASsD,GAET,UAAA1C,EAACiD,GAAA,EAAe,EAChBjD,EAACR,EAAA,CAAK,UAAU,wCACb,SAAA0B,EAAE,4BAA4B,EACjC,GACF,GAEJ,CAEJ,EAEM+B,GAAiB,IAEnBjD,EAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OAEL,SAAAA,EAAC,QACC,EAAE,o5BACF,KAAK,QACL,YAAY,MACd,EACF,EAIEgD,GAOD,CAAC,CACJ,MAAAzB,EACA,OAAA2B,EACA,cAAAC,EACA,QAAAxB,EACA,SAAAyB,EACA,iBAAAvB,CACF,IAAM,CACJ,GAAM,CAAE,EAAAX,CAAE,EAAIpC,EAAe,EAE7B,OAAIyC,GAASxC,EAAkB,YAE3BkB,EAACb,EAAA,CAAK,UAAW,SAAU,IAAK,EAAG,UAAU,aAC3C,UAAAY,EAACd,EAAA,CACC,UAAS,GACT,QAAS,IAAMgE,EAAO,EACtB,QAASvB,EACT,SAAUyB,EAET,SAAAlC,EAAE,yBAAyB,EAC9B,EACCW,GACC7B,EAACqD,GAAA,CACC,QAAS,IAAMH,EAAO,EACtB,QAAShC,EAAE,mCAAmC,EAChD,GAEJ,EAKFjB,EAACb,EAAA,CAAK,UAAW,SAAU,IAAK,EAAG,UAAU,aAC3C,UAAAY,EAACd,EAAA,CACC,UAAS,GACT,QAAS,IAAMiE,EAAc,EAC7B,QAASxB,EACT,SAAUyB,EAET,SAAAlC,EAAE,yBAAyB,EAC9B,EACCW,GACC7B,EAACqD,GAAA,CACC,QAAS,IAAMF,EAAc,EAC7B,SAAUC,EACV,QAASlC,EAAE,mCAAmC,EAChD,GAEJ,CAoDJ,EAEMmC,GAAmB,CAAC,CACxB,QAAAC,EACA,SAAAF,EACA,QAAAG,CACF,IAIM,CACJ,GAAM,CAAE,EAAArC,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,GAAW,EACvBgF,EAAUjC,EAAM,QAChB,CAAE,iBAAAS,CAAiB,EAAIrD,GAAwB,EACrD,OAAK6E,EAIHxD,EAACd,EAAA,CACC,QAAQ,WACR,MAAM,UACN,UAAS,GACT,QAAS,IAAM,CACb8C,EAAiBwB,CAAO,EACxBF,EAAQ,CACV,EACA,SAAUF,EACV,UAAU,aAET,SAAAG,EACH,EAfO,IAiBX,EAEMT,GAA+C3C,GAAU,CAC7D,GAAM,CAAE,CAAE,EAAIrB,EAAe,EAE7B,OACEkB,EAACP,GAAA,CACC,YAAa,EAAE,oCAAoC,EACnD,UAAS,GACT,MAAM,GACN,MAAOU,EAAM,QACb,SAAWsC,GAAM,CACf,IAAMgB,EAAShB,EAAE,OAAO,MAAM,YAAY,EAAE,QAAQ,aAAc,EAAE,EACpEtC,EAAM,WAAWsD,CAAM,CACzB,EACA,WAAY,CACV,MAAO,wCACP,MAAO,+DACT,EACA,WAAY,CACVpE,GAAe,0BAA2BqE,GACjC,OAAOA,CAAK,EAAE,QAAQ,SAAWC,GACtCA,EAAK,YAAY,CACnB,CACD,EACDtE,GAAe,0BAA0B,YAAY,CACvD,EACA,QAAS,IAAM,CACbc,EAAM,WAAW,EAAE,CACrB,EACA,aAAa,MACb,SAAUA,EAAM,SAChB,UAAU,WACV,MAAOA,EAAM,SAAW,SAAW,OACrC,CAEJ,EAEM4C,GAAa,IAAM,CACvB,GAAM,CAAE,EAAA7B,CAAE,EAAIpC,EAAe,EAEvB8E,EAAmB,IAAM,CACzB,OAAO,WAAa,KAGxBtE,GAAM,MAAM,CACV,MAAO4B,EAAE,sBAAsB,EAC/B,QACElB,EAAC,QAAK,UAAU,yCACb,SAAAkB,EAAE,kCAAkC,EACvC,CAEJ,CAAC,CACH,EACA,OACElB,EAACL,GAAA,CACC,QAASuB,EAAE,kCAAkC,EAC7C,UAAU,oBAEV,SAAAlB,EAAC,UAAO,QAAS4D,EACf,SAAA5D,EAACR,EAAA,CACC,UAAW,GACX,KAAM,KACN,UACE,6FAGD,SAAA0B,EAAE,sBAAsB,EAC3B,EACF,EACF,CAEJ,EAEA,SAASsB,GAAaD,EAAqB,CAGzC,OAAO,KAAKA,CAAM,EAAE,QAASsB,GAAQ,CAErC,CAAC,EACD,IAAIC,EAAMjF,GAAK,EAAE,8BAA8B,EAU/C,OAAI0D,EAAO,SAAS,EAAE,SAAS,UAAU,IACvCuB,EAAMjF,GAAK,EAAE,wBAAwB,GAGhCM,GAAsB2E,CAAG,GAAKA,CACvC,CEhhBA,OAAS,QAAAjF,OAAY,+BACrB,OAAS,wBAAAkF,GAAsB,uBAAAC,OAA2B,6BCF1D,OAAS,aAAA5F,GAAW,YAAAG,OAAgB,QACpC,OACE,cAAAC,GACA,sBAAAyF,GACA,gBAAAC,GACA,eAAAC,OACK,gCACP,OAAS,kBAAArF,OAAsB,+BAC/B,OAAS,SAAAY,OAAa,6BAEf,IAAM0E,EAA4B,IAAM,CAC7C,GAAM,CAAE,QAAA9C,EAAS,MAAAC,EAAO,iBAAA8C,EAAkB,cAAAC,CAAc,EAAI9F,GAAW,EACjE,CAAC+F,EAASC,CAAU,EAAIjG,GAAS,EAAE,EACnC,CAACkG,EAAUC,CAAW,EAAInG,GAAS,EAAE,EACrC,CAAE,EAAA2C,CAAE,EAAIpC,GAAe,EAEvB,CAAE,QAAS6F,CAAc,EAAIT,GACjC,qDAAqDK,CAAO,EAC9D,EAEAnG,GAAU,IAAM,CACd,IAAMmG,EAAU,aAAa,QAAQ,eAAe,EAChDA,GAAW,MACbC,EAAWD,CAAO,CAEtB,EAAG,CAAC,CAAC,EAEL,GAAM,CAAE,cAAAK,EAAe,UAAAnE,CAAU,EAAIwD,GAAmB3C,EAAQ,SAAS,EAEnE,CAACuD,EAAa,CAAE,MAAOC,EAAkB,WAAYC,CAAe,CAAC,EACzEZ,GAAY,oBAAqB,MAAM,EAEzC/F,GAAU,IAAM,CACVmG,EAAQ,SAAW,GACrBG,EAAY,EAAE,CAElB,EAAG,CAACH,CAAO,CAAC,EAEZ,IAAMS,EAAwB,IAAM,CAClCtF,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,EAExCqD,EAAQ,QAAU,GAAKA,EAAQ,QAAU,IAC3CM,EAAY,CAAE,cAAeN,CAAQ,CAAC,EAAE,QAAQ,IAAM,CACpD,aAAa,WAAW,eAAe,CACzC,CAAC,CACL,EAEMU,EAAe,SAAY,CAC/B,GAAIV,EAAQ,SAAW,EACrB,OAAO,QAAQ,QAAQ,MAAS,EAGlC,GAAIA,EAAQ,OAAS,IAAMA,EAAQ,OAAS,GAAKA,EAAQ,OAAS,IAChE,OAAO,QAAQ,QAAQrD,EAAE,gCAAgC,CAAC,EAG5D,GAAM,CAAE,MAAAgE,CAAM,EAAI,MAAMP,EAAc,EAEtC,OAAIO,IAAU,GACL,QAAQ,QAAQhE,EAAE,iCAAiC,CAAC,EAGtD,QAAQ,QAAQ,MAAS,CAClC,EAEMiE,GAAoBP,GAAe,QAAU,KAAO,GAAK,CAACnE,EAE1DyC,EAAS,SAAY,CACzB,GAAIiC,EAAkB,CACpB,IAAMC,EAAO,MAAMH,EAAa,EAChC,GAAI,OAAOG,EAAS,IAClB,OAAAV,EAAYU,CAAI,EACT,QAAQ,OAAO,EAAE,CAE5B,CACA,OAAAV,EAAY,EAAE,EACPJ,EAAc,CACvB,EAcA,MAAO,CACL,cAboB,MAAOvD,GAAsB,CACjD,GAAIoE,EAAkB,CACpB,IAAMC,EAAO,MAAMH,EAAa,EAChC,GAAI,OAAOG,EAAS,IAClB,OAAAV,EAAYU,CAAI,EACT,QAAQ,OAAO,EAAE,CAE5B,CACA,OAAAV,EAAY,EAAE,EACPL,EAAiBtD,CAAQ,CAClC,EAIE,iBAAkBQ,EAAM,OACxB,OAAA2B,EACA,sBAAA8B,EACA,QAAAT,EACA,WAAAC,EACA,SAAAC,EACA,iBAAAU,CACF,CACF,ED1FS,cAAAnF,OAAA,oBALF,IAAMqF,EAAyB,kBACzBC,EAAyB,uBAEzBC,EAAwCpF,GAAU,CAC7D,IAAMoB,EAAQ6C,EAA0B,EACxC,OAAOpE,GAACa,EAAA,CAAsB,GAAGU,EAAQ,GAAGpB,EAAO,CACrD,EAEA4D,GAAqBsB,EAAwBE,EAAuB,CAClE,KAAM,KACN,MAAO,IAAM1G,GAAK,EAAE,yBAAyB,CAC/C,CAAC,EAEDmF,GAAoBsB,EAAwBC,EAAuB,CACjE,MAAO,IAAM1G,GAAK,EAAE,yBAAyB,CAC/C,CAAC,EErBD,OAA8B,WAAAR,OAAe,QAC7C,OAAS,cAAAG,EAAY,iBAAAgH,OAAqB,gCAC1C,OAAS,kBAAA1G,MAAsB,+BAC/B,OAAS,iBAAA2G,OAAqB,oCAC9B,OACE,qBAAA1G,EACA,gBAAA2G,OAEK,gCACP,OACE,UAAAxG,GACA,UAAAyG,GACA,SAAArG,GACA,QAAAE,EACA,SAAAE,GACA,aAAAkG,OAEK,6BACP,OAAS,QAAAxG,OAAY,6BACrB,OAAS,OAAAH,OAAW,6BACpB,OACE,yBAAA4G,GACA,wBAAAC,OACK,4CAuGC,cAAA9F,EAsQJ,QAAAC,OAtQI,oBArDD,IAAM8F,EACX5F,GACG,CACH,GAAM,CACJ,OAAA6F,EACA,YAAAC,EACA,SAAAC,EACA,aAAAC,EACA,WAAAC,EACA,UAAAC,EACA,GAAAC,EACA,eAAAC,CAEF,EAAIpG,EACE,CAAE,EAAAe,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,EAAW,EACvB,CAAE,aAAAgI,EAAc,gBAAAC,CAAgB,EAAIhB,GAAc,EAElDiB,EAAUrI,GAAQ,IAClB2H,IAAW,OACNzE,EAAM,SAAWxC,EAAkB,8BACtCA,EAAkB,8BAClBA,EAAkB,cAEjBiH,EACN,CAACA,EAAQzE,EAAM,MAAM,CAAC,EAEnBoF,EAAS,CACb,cAAezF,EAAE,yBAAyB,EAC1C,YAAaA,EAAE,wBAAwB,EACvC,cAAeA,EAAE,yBAAyB,EAC1C,OAAQA,EAAE,yBAAyB,EACnC,GAAGf,EAAM,MACX,EASMyG,EAAOvI,GAAsB,IAC7B,OAAO6H,EAAa,IACfA,EAAS,CACd,WAAY3E,EAAM,WAClB,OAAQA,EAAM,OACd,aAAAiF,CACF,CAAC,EAGCjF,EAAM,YAAc,CAACkF,EAErBzG,EAAC6G,EAAA,CAEC,MAAO,GAEP,SAAQ,GACR,QAAO,GACP,YAAaV,GAAc,cAC3B,GAAIG,EACJ,KAAK,SACJ,GAAGL,EAEH,SAAAU,EAAO,cACV,EAKF3G,EAAC8G,GAAA,CACC,eAAgBP,EAChB,OAAQhF,EAAM,OACd,YAAa,CAAE,GAAG0E,EAAa,GAAAK,EAAI,KAAM,QAAS,EAClD,aAAcE,EACd,UAAWrG,EAAM,UACjB,OAAQwG,EACR,aAAcR,EACd,gBAAiBM,EACnB,EAED,CAAClF,EAAM,OAAQA,EAAM,WAAY0E,EAAaO,CAAY,CAAC,EAM9D,OACExG,EAAC2F,GAAA,CACC,MAAOpE,EAAM,QAAUmF,GAAW,CAACF,GAAgB,CAACC,EACpD,KAAMG,EAEL,SAAAzG,EAAM,SACT,CAEJ,EAEM4G,GAAuB,IAAM,CACjC,GAAM,CAAE,EAAA7F,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,EAAW,EAC7B,OAAI+C,EAAM,OAASxC,EAAkB,SAC5BiB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,EAEzCK,EAAM,OAASxC,EAAkB,cAC5BiB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,EAEtClB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,CAC7C,EAEM4F,GASA3G,GAAU,CACd,GAAM,CAAE,YAAA8F,EAAa,OAAAU,EAAQ,aAAAR,CAAa,EAAIhG,EACxC,CAAE,EAAAe,CAAE,EAAIpC,EAAe,EACvB,CAAE,cAAAkI,CAAc,EAAIvB,GAAc,EAClC,CAAE,QAAAnE,CAAQ,EAAI9C,EAAW,EACzB,CAAE,SAAAyI,CAAS,EAAIrB,GAAU,EACzBsB,EAAU1B,GAAcE,EAAY,EAEpCyB,EAAmB,IAAM,CAC7B7H,GACG,KAAK4H,EAAU5B,EAAyBD,EAAwB,CAC/D,MAAOrF,EAAC+G,GAAA,EAAW,CACrB,CAAC,EACA,KACEK,GAAG,GACHC,GAAO,EACV,CACJ,EAEMC,EAAkB,SAAY,CAClC,IAAMjF,EAAM,MAAM2E,EAAc,EAE3B3E,IAIDA,EAAI,aACNkF,EAAY,GAGTlF,GAAK,QAAUtD,EAAkB,cAClCA,EAAkB,eAElBoI,EAAiB,EAGvB,EAEMI,EAAc,IAAM,CACxBjG,EAAQ,KAAK,eAAiB0E,GAAW,CACnCA,EAASjH,EAAkB,cAC7BoI,EAAiB,EAEjBzH,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,CAEhD,CAAC,EAED5B,GACG,KACC2H,EAAWnB,GAAuBD,GAClC,CACE,UAAW1F,EAAM,UACjB,eAAgBA,EAAM,cACxB,CACF,EACC,KACEiH,GAAM,CACAA,EAAE,cACDjH,EAAM,QAAUpB,EAAkB,YAChCoB,EAAM,OAASpB,EAAkB,cACnCoI,EAAiB,EAEjBzH,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,EAIpD,EACCmG,GAAO,EACV,CACJ,EAEA,OAAIlH,EAAM,cAAgB,CAACA,EAAM,gBAE7BH,EAAC6G,EAAA,CACC,MAAM,UAGN,QAAS,IAAM,CACbU,EAAY,CACd,EACA,YAAapB,GAAc,YAC1B,GAAGF,EAEH,SAAAU,EAAO,YACV,EAIAxG,EAAM,QAAUpB,EAAkB,cAAgBoB,EAAM,gBAExDH,EAAC6G,EAAA,CACC,KAAK,KACL,QAAS,IAAM,CACbS,EAAgB,CAClB,EAEA,QAASnH,EAAM,gBAAkB,OAAY,WAC7C,MAAO,GACP,YAAagG,GAAc,cAC3B,SAAUhG,EAAM,gBACf,GAAG8F,EAEH,SAAAU,EAAO,cACV,EAIAxG,EAAM,QAAUpB,EAAkB,YAElCiB,EAAC6G,EAAA,CACC,KAAK,KACL,QAAS,IAAM,CACbM,EAAiB,CACnB,EAEA,MAAO,GACP,YAAahB,GAAc,OAC1B,GAAGF,EAEH,SAAAU,EAAO,OACV,EAKF3G,EAAC6G,EAAA,CACC,KAAK,KAEL,YAAaV,GAAc,cAC1B,GAAGF,EACJ,QAAS,IAAMkB,EAAiB,EAE/B,SAAAR,EAAO,cACV,CAuDJ,EAEAZ,EAAU,YAAc,YAExB,IAAMc,EACJ1G,GACG,CACH,GAAM,CAAE,YAAAE,EAAa,GAAG4F,CAAY,EAAI9F,EACxC,OACEF,GAACb,GAAA,CAAK,UAAW,SACf,UAAAY,EAACd,GAAA,CAAQ,GAAG+G,EAAa,EACxB,CAAC,CAAC5F,GACDL,EAACf,GAAA,CAAI,GAAI,EAAG,UAAU,mBAAmB,MAAO,CAAE,WAAY,CAAE,EAC9D,SAAAe,EAACR,EAAA,CAAK,KAAK,MAAM,UAAW,GACzB,SAAAa,EACH,EACF,GAEJ,CAEJ,EC/YA,OAAmC,WAAAhC,OAAe,QAClD,OAAS,cAAAG,OAAkB,gCAC3B,OAAS,kBAAAM,OAAsB,+BAC/B,OAAS,iBAAA2G,GAAe,cAAA+B,OAAkB,oCAC1C,OAAS,qBAAAzI,MAAyB,gCAClC,OACE,yBAAA0I,GACA,iBAAAC,GACA,aAAAC,OAEK,6BACP,OAAS,QAAAvI,OAAY,6BAkDb,cAAAY,MAAA,oBA/CD,IAAM4H,GACXzH,GASG,CACH,GAAM,CACJ,OAAA6F,EAEA,OAAAW,EACA,YAAAtG,EACA,WAAAwH,EACA,SAAAC,EACA,GAAGC,CACL,EAAI5H,EACE,CAAE,MAAAoB,CAAM,EAAI/C,GAAW,EACvB,CAAE,aAAAgI,EAAc,gBAAAC,CAAgB,EAAIhB,GAAc,EAElDiB,EAAUrI,GAAQ,IAClB2H,IAAW,OACNzE,EAAM,SAAWxC,EAAkB,8BACtCA,EAAkB,8BAClBA,EAAkB,cAEjBiH,EACN,CAACA,EAAQzE,EAAM,MAAM,CAAC,EAEnByG,EAAOR,GAAWK,EAAY,CAClC,cAAenB,CACjB,CAAC,EAEKuB,EACJzB,GACAC,GACAlF,EAAM,OAASmF,GACfvG,EAAM,mBAER,OACEH,EAAC2H,GAAA,CACC,WAAYK,EACZ,mBAAoBC,EACpB,UACEjI,EAACkI,GAAA,CACC,OAAQxB,EACR,YAAarG,EACb,OAAQsG,EACR,UAAWxG,EAAM,YAAY,qBAC7B,QAAS,CAACoB,EAAM,WAClB,EAEF,iBAAgB,GACf,GAAGwG,EAEH,SAAAD,EACH,CAEJ,EAUMI,GAAuC/H,GAAU,CACrD,GAAM,CAAE,CAAE,EAAIrB,GAAe,EASvBqH,EAAe,CAAE,GAPa,CAClC,cAAe,EAAE,uCAAuC,EACxD,YAAa,EAAE,gCAAgC,EAC/C,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,CACnD,EAEwC,GAAGhG,EAAM,WAAY,EAC7D,OAAKA,EAAM,QAITH,EAACZ,GAAA,CAAK,GAAI,EACR,SAAAY,EAAC+F,EAAA,CACC,OAAQ5F,EAAM,OACd,OAAQA,EAAM,OACd,aAAcgG,EACd,YAAa,CACX,KAAM,IACR,EAEA,SAAAnG,EAAC0H,GAAA,CAAc,SAAUD,GAAsB,oBAAqB,EACtE,EACF,EAdO,IAgBX,EChHA,OAAS,kBAAA3I,OAAsB,+BAE/B,OAAS,OAAAG,GAAK,kBAAAkJ,OAAsB,6BAiCT,cAAAnI,MAAA,oBApBpB,IAAMoI,GAERjI,GAAU,CACb,GAAM,CAAE,CAAE,EAAIrB,GAAe,EACvB,CACJ,KAAAuJ,EAAO,CACL,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,EACjD,cAAe,EAAE,uCAAuC,EACxD,aAAc,EAAE,gCAAgC,CAClD,EACA,OAAArC,CACF,EAAI7F,EAEJ,OACEH,EAACf,GAAA,CAAI,GAAI,EACP,SAAAe,EAAC+F,EAAA,CACC,OAAQC,EACR,aAAc,CAAE,GAAGqC,EAAM,YAAaA,EAAK,YAAa,EAEvD,SAAAlI,EAAM,UAAYH,EAACmI,GAAA,EAAe,EACrC,EACF,CAEJ,EAEAC,GAAe,YAAc,iBC1C7B,OAA4B,WAAA/J,GAAS,YAAAE,OAAgB,QACrD,OAAS,cAAAC,OAAkB,gCAC3B,OAAS,kBAAAM,OAAsB,+BAC/B,OAAS,iBAAA2G,OAAqB,oCAC9B,OAAS,qBAAA1G,MAAyB,gCAClC,OAAS,WAAAY,OAAe,6BA8ElB,cAAAK,OAAA,oBA7DN,IAAMsI,GAAoBnI,GAA6C,CACrE,GAAM,CAAE,CAAE,EAAIrB,GAAe,EAEvB,CACJ,QAAAyJ,EAAU,GACV,QAAAC,EAAU,CACR,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,EACjD,cAAe,EAAE,uCAAuC,EACxD,aAAc,EAAE,gCAAgC,CAClD,CACF,EAAIrI,EAEE,CAACsI,EAAMC,CAAO,EAAInK,GAAS,EAAK,EAChC,CAAE,MAAAgD,CAAM,EAAI/C,GAAW,EACvBmK,EAAY,GACZ,CAAE,aAAAnC,CAAa,EAAIf,GAAc,EAEjC4C,EAAOhK,GAAQ,IAAM,CACzB,GAAImI,EACF,OAAOgC,GAAS,aAElB,OAAQjH,EAAM,OAAQ,CACpB,KAAKxC,EAAkB,aACrB,OAAOyJ,GAAS,cAClB,KAAKzJ,EAAkB,YACrB,OAAOyJ,GAAS,OAClB,KAAKzJ,EAAkB,gBACrB,OAAOyJ,GAAS,cAClB,KAAKzJ,EAAkB,cACrB,MAAO,GAET,QACE,OAAOoB,EAAM,OACjB,CACF,EAAG,CAACA,EAAM,QAASoB,EAAOoH,EAAWH,CAAO,CAAC,EAEvCI,EAAavK,GAAQ,IAAM,CAC/B,OAAQkD,EAAM,OAAQ,CACpB,KAAKxC,EAAkB,aACvB,KAAKA,EAAkB,YACrB,OAAOwJ,EACT,KAAKxJ,EAAkB,cACrB,OAEF,QACE,MACJ,CACF,EAAG,CAACoB,EAAM,QAASoB,EAAOoH,CAAS,CAAC,EAEpC,OACE3I,GAACL,GAAA,CACC,KAAM0I,EAAOI,EAAO,GACpB,aAAcC,EACd,QAASL,EACT,UAAU,eACV,MAAOlI,EAAM,MACb,YAAaA,EAAM,YACnB,KAAMA,EAAM,KACZ,WAAYA,EAAM,WAElB,SAAAH,GAAC,OAAI,MAAO,CAAE,QAAS4I,CAAW,EAAI,SAAAzI,EAAM,SAAS,EACvD,CAEJ,EAEAmI,GAAiB,YAAc","sourcesContent":["import { FC, ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { i18n, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AccountStatusEnum,\n ChainNamespace,\n LedgerWalletKey,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Button,\n capitalizeFirstLetter,\n Divider,\n Flex,\n inputFormatter,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { StepItem } from \"./step\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n const { disconnect, namespace } = useWalletConnector();\n\n const { state: accountState, account } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [showLedgerButton, setShowLedgerButton] = useState(false);\n const { ledgerWallet, setLedgerAddress } = useStorageLedgerAddress();\n const handleRef = useRef(0);\n const [firstShowDialog] = useLocalStorage(\n \"orderly-first-show-wallet-connector-dialog\",\n undefined,\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"orderly-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: t(\"connector.createAccount\"),\n description: t(\"connector.createAccount.description\"),\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: t(\"connector.enableTrading\"),\n description: t(\"connector.enableTrading.description\"),\n });\n }\n\n return steps;\n }, [initAccountState, t]);\n\n useEffect(() => {\n if (namespace != ChainNamespace.solana) {\n setShowLedgerButton(false);\n return;\n }\n if (!ledgerWallet) {\n setShowLedgerButton(true);\n return;\n }\n if (ledgerWallet && account.address) {\n if (!ledgerWallet.includes(account.address)) {\n setShowLedgerButton(true);\n return;\n }\n }\n setShowLedgerButton(false);\n }, [namespace, account.address, ledgerWallet]);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n handleRef.current++;\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n setLoading(false);\n if (reject === -1) {\n return;\n }\n\n if (\n reject.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: reject.message,\n userAddress: account.address,\n });\n return;\n }\n toast.error(paseErrorMsg(reject));\n },\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n disconnect({\n label: (state as unknown as any).connectWallet?.name,\n }).then(() => {\n account.disconnect();\n if (typeof props.close === \"function\") {\n props.close();\n }\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n\n if (reject === -1) {\n return;\n }\n if (\n reject.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: reject.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(paseErrorMsg(reject));\n },\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n {t(\"connector.expired\")}\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1;\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n showDivider={!isLast}\n />\n );\n })}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-primary-darken\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8} className=\"oui-w-full\">\n <Box className=\"oui-w-full\">\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n showLedgerButton={showLedgerButton}\n />\n </Box>\n </Flex>\n {state > AccountStatusEnum.NotConnected && (\n <Flex\n justify={\"center\"}\n mt={4}\n gap={1}\n className=\"oui-w-full oui-cursor-pointer\"\n onClick={onDisconnect}\n >\n <DisconnectIcon />\n <Text className=\"oui-text-base-contrast-80 oui-text-sm\">\n {t(\"connector.disconnectWallet\")}\n </Text>\n </Flex>\n )}\n </Box>\n );\n};\n\nconst DisconnectIcon = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M2.24219 5.24316C2.24219 3.58641 3.58536 2.24316 5.24219 2.24316H8.24219C9.89894 2.24316 11.2422 3.58641 11.2422 5.24316C11.2422 5.65716 10.9062 5.99316 10.4922 5.99316C10.0782 5.99316 9.74219 5.65716 9.74219 5.24316C9.74219 4.41441 9.07094 3.74316 8.24219 3.74316H5.24219C4.41374 3.74316 3.74219 4.41441 3.74219 5.24316V12.7432C3.74219 13.5719 4.41374 14.2432 5.24219 14.2432H8.24219C9.07094 14.2432 9.74219 13.5719 9.74219 12.7432C9.74219 12.3292 10.0782 11.9932 10.4922 11.9932C10.9062 11.9932 11.2422 12.3292 11.2422 12.7432C11.2422 14.3999 9.89894 15.7432 8.24219 15.7432H5.24219C3.58536 15.7432 2.24219 14.3999 2.24219 12.7432V5.24316ZM7.49219 8.99316C7.49219 8.57916 7.82819 8.24316 8.24219 8.24316H13.9144L12.4377 6.74316L13.4922 5.68866L16.2814 8.45391C16.5739 8.74716 16.5739 9.23915 16.2814 9.5324L13.4922 12.2977L12.4377 11.2432L13.9144 9.74316H8.24219C7.82819 9.74316 7.49219 9.40716 7.49219 8.99316Z\"\n fill=\"white\"\n fillOpacity=\"0.8\"\n />\n </svg>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n showLedgerButton?: boolean;\n disabled?: boolean;\n}> = ({\n state,\n signIn,\n enableTrading,\n loading,\n disabled,\n showLedgerButton,\n}) => {\n const { t } = useTranslation();\n\n if (state <= AccountStatusEnum.NotSignedIn) {\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n {t(\"connector.createAccount\")}\n </Button>\n {showLedgerButton && (\n <WithLedgerButton\n onClick={() => signIn()}\n content={t(\"connector.createAccountWithLedger\")}\n />\n )}\n </Flex>\n );\n }\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n {t(\"connector.enableTrading\")}\n </Button>\n {showLedgerButton && (\n <WithLedgerButton\n onClick={() => enableTrading()}\n disabled={disabled}\n content={t(\"connector.enableTradingWithLedger\")}\n />\n )}\n </Flex>\n );\n\n // return (\n // <Match\n // value={() => {\n // if (state <= AccountStatusEnum.NotSignedIn) {\n // return \"signIn\";\n // }\n // return \"enableTrading\";\n // }}\n // case={{\n // signIn: (\n // <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n // <Button\n // fullWidth\n // onClick={() => signIn()}\n // loading={loading}\n // disabled={disabled}\n // >\n // {t(\"connector.createAccount\")}\n // </Button>\n // {showLedgerButton && (\n // <WithLedgerButton\n // onClick={() => signIn()}\n // content={t(\"connector.createAccountWithLedger\")}\n // />\n // )}\n // </Flex>\n // ),\n // enableTrading: (\n // <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n // <Button\n // fullWidth\n // onClick={() => enableTrading()}\n // loading={loading}\n // disabled={disabled}\n // >\n // {t(\"connector.enableTrading\")}\n // </Button>\n // {showLedgerButton && (\n // <WithLedgerButton\n // onClick={() => enableTrading()}\n // disabled={disabled}\n // content={t(\"connector.enableTradingWithLedger\")}\n // />\n // )}\n // </Flex>\n // ),\n // }}\n // />\n // );\n};\n\nconst WithLedgerButton = ({\n onClick,\n disabled,\n content,\n}: {\n onClick: () => void;\n disabled?: boolean;\n content: ReactNode;\n}) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n const address = state.address;\n const { setLedgerAddress } = useStorageLedgerAddress();\n if (!address) {\n return null;\n }\n return (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n fullWidth\n onClick={() => {\n setLedgerAddress(address);\n onClick();\n }}\n disabled={disabled}\n className=\"oui-w-full\"\n >\n {content}\n </Button>\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <TextField\n placeholder={t(\"connector.referralCode.placeholder\")}\n fullWidth\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n const _value = e.target.value.toUpperCase().replace(/[^A-Z0-9]/g, \"\");\n props.setRefCode(_value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[\n inputFormatter.createRegexInputFormatter((value: string | number) => {\n return String(value).replace(/[a-z]/g, (char: string) =>\n char.toUpperCase(),\n );\n }),\n inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g),\n ]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const { t } = useTranslation();\n\n const showRememberHint = () => {\n if (window.innerWidth > 768) {\n return;\n }\n modal.alert({\n title: t(\"connector.rememberMe\"),\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n {t(\"connector.rememberMe.description\")}\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={t(\"connector.rememberMe.description\")}\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n {t(\"connector.rememberMe\")}\n </Text>\n </button>\n </Tooltip>\n );\n};\n\nfunction paseErrorMsg(reject: any): string {\n console.log(\"wallet callback error\", reject);\n console.log(\"message *** \", \"reject keys\", Object.keys(reject));\n Object.keys(reject).forEach((key) => {\n console.log(\"key\", key, \"-\", reject[key]);\n });\n let msg = i18n.t(\"connector.somethingWentWrong\");\n\n // if (typeof reject?.info?.error === \"object\" && \"message\" in reject?.info?.error) {\n // msg = reject?.info?.error?.message;\n // }\n\n // if (typeof reject?.shortMessage === 'string') {\n // msg = reject.shortMessage;\n // }\n\n if (reject.toString().includes(\"rejected\")) {\n msg = i18n.t(\"connector.userRejected\");\n }\n\n return capitalizeFirstLetter(msg) ?? msg;\n}\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Divider,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n showDivider?: boolean;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description, showDivider } = props;\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <div className=\"oui-absolute oui-left-0 oui-top-1 oui-z-10\">\n <Identifier {...props} />\n </div>\n {showDivider && (\n <Box position={\"absolute\"} left={12} top={23} bottom={-21} zIndex={0}>\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n if (isLoading) {\n return <Spinner size={\"sm\"} className={\"oui-ml-1\"} />;\n }\n\n if (isCompleted) {\n return <CheckedCircleFillIcon opacity={1} className=\"oui-text-primary\" />;\n }\n\n return <Dot active={!!active} />;\n\n // return (\n // <Match\n // className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n // value={() => {\n // if (isCompleted) {\n // return \"completed\";\n // }\n // if (isLoading) {\n // return \"loading\";\n // }\n\n // if (active) {\n // return \"active\";\n // }\n\n // return \"normal\";\n // }}\n // case={{\n // loading: (\n // <div>\n // <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n // </div>\n // ),\n // completed: (\n // <div>\n // <CheckedCircleFillIcon opacity={1} className=\"oui-text-primary\" />\n // </div>\n // ),\n // }}\n // default={<Dot active={!!active} />}\n // />\n // );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\",\n )}\n />\n );\n};\n","import React from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget: React.FC<any> = (props) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: () => i18n.t(\"connector.connectWallet\"),\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: () => i18n.t(\"connector.connectWallet\"),\n});\n","import { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n const { t } = useTranslation();\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`,\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(t(\"connector.walletConnected\"));\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async () => {\n if (refCode.length === 0) {\n return Promise.resolve(undefined);\n }\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(t(\"connector.referralCode.invalid\"));\n }\n\n const { exist } = await verifyRefCode();\n\n if (exist === false) {\n return Promise.resolve(t(\"connector.referralCode.notExist\"));\n }\n\n return Promise.resolve(undefined);\n };\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import React, { ReactElement, useMemo } from \"react\";\nimport { useAccount, useMediaQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Either,\n modal,\n Text,\n toast,\n useScreen,\n type ButtonProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport {\n ChainSelectorDialogId,\n ChainSelectorSheetId,\n} from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\n\ntype ChainProps = {\n networkId?: NetworkId;\n bridgeLessOnly?: boolean;\n};\n\nexport type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nexport const AuthGuard: React.FC<React.PropsWithChildren<AuthGuardProps>> = (\n props,\n) => {\n const {\n status,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const _status = useMemo(() => {\n if (status === undefined) {\n return state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n }\n return status;\n }, [status, state.status]);\n\n const labels = {\n connectWallet: t(\"connector.connectWallet\"),\n switchChain: t(\"connector.wrongNetwork\"),\n enableTrading: t(\"connector.enableTrading\"),\n signin: t(\"connector.createAccount\"),\n ...props.labels,\n };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating && !disabledConnect) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n disabledConnect={disabledConnect}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either\n value={state.status >= _status && !wrongNetwork && !disabledConnect}\n left={Left}\n >\n {props.children}\n </Either>\n );\n};\n\nconst ModalTitle: React.FC = () => {\n const { t } = useTranslation();\n const { state } = useAccount();\n if (state.status < AccountStatusEnum.SignedIn) {\n return <Text>{t(\"connector.createAccount\")}</Text>;\n }\n if (state.status < AccountStatusEnum.EnableTrading) {\n return <Text>{t(\"connector.enableTrading\")}</Text>;\n }\n return <Text>{t(\"connector.connectWallet\")}</Text>;\n};\n\nconst DefaultFallback: React.FC<{\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n descriptions?: alertMessages;\n disabledConnect?: boolean;\n}> = (props) => {\n const { buttonProps, labels, descriptions } = props;\n const { t } = useTranslation();\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const { isMobile } = useScreen();\n const matches = useMediaQuery(MEDIA_TABLET);\n\n const onConnectOrderly = () => {\n modal\n .show(matches ? WalletConnectorSheetId : WalletConnectorModalId, {\n title: <ModalTitle />,\n })\n .then(\n (r) => console.log(r),\n (error) => console.log(error),\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) {\n return;\n }\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n });\n\n modal\n .show<{ wrongNetwork: boolean }>(\n isMobile ? ChainSelectorSheetId : ChainSelectorDialogId,\n {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n },\n )\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n };\n\n if (props.wrongNetwork && !props.disabledConnect) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n if (props.status <= AccountStatusEnum.NotConnected || props.disabledConnect) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={props.disabledConnect ? undefined : \"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n disabled={props.disabledConnect}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n if (props.status <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n\n return (\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n );\n\n // return (\n // <Match\n // value={props.status}\n // case={(value: AccountStatusEnum) => {\n // if (value <= AccountStatusEnum.NotConnected || props.disabledConnect) {\n // return (\n // <StatusInfo\n // size=\"lg\"\n // onClick={() => {\n // onConnectWallet();\n // }}\n // // fullWidth\n // variant={props.disabledConnect ? undefined : \"gradient\"}\n // angle={45}\n // description={descriptions?.connectWallet}\n // disabled={props.disabledConnect}\n // {...buttonProps}\n // >\n // {labels.connectWallet}\n // </StatusInfo>\n // );\n // }\n // if (value <= AccountStatusEnum.NotSignedIn) {\n // return (\n // <StatusInfo\n // size=\"lg\"\n // onClick={() => {\n // onConnectOrderly();\n // }}\n // // fullWidth\n // angle={45}\n // description={descriptions?.signin}\n // {...buttonProps}\n // >\n // {labels.signin}\n // </StatusInfo>\n // );\n // }\n // }}\n // default={\n // <StatusInfo\n // size=\"lg\"\n // // fullWidth\n // description={descriptions?.enableTrading}\n // {...buttonProps}\n // onClick={() => onConnectOrderly()}\n // >\n // {labels.enableTrading}\n // </StatusInfo>\n // }\n // />\n // );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo: React.FC<ButtonProps & { description?: string }> = (\n props,\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n","import React, { PropsWithChildren, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n DataTable,\n DataTableProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { alertMessages, AuthGuard } from \"./authGuard\";\n\nexport const AuthGuardDataTable = <RecordType,>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >,\n) => {\n const {\n status,\n // message,\n labels,\n description,\n dataSource,\n children,\n ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const _status = useMemo(() => {\n if (status === undefined) {\n return state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n }\n return status;\n }, [status, state.status]);\n\n const data = useDataTap(dataSource, {\n accountStatus: _status,\n });\n\n const ignoreLoadingCheck =\n wrongNetwork ||\n disabledConnect ||\n state.status < _status ||\n props.ignoreLoadingCheck;\n\n return (\n <DataTable\n dataSource={data}\n ignoreLoadingCheck={ignoreLoadingCheck}\n emptyView={\n <GuardView\n status={_status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n manualPagination\n {...rest}\n >\n {children}\n </DataTable>\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView: React.FC<GuardViewProps> = (props) => {\n const { t } = useTranslation();\n\n const DESCRIPTIONS: alertMessages = {\n connectWallet: t(\"connector.trade.connectWallet.tooltip\"),\n switchChain: t(\"connector.wrongNetwork.tooltip\"),\n enableTrading: t(\"connector.trade.enableTrading.tooltip\"),\n signin: t(\"connector.trade.createAccount.tooltip\"),\n };\n\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) {\n return null;\n }\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={ExtensionPositionEnum.EmptyDataIdentifier} />\n </AuthGuard>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, EmptyDataState } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nexport const AuthGuardEmpty: React.FC<\n React.PropsWithChildren<AuthGuardProps>\n> = (props) => {\n const { t } = useTranslation();\n const {\n hint = {\n connectWallet: t(\"connector.trade.connectWallet.tooltip\"),\n signIn: t(\"connector.trade.createAccount.tooltip\"),\n enableTrading: t(\"connector.trade.enableTrading.tooltip\"),\n wrongNetwork: t(\"connector.wrongNetwork.tooltip\"),\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard\n status={status}\n descriptions={{ ...hint, switchChain: hint.wrongNetwork }}\n >\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n","import { PropsWithChildren, useMemo, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Tooltip } from \"@kodiak-finance/orderly-ui\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const { t } = useTranslation();\n\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: t(\"connector.setUp.connectWallet.tooltip\"),\n signIn: t(\"connector.setUp.createAccount.tooltip\"),\n enableTrading: t(\"connector.setUp.enableTrading.tooltip\"),\n wrongNetwork: t(\"connector.wrongNetwork.tooltip\"),\n },\n } = props;\n\n const [open, setOpen] = useState(false);\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n open={hint ? open : false}\n onOpenChange={setOpen}\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div style={{ opacity: newOpacity }}>{props.children}</div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useState, useEffect, useRef, useMemo } from 'react';
|
|
2
|
+
import { useAccount, useLazyQuery, useGetReferralCode, useMutation, useEventEmitter, useWalletConnector, useStorageLedgerAddress, useLocalStorage, useMediaQuery } from '@kodiak-finance/orderly-hooks';
|
|
3
|
+
import { i18n, useTranslation } from '@kodiak-finance/orderly-i18n';
|
|
4
|
+
import { AccountStatusEnum, ChainNamespace, MEDIA_TABLET } from '@kodiak-finance/orderly-types';
|
|
5
|
+
import { registerSimpleDialog, registerSimpleSheet, Box, Text, Flex, Switch, toast, Divider, TextField, inputFormatter, Tooltip, Button, Spinner, CheckedCircleFillIcon, modal, capitalizeFirstLetter, cn, Either, useScreen, DataTable, ExtensionSlot, ExtensionPositionEnum, EmptyDataState } from '@kodiak-finance/orderly-ui';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
import { useAppContext, useDataTap } from '@kodiak-finance/orderly-react-app';
|
|
8
|
+
import { ChainSelectorSheetId, ChainSelectorDialogId } from '@kodiak-finance/orderly-ui-chain-selector';
|
|
9
|
+
|
|
10
|
+
var te=e=>{let{title:t,description:n,showDivider:o}=e;return jsxs(Box,{position:"relative",className:"oui-pl-8",children:[jsxs(Box,{children:[jsx(Text,{as:"div",intensity:98,size:"sm",children:t}),jsx(Text,{as:"div",intensity:54,size:"2xs",children:n})]}),jsx("div",{className:"oui-absolute oui-left-0 oui-top-1 oui-z-10",children:jsx(Ie,{...e})}),o&&jsx(Box,{position:"absolute",left:12,top:23,bottom:-21,zIndex:0,children:jsx(Divider,{lineStyle:"dashed",direction:"vertical",intensity:16,className:"oui-h-full"})})]})},Ie=e=>{let{active:t,isLoading:n,isCompleted:o}=e;return n?jsx(Spinner,{size:"sm",className:"oui-ml-1"}):o?jsx(CheckedCircleFillIcon,{opacity:1,className:"oui-text-primary"}):jsx(ve,{active:!!t})},ve=({active:e,className:t})=>jsx("div",{className:cn("oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1",t,e?"oui-bg-primary-light":"oui-bg-base-2")});var Z=e=>{let{initAccountState:t=AccountStatusEnum.NotConnected}=e,[n,o]=useState(true),r=useEventEmitter(),{t:i}=useTranslation(),{disconnect:g,namespace:d}=useWalletConnector(),{state:m,account:s}=useAccount(),[a,p]=useState(t),[l,A]=useState(0),[x,b]=useState(false),[B,T]=useState(false),{ledgerWallet:N,setLedgerAddress:ye}=useStorageLedgerAddress(),C=useRef(0),[M]=useLocalStorage("orderly-first-show-wallet-connector-dialog",void 0);useEffect(()=>()=>{localStorage.setItem("orderly-first-show-wallet-connector-dialog","1");},[]),useEffect(()=>{p(m.status);},[m]);let O=useMemo(()=>{let u=[];return t<AccountStatusEnum.SignedIn&&u.push({key:"signIn",title:i("connector.createAccount"),description:i("connector.createAccount.description")}),t<AccountStatusEnum.EnableTrading&&u.push({key:"enableTrading",title:i("connector.enableTrading"),description:i("connector.enableTrading.description")}),u},[t,i]);useEffect(()=>{if(d!=ChainNamespace.solana){T(false);return}if(!N){T(true);return}if(N&&s.address&&!N.includes(s.address)){T(true);return}T(false);},[d,s.address,N]);let Y=()=>(b(true),e.enableTrading(n).then(async u=>{C.current++,b(false),A(y=>y+1);try{await e.enableTradingComplted?.();}catch{}typeof e.onCompleted=="function"?e.onCompleted():typeof e.close=="function"&&e.close();},u=>{if(b(false),u!==-1){if(u.message.indexOf("Signing off chain messages with Ledger is not yet supported")!==-1){r.emit("wallet:sign-message-with-ledger-error",{message:u.message,userAddress:s.address});return}toast.error(ae(u));}}).catch(u=>{b(false);})),Te=async()=>{localStorage.removeItem("orderly_link_device"),g({label:a.connectWallet?.name}).then(()=>{s.disconnect(),typeof e.close=="function"&&e.close();});},xe=()=>(b(true),e.signIn().then(u=>{A(y=>y+1),Y();},u=>{if(b(false),u!==-1){if(u.message.indexOf("Signing off chain messages with Ledger is not yet supported")!==-1){r.emit("wallet:sign-message-with-ledger-error",{message:u.message,userAddress:s.address});return}toast.error(ae(u));}}).catch(u=>{b(false);}));return jsxs(Box,{id:"oui-wallet-connect-dialog-content",className:"oui-font-semibold",children:[jsx(Text,{intensity:54,size:"xs",children:i("connector.expired")}),jsx(Box,{p:4,my:6,intensity:600,r:"lg",className:"oui-space-y-5",position:"relative",children:O.map((u,y)=>{let Se=y===O.length-1;return jsx(te,{title:u.title,description:u.description,isCompleted:l>y,active:l===y,isLoading:x&&l===y,showDivider:!Se},u.key)})}),e.showRefCodeInput&&O.length==2&&jsx(Ve,{...e}),M&&jsxs(Flex,{justify:"between",itemAlign:"center",children:[jsx(Ue,{}),jsx(Switch,{color:"primary",checked:n,onCheckedChange:o,disabled:x,className:"data-[state=checked]:oui-bg-primary-darken"})]}),jsx(Flex,{justify:"center",mt:8,className:"oui-w-full",children:jsx(Box,{className:"oui-w-full",children:jsx(He,{state:a,signIn:xe,enableTrading:Y,loading:x,disabled:a>=AccountStatusEnum.EnableTrading,showLedgerButton:B})})}),a>AccountStatusEnum.NotConnected&&jsxs(Flex,{justify:"center",mt:4,gap:1,className:"oui-w-full oui-cursor-pointer",onClick:Te,children:[jsx(_e,{}),jsx(Text,{className:"oui-text-base-contrast-80 oui-text-sm",children:i("connector.disconnectWallet")})]})]})},_e=()=>jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",children:jsx("path",{d:"M2.24219 5.24316C2.24219 3.58641 3.58536 2.24316 5.24219 2.24316H8.24219C9.89894 2.24316 11.2422 3.58641 11.2422 5.24316C11.2422 5.65716 10.9062 5.99316 10.4922 5.99316C10.0782 5.99316 9.74219 5.65716 9.74219 5.24316C9.74219 4.41441 9.07094 3.74316 8.24219 3.74316H5.24219C4.41374 3.74316 3.74219 4.41441 3.74219 5.24316V12.7432C3.74219 13.5719 4.41374 14.2432 5.24219 14.2432H8.24219C9.07094 14.2432 9.74219 13.5719 9.74219 12.7432C9.74219 12.3292 10.0782 11.9932 10.4922 11.9932C10.9062 11.9932 11.2422 12.3292 11.2422 12.7432C11.2422 14.3999 9.89894 15.7432 8.24219 15.7432H5.24219C3.58536 15.7432 2.24219 14.3999 2.24219 12.7432V5.24316ZM7.49219 8.99316C7.49219 8.57916 7.82819 8.24316 8.24219 8.24316H13.9144L12.4377 6.74316L13.4922 5.68866L16.2814 8.45391C16.5739 8.74716 16.5739 9.23915 16.2814 9.5324L13.4922 12.2977L12.4377 11.2432L13.9144 9.74316H8.24219C7.82819 9.74316 7.49219 9.40716 7.49219 8.99316Z",fill:"white",fillOpacity:"0.8"})}),He=({state:e,signIn:t,enableTrading:n,loading:o,disabled:r,showLedgerButton:i})=>{let{t:g}=useTranslation();return e<=AccountStatusEnum.NotSignedIn?jsxs(Flex,{direction:"column",gap:3,className:"oui-w-full",children:[jsx(Button,{fullWidth:true,onClick:()=>t(),loading:o,disabled:r,children:g("connector.createAccount")}),i&&jsx(se,{onClick:()=>t(),content:g("connector.createAccountWithLedger")})]}):jsxs(Flex,{direction:"column",gap:3,className:"oui-w-full",children:[jsx(Button,{fullWidth:true,onClick:()=>n(),loading:o,disabled:r,children:g("connector.enableTrading")}),i&&jsx(se,{onClick:()=>n(),disabled:r,content:g("connector.enableTradingWithLedger")})]})},se=({onClick:e,disabled:t,content:n})=>{let{t:o}=useTranslation(),{state:r}=useAccount(),i=r.address,{setLedgerAddress:g}=useStorageLedgerAddress();return i?jsx(Button,{variant:"outlined",color:"primary",fullWidth:true,onClick:()=>{g(i),e();},disabled:t,className:"oui-w-full",children:n}):null},Ve=e=>{let{t}=useTranslation();return jsx(TextField,{placeholder:t("connector.referralCode.placeholder"),fullWidth:true,label:"",value:e.refCode,onChange:n=>{let o=n.target.value.toUpperCase().replace(/[^A-Z0-9]/g,"");e.setRefCode(o);},classNames:{label:"oui-text-base-contrast-54 oui-text-xs",input:"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm"},formatters:[inputFormatter.createRegexInputFormatter(n=>String(n).replace(/[a-z]/g,o=>o.toUpperCase())),inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g)],onClear:()=>{e.setRefCode("");},autoComplete:"off",helpText:e.helpText,className:"oui-mb-4",color:e.helpText?"danger":void 0})},Ue=()=>{let{t:e}=useTranslation(),t=()=>{window.innerWidth>768||modal.alert({title:e("connector.rememberMe"),message:jsx("span",{className:"oui-text-2xs oui-text-base-contrast/60",children:e("connector.rememberMe.description")})});};return jsx(Tooltip,{content:e("connector.rememberMe.description"),className:"oui-max-w-[300px]",children:jsx("button",{onClick:t,children:jsx(Text,{intensity:54,size:"xs",className:"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36",children:e("connector.rememberMe")})})})};function ae(e){Object.keys(e).forEach(n=>{});let t=i18n.t("connector.somethingWentWrong");return e.toString().includes("rejected")&&(t=i18n.t("connector.userRejected")),capitalizeFirstLetter(t)??t}var K=()=>{let{account:e,state:t,createOrderlyKey:n,createAccount:o}=useAccount(),[r,i]=useState(""),[g,d]=useState(""),{t:m}=useTranslation(),{trigger:s}=useLazyQuery(`/v1/public/referral/verify_ref_code?referral_code=${r}`);useEffect(()=>{let C=localStorage.getItem("referral_code");C!=null&&i(C);},[]);let{referral_code:a,isLoading:p}=useGetReferralCode(e.accountId),[l,{error:A,isMutating:x}]=useMutation("/v1/referral/bind","POST");useEffect(()=>{r.length===0&&d("");},[r]);let b=()=>{toast.success(m("connector.walletConnected")),r.length>=4&&r.length<=10&&l({referral_code:r}).finally(()=>{localStorage.removeItem("referral_code");});},B=async()=>{if(r.length===0)return Promise.resolve(void 0);if(r.length>0&&(r.length<4||r.length>10))return Promise.resolve(m("connector.referralCode.invalid"));let{exist:C}=await s();return C===false?Promise.resolve(m("connector.referralCode.notExist")):Promise.resolve(void 0)},T=(a?.length||0)===0&&!p,N=async()=>{if(T){let C=await B();if(typeof C<"u")return d(C),Promise.reject(-1)}return d(""),o()};return {enableTrading:async C=>{if(T){let M=await B();if(typeof M<"u")return d(M),Promise.reject(-1)}return d(""),n(C)},initAccountState:t.status,signIn:N,enableTradingComplted:b,refCode:r,setRefCode:i,helpText:g,showRefCodeInput:T}};var D="walletConnector",F="walletConnectorSheet",Q=e=>{let t=K();return jsx(Z,{...t,...e})};registerSimpleDialog(D,Q,{size:"sm",title:()=>i18n.t("connector.connectWallet")});registerSimpleSheet(F,Q,{title:()=>i18n.t("connector.connectWallet")});var k=e=>{let{status:t,buttonProps:n,fallback:o,descriptions:r,classNames:i,networkId:g,id:d,bridgeLessOnly:m}=e,{t:s}=useTranslation(),{state:a}=useAccount(),{wrongNetwork:p,disabledConnect:l}=useAppContext(),A=useMemo(()=>t===void 0?a.status===AccountStatusEnum.EnableTradingWithoutConnected?AccountStatusEnum.EnableTradingWithoutConnected:AccountStatusEnum.EnableTrading:t,[t,a.status]),x={connectWallet:s("connector.connectWallet"),switchChain:s("connector.wrongNetwork"),enableTrading:s("connector.enableTrading"),signin:s("connector.createAccount"),...e.labels},b=useMemo(()=>typeof o<"u"?o({validating:a.validating,status:a.status,wrongNetwork:p}):a.validating&&!l?jsx(R,{angle:45,disabled:true,loading:true,description:r?.connectWallet,id:d,type:"button",...n,children:x.connectWallet}):jsx(dt,{bridgeLessOnly:m,status:a.status,buttonProps:{...n,id:d,type:"button"},wrongNetwork:p,networkId:e.networkId,labels:x,descriptions:r,disabledConnect:l}),[a.status,a.validating,n,p]);return jsx(Either,{value:a.status>=A&&!p&&!l,left:b,children:e.children})},lt=()=>{let{t:e}=useTranslation(),{state:t}=useAccount();return t.status<AccountStatusEnum.SignedIn?jsx(Text,{children:e("connector.createAccount")}):t.status<AccountStatusEnum.EnableTrading?jsx(Text,{children:e("connector.enableTrading")}):jsx(Text,{children:e("connector.connectWallet")})},dt=e=>{let{buttonProps:t,labels:n,descriptions:o}=e,{t:r}=useTranslation(),{connectWallet:i}=useAppContext(),{account:g}=useAccount(),{isMobile:d}=useScreen(),m=useMediaQuery(MEDIA_TABLET),s=()=>{modal.show(m?F:D,{title:jsx(lt,{})}).then(l=>{},l=>{});},a=async()=>{let l=await i();l&&(l.wrongNetwork?p():(l?.status??AccountStatusEnum.NotConnected)<AccountStatusEnum.EnableTrading&&s());},p=()=>{g.once("validate:end",l=>{l<AccountStatusEnum.EnableTrading?s():toast.success(r("connector.walletConnected"));}),modal.show(d?ChainSelectorSheetId:ChainSelectorDialogId,{networkId:e.networkId,bridgeLessOnly:e.bridgeLessOnly}).then(l=>{l.wrongNetwork||e.status>=AccountStatusEnum.Connected&&(e.status<AccountStatusEnum.EnableTrading?s():toast.success(r("connector.walletConnected")));},l=>{});};return e.wrongNetwork&&!e.disabledConnect?jsx(R,{color:"warning",onClick:()=>{p();},description:o?.switchChain,...t,children:n.switchChain}):e.status<=AccountStatusEnum.NotConnected||e.disabledConnect?jsx(R,{size:"lg",onClick:()=>{a();},variant:e.disabledConnect?void 0:"gradient",angle:45,description:o?.connectWallet,disabled:e.disabledConnect,...t,children:n.connectWallet}):e.status<=AccountStatusEnum.NotSignedIn?jsx(R,{size:"lg",onClick:()=>{s();},angle:45,description:o?.signin,...t,children:n.signin}):jsx(R,{size:"lg",description:o?.enableTrading,...t,onClick:()=>s(),children:n.enableTrading})};k.displayName="AuthGuard";var R=e=>{let{description:t,...n}=e;return jsxs(Flex,{direction:"column",children:[jsx(Button,{...n}),!!t&&jsx(Box,{mt:4,className:"oui-leading-none",style:{lineHeight:0},children:jsx(Text,{size:"2xs",intensity:36,children:t})})]})};var Tt=e=>{let{status:t,labels:n,description:o,dataSource:r,children:i,...g}=e,{state:d}=useAccount(),{wrongNetwork:m,disabledConnect:s}=useAppContext(),a=useMemo(()=>t===void 0?d.status===AccountStatusEnum.EnableTradingWithoutConnected?AccountStatusEnum.EnableTradingWithoutConnected:AccountStatusEnum.EnableTrading:t,[t,d.status]),p=useDataTap(r,{accountStatus:a}),l=m||s||d.status<a||e.ignoreLoadingCheck;return jsx(DataTable,{dataSource:p,ignoreLoadingCheck:l,emptyView:jsx(xt,{status:a,description:o,labels:n,className:e.classNames?.authGuardDescription,visible:!d.validating}),manualPagination:true,...g,children:i})},xt=e=>{let{t}=useTranslation(),o={...{connectWallet:t("connector.trade.connectWallet.tooltip"),switchChain:t("connector.wrongNetwork.tooltip"),enableTrading:t("connector.trade.enableTrading.tooltip"),signin:t("connector.trade.createAccount.tooltip")},...e.description};return e.visible?jsx(Flex,{py:8,children:jsx(k,{status:e.status,labels:e.labels,descriptions:o,buttonProps:{size:"md"},children:jsx(ExtensionSlot,{position:ExtensionPositionEnum.EmptyDataIdentifier})})}):null};var he=e=>{let{t}=useTranslation(),{hint:n={connectWallet:t("connector.trade.connectWallet.tooltip"),signIn:t("connector.trade.createAccount.tooltip"),enableTrading:t("connector.trade.enableTrading.tooltip"),wrongNetwork:t("connector.wrongNetwork.tooltip")},status:o}=e;return jsx(Box,{my:8,children:jsx(k,{status:o,descriptions:{...n,switchChain:n.wrongNetwork},children:e.children||jsx(EmptyDataState,{})})})};he.displayName="AuthGuardEmpty";var we=e=>{let{t}=useTranslation(),{opactiy:n=90,tooltip:o={connectWallet:t("connector.setUp.connectWallet.tooltip"),signIn:t("connector.setUp.createAccount.tooltip"),enableTrading:t("connector.setUp.enableTrading.tooltip"),wrongNetwork:t("connector.wrongNetwork.tooltip")}}=e,[r,i]=useState(false),{state:g}=useAccount(),d=true,{wrongNetwork:m}=useAppContext(),s=useMemo(()=>{if(m)return o?.wrongNetwork;switch(g.status){case AccountStatusEnum.NotConnected:return o?.connectWallet;case AccountStatusEnum.NotSignedIn:return o?.signIn;case AccountStatusEnum.DisabledTrading:return o?.enableTrading;case AccountStatusEnum.EnableTrading:return "";default:return e.content}},[e.content,g,d,o]),a=useMemo(()=>{switch(g.status){case AccountStatusEnum.NotConnected:case AccountStatusEnum.NotSignedIn:return n;case AccountStatusEnum.EnableTrading:return;default:return}},[e.opactiy,g,d]);return jsx(Tooltip,{open:s?r:false,onOpenChange:i,content:s,className:"oui-text-2xs",align:e.align,alignOffset:e.alignOffset,side:e.side,sideOffset:e.sideOffset,children:jsx("div",{style:{opacity:a},children:e.children})})};we.displayName="AuthGuardTooltip";
|
|
11
|
+
|
|
12
|
+
export { k as AuthGuard, Tt as AuthGuardDataTable, he as AuthGuardEmpty, we as AuthGuardTooltip, Z as WalletConnectContent, D as WalletConnectorModalId, F as WalletConnectorSheetId, Q as WalletConnectorWidget, K as useWalletConnectorBuilder };
|
|
13
|
+
//# sourceMappingURL=out.js.map
|
|
14
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/component/walletConnectorContent.tsx","../src/component/step.tsx","../src/component/walletConnector.tsx","../src/component/useWalletConnectorBuilder.ts","../src/component/authGuard.tsx","../src/component/authGuardDataTable.tsx","../src/component/authGuardEmpty.tsx","../src/component/authGuardTooltip.tsx"],"names":["useEffect","useMemo","useRef","useState","useAccount","useEventEmitter","useLocalStorage","useStorageLedgerAddress","useWalletConnector","i18n","useTranslation","AccountStatusEnum","ChainNamespace","Box","Button","capitalizeFirstLetter","Flex","inputFormatter","modal","Switch","Text","TextField","toast","Tooltip","CheckedCircleFillIcon","cn","Divider","Spinner","jsx","jsxs","StepItem","props","title","description","showDivider","Identifier","active","isLoading","isCompleted","Dot","className","WalletConnectContent","initAccountState","remember","setRemember","ee","t","disconnect","namespace","accountState","account","state","setState","activeStep","setActiveStep","loading","setLoading","showLedgerButton","setShowLedgerButton","ledgerWallet","setLedgerAddress","handleRef","firstShowDialog","steps","onEnableTrading","res","step","reject","paseErrorMsg","e","onDisconnect","onSignIn","index","isLast","ReferralCode","RememberMe","ActionButton","DisconnectIcon","signIn","enableTrading","disabled","WithLedgerButton","onClick","content","address","_value","value","char","showRememberHint","key","msg","registerSimpleDialog","registerSimpleSheet","useGetReferralCode","useLazyQuery","useMutation","useWalletConnectorBuilder","createOrderlyKey","createAccount","refCode","setRefCode","helpText","setHelpText","verifyRefCode","referral_code","bindRefCode","updateOrderError","updateMutating","enableTradingComplted","checkRefCode","exist","showRefCodeInput","info","WalletConnectorModalId","WalletConnectorSheetId","WalletConnectorWidget","useMediaQuery","useAppContext","MEDIA_TABLET","Either","useScreen","ChainSelectorDialogId","ChainSelectorSheetId","AuthGuard","status","buttonProps","fallback","descriptions","classNames","networkId","id","bridgeLessOnly","wrongNetwork","disabledConnect","_status","labels","Left","StatusInfo","DefaultFallback","ModalTitle","connectWallet","isMobile","matches","onConnectOrderly","r","error","onConnectWallet","switchChain","useDataTap","ExtensionPositionEnum","ExtensionSlot","DataTable","AuthGuardDataTable","dataSource","children","rest","data","ignoreLoadingCheck","GuardView","EmptyDataState","AuthGuardEmpty","hint","AuthGuardTooltip","opactiy","tooltip","open","setOpen","isSupport","newOpacity"],"mappings":"AAAA,OAAwB,aAAAA,EAAW,WAAAC,GAAS,UAAAC,GAAQ,YAAAC,MAAgB,QACpE,OACE,cAAAC,GACA,mBAAAC,GACA,mBAAAC,GACA,2BAAAC,GACA,sBAAAC,OACK,gCACP,OAAS,QAAAC,GAAM,kBAAAC,MAAsB,+BACrC,OACE,qBAAAC,EACA,kBAAAC,OAEK,gCACP,OACE,OAAAC,EACA,UAAAC,EACA,yBAAAC,GAEA,QAAAC,EACA,kBAAAC,GACA,SAAAC,GACA,UAAAC,GACA,QAAAC,EACA,aAAAC,GACA,SAAAC,GACA,WAAAC,OACK,6BC1BP,OACE,OAAAV,EACA,yBAAAW,GACA,MAAAC,GACA,WAAAC,GACA,WAAAC,GACA,QAAAP,MACK,6BAeD,OACE,OAAAQ,EADF,QAAAC,OAAA,oBAJC,IAAMC,GAAYC,GAAyB,CAChD,GAAM,CAAE,MAAAC,EAAO,YAAAC,EAAa,YAAAC,CAAY,EAAIH,EAC5C,OACEF,GAAChB,EAAA,CAAI,SAAS,WAAW,UAAU,WACjC,UAAAgB,GAAChB,EAAA,CACC,UAAAe,EAACR,EAAA,CAAK,GAAG,MAAM,UAAW,GAAI,KAAM,KACjC,SAAAY,EACH,EACAJ,EAACR,EAAA,CAAK,GAAG,MAAM,UAAW,GAAI,KAAM,MACjC,SAAAa,EACH,GACF,EACAL,EAAC,OAAI,UAAU,6CACb,SAAAA,EAACO,GAAA,CAAY,GAAGJ,EAAO,EACzB,EACCG,GACCN,EAACf,EAAA,CAAI,SAAU,WAAY,KAAM,GAAI,IAAK,GAAI,OAAQ,IAAK,OAAQ,EACjE,SAAAe,EAACF,GAAA,CACC,UAAW,SACX,UAAW,WACX,UAAW,GACX,UAAU,aACZ,EACF,GAEJ,CAEJ,EAEMS,GAAcJ,GAId,CACJ,GAAM,CAAE,OAAAK,EAAQ,UAAAC,EAAW,YAAAC,CAAY,EAAIP,EAE3C,OAAIM,EACKT,EAACD,GAAA,CAAQ,KAAM,KAAM,UAAW,WAAY,EAGjDW,EACKV,EAACJ,GAAA,CAAsB,QAAS,EAAG,UAAU,mBAAmB,EAGlEI,EAACW,GAAA,CAAI,OAAQ,CAAC,CAACH,EAAQ,CAkChC,EAEMG,GAAmD,CAAC,CACxD,OAAAH,EACA,UAAAI,CACF,IAEIZ,EAAC,OACC,UAAWH,GACT,iEACAe,EACAJ,EAAS,uBAAyB,eACpC,EACF,ED+FE,cAAAR,EA8BE,QAAAC,MA9BF,oBAlKC,IAAMY,EAAwBV,GAAqC,CACxE,GAAM,CAAE,iBAAAW,EAAmB/B,EAAkB,YAAa,EAAIoB,EACxD,CAACY,EAAUC,CAAW,EAAIzC,EAAS,EAAI,EACvC0C,EAAKxC,GAAgB,EACrB,CAAE,EAAAyC,CAAE,EAAIpC,EAAe,EACvB,CAAE,WAAAqC,EAAY,UAAAC,CAAU,EAAIxC,GAAmB,EAE/C,CAAE,MAAOyC,EAAc,QAAAC,CAAQ,EAAI9C,GAAW,EAC9C,CAAC+C,EAAOC,CAAQ,EAAIjD,EAASuC,CAAgB,EAC7C,CAACW,EAAYC,CAAa,EAAInD,EAAS,CAAC,EACxC,CAACoD,EAASC,CAAU,EAAIrD,EAAS,EAAK,EACtC,CAACsD,EAAkBC,CAAmB,EAAIvD,EAAS,EAAK,EACxD,CAAE,aAAAwD,EAAc,iBAAAC,EAAiB,EAAIrD,GAAwB,EAC7DsD,EAAY3D,GAAO,CAAC,EACpB,CAAC4D,CAAe,EAAIxD,GACxB,6CACA,MACF,EACAN,EAAU,IACD,IAAM,CACX,aAAa,QAAQ,6CAA8C,GAAG,CACxE,EACC,CAAC,CAAC,EAELA,EAAU,IAAM,CACdoD,EAASH,EAAa,MAAM,CAC9B,EAAG,CAACA,CAAY,CAAC,EAEjB,IAAMc,EAAQ9D,GAAQ,IAAM,CAC1B,IAAM8D,EAAQ,CAAC,EACf,OAAIrB,EAAmB/B,EAAkB,UACvCoD,EAAM,KAAK,CACT,IAAK,SACL,MAAOjB,EAAE,yBAAyB,EAClC,YAAaA,EAAE,qCAAqC,CACtD,CAAC,EAGCJ,EAAmB/B,EAAkB,eACvCoD,EAAM,KAAK,CACT,IAAK,gBACL,MAAOjB,EAAE,yBAAyB,EAClC,YAAaA,EAAE,qCAAqC,CACtD,CAAC,EAGIiB,CACT,EAAG,CAACrB,EAAkBI,CAAC,CAAC,EAExB9C,EAAU,IAAM,CACd,GAAIgD,GAAapC,GAAe,OAAQ,CACtC8C,EAAoB,EAAK,EACzB,MACF,CACA,GAAI,CAACC,EAAc,CACjBD,EAAoB,EAAI,EACxB,MACF,CACA,GAAIC,GAAgBT,EAAQ,SACtB,CAACS,EAAa,SAAST,EAAQ,OAAO,EAAG,CAC3CQ,EAAoB,EAAI,EACxB,MACF,CAEFA,EAAoB,EAAK,CAC3B,EAAG,CAACV,EAAWE,EAAQ,QAASS,CAAY,CAAC,EAE7C,IAAMK,EAAkB,KACtBR,EAAW,EAAI,EACRzB,EACJ,cAAcY,CAAQ,EACtB,KACC,MAAOsB,GAAQ,CACbJ,EAAU,UAEVL,EAAW,EAAK,EAChBF,EAAeY,GAASA,EAAO,CAAC,EAChC,GAAI,CACF,MAAMnC,EAAM,wBAAwB,CACtC,MAAY,CAAC,CACT,OAAOA,EAAM,aAAgB,WAC/BA,EAAM,YAAY,EACT,OAAOA,EAAM,OAAU,YAChCA,EAAM,MAAM,CAGhB,EACCoC,GAAW,CAEV,GADAX,EAAW,EAAK,EACZW,IAAW,GAIf,IACEA,EAAO,QAAQ,QACb,6DACF,IAAM,GACN,CACAtB,EAAG,KAAK,wCAAyC,CAC/C,QAASsB,EAAO,QAChB,YAAajB,EAAQ,OACvB,CAAC,EACD,MACF,CACA5B,GAAM,MAAM8C,GAAaD,CAAM,CAAC,EAClC,CACF,EACC,MAAOE,GAAM,CAEZb,EAAW,EAAK,CAClB,CAAC,GAGCc,GAAe,SAAY,CAC/B,aAAa,WAAW,qBAAqB,EAC7CvB,EAAW,CACT,MAAQI,EAAyB,eAAe,IAClD,CAAC,EAAE,KAAK,IAAM,CACZD,EAAQ,WAAW,EACf,OAAOnB,EAAM,OAAU,YACzBA,EAAM,MAAM,CAEhB,CAAC,CACH,EAEMwC,GAAW,KACff,EAAW,EAAI,EACRzB,EACJ,OAAO,EACP,KACEkC,GAAQ,CACPX,EAAeY,GAASA,EAAO,CAAC,EAChCF,EAAgB,CAClB,EACCG,GAAW,CAGV,GAFAX,EAAW,EAAK,EAEZW,IAAW,GAGf,IACEA,EAAO,QAAQ,QACb,6DACF,IAAM,GACN,CACAtB,EAAG,KAAK,wCAAyC,CAC/C,QAASsB,EAAO,QAChB,YAAajB,EAAQ,OACvB,CAAC,EACD,MACF,CAEA5B,GAAM,MAAM8C,GAAaD,CAAM,CAAC,EAClC,CACF,EACC,MAAOE,GAAM,CACZb,EAAW,EAAK,CAClB,CAAC,GAGL,OACE3B,EAAChB,EAAA,CAAI,GAAG,oCAAoC,UAAU,oBACpD,UAAAe,EAACR,EAAA,CAAK,UAAW,GAAI,KAAK,KACvB,SAAA0B,EAAE,mBAAmB,EACxB,EACAlB,EAACf,EAAA,CACC,EAAG,EACH,GAAI,EACJ,UAAW,IACX,EAAE,KACF,UAAU,gBACV,SAAU,WAET,SAAAkD,EAAM,IAAI,CAACG,EAAMM,IAAU,CAC1B,IAAMC,GAASD,IAAUT,EAAM,OAAS,EACxC,OACEnC,EAACE,GAAA,CACC,MAAOoC,EAAK,MACZ,YAAaA,EAAK,YAClB,YAAab,EAAamB,EAE1B,OAAQnB,IAAemB,EACvB,UAAWjB,GAAWF,IAAemB,EACrC,YAAa,CAACC,IAHTP,EAAK,GAIZ,CAEJ,CAAC,EACH,EACCnC,EAAM,kBAAoBgC,EAAM,QAAU,GACzCnC,EAAC8C,GAAA,CAAc,GAAG3C,EAAO,EAE1B+B,GACCjC,EAACb,EAAA,CAAK,QAAS,UAAW,UAAW,SACnC,UAAAY,EAAC+C,GAAA,EAAW,EACZ/C,EAACT,GAAA,CACC,MAAO,UACP,QAASwB,EACT,gBAAiBC,EACjB,SAAUW,EACV,UAAU,6CACZ,GACF,EAEF3B,EAACZ,EAAA,CAAK,QAAS,SAAU,GAAI,EAAG,UAAU,aACxC,SAAAY,EAACf,EAAA,CAAI,UAAU,aACb,SAAAe,EAACgD,GAAA,CACC,MAAOzB,EACP,OAAQoB,GACR,cAAeP,EACf,QAAST,EACT,SAAUJ,GAASxC,EAAkB,cACrC,iBAAkB8C,EACpB,EACF,EACF,EACCN,EAAQxC,EAAkB,cACzBkB,EAACb,EAAA,CACC,QAAS,SACT,GAAI,EACJ,IAAK,EACL,UAAU,gCACV,QAASsD,GAET,UAAA1C,EAACiD,GAAA,EAAe,EAChBjD,EAACR,EAAA,CAAK,UAAU,wCACb,SAAA0B,EAAE,4BAA4B,EACjC,GACF,GAEJ,CAEJ,EAEM+B,GAAiB,IAEnBjD,EAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OAEL,SAAAA,EAAC,QACC,EAAE,o5BACF,KAAK,QACL,YAAY,MACd,EACF,EAIEgD,GAOD,CAAC,CACJ,MAAAzB,EACA,OAAA2B,EACA,cAAAC,EACA,QAAAxB,EACA,SAAAyB,EACA,iBAAAvB,CACF,IAAM,CACJ,GAAM,CAAE,EAAAX,CAAE,EAAIpC,EAAe,EAE7B,OAAIyC,GAASxC,EAAkB,YAE3BkB,EAACb,EAAA,CAAK,UAAW,SAAU,IAAK,EAAG,UAAU,aAC3C,UAAAY,EAACd,EAAA,CACC,UAAS,GACT,QAAS,IAAMgE,EAAO,EACtB,QAASvB,EACT,SAAUyB,EAET,SAAAlC,EAAE,yBAAyB,EAC9B,EACCW,GACC7B,EAACqD,GAAA,CACC,QAAS,IAAMH,EAAO,EACtB,QAAShC,EAAE,mCAAmC,EAChD,GAEJ,EAKFjB,EAACb,EAAA,CAAK,UAAW,SAAU,IAAK,EAAG,UAAU,aAC3C,UAAAY,EAACd,EAAA,CACC,UAAS,GACT,QAAS,IAAMiE,EAAc,EAC7B,QAASxB,EACT,SAAUyB,EAET,SAAAlC,EAAE,yBAAyB,EAC9B,EACCW,GACC7B,EAACqD,GAAA,CACC,QAAS,IAAMF,EAAc,EAC7B,SAAUC,EACV,QAASlC,EAAE,mCAAmC,EAChD,GAEJ,CAoDJ,EAEMmC,GAAmB,CAAC,CACxB,QAAAC,EACA,SAAAF,EACA,QAAAG,CACF,IAIM,CACJ,GAAM,CAAE,EAAArC,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,GAAW,EACvBgF,EAAUjC,EAAM,QAChB,CAAE,iBAAAS,CAAiB,EAAIrD,GAAwB,EACrD,OAAK6E,EAIHxD,EAACd,EAAA,CACC,QAAQ,WACR,MAAM,UACN,UAAS,GACT,QAAS,IAAM,CACb8C,EAAiBwB,CAAO,EACxBF,EAAQ,CACV,EACA,SAAUF,EACV,UAAU,aAET,SAAAG,EACH,EAfO,IAiBX,EAEMT,GAA+C3C,GAAU,CAC7D,GAAM,CAAE,CAAE,EAAIrB,EAAe,EAE7B,OACEkB,EAACP,GAAA,CACC,YAAa,EAAE,oCAAoC,EACnD,UAAS,GACT,MAAM,GACN,MAAOU,EAAM,QACb,SAAWsC,GAAM,CACf,IAAMgB,EAAShB,EAAE,OAAO,MAAM,YAAY,EAAE,QAAQ,aAAc,EAAE,EACpEtC,EAAM,WAAWsD,CAAM,CACzB,EACA,WAAY,CACV,MAAO,wCACP,MAAO,+DACT,EACA,WAAY,CACVpE,GAAe,0BAA2BqE,GACjC,OAAOA,CAAK,EAAE,QAAQ,SAAWC,GACtCA,EAAK,YAAY,CACnB,CACD,EACDtE,GAAe,0BAA0B,YAAY,CACvD,EACA,QAAS,IAAM,CACbc,EAAM,WAAW,EAAE,CACrB,EACA,aAAa,MACb,SAAUA,EAAM,SAChB,UAAU,WACV,MAAOA,EAAM,SAAW,SAAW,OACrC,CAEJ,EAEM4C,GAAa,IAAM,CACvB,GAAM,CAAE,EAAA7B,CAAE,EAAIpC,EAAe,EAEvB8E,EAAmB,IAAM,CACzB,OAAO,WAAa,KAGxBtE,GAAM,MAAM,CACV,MAAO4B,EAAE,sBAAsB,EAC/B,QACElB,EAAC,QAAK,UAAU,yCACb,SAAAkB,EAAE,kCAAkC,EACvC,CAEJ,CAAC,CACH,EACA,OACElB,EAACL,GAAA,CACC,QAASuB,EAAE,kCAAkC,EAC7C,UAAU,oBAEV,SAAAlB,EAAC,UAAO,QAAS4D,EACf,SAAA5D,EAACR,EAAA,CACC,UAAW,GACX,KAAM,KACN,UACE,6FAGD,SAAA0B,EAAE,sBAAsB,EAC3B,EACF,EACF,CAEJ,EAEA,SAASsB,GAAaD,EAAqB,CAGzC,OAAO,KAAKA,CAAM,EAAE,QAASsB,GAAQ,CAErC,CAAC,EACD,IAAIC,EAAMjF,GAAK,EAAE,8BAA8B,EAU/C,OAAI0D,EAAO,SAAS,EAAE,SAAS,UAAU,IACvCuB,EAAMjF,GAAK,EAAE,wBAAwB,GAGhCM,GAAsB2E,CAAG,GAAKA,CACvC,CEhhBA,OAAS,QAAAjF,OAAY,+BACrB,OAAS,wBAAAkF,GAAsB,uBAAAC,OAA2B,6BCF1D,OAAS,aAAA5F,GAAW,YAAAG,OAAgB,QACpC,OACE,cAAAC,GACA,sBAAAyF,GACA,gBAAAC,GACA,eAAAC,OACK,gCACP,OAAS,kBAAArF,OAAsB,+BAC/B,OAAS,SAAAY,OAAa,6BAEf,IAAM0E,EAA4B,IAAM,CAC7C,GAAM,CAAE,QAAA9C,EAAS,MAAAC,EAAO,iBAAA8C,EAAkB,cAAAC,CAAc,EAAI9F,GAAW,EACjE,CAAC+F,EAASC,CAAU,EAAIjG,GAAS,EAAE,EACnC,CAACkG,EAAUC,CAAW,EAAInG,GAAS,EAAE,EACrC,CAAE,EAAA2C,CAAE,EAAIpC,GAAe,EAEvB,CAAE,QAAS6F,CAAc,EAAIT,GACjC,qDAAqDK,CAAO,EAC9D,EAEAnG,GAAU,IAAM,CACd,IAAMmG,EAAU,aAAa,QAAQ,eAAe,EAChDA,GAAW,MACbC,EAAWD,CAAO,CAEtB,EAAG,CAAC,CAAC,EAEL,GAAM,CAAE,cAAAK,EAAe,UAAAnE,CAAU,EAAIwD,GAAmB3C,EAAQ,SAAS,EAEnE,CAACuD,EAAa,CAAE,MAAOC,EAAkB,WAAYC,CAAe,CAAC,EACzEZ,GAAY,oBAAqB,MAAM,EAEzC/F,GAAU,IAAM,CACVmG,EAAQ,SAAW,GACrBG,EAAY,EAAE,CAElB,EAAG,CAACH,CAAO,CAAC,EAEZ,IAAMS,EAAwB,IAAM,CAClCtF,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,EAExCqD,EAAQ,QAAU,GAAKA,EAAQ,QAAU,IAC3CM,EAAY,CAAE,cAAeN,CAAQ,CAAC,EAAE,QAAQ,IAAM,CACpD,aAAa,WAAW,eAAe,CACzC,CAAC,CACL,EAEMU,EAAe,SAAY,CAC/B,GAAIV,EAAQ,SAAW,EACrB,OAAO,QAAQ,QAAQ,MAAS,EAGlC,GAAIA,EAAQ,OAAS,IAAMA,EAAQ,OAAS,GAAKA,EAAQ,OAAS,IAChE,OAAO,QAAQ,QAAQrD,EAAE,gCAAgC,CAAC,EAG5D,GAAM,CAAE,MAAAgE,CAAM,EAAI,MAAMP,EAAc,EAEtC,OAAIO,IAAU,GACL,QAAQ,QAAQhE,EAAE,iCAAiC,CAAC,EAGtD,QAAQ,QAAQ,MAAS,CAClC,EAEMiE,GAAoBP,GAAe,QAAU,KAAO,GAAK,CAACnE,EAE1DyC,EAAS,SAAY,CACzB,GAAIiC,EAAkB,CACpB,IAAMC,EAAO,MAAMH,EAAa,EAChC,GAAI,OAAOG,EAAS,IAClB,OAAAV,EAAYU,CAAI,EACT,QAAQ,OAAO,EAAE,CAE5B,CACA,OAAAV,EAAY,EAAE,EACPJ,EAAc,CACvB,EAcA,MAAO,CACL,cAboB,MAAOvD,GAAsB,CACjD,GAAIoE,EAAkB,CACpB,IAAMC,EAAO,MAAMH,EAAa,EAChC,GAAI,OAAOG,EAAS,IAClB,OAAAV,EAAYU,CAAI,EACT,QAAQ,OAAO,EAAE,CAE5B,CACA,OAAAV,EAAY,EAAE,EACPL,EAAiBtD,CAAQ,CAClC,EAIE,iBAAkBQ,EAAM,OACxB,OAAA2B,EACA,sBAAA8B,EACA,QAAAT,EACA,WAAAC,EACA,SAAAC,EACA,iBAAAU,CACF,CACF,ED1FS,cAAAnF,OAAA,oBALF,IAAMqF,EAAyB,kBACzBC,EAAyB,uBAEzBC,EAAwCpF,GAAU,CAC7D,IAAMoB,EAAQ6C,EAA0B,EACxC,OAAOpE,GAACa,EAAA,CAAsB,GAAGU,EAAQ,GAAGpB,EAAO,CACrD,EAEA4D,GAAqBsB,EAAwBE,EAAuB,CAClE,KAAM,KACN,MAAO,IAAM1G,GAAK,EAAE,yBAAyB,CAC/C,CAAC,EAEDmF,GAAoBsB,EAAwBC,EAAuB,CACjE,MAAO,IAAM1G,GAAK,EAAE,yBAAyB,CAC/C,CAAC,EErBD,OAA8B,WAAAR,OAAe,QAC7C,OAAS,cAAAG,EAAY,iBAAAgH,OAAqB,gCAC1C,OAAS,kBAAA1G,MAAsB,+BAC/B,OAAS,iBAAA2G,OAAqB,oCAC9B,OACE,qBAAA1G,EACA,gBAAA2G,OAEK,gCACP,OACE,UAAAxG,GACA,UAAAyG,GACA,SAAArG,GACA,QAAAE,EACA,SAAAE,GACA,aAAAkG,OAEK,6BACP,OAAS,QAAAxG,OAAY,6BACrB,OAAS,OAAAH,OAAW,6BACpB,OACE,yBAAA4G,GACA,wBAAAC,OACK,4CAuGC,cAAA9F,EAsQJ,QAAAC,OAtQI,oBArDD,IAAM8F,EACX5F,GACG,CACH,GAAM,CACJ,OAAA6F,EACA,YAAAC,EACA,SAAAC,EACA,aAAAC,EACA,WAAAC,EACA,UAAAC,EACA,GAAAC,EACA,eAAAC,CAEF,EAAIpG,EACE,CAAE,EAAAe,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,EAAW,EACvB,CAAE,aAAAgI,EAAc,gBAAAC,CAAgB,EAAIhB,GAAc,EAElDiB,EAAUrI,GAAQ,IAClB2H,IAAW,OACNzE,EAAM,SAAWxC,EAAkB,8BACtCA,EAAkB,8BAClBA,EAAkB,cAEjBiH,EACN,CAACA,EAAQzE,EAAM,MAAM,CAAC,EAEnBoF,EAAS,CACb,cAAezF,EAAE,yBAAyB,EAC1C,YAAaA,EAAE,wBAAwB,EACvC,cAAeA,EAAE,yBAAyB,EAC1C,OAAQA,EAAE,yBAAyB,EACnC,GAAGf,EAAM,MACX,EASMyG,EAAOvI,GAAsB,IAC7B,OAAO6H,EAAa,IACfA,EAAS,CACd,WAAY3E,EAAM,WAClB,OAAQA,EAAM,OACd,aAAAiF,CACF,CAAC,EAGCjF,EAAM,YAAc,CAACkF,EAErBzG,EAAC6G,EAAA,CAEC,MAAO,GAEP,SAAQ,GACR,QAAO,GACP,YAAaV,GAAc,cAC3B,GAAIG,EACJ,KAAK,SACJ,GAAGL,EAEH,SAAAU,EAAO,cACV,EAKF3G,EAAC8G,GAAA,CACC,eAAgBP,EAChB,OAAQhF,EAAM,OACd,YAAa,CAAE,GAAG0E,EAAa,GAAAK,EAAI,KAAM,QAAS,EAClD,aAAcE,EACd,UAAWrG,EAAM,UACjB,OAAQwG,EACR,aAAcR,EACd,gBAAiBM,EACnB,EAED,CAAClF,EAAM,OAAQA,EAAM,WAAY0E,EAAaO,CAAY,CAAC,EAM9D,OACExG,EAAC2F,GAAA,CACC,MAAOpE,EAAM,QAAUmF,GAAW,CAACF,GAAgB,CAACC,EACpD,KAAMG,EAEL,SAAAzG,EAAM,SACT,CAEJ,EAEM4G,GAAuB,IAAM,CACjC,GAAM,CAAE,EAAA7F,CAAE,EAAIpC,EAAe,EACvB,CAAE,MAAAyC,CAAM,EAAI/C,EAAW,EAC7B,OAAI+C,EAAM,OAASxC,EAAkB,SAC5BiB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,EAEzCK,EAAM,OAASxC,EAAkB,cAC5BiB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,EAEtClB,EAACR,EAAA,CAAM,SAAA0B,EAAE,yBAAyB,EAAE,CAC7C,EAEM4F,GASA3G,GAAU,CACd,GAAM,CAAE,YAAA8F,EAAa,OAAAU,EAAQ,aAAAR,CAAa,EAAIhG,EACxC,CAAE,EAAAe,CAAE,EAAIpC,EAAe,EACvB,CAAE,cAAAkI,CAAc,EAAIvB,GAAc,EAClC,CAAE,QAAAnE,CAAQ,EAAI9C,EAAW,EACzB,CAAE,SAAAyI,CAAS,EAAIrB,GAAU,EACzBsB,EAAU1B,GAAcE,EAAY,EAEpCyB,EAAmB,IAAM,CAC7B7H,GACG,KAAK4H,EAAU5B,EAAyBD,EAAwB,CAC/D,MAAOrF,EAAC+G,GAAA,EAAW,CACrB,CAAC,EACA,KACEK,GAAG,GACHC,GAAO,EACV,CACJ,EAEMC,EAAkB,SAAY,CAClC,IAAMjF,EAAM,MAAM2E,EAAc,EAE3B3E,IAIDA,EAAI,aACNkF,EAAY,GAGTlF,GAAK,QAAUtD,EAAkB,cAClCA,EAAkB,eAElBoI,EAAiB,EAGvB,EAEMI,EAAc,IAAM,CACxBjG,EAAQ,KAAK,eAAiB0E,GAAW,CACnCA,EAASjH,EAAkB,cAC7BoI,EAAiB,EAEjBzH,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,CAEhD,CAAC,EAED5B,GACG,KACC2H,EAAWnB,GAAuBD,GAClC,CACE,UAAW1F,EAAM,UACjB,eAAgBA,EAAM,cACxB,CACF,EACC,KACEiH,GAAM,CACAA,EAAE,cACDjH,EAAM,QAAUpB,EAAkB,YAChCoB,EAAM,OAASpB,EAAkB,cACnCoI,EAAiB,EAEjBzH,GAAM,QAAQwB,EAAE,2BAA2B,CAAC,EAIpD,EACCmG,GAAO,EACV,CACJ,EAEA,OAAIlH,EAAM,cAAgB,CAACA,EAAM,gBAE7BH,EAAC6G,EAAA,CACC,MAAM,UAGN,QAAS,IAAM,CACbU,EAAY,CACd,EACA,YAAapB,GAAc,YAC1B,GAAGF,EAEH,SAAAU,EAAO,YACV,EAIAxG,EAAM,QAAUpB,EAAkB,cAAgBoB,EAAM,gBAExDH,EAAC6G,EAAA,CACC,KAAK,KACL,QAAS,IAAM,CACbS,EAAgB,CAClB,EAEA,QAASnH,EAAM,gBAAkB,OAAY,WAC7C,MAAO,GACP,YAAagG,GAAc,cAC3B,SAAUhG,EAAM,gBACf,GAAG8F,EAEH,SAAAU,EAAO,cACV,EAIAxG,EAAM,QAAUpB,EAAkB,YAElCiB,EAAC6G,EAAA,CACC,KAAK,KACL,QAAS,IAAM,CACbM,EAAiB,CACnB,EAEA,MAAO,GACP,YAAahB,GAAc,OAC1B,GAAGF,EAEH,SAAAU,EAAO,OACV,EAKF3G,EAAC6G,EAAA,CACC,KAAK,KAEL,YAAaV,GAAc,cAC1B,GAAGF,EACJ,QAAS,IAAMkB,EAAiB,EAE/B,SAAAR,EAAO,cACV,CAuDJ,EAEAZ,EAAU,YAAc,YAExB,IAAMc,EACJ1G,GACG,CACH,GAAM,CAAE,YAAAE,EAAa,GAAG4F,CAAY,EAAI9F,EACxC,OACEF,GAACb,GAAA,CAAK,UAAW,SACf,UAAAY,EAACd,GAAA,CAAQ,GAAG+G,EAAa,EACxB,CAAC,CAAC5F,GACDL,EAACf,GAAA,CAAI,GAAI,EAAG,UAAU,mBAAmB,MAAO,CAAE,WAAY,CAAE,EAC9D,SAAAe,EAACR,EAAA,CAAK,KAAK,MAAM,UAAW,GACzB,SAAAa,EACH,EACF,GAEJ,CAEJ,EC/YA,OAAmC,WAAAhC,OAAe,QAClD,OAAS,cAAAG,OAAkB,gCAC3B,OAAS,kBAAAM,OAAsB,+BAC/B,OAAS,iBAAA2G,GAAe,cAAA+B,OAAkB,oCAC1C,OAAS,qBAAAzI,MAAyB,gCAClC,OACE,yBAAA0I,GACA,iBAAAC,GACA,aAAAC,OAEK,6BACP,OAAS,QAAAvI,OAAY,6BAkDb,cAAAY,MAAA,oBA/CD,IAAM4H,GACXzH,GASG,CACH,GAAM,CACJ,OAAA6F,EAEA,OAAAW,EACA,YAAAtG,EACA,WAAAwH,EACA,SAAAC,EACA,GAAGC,CACL,EAAI5H,EACE,CAAE,MAAAoB,CAAM,EAAI/C,GAAW,EACvB,CAAE,aAAAgI,EAAc,gBAAAC,CAAgB,EAAIhB,GAAc,EAElDiB,EAAUrI,GAAQ,IAClB2H,IAAW,OACNzE,EAAM,SAAWxC,EAAkB,8BACtCA,EAAkB,8BAClBA,EAAkB,cAEjBiH,EACN,CAACA,EAAQzE,EAAM,MAAM,CAAC,EAEnByG,EAAOR,GAAWK,EAAY,CAClC,cAAenB,CACjB,CAAC,EAEKuB,EACJzB,GACAC,GACAlF,EAAM,OAASmF,GACfvG,EAAM,mBAER,OACEH,EAAC2H,GAAA,CACC,WAAYK,EACZ,mBAAoBC,EACpB,UACEjI,EAACkI,GAAA,CACC,OAAQxB,EACR,YAAarG,EACb,OAAQsG,EACR,UAAWxG,EAAM,YAAY,qBAC7B,QAAS,CAACoB,EAAM,WAClB,EAEF,iBAAgB,GACf,GAAGwG,EAEH,SAAAD,EACH,CAEJ,EAUMI,GAAuC/H,GAAU,CACrD,GAAM,CAAE,CAAE,EAAIrB,GAAe,EASvBqH,EAAe,CAAE,GAPa,CAClC,cAAe,EAAE,uCAAuC,EACxD,YAAa,EAAE,gCAAgC,EAC/C,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,CACnD,EAEwC,GAAGhG,EAAM,WAAY,EAC7D,OAAKA,EAAM,QAITH,EAACZ,GAAA,CAAK,GAAI,EACR,SAAAY,EAAC+F,EAAA,CACC,OAAQ5F,EAAM,OACd,OAAQA,EAAM,OACd,aAAcgG,EACd,YAAa,CACX,KAAM,IACR,EAEA,SAAAnG,EAAC0H,GAAA,CAAc,SAAUD,GAAsB,oBAAqB,EACtE,EACF,EAdO,IAgBX,EChHA,OAAS,kBAAA3I,OAAsB,+BAE/B,OAAS,OAAAG,GAAK,kBAAAkJ,OAAsB,6BAiCT,cAAAnI,MAAA,oBApBpB,IAAMoI,GAERjI,GAAU,CACb,GAAM,CAAE,CAAE,EAAIrB,GAAe,EACvB,CACJ,KAAAuJ,EAAO,CACL,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,EACjD,cAAe,EAAE,uCAAuC,EACxD,aAAc,EAAE,gCAAgC,CAClD,EACA,OAAArC,CACF,EAAI7F,EAEJ,OACEH,EAACf,GAAA,CAAI,GAAI,EACP,SAAAe,EAAC+F,EAAA,CACC,OAAQC,EACR,aAAc,CAAE,GAAGqC,EAAM,YAAaA,EAAK,YAAa,EAEvD,SAAAlI,EAAM,UAAYH,EAACmI,GAAA,EAAe,EACrC,EACF,CAEJ,EAEAC,GAAe,YAAc,iBC1C7B,OAA4B,WAAA/J,GAAS,YAAAE,OAAgB,QACrD,OAAS,cAAAC,OAAkB,gCAC3B,OAAS,kBAAAM,OAAsB,+BAC/B,OAAS,iBAAA2G,OAAqB,oCAC9B,OAAS,qBAAA1G,MAAyB,gCAClC,OAAS,WAAAY,OAAe,6BA8ElB,cAAAK,OAAA,oBA7DN,IAAMsI,GAAoBnI,GAA6C,CACrE,GAAM,CAAE,CAAE,EAAIrB,GAAe,EAEvB,CACJ,QAAAyJ,EAAU,GACV,QAAAC,EAAU,CACR,cAAe,EAAE,uCAAuC,EACxD,OAAQ,EAAE,uCAAuC,EACjD,cAAe,EAAE,uCAAuC,EACxD,aAAc,EAAE,gCAAgC,CAClD,CACF,EAAIrI,EAEE,CAACsI,EAAMC,CAAO,EAAInK,GAAS,EAAK,EAChC,CAAE,MAAAgD,CAAM,EAAI/C,GAAW,EACvBmK,EAAY,GACZ,CAAE,aAAAnC,CAAa,EAAIf,GAAc,EAEjC4C,EAAOhK,GAAQ,IAAM,CACzB,GAAImI,EACF,OAAOgC,GAAS,aAElB,OAAQjH,EAAM,OAAQ,CACpB,KAAKxC,EAAkB,aACrB,OAAOyJ,GAAS,cAClB,KAAKzJ,EAAkB,YACrB,OAAOyJ,GAAS,OAClB,KAAKzJ,EAAkB,gBACrB,OAAOyJ,GAAS,cAClB,KAAKzJ,EAAkB,cACrB,MAAO,GAET,QACE,OAAOoB,EAAM,OACjB,CACF,EAAG,CAACA,EAAM,QAASoB,EAAOoH,EAAWH,CAAO,CAAC,EAEvCI,EAAavK,GAAQ,IAAM,CAC/B,OAAQkD,EAAM,OAAQ,CACpB,KAAKxC,EAAkB,aACvB,KAAKA,EAAkB,YACrB,OAAOwJ,EACT,KAAKxJ,EAAkB,cACrB,OAEF,QACE,MACJ,CACF,EAAG,CAACoB,EAAM,QAASoB,EAAOoH,CAAS,CAAC,EAEpC,OACE3I,GAACL,GAAA,CACC,KAAM0I,EAAOI,EAAO,GACpB,aAAcC,EACd,QAASL,EACT,UAAU,eACV,MAAOlI,EAAM,MACb,YAAaA,EAAM,YACnB,KAAMA,EAAM,KACZ,WAAYA,EAAM,WAElB,SAAAH,GAAC,OAAI,MAAO,CAAE,QAAS4I,CAAW,EAAI,SAAAzI,EAAM,SAAS,EACvD,CAEJ,EAEAmI,GAAiB,YAAc","sourcesContent":["import { FC, ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useAccount,\n useEventEmitter,\n useLocalStorage,\n useStorageLedgerAddress,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { i18n, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n AccountStatusEnum,\n ChainNamespace,\n LedgerWalletKey,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Box,\n Button,\n capitalizeFirstLetter,\n Divider,\n Flex,\n inputFormatter,\n modal,\n Switch,\n Text,\n TextField,\n toast,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { StepItem } from \"./step\";\n\nexport type WalletConnectContentProps = {\n initAccountState: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: (remember: boolean) => Promise<any>;\n enableTradingComplted?: () => Promise<void>;\n onCompleted?: () => void;\n close?: () => void;\n refCode: string;\n setRefCode: React.Dispatch<React.SetStateAction<string>>;\n helpText?: string;\n showRefCodeInput: boolean;\n};\n\nexport const WalletConnectContent = (props: WalletConnectContentProps) => {\n const { initAccountState = AccountStatusEnum.NotConnected } = props;\n const [remember, setRemember] = useState(true);\n const ee = useEventEmitter();\n const { t } = useTranslation();\n const { disconnect, namespace } = useWalletConnector();\n\n const { state: accountState, account } = useAccount();\n const [state, setState] = useState(initAccountState);\n const [activeStep, setActiveStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [showLedgerButton, setShowLedgerButton] = useState(false);\n const { ledgerWallet, setLedgerAddress } = useStorageLedgerAddress();\n const handleRef = useRef(0);\n const [firstShowDialog] = useLocalStorage(\n \"orderly-first-show-wallet-connector-dialog\",\n undefined,\n );\n useEffect(() => {\n return () => {\n localStorage.setItem(\"orderly-first-show-wallet-connector-dialog\", \"1\");\n };\n }, []);\n\n useEffect(() => {\n setState(accountState.status);\n }, [accountState]);\n\n const steps = useMemo(() => {\n const steps = [];\n if (initAccountState < AccountStatusEnum.SignedIn) {\n steps.push({\n key: \"signIn\",\n title: t(\"connector.createAccount\"),\n description: t(\"connector.createAccount.description\"),\n });\n }\n\n if (initAccountState < AccountStatusEnum.EnableTrading) {\n steps.push({\n key: \"enableTrading\",\n title: t(\"connector.enableTrading\"),\n description: t(\"connector.enableTrading.description\"),\n });\n }\n\n return steps;\n }, [initAccountState, t]);\n\n useEffect(() => {\n if (namespace != ChainNamespace.solana) {\n setShowLedgerButton(false);\n return;\n }\n if (!ledgerWallet) {\n setShowLedgerButton(true);\n return;\n }\n if (ledgerWallet && account.address) {\n if (!ledgerWallet.includes(account.address)) {\n setShowLedgerButton(true);\n return;\n }\n }\n setShowLedgerButton(false);\n }, [namespace, account.address, ledgerWallet]);\n\n const onEnableTrading = () => {\n setLoading(true);\n return props\n .enableTrading(remember)\n .then(\n async (res) => {\n handleRef.current++;\n console.log(res);\n setLoading(false);\n setActiveStep((step) => step + 1);\n try {\n await props.enableTradingComplted?.();\n } catch (e) {}\n if (typeof props.onCompleted === \"function\") {\n props.onCompleted();\n } else if (typeof props.close === \"function\") {\n props.close();\n }\n // props.onCompleted?.();\n },\n (reject) => {\n setLoading(false);\n if (reject === -1) {\n return;\n }\n\n if (\n reject.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: reject.message,\n userAddress: account.address,\n });\n return;\n }\n toast.error(paseErrorMsg(reject));\n },\n )\n .catch((e) => {\n console.log(\"enable trading catch error\", e);\n setLoading(false);\n });\n };\n\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n disconnect({\n label: (state as unknown as any).connectWallet?.name,\n }).then(() => {\n account.disconnect();\n if (typeof props.close === \"function\") {\n props.close();\n }\n });\n };\n\n const onSignIn = () => {\n setLoading(true);\n return props\n .signIn()\n .then(\n (res) => {\n setActiveStep((step) => step + 1);\n onEnableTrading();\n },\n (reject) => {\n setLoading(false);\n\n if (reject === -1) {\n return;\n }\n if (\n reject.message.indexOf(\n \"Signing off chain messages with Ledger is not yet supported\",\n ) !== -1\n ) {\n ee.emit(\"wallet:sign-message-with-ledger-error\", {\n message: reject.message,\n userAddress: account.address,\n });\n return;\n }\n\n toast.error(paseErrorMsg(reject));\n },\n )\n .catch((e) => {\n setLoading(false);\n });\n };\n\n return (\n <Box id=\"oui-wallet-connect-dialog-content\" className=\"oui-font-semibold\">\n <Text intensity={54} size=\"xs\">\n {t(\"connector.expired\")}\n </Text>\n <Box\n p={4}\n my={6}\n intensity={600}\n r=\"lg\"\n className=\"oui-space-y-5\"\n position={\"relative\"}\n >\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1;\n return (\n <StepItem\n title={step.title}\n description={step.description}\n isCompleted={activeStep > index}\n key={step.key}\n active={activeStep === index}\n isLoading={loading && activeStep === index}\n showDivider={!isLast}\n />\n );\n })}\n </Box>\n {props.showRefCodeInput && steps.length == 2 && (\n <ReferralCode {...props} />\n )}\n {firstShowDialog && (\n <Flex justify={\"between\"} itemAlign={\"center\"}>\n <RememberMe />\n <Switch\n color={\"primary\"}\n checked={remember}\n onCheckedChange={setRemember}\n disabled={loading}\n className=\"data-[state=checked]:oui-bg-primary-darken\"\n />\n </Flex>\n )}\n <Flex justify={\"center\"} mt={8} className=\"oui-w-full\">\n <Box className=\"oui-w-full\">\n <ActionButton\n state={state}\n signIn={onSignIn}\n enableTrading={onEnableTrading}\n loading={loading}\n disabled={state >= AccountStatusEnum.EnableTrading}\n showLedgerButton={showLedgerButton}\n />\n </Box>\n </Flex>\n {state > AccountStatusEnum.NotConnected && (\n <Flex\n justify={\"center\"}\n mt={4}\n gap={1}\n className=\"oui-w-full oui-cursor-pointer\"\n onClick={onDisconnect}\n >\n <DisconnectIcon />\n <Text className=\"oui-text-base-contrast-80 oui-text-sm\">\n {t(\"connector.disconnectWallet\")}\n </Text>\n </Flex>\n )}\n </Box>\n );\n};\n\nconst DisconnectIcon = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n >\n <path\n d=\"M2.24219 5.24316C2.24219 3.58641 3.58536 2.24316 5.24219 2.24316H8.24219C9.89894 2.24316 11.2422 3.58641 11.2422 5.24316C11.2422 5.65716 10.9062 5.99316 10.4922 5.99316C10.0782 5.99316 9.74219 5.65716 9.74219 5.24316C9.74219 4.41441 9.07094 3.74316 8.24219 3.74316H5.24219C4.41374 3.74316 3.74219 4.41441 3.74219 5.24316V12.7432C3.74219 13.5719 4.41374 14.2432 5.24219 14.2432H8.24219C9.07094 14.2432 9.74219 13.5719 9.74219 12.7432C9.74219 12.3292 10.0782 11.9932 10.4922 11.9932C10.9062 11.9932 11.2422 12.3292 11.2422 12.7432C11.2422 14.3999 9.89894 15.7432 8.24219 15.7432H5.24219C3.58536 15.7432 2.24219 14.3999 2.24219 12.7432V5.24316ZM7.49219 8.99316C7.49219 8.57916 7.82819 8.24316 8.24219 8.24316H13.9144L12.4377 6.74316L13.4922 5.68866L16.2814 8.45391C16.5739 8.74716 16.5739 9.23915 16.2814 9.5324L13.4922 12.2977L12.4377 11.2432L13.9144 9.74316H8.24219C7.82819 9.74316 7.49219 9.40716 7.49219 8.99316Z\"\n fill=\"white\"\n fillOpacity=\"0.8\"\n />\n </svg>\n );\n};\n\nconst ActionButton: FC<{\n state: AccountStatusEnum;\n signIn: () => Promise<any>;\n enableTrading: () => Promise<any>;\n loading: boolean;\n showLedgerButton?: boolean;\n disabled?: boolean;\n}> = ({\n state,\n signIn,\n enableTrading,\n loading,\n disabled,\n showLedgerButton,\n}) => {\n const { t } = useTranslation();\n\n if (state <= AccountStatusEnum.NotSignedIn) {\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n <Button\n fullWidth\n onClick={() => signIn()}\n loading={loading}\n disabled={disabled}\n >\n {t(\"connector.createAccount\")}\n </Button>\n {showLedgerButton && (\n <WithLedgerButton\n onClick={() => signIn()}\n content={t(\"connector.createAccountWithLedger\")}\n />\n )}\n </Flex>\n );\n }\n\n return (\n <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n <Button\n fullWidth\n onClick={() => enableTrading()}\n loading={loading}\n disabled={disabled}\n >\n {t(\"connector.enableTrading\")}\n </Button>\n {showLedgerButton && (\n <WithLedgerButton\n onClick={() => enableTrading()}\n disabled={disabled}\n content={t(\"connector.enableTradingWithLedger\")}\n />\n )}\n </Flex>\n );\n\n // return (\n // <Match\n // value={() => {\n // if (state <= AccountStatusEnum.NotSignedIn) {\n // return \"signIn\";\n // }\n // return \"enableTrading\";\n // }}\n // case={{\n // signIn: (\n // <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n // <Button\n // fullWidth\n // onClick={() => signIn()}\n // loading={loading}\n // disabled={disabled}\n // >\n // {t(\"connector.createAccount\")}\n // </Button>\n // {showLedgerButton && (\n // <WithLedgerButton\n // onClick={() => signIn()}\n // content={t(\"connector.createAccountWithLedger\")}\n // />\n // )}\n // </Flex>\n // ),\n // enableTrading: (\n // <Flex direction={\"column\"} gap={3} className=\"oui-w-full\">\n // <Button\n // fullWidth\n // onClick={() => enableTrading()}\n // loading={loading}\n // disabled={disabled}\n // >\n // {t(\"connector.enableTrading\")}\n // </Button>\n // {showLedgerButton && (\n // <WithLedgerButton\n // onClick={() => enableTrading()}\n // disabled={disabled}\n // content={t(\"connector.enableTradingWithLedger\")}\n // />\n // )}\n // </Flex>\n // ),\n // }}\n // />\n // );\n};\n\nconst WithLedgerButton = ({\n onClick,\n disabled,\n content,\n}: {\n onClick: () => void;\n disabled?: boolean;\n content: ReactNode;\n}) => {\n const { t } = useTranslation();\n const { state } = useAccount();\n const address = state.address;\n const { setLedgerAddress } = useStorageLedgerAddress();\n if (!address) {\n return null;\n }\n return (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n fullWidth\n onClick={() => {\n setLedgerAddress(address);\n onClick();\n }}\n disabled={disabled}\n className=\"oui-w-full\"\n >\n {content}\n </Button>\n );\n};\n\nconst ReferralCode: FC<WalletConnectContentProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <TextField\n placeholder={t(\"connector.referralCode.placeholder\")}\n fullWidth\n label=\"\"\n value={props.refCode}\n onChange={(e) => {\n const _value = e.target.value.toUpperCase().replace(/[^A-Z0-9]/g, \"\");\n props.setRefCode(_value);\n }}\n classNames={{\n label: \"oui-text-base-contrast-54 oui-text-xs\",\n input: \"placeholder:oui-text-base-contrast-20 placeholder:oui-text-sm\",\n }}\n formatters={[\n inputFormatter.createRegexInputFormatter((value: string | number) => {\n return String(value).replace(/[a-z]/g, (char: string) =>\n char.toUpperCase(),\n );\n }),\n inputFormatter.createRegexInputFormatter(/[^A-Z0-9]/g),\n ]}\n onClear={() => {\n props.setRefCode(\"\");\n }}\n autoComplete=\"off\"\n helpText={props.helpText}\n className=\"oui-mb-4\"\n color={props.helpText ? \"danger\" : undefined}\n />\n );\n};\n\nconst RememberMe = () => {\n const { t } = useTranslation();\n\n const showRememberHint = () => {\n if (window.innerWidth > 768) {\n return;\n }\n modal.alert({\n title: t(\"connector.rememberMe\"),\n message: (\n <span className=\"oui-text-2xs oui-text-base-contrast/60\">\n {t(\"connector.rememberMe.description\")}\n </span>\n ),\n });\n };\n return (\n <Tooltip\n content={t(\"connector.rememberMe.description\")}\n className=\"oui-max-w-[300px]\"\n >\n <button onClick={showRememberHint}>\n <Text\n intensity={54}\n size={\"xs\"}\n className={\n \"oui-underline oui-underline-offset-4 oui-decoration-dashed oui-decoration-base-contrast-36\"\n }\n >\n {t(\"connector.rememberMe\")}\n </Text>\n </button>\n </Tooltip>\n );\n};\n\nfunction paseErrorMsg(reject: any): string {\n console.log(\"wallet callback error\", reject);\n console.log(\"message *** \", \"reject keys\", Object.keys(reject));\n Object.keys(reject).forEach((key) => {\n console.log(\"key\", key, \"-\", reject[key]);\n });\n let msg = i18n.t(\"connector.somethingWentWrong\");\n\n // if (typeof reject?.info?.error === \"object\" && \"message\" in reject?.info?.error) {\n // msg = reject?.info?.error?.message;\n // }\n\n // if (typeof reject?.shortMessage === 'string') {\n // msg = reject.shortMessage;\n // }\n\n if (reject.toString().includes(\"rejected\")) {\n msg = i18n.t(\"connector.userRejected\");\n }\n\n return capitalizeFirstLetter(msg) ?? msg;\n}\n","import { FC } from \"react\";\nimport {\n Box,\n CheckedCircleFillIcon,\n cn,\n Divider,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype StepItemProps = {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n title: string;\n description: string;\n showDivider?: boolean;\n};\n\nexport const StepItem = (props: StepItemProps) => {\n const { title, description, showDivider } = props;\n return (\n <Box position=\"relative\" className=\"oui-pl-8\">\n <Box>\n <Text as=\"div\" intensity={98} size={\"sm\"}>\n {title}\n </Text>\n <Text as=\"div\" intensity={54} size={\"2xs\"}>\n {description}\n </Text>\n </Box>\n <div className=\"oui-absolute oui-left-0 oui-top-1 oui-z-10\">\n <Identifier {...props} />\n </div>\n {showDivider && (\n <Box position={\"absolute\"} left={12} top={23} bottom={-21} zIndex={0}>\n <Divider\n lineStyle={\"dashed\"}\n direction={\"vertical\"}\n intensity={16}\n className=\"oui-h-full\"\n />\n </Box>\n )}\n </Box>\n );\n};\n\nconst Identifier = (props: {\n active?: boolean;\n isLoading?: boolean;\n isCompleted?: boolean;\n}) => {\n const { active, isLoading, isCompleted } = props;\n\n if (isLoading) {\n return <Spinner size={\"sm\"} className={\"oui-ml-1\"} />;\n }\n\n if (isCompleted) {\n return <CheckedCircleFillIcon opacity={1} className=\"oui-text-primary\" />;\n }\n\n return <Dot active={!!active} />;\n\n // return (\n // <Match\n // className={\"oui-absolute oui-left-0 oui-top-1 oui-z-10\"}\n // value={() => {\n // if (isCompleted) {\n // return \"completed\";\n // }\n // if (isLoading) {\n // return \"loading\";\n // }\n\n // if (active) {\n // return \"active\";\n // }\n\n // return \"normal\";\n // }}\n // case={{\n // loading: (\n // <div>\n // <Spinner size={\"sm\"} className={\"oui-ml-1\"} />\n // </div>\n // ),\n // completed: (\n // <div>\n // <CheckedCircleFillIcon opacity={1} className=\"oui-text-primary\" />\n // </div>\n // ),\n // }}\n // default={<Dot active={!!active} />}\n // />\n // );\n};\n\nconst Dot: FC<{ active: boolean; className?: string }> = ({\n active,\n className,\n}) => {\n return (\n <div\n className={cn(\n \"oui-w-[8.3px] oui-h-[8.3px] oui-rounded-full oui-ml-2 oui-mt-1\",\n className,\n active ? \"oui-bg-primary-light\" : \"oui-bg-base-2\",\n )}\n />\n );\n};\n","import React from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { registerSimpleDialog, registerSimpleSheet } from \"@kodiak-finance/orderly-ui\";\nimport { useWalletConnectorBuilder } from \"./useWalletConnectorBuilder\";\nimport { WalletConnectContent } from \"./walletConnectorContent\";\n\nexport const WalletConnectorModalId = \"walletConnector\" as const;\nexport const WalletConnectorSheetId = \"walletConnectorSheet\" as const;\n\nexport const WalletConnectorWidget: React.FC<any> = (props) => {\n const state = useWalletConnectorBuilder();\n return <WalletConnectContent {...state} {...props} />;\n};\n\nregisterSimpleDialog(WalletConnectorModalId, WalletConnectorWidget, {\n size: \"sm\",\n title: () => i18n.t(\"connector.connectWallet\"),\n});\n\nregisterSimpleSheet(WalletConnectorSheetId, WalletConnectorWidget, {\n title: () => i18n.t(\"connector.connectWallet\"),\n});\n","import { useEffect, useState } from \"react\";\nimport {\n useAccount,\n useGetReferralCode,\n useLazyQuery,\n useMutation,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\n\nexport const useWalletConnectorBuilder = () => {\n const { account, state, createOrderlyKey, createAccount } = useAccount();\n const [refCode, setRefCode] = useState(\"\");\n const [helpText, setHelpText] = useState(\"\");\n const { t } = useTranslation();\n\n const { trigger: verifyRefCode } = useLazyQuery(\n `/v1/public/referral/verify_ref_code?referral_code=${refCode}`,\n );\n\n useEffect(() => {\n const refCode = localStorage.getItem(\"referral_code\");\n if (refCode != null) {\n setRefCode(refCode);\n }\n }, []);\n\n const { referral_code, isLoading } = useGetReferralCode(account.accountId);\n\n const [bindRefCode, { error: updateOrderError, isMutating: updateMutating }] =\n useMutation(\"/v1/referral/bind\", \"POST\");\n\n useEffect(() => {\n if (refCode.length === 0) {\n setHelpText(\"\");\n }\n }, [refCode]);\n\n const enableTradingComplted = () => {\n toast.success(t(\"connector.walletConnected\"));\n // validate ref code and bind referral code\n if (refCode.length >= 4 && refCode.length <= 10)\n bindRefCode({ referral_code: refCode }).finally(() => {\n localStorage.removeItem(\"referral_code\");\n });\n };\n\n const checkRefCode = async () => {\n if (refCode.length === 0) {\n return Promise.resolve(undefined);\n }\n\n if (refCode.length > 0 && (refCode.length < 4 || refCode.length > 10)) {\n return Promise.resolve(t(\"connector.referralCode.invalid\"));\n }\n\n const { exist } = await verifyRefCode();\n\n if (exist === false) {\n return Promise.resolve(t(\"connector.referralCode.notExist\"));\n }\n\n return Promise.resolve(undefined);\n };\n\n const showRefCodeInput = (referral_code?.length || 0) === 0 && !isLoading;\n\n const signIn = async () => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createAccount();\n };\n\n const enableTrading = async (remember: boolean) => {\n if (showRefCodeInput) {\n const info = await checkRefCode();\n if (typeof info !== \"undefined\") {\n setHelpText(info);\n return Promise.reject(-1);\n }\n }\n setHelpText(\"\");\n return createOrderlyKey(remember);\n };\n\n return {\n enableTrading,\n initAccountState: state.status,\n signIn,\n enableTradingComplted,\n refCode,\n setRefCode,\n helpText,\n showRefCodeInput,\n } as const;\n};\n","import React, { ReactElement, useMemo } from \"react\";\nimport { useAccount, useMediaQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AccountStatusEnum,\n MEDIA_TABLET,\n NetworkId,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Either,\n modal,\n Text,\n toast,\n useScreen,\n type ButtonProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { Box } from \"@kodiak-finance/orderly-ui\";\nimport {\n ChainSelectorDialogId,\n ChainSelectorSheetId,\n} from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport {\n WalletConnectorModalId,\n WalletConnectorSheetId,\n} from \"./walletConnector\";\n\ntype ChainProps = {\n networkId?: NetworkId;\n bridgeLessOnly?: boolean;\n};\n\nexport type alertMessages = {\n connectWallet?: string;\n switchChain?: string;\n enableTrading?: string;\n signin?: string;\n};\n\nexport type AuthGuardProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n fallback?: (props: {\n validating: boolean;\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n }) => ReactElement;\n // indicator?: ReactElement;\n /**\n * Required state to be satisfied\n * @default AccountStatusEnum.EnableTrading\n */\n status?: AccountStatusEnum;\n\n bridgeLessOnly?: boolean;\n\n buttonProps?: ButtonProps;\n\n descriptions?: alertMessages;\n\n labels?: alertMessages;\n\n classNames?: {\n root?: string;\n description?: string;\n // button?: string;\n };\n\n networkId?: NetworkId;\n\n // validatingIndicator?: ReactElement;\n};\n\nexport const AuthGuard: React.FC<React.PropsWithChildren<AuthGuardProps>> = (\n props,\n) => {\n const {\n status,\n buttonProps,\n fallback,\n descriptions,\n classNames,\n networkId,\n id,\n bridgeLessOnly,\n // ...rest\n } = props;\n const { t } = useTranslation();\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const _status = useMemo(() => {\n if (status === undefined) {\n return state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n }\n return status;\n }, [status, state.status]);\n\n const labels = {\n connectWallet: t(\"connector.connectWallet\"),\n switchChain: t(\"connector.wrongNetwork\"),\n enableTrading: t(\"connector.enableTrading\"),\n signin: t(\"connector.createAccount\"),\n ...props.labels,\n };\n\n // return Match(state.status)\n // .with(AccountStatusEnum.EnableTrading, () => props.children)\n // .with(AccountStatusEnum.DisableTrading, () => props.fallback)\n // .with(AccountStatusEnum.Validating, () => props.validatingIndicator)\n // .otherwise(() => props.fallback);\n //\n\n const Left = useMemo<ReactElement>(() => {\n if (typeof fallback !== \"undefined\") {\n return fallback({\n validating: state.validating,\n status: state.status,\n wrongNetwork,\n });\n }\n\n if (state.validating && !disabledConnect) {\n return (\n <StatusInfo\n // variant={\"gradient\"}\n angle={45}\n // fullWidth\n disabled\n loading\n description={descriptions?.connectWallet}\n id={id}\n type=\"button\"\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n return (\n <DefaultFallback\n bridgeLessOnly={bridgeLessOnly}\n status={state.status}\n buttonProps={{ ...buttonProps, id, type: \"button\" }}\n wrongNetwork={wrongNetwork}\n networkId={props.networkId}\n labels={labels}\n descriptions={descriptions}\n disabledConnect={disabledConnect}\n />\n );\n }, [state.status, state.validating, buttonProps, wrongNetwork]);\n\n /**\n * **Important: The chldren component will be rendered only if the status is equal to the required status and the network is correct.**\n */\n\n return (\n <Either\n value={state.status >= _status && !wrongNetwork && !disabledConnect}\n left={Left}\n >\n {props.children}\n </Either>\n );\n};\n\nconst ModalTitle: React.FC = () => {\n const { t } = useTranslation();\n const { state } = useAccount();\n if (state.status < AccountStatusEnum.SignedIn) {\n return <Text>{t(\"connector.createAccount\")}</Text>;\n }\n if (state.status < AccountStatusEnum.EnableTrading) {\n return <Text>{t(\"connector.enableTrading\")}</Text>;\n }\n return <Text>{t(\"connector.connectWallet\")}</Text>;\n};\n\nconst DefaultFallback: React.FC<{\n status: AccountStatusEnum;\n wrongNetwork: boolean;\n buttonProps?: ButtonProps;\n networkId?: NetworkId;\n labels: alertMessages;\n bridgeLessOnly?: boolean;\n descriptions?: alertMessages;\n disabledConnect?: boolean;\n}> = (props) => {\n const { buttonProps, labels, descriptions } = props;\n const { t } = useTranslation();\n const { connectWallet } = useAppContext();\n const { account } = useAccount();\n const { isMobile } = useScreen();\n const matches = useMediaQuery(MEDIA_TABLET);\n\n const onConnectOrderly = () => {\n modal\n .show(matches ? WalletConnectorSheetId : WalletConnectorModalId, {\n title: <ModalTitle />,\n })\n .then(\n (r) => console.log(r),\n (error) => console.log(error),\n );\n };\n\n const onConnectWallet = async () => {\n const res = await connectWallet();\n\n if (!res) {\n return;\n }\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n if (\n (res?.status ?? AccountStatusEnum.NotConnected) <\n AccountStatusEnum.EnableTrading\n ) {\n onConnectOrderly();\n }\n }\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n });\n\n modal\n .show<{ wrongNetwork: boolean }>(\n isMobile ? ChainSelectorSheetId : ChainSelectorDialogId,\n {\n networkId: props.networkId,\n bridgeLessOnly: props.bridgeLessOnly,\n },\n )\n .then(\n (r) => {\n if (!r.wrongNetwork) {\n if (props.status >= AccountStatusEnum.Connected) {\n if (props.status < AccountStatusEnum.EnableTrading) {\n onConnectOrderly();\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n }\n }\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n };\n\n if (props.wrongNetwork && !props.disabledConnect) {\n return (\n <StatusInfo\n color=\"warning\"\n // size=\"md\"\n // fullWidth\n onClick={() => {\n switchChain();\n }}\n description={descriptions?.switchChain}\n {...buttonProps}\n >\n {labels.switchChain}\n </StatusInfo>\n );\n }\n\n if (props.status <= AccountStatusEnum.NotConnected || props.disabledConnect) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectWallet();\n }}\n // fullWidth\n variant={props.disabledConnect ? undefined : \"gradient\"}\n angle={45}\n description={descriptions?.connectWallet}\n disabled={props.disabledConnect}\n {...buttonProps}\n >\n {labels.connectWallet}\n </StatusInfo>\n );\n }\n\n if (props.status <= AccountStatusEnum.NotSignedIn) {\n return (\n <StatusInfo\n size=\"lg\"\n onClick={() => {\n onConnectOrderly();\n }}\n // fullWidth\n angle={45}\n description={descriptions?.signin}\n {...buttonProps}\n >\n {labels.signin}\n </StatusInfo>\n );\n }\n\n return (\n <StatusInfo\n size=\"lg\"\n // fullWidth\n description={descriptions?.enableTrading}\n {...buttonProps}\n onClick={() => onConnectOrderly()}\n >\n {labels.enableTrading}\n </StatusInfo>\n );\n\n // return (\n // <Match\n // value={props.status}\n // case={(value: AccountStatusEnum) => {\n // if (value <= AccountStatusEnum.NotConnected || props.disabledConnect) {\n // return (\n // <StatusInfo\n // size=\"lg\"\n // onClick={() => {\n // onConnectWallet();\n // }}\n // // fullWidth\n // variant={props.disabledConnect ? undefined : \"gradient\"}\n // angle={45}\n // description={descriptions?.connectWallet}\n // disabled={props.disabledConnect}\n // {...buttonProps}\n // >\n // {labels.connectWallet}\n // </StatusInfo>\n // );\n // }\n // if (value <= AccountStatusEnum.NotSignedIn) {\n // return (\n // <StatusInfo\n // size=\"lg\"\n // onClick={() => {\n // onConnectOrderly();\n // }}\n // // fullWidth\n // angle={45}\n // description={descriptions?.signin}\n // {...buttonProps}\n // >\n // {labels.signin}\n // </StatusInfo>\n // );\n // }\n // }}\n // default={\n // <StatusInfo\n // size=\"lg\"\n // // fullWidth\n // description={descriptions?.enableTrading}\n // {...buttonProps}\n // onClick={() => onConnectOrderly()}\n // >\n // {labels.enableTrading}\n // </StatusInfo>\n // }\n // />\n // );\n};\n\nAuthGuard.displayName = \"AuthGuard\";\n\nconst StatusInfo: React.FC<ButtonProps & { description?: string }> = (\n props,\n) => {\n const { description, ...buttonProps } = props;\n return (\n <Flex direction={\"column\"}>\n <Button {...buttonProps}></Button>\n {!!description && (\n <Box mt={4} className=\"oui-leading-none\" style={{ lineHeight: 0 }}>\n <Text size=\"2xs\" intensity={36}>\n {description}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n","import React, { PropsWithChildren, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext, useDataTap } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n DataTable,\n DataTableProps,\n} from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { alertMessages, AuthGuard } from \"./authGuard\";\n\nexport const AuthGuardDataTable = <RecordType,>(\n props: PropsWithChildren<\n DataTableProps<RecordType> &\n Omit<GuardViewProps, \"status\"> & {\n status?: AccountStatusEnum;\n classNames?: DataTableProps<RecordType>[\"classNames\"] & {\n authGuardDescription?: string;\n };\n }\n >,\n) => {\n const {\n status,\n // message,\n labels,\n description,\n dataSource,\n children,\n ...rest\n } = props;\n const { state } = useAccount();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const _status = useMemo(() => {\n if (status === undefined) {\n return state.status === AccountStatusEnum.EnableTradingWithoutConnected\n ? AccountStatusEnum.EnableTradingWithoutConnected\n : AccountStatusEnum.EnableTrading;\n }\n return status;\n }, [status, state.status]);\n\n const data = useDataTap(dataSource, {\n accountStatus: _status,\n });\n\n const ignoreLoadingCheck =\n wrongNetwork ||\n disabledConnect ||\n state.status < _status ||\n props.ignoreLoadingCheck;\n\n return (\n <DataTable\n dataSource={data}\n ignoreLoadingCheck={ignoreLoadingCheck}\n emptyView={\n <GuardView\n status={_status}\n description={description}\n labels={labels}\n className={props.classNames?.authGuardDescription}\n visible={!state.validating}\n />\n }\n manualPagination\n {...rest}\n >\n {children}\n </DataTable>\n );\n};\n\ntype GuardViewProps = {\n status: AccountStatusEnum;\n description?: alertMessages;\n labels?: alertMessages;\n className?: string;\n visible?: boolean;\n};\n\nconst GuardView: React.FC<GuardViewProps> = (props) => {\n const { t } = useTranslation();\n\n const DESCRIPTIONS: alertMessages = {\n connectWallet: t(\"connector.trade.connectWallet.tooltip\"),\n switchChain: t(\"connector.wrongNetwork.tooltip\"),\n enableTrading: t(\"connector.trade.enableTrading.tooltip\"),\n signin: t(\"connector.trade.createAccount.tooltip\"),\n };\n\n const descriptions = { ...DESCRIPTIONS, ...props.description };\n if (!props.visible) {\n return null;\n }\n return (\n <Flex py={8}>\n <AuthGuard\n status={props.status}\n labels={props.labels}\n descriptions={descriptions}\n buttonProps={{\n size: \"md\",\n }}\n >\n <ExtensionSlot position={ExtensionPositionEnum.EmptyDataIdentifier} />\n </AuthGuard>\n </Flex>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Box, EmptyDataState } from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"./authGuard\";\n\ntype AuthGuardProps = {\n hint?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n status?: AccountStatusEnum;\n};\n\nexport const AuthGuardEmpty: React.FC<\n React.PropsWithChildren<AuthGuardProps>\n> = (props) => {\n const { t } = useTranslation();\n const {\n hint = {\n connectWallet: t(\"connector.trade.connectWallet.tooltip\"),\n signIn: t(\"connector.trade.createAccount.tooltip\"),\n enableTrading: t(\"connector.trade.enableTrading.tooltip\"),\n wrongNetwork: t(\"connector.wrongNetwork.tooltip\"),\n },\n status,\n } = props;\n\n return (\n <Box my={8}>\n <AuthGuard\n status={status}\n descriptions={{ ...hint, switchChain: hint.wrongNetwork }}\n >\n {props.children || <EmptyDataState />}\n </AuthGuard>\n </Box>\n );\n};\n\nAuthGuardEmpty.displayName = \"AuthGuardEmpty\";\n","import { PropsWithChildren, useMemo, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Tooltip } from \"@kodiak-finance/orderly-ui\";\n\ntype AuthGuardProps = {\n content?: string;\n align?: \"center\" | \"end\" | \"start\";\n alignOffset?: number;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n opactiy?: number;\n tooltip?: {\n connectWallet?: string;\n signIn?: string;\n enableTrading?: string;\n wrongNetwork?: string;\n };\n};\n\nconst AuthGuardTooltip = (props: PropsWithChildren<AuthGuardProps>) => {\n const { t } = useTranslation();\n\n const {\n opactiy = 90,\n tooltip = {\n connectWallet: t(\"connector.setUp.connectWallet.tooltip\"),\n signIn: t(\"connector.setUp.createAccount.tooltip\"),\n enableTrading: t(\"connector.setUp.enableTrading.tooltip\"),\n wrongNetwork: t(\"connector.wrongNetwork.tooltip\"),\n },\n } = props;\n\n const [open, setOpen] = useState(false);\n const { state } = useAccount();\n const isSupport = true;\n const { wrongNetwork } = useAppContext();\n\n const hint = useMemo(() => {\n if (wrongNetwork) {\n return tooltip?.wrongNetwork;\n }\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n return tooltip?.connectWallet;\n case AccountStatusEnum.NotSignedIn:\n return tooltip?.signIn;\n case AccountStatusEnum.DisabledTrading:\n return tooltip?.enableTrading;\n case AccountStatusEnum.EnableTrading: {\n return \"\";\n }\n default:\n return props.content;\n }\n }, [props.content, state, isSupport, tooltip]);\n\n const newOpacity = useMemo(() => {\n switch (state.status) {\n case AccountStatusEnum.NotConnected:\n case AccountStatusEnum.NotSignedIn:\n return opactiy;\n case AccountStatusEnum.EnableTrading: {\n return undefined;\n }\n default:\n return undefined;\n }\n }, [props.opactiy, state, isSupport]);\n\n return (\n <Tooltip\n open={hint ? open : false}\n onOpenChange={setOpen}\n content={hint}\n className=\"oui-text-2xs\"\n align={props.align}\n alignOffset={props.alignOffset}\n side={props.side}\n sideOffset={props.sideOffset}\n >\n <div style={{ opacity: newOpacity }}>{props.children}</div>\n </Tooltip>\n );\n};\n\nAuthGuardTooltip.displayName = \"AuthGuardTooltip\";\n\nexport { AuthGuardTooltip };\n"]}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.oui-absolute{position:absolute}.oui-left-0{left:0}.oui-top-1{top:.25rem}.oui-z-10{z-index:10}.oui-mb-4{margin-bottom:1rem}.oui-ml-1{margin-left:.25rem}.oui-ml-2{margin-left:.5rem}.oui-mt-1{margin-top:.25rem}.oui-h-\[8\.3px\]{height:8.3px}.oui-h-full{height:100%}.oui-w-\[8\.3px\]{width:8.3px}.oui-w-full{width:100%}.oui-max-w-\[300px\]{max-width:300px}.oui-cursor-pointer{cursor:pointer}.oui-space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.oui-rounded-full{border-radius:var(--oui-rounded-full,9999px)}.oui-bg-base-2{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-2)/var(--tw-bg-opacity,1))}.oui-bg-primary-light{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-primary-light)/var(--tw-bg-opacity,1))}.oui-pl-8{padding-left:2rem}.oui-text-2xs{font-size:var(--oui-font-size-2xs,.75rem);line-height:1.125rem}.oui-text-sm{font-size:var(--oui-font-size-sm,.875rem);line-height:1.25rem}.oui-text-xs{font-size:var(--oui-font-size-xs,calc(.875rem - 1px));line-height:1.25rem}.oui-font-semibold{font-weight:600}.oui-leading-none{line-height:1}.oui-text-base-contrast-54{color:rgb(var(--oui-color-base-foreground)/.54)}.oui-text-base-contrast-80{color:rgb(var(--oui-color-base-foreground)/.8)}.oui-text-base-contrast\/60{color:rgb(var(--oui-color-base-foreground)/.6)}.oui-text-primary{--tw-text-opacity:1;color:rgb(var(--oui-color-primary)/var(--tw-text-opacity,1))}.oui-underline{text-decoration-line:underline}.oui-decoration-base-contrast-36{text-decoration-color:rgb(var(--oui-color-base-foreground)/.36)}.oui-decoration-dashed{text-decoration-style:dashed}.oui-underline-offset-4{text-underline-offset:4px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.placeholder\:oui-text-sm::-moz-placeholder{font-size:var(--oui-font-size-sm,.875rem);line-height:1.25rem}.placeholder\:oui-text-sm::placeholder{font-size:var(--oui-font-size-sm,.875rem);line-height:1.25rem}.placeholder\:oui-text-base-contrast-20::-moz-placeholder{color:rgb(var(--oui-color-base-foreground)/.2)}.placeholder\:oui-text-base-contrast-20::placeholder{color:rgb(var(--oui-color-base-foreground)/.2)}.data-\[state\=checked\]\:oui-bg-primary-darken[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-primary-darken)/var(--tw-bg-opacity,1))}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kodiak-finance/orderly-ui-connector",
|
|
3
|
+
"version": "2.7.4",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"Orderly",
|
|
9
|
+
"UI",
|
|
10
|
+
"Exchange",
|
|
11
|
+
"DApp"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@kodiak-finance/orderly-i18n": "2.7.4",
|
|
21
|
+
"@kodiak-finance/orderly-types": "2.7.4",
|
|
22
|
+
"@kodiak-finance/orderly-ui-chain-selector": "2.7.4",
|
|
23
|
+
"@kodiak-finance/orderly-hooks": "2.7.4",
|
|
24
|
+
"@kodiak-finance/orderly-react-app": "2.7.4",
|
|
25
|
+
"@kodiak-finance/orderly-ui": "2.7.4"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/react": "^18.3.2",
|
|
29
|
+
"@types/react-dom": "^18.3.0",
|
|
30
|
+
"react": "^18.2.0",
|
|
31
|
+
"react-dom": "^18.2.0",
|
|
32
|
+
"tailwindcss": "^3.4.4",
|
|
33
|
+
"tsup": "^7.3.0",
|
|
34
|
+
"tsconfig": "0.10.4"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"react": ">=18",
|
|
38
|
+
"react-dom": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsup && pnpm run build:css",
|
|
42
|
+
"build:css": "tailwindcss build src/tailwind.css -o dist/styles.css --minify",
|
|
43
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
44
|
+
}
|
|
45
|
+
}
|