@kodiak-finance/orderly-ui-scaffold 2.8.16-rc.0 → 2.8.16-rc.1

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/accountMenu/menu.ui.tsx","../src/components/accountMenu/useWidgetBuilder.script.tsx","../src/components/accountMenu/menu.widget.tsx","../src/components/chainMenu/chainMenu.script.ts","../src/components/chainMenu/chainMenu.ui.tsx","../src/components/chainMenu/chainMenu.ui.mobile.tsx","../src/components/chainMenu/chainMenu.widget.tsx","../src/components/chainMenu/index.ts","../src/components/languageSwitcher/languageSwitcher.script.ts","../src/components/languageSwitcher/languageSwitcher.ui.tsx","../src/components/languageSwitcher/widget.tsx","../src/components/languageSwitcher/index.ts","../src/components/icons/communtiyIcons.tsx","../src/components/icons/orderlyNetworkTextIcon.tsx","../src/components/icons/signal.tsx","../src/components/icons/infoIcon.tsx","../src/components/icons/closeIcon.tsx","../src/components/icons/orderlyLogo.tsx","../src/components/icons/index.ts","../src/components/main/mainLogo.tsx","../src/components/subAccount/useAccountValue.tsx","../src/components/subAccount/subAccount.script.ts","../src/components/subAccount/icons.tsx","../src/components/subAccount/components/accountItem.tsx","../src/components/subAccount/components/common.tsx","../src/components/subAccount/components/createSubAccountModal.tsx","../src/components/subAccount/components/editNickNameModal.tsx","../src/components/subAccount/subAccount.ui.tsx","../src/components/subAccount/subAccount.widget.tsx","../src/components/subAccount/index.ts","../src/components/leftNav/communityIcon.tsx","../src/components/leftNav/leftNav.ui.tsx","../src/components/scanQRCode/scanQRCode.script.ts","../src/components/scanQRCode/scanner.tsx","../src/components/scanQRCode/scanQRCode.ui.tsx","../src/components/scanQRCode/scanQRCode.widget.tsx","../src/components/scanQRCode/index.ts","../src/components/main/linkDevice/linkDevice.script.tsx","../src/components/main/linkDevice/linkDevice.ui.tsx","../src/components/main/linkDevice/linkDevice.ui.mobile.tsx","../src/components/main/linkDevice/widget.tsx","../src/components/main/linkDevice/index.ts","../src/components/main/mainNav.ui.mobile.tsx","../src/components/restrictedInfo/restrictedInfo.ui.tsx","../src/components/restrictedInfo/restrictedInfo.script.tsx","../src/components/restrictedInfo/restrictedInfo.widget.tsx","../src/components/restrictedInfo/index.ts","../src/components/announcement/hooks/useMarqueeOnce.ts","../src/components/announcement/hooks/usePrevNextButtons.ts","../src/components/announcement/hooks/useSelectedSnapDisplay.ts","../src/components/announcement/hooks/index.ts","../src/components/announcement/icons/soundIcon.tsx","../src/components/announcement/icons/index.ts","../src/components/announcement/announcement.ui.tsx","../src/components/announcement/announcement.script.tsx","../src/components/announcement/announcement.widget.tsx","../src/components/announcement/index.ts","../src/components/bottomNav/bottomNav.ui.mobile.tsx","../src/components/bottomNav/bottomNav.widget.tsx","../src/components/bottomNav/index.ts","../src/components/scaffold/scaffold.mobile.ui.tsx","../src/components/scaffold/scaffold.script.ts","../src/components/footer/footer.ui.tsx","../src/components/footer/footer.script.tsx","../src/components/footer/footer.widget.tsx","../src/components/footer/index.ts","../src/components/sidebar/sidebar.ui.tsx","../src/components/sidebar/useSideNavBuilder.script.tsx","../src/components/sidebar/sidebar.widget.tsx","../src/components/sidebar/index.ts","../src/components/scaffold/scaffold.ui.tsx","../src/utils/chain.ts","../src/components/scaffold/scaffoldContext.ts","../src/components/scaffold/scaffoldProvider.tsx","../src/components/scaffold/scaffold.widget.tsx","../src/components/scaffold/index.ts","../src/components/main/mainNav.script.ts","../src/components/accountSummary/accountSummary.ui.tsx","../src/components/accountSummary/useWidgetBuilder.script.ts","../src/components/accountSummary/accountSummary.widget.tsx","../src/components/accountSummary/index.ts","../src/components/main/mainMenus/navItem.tsx","../src/components/main/campaignButton.tsx","../src/components/main/mainMenus/mainNavMenus.ui.tsx","../src/components/main/mainMenus/mainNavMenus.widget.tsx","../src/components/main/mainNav.ui.tsx","../src/components/main/mainNav.widget.tsx","../src/components/accountMenu/index.ts","../src/index.ts","../src/components/maintenanceTips/ui.tsx","../src/components/maintenanceTips/script.tsx","../src/components/maintenanceTips/widget.tsx","../src/components/leftNav/leftNav.script.ts","../src/components/leftNav/leftNav.widget.tsx","../src/components/leftNav/index.ts"],"names":["useTranslation","AccountStatusEnum","Button","Divider","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","EVMAvatar","Flex","Text","jsx","jsxs","AccountMenu","WalletMenu","init_menu_ui","__esmMin","props","state","onDisconnect","onOpenExplorer","wrongNetwork","onSwitchNetwork","isMobile","disabled","r","e","address","t","event","useCallback","useAccount","useChains","useWalletConnector","useAppContext","modal","toast","useScreen","ChainSelectorDialogId","ChainSelectorSheetId","WalletConnectorModalId","WalletConnectorSheetId","ModalTitle","useAccountMenu","init_useWidgetBuilder_script","disconnect","connectedChain","account","connectWallet","disabledConnect","setCurrentChainId","findByChainId","onCrateAccount","modalId","res","err","onCreateOrderlyKey","switchChain","status","statusChangeHandler","error","connect","nextState","chainInfo","explorer_base_url","ExtensionPositionEnum","ExtensionSlot","installExtension","AccountMenuWidget","WalletConnectButtonExtension","init_menu_widget","useState","useConfig","useChainMenuScript","init_chainMenu_script","open","setOpen","loading","setLoading","currentChainId","networkId","hide","onChainChangeBefore","onChainChangeAfter","ChainIcon","cn","Tooltip","Spinner","ChainSelectorWidget","ChainMenu","init_chainMenu_ui","renderIcon","trigger","Box","ChainMenuUiMobile","init_chainMenu_ui_mobile","ChainMenuWidget","init_chainMenu_widget","init_chainMenu","useMemo","useTrack","i18n","useLocaleContext","TrackerEventName","useLanguageSwitcherScript","init_languageSwitcher_script","options","selectedLang","setSelectedLang","languages","onLanguageBeforeChanged","onLanguageChanged","popup","track","setIdentify","onOpenChange","onLangChange","lang","displayName","_popup","forwardRef","SimpleDialog","SimpleSheet","Fragment","LanguageSwitcher","LanguageItem","LanguageIcon","init_languageSwitcher_ui","header","languageList","item","selected","context","footer","renderTrailing","ref","size","rest","LanguageSwitcherWidget","init_widget","init_languageSwitcher","React","CommuntiyTelegramIcon","CommuntiyDiscordIcon","CommuntiyXIcon","init_communtiyIcons","OrderlyTextIcon","init_orderlyNetworkTextIcon","opacity","SignalIcon","init_signal","InfoIcon","init_infoIcon","viewBox","CloseIcon","init_closeIcon","OrderlyLogo","init_orderlyLogo","init_icons","useAppConfig","Logo","MainLogo","init_mainLogo","appIcons","main","useEffect","useSubAccountQuery","Decimal","useAccountValue","init_useAccountValue","mainAccountId","accountValue","setAccountValue","newPositions","isPositionLoading","mutatePositions","value","acc","position","accountId","useRef","useIndexPricesStream","ABSTRACT_CHAIN_ID_MAP","EMPTY_LIST","EMPTY_OBJECT","SubAccountScript","calculateAccountValue","getTokenIndexPrice","init_subAccount_script","mainAccountHolding","setMainAccountHolding","wallet","indexPrices","subAccount","switchAccount","currentAccountId","hasRefreshedRef","userAddress","subAccounts","currentSubAccount","doCreatSubAccount","nickName","onSwitch","accountsWithValues","mainAccountUnsettlePnl","mainAccount","updatedSubAccounts","subAccountUnsettlePnl","holdings","unsettlePnl","holding","price","token","symbol","SubAccountIcon","SwapIcon","AddIcon","EditIcon","CopyIcon","formatAddress","AccountIdForCopy","AccountItem","init_accountItem","info","copy","inputFormatter","TextField","NickNameTextField","init_common","_value","MAX_SUB_ACCOUNT_COUNT","CreateSubAccount","init_createSubAccountModal","setNickName","invalid","setInvalid","subAccountCount","reset","validateNickName","_nickName","EditNickNameDialog","init_editNickNameModal","newNickName","setNewNickName","ScrollArea","PopoverRoot","PopoverContent","PopoverAnchor","SubAccountUI","timer","onMouseEnter","editDialogOpen","setEditDialogOpen","editAccountItem","setEditAccountItem","noSubAccount","renderSubAccount","content","dialogId","init_subAccount_ui","SubAccountWidget","init_subAccount_widget","init_subAccount","CommunityDiscord","CommunityTG","CommunityX","CommunityDune","init_communityIcon","width","height","className","Sheet","SheetContent","useModal","VectorIcon","SwapHorizIcon","PeopleIcon","LeftNavUI","LeftNavSheet","NavItem","init_leftNav_ui","visible","resolve","reject","showSubAccount","onRouteChange","option","subAccountTrigger","name","openExternalLink","url","onClick","href","icon","trailing","onlyInMainAccount","customRender","target","isMainAccount","onItemClick","useLocalStorage","isValidURL","str","useScanQRCodeScript","init_scanQRCode_script","widgetConfigs","timerRef","showScanTooltip","setShowScanTooltip","showDialog","hideDialog","onScanSuccess","onSuccess","jsQR","QRCODE_WIDTH","QRCODE_HEIGHT","RATIO","QRCodeScanner","init_scanner","videoRef","canvasRef","tick","video","canvas","ctx","videoWidth","videoHeight","canvasAspectRatio","videoAspectRatio","sx","sy","sWidth","sHeight","imageData","stream","Trans","ScanQRCode","ScanQRCodeContent","ScanIcon","LinkDeviceIcon","LineGradient","RadiusGradient","init_scanQRCode_ui","ScanQRCodeWidget","init_scanQRCode_widget","init_scanQRCode","useEventEmitter","useLinkDeviceScript","confirm","setConfirm","seconds","setSeconds","ExpireSeconds","secretKey","setSecretKey","setUrl","ee","_","chain","createTrackParams","getOrderlyKey","onConfirm","copyUrl","timestamp","params","createUrl","base64","init_linkDevice_script","qr","SimpleDialogFooter","LinkDevice","LinkDeviceContent","QRCode","QRCodeCanvas","LinkDeviceConfirm","Loading","init_linkDevice_ui","actions","qrcode","cells","tileW","tileH","row","c","w","h","LinkDeviceMobile","Dot","DesktopIcon","MobileIcon","LinkIcon","DotIcon","init_linkDevice_ui_mobile","LinkDeviceWidget","init_linkDevice","ChevronLeftIcon","MainNavMobile","init_mainNav_ui_mobile","currentMenu","menu","title","isSub","subTitle","onBack","showLinkDevice","showChainMenu","showQrcode","renderContent","languageSwitcher","scanQRCode","linkDevice","chainMenu","walletConnect","leftNav","Checkbox","RestrictedInfo","init_restrictedInfo_ui","brokerName","agree","setAgree","ip","restrictedOpen","canUnblock","accessRestricted","setAccessRestricted","checked","useObserverElement","useRestrictedInfoScript","init_restrictedInfo_script","restrictedInfo","container","mutiLine","setMutiLine","setCanUnblock","entry","RestrictedInfoWidget","init_restrictedInfo_widget","restrictedInfo_exports","__export","init_restrictedInfo","useLayoutEffect","useMarqueeOnce","init_useMarqueeOnce","opts","isActive","pxPerSec","startDelayMs","endDelayMs","fallbackStayMs","onFinish","containerRef","contentRef","rafRef","stopAll","timers","clearTimers","id","overflow","setOverflow","delta","setDelta","update","cw","tw","need","ro","startId","distance","durationMs","el","startTs","startX","endX","step","ts","progress","x","endId","usePrevNextButtons","init_usePrevNextButtons","emblaApi","onButtonClick","prevBtnDisabled","setPrevBtnDisabled","nextBtnDisabled","setNextBtnDisabled","onPrevButtonClick","onNextButtonClick","onSelect","useSelectedSnapDisplay","init_useSelectedSnapDisplay","selectedSnap","setSelectedSnap","snapCount","setSnapCount","updateScrollSnapState","init_hooks","SoundIcon","init_soundIcon","AnnouncementType","ChevronRightIcon","DialogTitle","DialogHeader","Dialog","DialogBody","DialogContent","useEmblaCarousel","SwitchTips","Controls","TipsType","AnnouncementItem","AnnouncementUI","init_announcement_ui","prevDisabled","nextDisabled","prevTips","nextTips","closeTips","type","label","map","text","onItemFinish","maintenanceDialogInfo","showAnnouncement","tips","style","emblaRef","goNext","index","UTCDateMini","format","produce","MaintenanceStatus","useMaintenanceStatus","useOrderlyContext","useQuery","useWS","getTimestamp","oneDay","maintentanceId","ORDERLY_ANNOUNCEMENT_KEY","getTimeString","sortDataByUpdatedTime","useAnnouncementData","useAnnouncementScript","init_announcement_script","date","ori","draft","a","b","ws","customAnnouncements","announcementStore","setStore","setTips","setMaintenanceDialogInfo","startTime","endTime","announcements","data","getMaintentTipsContent","startDate","endDate","getMaintentDialogContent","unsubscribe","message","prev","idx","tip","apiTime","existingIds","maintenanceTip","tipsCopy","setShowAnnouncement","dataAdapter","memoizedTips","len","AnnouncementWidget","init_announcement_widget","hideTips","announcement_exports","init_announcement","BottomNav","init_bottomNav_ui_mobile","mainMenus","current","isSubmenu","menus","BottomNavWidget","init_bottomNav_widget","bottomNav_exports","init_bottomNav","LazyRestrictedInfoWidget","LazyAnnouncementWidget","LazyBottomNav","MobileScaffold","init_scaffold_mobile_ui","mod","classNames","topNavbarRef","bottomNavHeight","topBar","mainNavProps","routerAdapter","bottomNavRef","bottomNavProps","bottomNav","children","useScaffoldScript","useRefAndHeight","init_scaffold_script","topNavbarHeight","footerRef","footerHeight","announcementRef","announcementHeight","expand","setExpand","sideBarExpandWidth","sideBarCollaspedWidth","hasLeftSidebar","defaultHeight","deps","setHeight","rect","WsNetworkStatus","Footer","init_footer_ui","signalClsName","openUrl","useWsStatus","useFooterScript","init_footer_script","FooterWidget","init_footer_widget","footer_exports","init_footer","tv","menuItemVariants","MenuItem","SideMenus","SideBarHeader","SideBar","ExpandIcon","CollapseIcon","init_sidebar_ui","mode","active","button","titleElemet","iconProps","items","onItemSelect","useSideNavBuilder","init_useSideNavBuilder_script","init_scaffold","setCurrent","expanded","useScaffoldContext","SideNavbarWidget","init_sidebar_widget","sidebar_exports","init_sidebar","isValidElement","Grid","LazyMainNavWidget","LazyFooterWidget","LazySideNavbarWidget","DesktopScaffold","init_scaffold_ui","leftSideProps","leftSidebar","footerProps","checkChainSupport","chainId","chains","init_chain","createContext","useContext","ScaffoldContext","init_scaffoldContext","OrderlyContext","useMemoizedFn","ScaffoldProvider","init_scaffoldProvider","checkChainSupportHandle","memoizedValue","Scaffold","init_scaffold_widget","CampaignPositionEnum","useMainNavScript","init_mainNav_script","campaignPosition","onItemClickHandler","scope","lastItem","args","mainNavConfig","config","campaigns","converted","EyeCloseIcon","EyeIcon","Popover","TotalValue","FreeCollateral","CurrentLeverage","MaxLeverage","UnrealPnL","AccountInfoPopover","DropdownMenu","IdentityButton","AccountSummary","Items","init_accountSummary_ui","totalValue","onToggleVisibility","visibleAvailable","freeCollateral","currentLeverage","keys","elementKeys","onSetToTop","key","elements","canToggleIndex","sizeRef","resizeObserver","entries","Element","useLeverage","useMarginRatio","usePositionStream","useCollateral","useTotalValueBuilderScript","setKeys","setElementKeys","setVisible","aggregated","totalUnrealizedROI","maxLeverage","onToggleItemByKey","k","onKeyToTop","unavailable","AccountSummaryWidget","init_accountSummary_widget","init_accountSummary","cloneElement","ChevronDownIcon","ActiveIcon","isObject","ORDERLY_NAV_BUTTON_TOOLTIP_OPEN","SubMenus","SubMenu","SubMenuTitle","Tag","ICON_CLASSNAME","ItemIcon","OutlinkIcon","init_navItem","currentPath","buttonProps","tooltipConfig","showButtonTooltip","setShowButtonTooltip","onClickHandler","buttonRender","subItem","hasDescription","hasIcon","CampaignButton","init_campaignButton","MainNavMenus","init_mainNavMenus_ui","MainNavMenusExtension","init_mainNavMenus_widget","MainNav","init_mainNav_ui","showCampaignButton","showLinkIcon","hideWalletConnectButton","isDesktop","accountSummary","mainNav","mainNav_widget_exports","MainNavWidget","init_mainNav_widget","MaintenanceTipsUI","showTips","tipsContent","dialogContent","useMaintenanceScript","setShowTips","setShowDialog","MaintenanceTipsWidget","useLeftNavState","LeftNavWidget"],"mappings":"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","sourcesContent":["import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Divider,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n EVMAvatar,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\nexport type AccountMenuProps = {\n accountState: AccountState;\n address?: string;\n onDisconnect: () => void;\n connect: () => Promise<void>;\n onCrateAccount: () => Promise<void>;\n onCreateOrderlyKey: () => Promise<void>;\n onOpenExplorer: () => void;\n onSwitchNetwork: () => void;\n wrongNetwork: boolean;\n disabledConnect?: boolean;\n isMobile: boolean;\n};\n\nexport const AccountMenu = (props: AccountMenuProps) => {\n const { t } = useTranslation();\n const {\n accountState: state,\n onDisconnect,\n onOpenExplorer,\n wrongNetwork,\n onSwitchNetwork,\n isMobile,\n } = props;\n const disabled = state.validating || props.disabledConnect;\n\n if (!disabled && wrongNetwork) {\n return (\n <Button\n data-testid=\"oui-testid-nav-bar-wrongNetwork-btn\"\n size=\"md\"\n color=\"warning\"\n onClick={onSwitchNetwork}\n >\n {t(\"connector.wrongNetwork\")}\n </Button>\n );\n }\n\n if (\n !disabled &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n ) {\n return (\n <WalletMenu\n address={state.address!}\n onDisconnect={onDisconnect}\n onOpenExplorer={onOpenExplorer}\n />\n );\n }\n\n if (state.status <= AccountStatusEnum.NotConnected || disabled) {\n return (\n <Button\n data-testid=\"oui-testid-nav-bar-connectWallet-btn\"\n size=\"md\"\n variant={disabled ? undefined : \"gradient\"}\n angle={45}\n className=\"wallet-connect-button\"\n loading={state.validating}\n disabled={disabled}\n onClick={() => {\n props\n .connect()\n .then((r) => {\n console.log(\"*****\", r);\n })\n .catch((e) => console.error(e));\n }}\n >\n {isMobile ? t(\"connector.connect\") : t(\"connector.connectWallet\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // content={\"Please connect wallet before starting to trade\"}\n // align={\"end\"}\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // >\n\n // </Tooltip>\n // );\n }\n\n if (state.status <= AccountStatusEnum.NotSignedIn) {\n return (\n <Button size=\"md\" onClick={() => props.onCrateAccount()}>\n {t(\"connector.createAccount\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // content={\"Please sign in before starting to trade\"}\n // align={\"end\"}\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // >\n\n // </Tooltip>\n // );\n }\n\n if (state.status <= AccountStatusEnum.DisabledTrading) {\n return (\n <Button\n size=\"md\"\n onClick={() => {\n props\n .onCreateOrderlyKey()\n .then((r) => console.log(r))\n .catch((e) => console.error(e));\n }}\n >\n {t(\"connector.enableTrading\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // content={\"Please enable trading before starting to trade\"}\n // align={\"end\"}\n // >\n\n // </Tooltip>\n // );\n }\n};\n\nexport type AccountState = {\n status: AccountStatusEnum;\n\n /**\n * whether the account is validating\n */\n validating: boolean;\n chainNamespace?: string;\n\n accountId?: string;\n userId?: string;\n address?: string;\n isNew?: boolean;\n\n connectWallet?: {\n name: string;\n chainId: number;\n };\n};\n\nconst WalletMenu = (props: {\n address: string;\n onDisconnect: () => void;\n onOpenExplorer: () => void;\n}) => {\n const { address, onDisconnect } = props;\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"md\"\n variant=\"gradient\"\n angle={45}\n data-testid=\"oui-testid-nav-bar-address-btn\"\n >\n <Text.formatted rule=\"address\" className=\"oui-text-[rgba(0,0,0,.88)]\">\n {address}\n </Text.formatted>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n size={\"xl\"}\n align={\"end\"}\n onCloseAutoFocus={(e) => e.preventDefault()}\n style={{ width: \"280px\" }}\n className={\"oui-py-5 oui-font-semibold\"}\n sideOffset={12}\n >\n <DropdownMenuGroup>\n <Flex px={4}>\n <Flex gap={2} className={\"oui-flex-1\"}>\n <EVMAvatar address={address} size={\"md\"} />\n <Text.formatted rule={\"address\"} size={\"base\"}>\n {address}\n </Text.formatted>\n </Flex>\n <Flex gap={2}>\n <button\n data-testid=\"oui-testid-nav-bar-dropDownMenuItem-copyAddress\"\n onClick={async () => {\n // copy\n await navigator.clipboard.writeText(address);\n }}\n >\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 className=\"oui-fill-[rgba(255,255,255,0.36)] hover:oui-fill-primary-darken\"\n >\n <path\n d=\"M5.249 2.243a3 3 0 0 0-3 3v4.5a3 3 0 0 0 3 3 3 3 0 0 0 3 3h4.5a3 3 0 0 0 3-3v-4.5a3 3 0 0 0-3-3 3 3 0 0 0-3-3zm7.5 4.5a1.5 1.5 0 0 1 1.5 1.5v4.5a1.5 1.5 0 0 1-1.5 1.5h-4.5a1.5 1.5 0 0 1-1.5-1.5h3a3 3 0 0 0 3-3z\"\n // fill=\"currentcolor\"\n // fillOpacity=\".36\"\n\n // className={''}\n />\n </svg>\n </button>\n <button onClick={() => props.onOpenExplorer()}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n className=\"oui-fill-[rgba(255,255,255,0.36)] hover:oui-fill-primary-darken\"\n >\n <path d=\"M12.7432 15.7432C14.3999 15.7432 15.7432 14.3999 15.7432 12.7432V5.24316C15.7432 3.58641 14.3999 2.24316 12.7432 2.24316H5.24316C3.58641 2.24316 2.24316 3.58641 2.24316 5.24316V12.7432C2.24316 14.3999 3.58641 15.7432 5.24316 15.7432H12.7432ZM6.74316 11.9932C6.55116 11.9932 6.35092 11.9287 6.20392 11.7824C5.91142 11.4892 5.91142 10.9972 6.20392 10.7039L9.20392 7.70392L7.49316 5.99316H11.9932V10.4932L10.2824 8.78241L7.28241 11.7824C7.13616 11.9287 6.93516 11.9932 6.74316 11.9932Z\" />\n </svg>\n </button>\n </Flex>\n </Flex>\n </DropdownMenuGroup>\n <Divider className={\"oui-mx-4 oui-my-3\"} intensity={8} />\n {/* <DropdownMenuGroup>\n <DropdownMenuItem size={\"xl\"}>\n <Flex gap={2}>\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 opacity=\".998\"\n d=\"M5.243 2.197a3 3 0 0 0-3 3v7.5a3 3 0 0 0 3 3h7.5a3 3 0 0 0 3-3v-7.5a3 3 0 0 0-3-3zm0 1.5h7.5a1.5 1.5 0 0 1 1.5 1.5v7.5a1.52 1.52 0 0 1-.754 1.298c-.144-1.771-2.046-2.798-4.496-2.798S4.603 12.251 4.486 14a1.52 1.52 0 0 1-.743-1.303v-7.5a1.5 1.5 0 0 1 1.5-1.5m3.75 1.5a2.625 2.625 0 1 0 0 5.25 2.625 2.625 0 0 0 0-5.25\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </svg>\n <span>Overview</span>\n </Flex>\n </DropdownMenuItem>\n <DropdownMenuItem size={\"xl\"}>\n <Flex gap={2}>\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=\"M5.693 1.499c-1.463 0-2.672 1.11-2.672 2.508v9.984c0 1.398 1.209 2.508 2.672 2.508h6.657c1.463 0 2.672-1.11 2.672-2.508V6.726c0-2.672-2.58-5.227-5.25-5.227zm4.829 1.594c1.329.352 2.562 1.58 2.906 2.906h-1.735c-.667 0-1.171-.472-1.171-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </svg>\n <span>Orders</span>\n </Flex>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <Divider className={\"oui-mx-4 oui-my-3\"} intensity={8} /> */}\n <DropdownMenuGroup>\n <DropdownMenuItem\n size={\"xl\"}\n onSelect={(event) => {\n event.preventDefault();\n onDisconnect();\n }}\n data-testid=\"oui-testid-nav-bar-dropDownMenuItem-disconnect\"\n >\n <Flex gap={2} className={\"oui-text-danger-light\"}>\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 fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.97 14.03a.75.75 0 0 1 0-1.06l.262-.263C2.594 12.354 1.5 11.108 1.5 9.06c0-2.447 1.563-3.75 3.75-3.75H6a.75.75 0 0 1 0 1.5h-.75C3.837 6.81 3 7.508 3 9.06s.837 2.25 2.25 2.25h.38l1.188-1.188a.75.75 0 0 1-.068-.312v-.75c0-1.162.381-2.19 1.172-2.883.645-.565 1.512-.867 2.578-.867h1.13l1.34-1.34a.75.75 0 0 1 1.061 1.06l-9 9a.75.75 0 0 1-1.06 0m6.14-7.2L8.27 8.668c.065-.583.281-1.056.635-1.367.289-.253.684-.419 1.205-.473M7.825 12.8l3.414-3.415c-.126 2.12-1.496 3.297-3.414 3.415m7.705-6.58a.75.75 0 0 0-1.06 1.06c.508.509.53 1.202.53 1.72 0 .739-.014 1.203-.53 1.72-.165.164-.455.307-.825.405a3.8 3.8 0 0 1-.895.125H12a.75.75 0 0 0 0 1.5h.75c.31 0 .787-.045 1.28-.175.48-.127 1.065-.36 1.5-.795.97-.97.97-1.991.97-2.75v-.06c0-.51.002-1.778-.97-2.75\"\n fill=\"currentcolor\"\n />\n </svg>\n <span>{t(\"connector.disconnect\")}</span>\n </Flex>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback } from \"react\";\nimport {\n useAccount,\n useChains,\n useWalletConnector,\n} 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 { modal, toast, useScreen, Text } 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 \"@kodiak-finance/orderly-ui-connector\";\n\nconst ModalTitle = () => {\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\nexport const useAccountMenu = (): any => {\n const { t } = useTranslation();\n const { disconnect, connectedChain } = useWalletConnector();\n const { account, state } = useAccount();\n const { connectWallet, disabledConnect, wrongNetwork, setCurrentChainId } =\n useAppContext();\n\n const [, { findByChainId }] = useChains();\n\n const { isMobile } = useScreen();\n\n const onCrateAccount = async () => {\n const modalId = isMobile ? WalletConnectorSheetId : WalletConnectorModalId;\n modal\n .show(modalId, {\n title: <ModalTitle />,\n })\n .then(\n (res) => console.log(\"return ::\", res),\n (err) => console.log(\"error:::\", err),\n );\n };\n\n const onCreateOrderlyKey = async () => {\n const modalId = isMobile ? WalletConnectorSheetId : WalletConnectorModalId;\n modal\n .show(modalId, {\n title: <ModalTitle />,\n })\n .then(\n (res) => console.log(\"return ::\", res),\n (err) => console.log(\"error:::\", err),\n );\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n statusChangeHandler({ status });\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n });\n\n modal.show<{ wrongNetwork: boolean }>(ChainSelectorDialogId).then(\n (r) => {\n if (!r.wrongNetwork) {\n if (state.status < AccountStatusEnum.EnableTrading) {\n statusChangeHandler(state);\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n }\n },\n (error) => {\n console.log(\"[switchChain error]\", error);\n },\n );\n };\n\n const connect = async () => {\n const res = await connectWallet();\n\n if (!res) {\n return;\n }\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n statusChangeHandler(res);\n }\n };\n\n const statusChangeHandler = (nextState: any) => {\n if (\n nextState.validating ||\n nextState.status <= AccountStatusEnum.Connected\n ) {\n return;\n }\n\n if (nextState.status < AccountStatusEnum.SignedIn) {\n onCrateAccount();\n }\n if (nextState.status < AccountStatusEnum.EnableTrading) {\n onCreateOrderlyKey();\n }\n };\n\n const onOpenExplorer = useCallback(() => {\n if (!connectedChain) {\n return;\n }\n const chainInfo = findByChainId(\n connectedChain!.id as number,\n \"network_infos\",\n );\n\n if (chainInfo) {\n // @ts-ignore\n const { explorer_base_url } = chainInfo;\n if (explorer_base_url) {\n if (explorer_base_url.endsWith(\"/\")) {\n window.open(`${explorer_base_url}address/${account.address}`);\n } else {\n window.open(`${explorer_base_url}/address/${account.address}`);\n }\n }\n }\n }, [state, connectedChain]);\n\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await disconnect({\n label: state.connectWallet?.name,\n });\n await account.disconnect();\n };\n\n const onSwitchNetwork = () => {\n const modalId = isMobile ? ChainSelectorSheetId : ChainSelectorDialogId;\n modal\n .show<{\n wrongNetwork: boolean;\n }>(modalId, {\n bridgeLessOnly: false,\n isWrongNetwork: wrongNetwork,\n })\n .then(\n (r: any) => {\n console.log(r?.chainId);\n if (r?.chainId) {\n setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n };\n\n return {\n address: state.address,\n accountState: state,\n connect,\n onCrateAccount,\n onCreateOrderlyKey,\n onOpenExplorer,\n onDisconnect,\n onSwitchNetwork,\n wrongNetwork,\n disabledConnect,\n isMobile,\n } as const;\n};\n\nexport type AccountMenuProps = ReturnType<typeof useAccountMenu>;\n","import {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AccountMenu, AccountMenuProps } from \"./menu.ui\";\nimport { useAccountMenu } from \"./useWidgetBuilder.script\";\nimport { FC } from \"react\";\n\nexport const AccountMenuWidget = () => {\n const state = useAccountMenu();\n return <AccountMenu {...state} />;\n};\n\ninstallExtension<AccountMenuProps>({\n name: \"account-menu\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.AccountMenu],\n builder: useAccountMenu,\n __isInternal: true,\n})((props: AccountMenuProps) => {\n return <AccountMenu {...props} />;\n});\n\nexport const WalletConnectButtonExtension = () => {\n return <ExtensionSlot position={ExtensionPositionEnum.AccountMenu} />;\n};\n","import { useEffect, useState } from \"react\";\nimport {\n useChains,\n useConfig,\n useAccount,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\n\nexport type UseChainMenuScriptReturn = ReturnType<typeof useChainMenuScript>;\n\nexport const useChainMenuScript = () => {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const { state } = useAccount();\n const { connectedChain } = useWalletConnector();\n const { currentChainId, wrongNetwork, disabledConnect, setCurrentChainId } =\n useAppContext();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const hide = () => {\n setOpen(false);\n };\n\n const onChainChangeBefore = () => {\n setLoading(true);\n hide();\n };\n\n const onChainChangeAfter = () => {\n setLoading(false);\n };\n\n return {\n isConnected: !!connectedChain,\n currentChainId,\n wrongNetwork,\n disabledConnect,\n accountStatus: state.status,\n networkId,\n open,\n onOpenChange: setOpen,\n hide,\n onChainChangeBefore,\n onChainChangeAfter,\n loading,\n setCurrentChainId,\n };\n};\n\nexport type UseChainMenuBuilderScript = ReturnType<typeof useChainMenuScript>;\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n ChainIcon,\n cn,\n Flex,\n modal,\n Tooltip,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ChainSelectorDialogId,\n ChainSelectorWidget,\n} from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { WalletConnectorModalId } from \"@kodiak-finance/orderly-ui-connector\";\nimport { UseChainMenuScriptReturn } from \"./chainMenu.script\";\n\nconst ModalTitle = () => {\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\nexport const ChainMenu = (props: UseChainMenuScriptReturn) => {\n const { t } = useTranslation();\n\n if (props.wrongNetwork && props.isConnected && !props.disabledConnect) {\n return (\n <Tooltip\n open\n hideWhenDetached\n content={t(\"connector.wrongNetwork.tooltip\")}\n className=\"oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n >\n <Button\n color=\"warning\"\n size=\"md\"\n onClick={() => {\n modal\n .show<{ wrongNetwork: boolean }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n })\n .then(\n (r) => {\n if (\n !r.wrongNetwork &&\n props.accountStatus < AccountStatusEnum.EnableTrading\n ) {\n modal\n .show(WalletConnectorModalId, {\n title: <ModalTitle />,\n })\n .then(\n (r) => console.log(r),\n (error) => console.log(error),\n );\n }\n },\n (error) => console.log(error),\n );\n }}\n >\n {t(\"connector.wrongNetwork\")}\n </Button>\n </Tooltip>\n );\n }\n\n const renderIcon = () => {\n if (props.loading) {\n return <Spinner className=\"oui-w-[18px] oui-h-[18px]\" />;\n }\n\n if (props.currentChainId) {\n return <ChainIcon chainId={props.currentChainId} size=\"xs\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n justify=\"center\"\n className={cn(\n \"oui-relative oui-cursor-pointer\",\n \"oui-w-11 oui-h-8\",\n \"oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px]\",\n )}\n >\n {renderIcon()}\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-absolute oui-right-0 oui-bottom-0\"\n >\n <defs>\n <linearGradient\n id=\"paint0_linear_490_5080\"\n x1=\"10\"\n y1=\"5\"\n x2=\"-5.79673e-08\"\n y2=\"5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n d=\"M10 7V0L0 10H7C8.65685 10 10 8.65685 10 7Z\"\n fill=\"url(#paint0_linear_490_5080)\"\n />\n </svg>\n </Flex>\n );\n\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n sideOffset={4}\n collisionPadding={{ right: 16 }}\n className={cn(\n \"oui-bg-base-8 oui-w-[456px] oui-p-4 oui-rounded-xl\",\n \"oui-border oui-border-line-6\",\n \"oui-font-semibold\",\n )}\n >\n <ChainSelectorWidget\n close={props.hide}\n onChainChangeBefore={props.onChainChangeBefore}\n onChainChangeAfter={props.onChainChangeAfter}\n />\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, ChainIcon, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorSheetId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { UseChainMenuScriptReturn } from \"./chainMenu.script\";\n\nexport const ChainMenuUiMobile = (props: UseChainMenuScriptReturn) => {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={(e) => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorSheetId, {\n // networkId: props.networkId,\n bridgeLessOnly: false,\n isWrongNetwork: props.wrongNetwork,\n })\n .then(\n (r: any) => {\n console.log(r?.chainId, props);\n if (r?.chainId) {\n props.setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n }}\n >\n <Box className=\"oui-relative oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px] oui-bg-base-5 oui-px-2 oui-h-8 oui-w-8 oui-flex oui-items-center oui-justify-center\">\n <ChainIcon\n chainId={props.currentChainId!}\n size=\"xs\"\n className=\"oui-h-[18px] oui-w-[18px]\"\n />\n <div className=\"oui-absolute oui-right-0 oui-bottom-0\">\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 6V0L0 9h6a3 3 0 0 0 3-3\" fill=\"url(#a)\" />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"9\"\n y1=\"4.5\"\n x2=\"0\"\n y2=\"4.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop\n offset=\"1\"\n stopColor=\"rgb(var(--oui-gradient-brand-start))\"\n />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </Box>\n </button>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useChainMenuScript } from \"./chainMenu.script\";\nimport { ChainMenu } from \"./chainMenu.ui\";\nimport { ChainMenuUiMobile } from \"./chainMenu.ui.mobile\";\n\nexport const ChainMenuWidget = () => {\n const state = useChainMenuScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <ChainMenuUiMobile {...state} />;\n }\n return <ChainMenu {...state} />;\n};\n","export { ChainMenuWidget } from \"./chainMenu.widget\";\nexport { ChainMenu } from \"./chainMenu.ui\";\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n i18n,\n LocaleContextState,\n useLocaleContext,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\n\nexport type LanguageSwitcherScriptReturn = ReturnType<\n typeof useLanguageSwitcherScript\n>;\n\nexport type LanguageSwitcherScriptOptions = Pick<\n LocaleContextState,\n \"popup\"\n> & { open?: boolean; onOpenChange?: (open: boolean) => void };\n\nexport const useLanguageSwitcherScript = (\n options?: LanguageSwitcherScriptOptions,\n) => {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [selectedLang, setSelectedLang] = useState(i18n.language);\n const { languages, onLanguageBeforeChanged, onLanguageChanged, popup } =\n useLocaleContext();\n\n const { track, setIdentify } = useTrack();\n\n const { isMobile } = useScreen();\n\n const onOpenChange = useCallback(\n (open: boolean) => {\n if (typeof options?.onOpenChange === \"function\") {\n options.onOpenChange(open);\n } else {\n setOpen(open);\n }\n },\n [options?.onOpenChange, setOpen],\n );\n\n const onLangChange = async (lang: string, displayName: string) => {\n setLoading(true);\n setSelectedLang(lang);\n await onLanguageBeforeChanged(lang);\n await i18n.changeLanguage(lang);\n await onLanguageChanged(lang);\n onOpenChange(false);\n setLoading(false);\n track(TrackerEventName.switchLanguage, {\n language: displayName,\n language_code: lang,\n });\n\n setIdentify({\n language_code: lang,\n });\n };\n\n const _popup = useMemo(\n () => ({\n ...popup,\n ...options?.popup,\n mode:\n options?.popup?.mode || popup?.mode || (isMobile ? \"sheet\" : \"modal\"),\n }),\n [popup, options?.popup, isMobile],\n );\n\n const _open = useMemo(() => {\n if (typeof options?.open === \"boolean\") {\n return options.open;\n }\n return open;\n }, [options?.open, open]);\n\n return {\n open: _open,\n onOpenChange,\n languages,\n selectedLang,\n onLangChange,\n loading,\n popup: _popup,\n };\n};\n","import { FC, SVGProps, forwardRef } from \"react\";\nimport { useTranslation, Language } from \"@kodiak-finance/orderly-i18n\";\nimport {\n cn,\n Flex,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Text,\n Box,\n Spinner,\n SimpleDialog,\n useScreen,\n SimpleSheet,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LanguageSwitcherScriptReturn } from \"./languageSwitcher.script\";\n\nexport type LanguageSwitcherProps = LanguageSwitcherScriptReturn;\n\nexport const LanguageSwitcher: FC<LanguageSwitcherProps> = (props) => {\n const { languages, popup } = props;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n if (languages.length <= 1) {\n return null;\n }\n\n const trigger = (\n <Tooltip content={t(\"languageSwitcher.tooltip\")}>\n <LanguageIcon\n className={cn(\n \"oui-size-6 lg:oui-size-5\",\n \"oui-cursor-pointer oui-text-base-contrast-80\",\n \"oui-transition-colors hover:oui-fill-base-contrast\",\n isMobile && \"oui-size-[18px]\",\n )}\n id=\"language-switcher-icon\"\n onClick={() => props.onOpenChange(true)}\n />\n </Tooltip>\n );\n\n const header = (\n <Text weight=\"semibold\">{t(\"languageSwitcher.language\")}</Text>\n );\n\n const languageList = languages.map((item) => {\n const selected = props.selectedLang === item.localCode;\n return (\n <LanguageItem\n className={cn(\n [\"modal\", \"sheet\"].includes(popup.mode ?? \"\") &&\n \"oui-w-[calc((100%_-_4px)/2)] lg:oui-w-[calc((100%_-_8px)/3)]\",\n )}\n key={item.localCode}\n selected={selected}\n item={item}\n onClick={() => props.onLangChange(item.localCode, item.displayName)}\n loading={props.loading}\n />\n );\n });\n\n const context = (\n <Flex gap={1} className=\"oui-flex-wrap\">\n {languageList}\n </Flex>\n );\n\n const footer = (\n <Box mt={4}>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-warning-darken\"\n >\n {t(\"languageSwitcher.tips\")}\n </Text>\n </Box>\n );\n\n if (popup?.mode === \"sheet\" && isMobile) {\n return (\n <>\n {trigger}\n <SimpleSheet\n open={props.open}\n onOpenChange={props.onOpenChange}\n classNames={{\n content: cn(\"oui-px-5 oui-pb-5\", popup?.className),\n body: \"oui-pb-[env(safe-area-inset-bottom)]\",\n }}\n contentProps={{\n style: popup?.style,\n }}\n title={header}\n >\n {context}\n {footer}\n </SimpleSheet>\n </>\n );\n }\n\n if (popup?.mode === \"dropdown\") {\n const context = (\n <Box\n mt={4}\n className={cn(\n //40 * 8 + 4 * 7 = 348px, more than 8 will show scrollbars\n \"oui-custom-scrollbar oui-max-h-[348px] oui-overflow-y-auto\",\n \"oui-grid oui-gap-1 oui-pr-[6px]\",\n )}\n >\n {languageList}\n </Box>\n );\n\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n sideOffset={10}\n align=\"start\"\n collisionPadding={{ right: 16 }}\n className={cn(\n \"oui-w-[320px] lg:oui-w-[360px]\",\n \"oui-rounded-xl oui-bg-base-8 oui-p-5\",\n \"oui-border oui-border-line-6\",\n \"oui-font-semibold\",\n )}\n >\n {header}\n {context}\n {footer}\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n }\n\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size={isMobile ? \"sm\" : \"xl\"}\n classNames={{\n content: popup?.className,\n }}\n contentProps={{\n style: popup?.style,\n }}\n >\n {context}\n {footer}\n </SimpleDialog>\n </>\n );\n};\n\ntype LanguageItemProps = {\n selected: boolean;\n item: Language;\n onClick?: () => void;\n loading?: boolean;\n className?: string;\n};\n\nconst LanguageItem: FC<LanguageItemProps> = (props) => {\n const { item } = props;\n\n const renderTrailing = () => {\n if (props.loading && props.selected) {\n return <Spinner size=\"sm\" />;\n }\n if (props.selected) {\n return <Box gradient=\"brand\" r=\"full\" width={4} height={4} />;\n }\n return null;\n };\n\n return (\n <button\n className={cn(\n \"oui-group oui-rounded-md hover:oui-bg-base-5\",\n props.selected && \"oui-bg-base-5\",\n props.className,\n )}\n onClick={props.onClick}\n >\n <Flex justify=\"between\" className=\"oui-h-10\" px={3}>\n <Flex itemAlign=\"center\" width=\"100%\" className=\"oui-gap-x-[6px]\">\n <Text\n size=\"2xs\"\n className={cn(\n \"oui-text-base-contrast-36 group-hover:oui-text-base-contrast-80\",\n props.selected && \"oui-text-base-contrast-80\",\n )}\n >\n {item.displayName}\n </Text>\n </Flex>\n {renderTrailing()}\n </Flex>\n </button>\n );\n};\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nconst LanguageIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M10 1.678a8.333 8.333 0 1 0 0 16.667 8.333 8.333 0 1 0 0-16.667m0 1.667c1.1 0 2.308 2.527 2.492 5.831l-4.975.01c.183-3.304 1.382-5.84 2.482-5.84m-2.943.67c-.717 1.393-1.1 3.242-1.193 5.165L3.38 9.174c.248-2.271 1.778-4.176 3.676-5.159m5.889.003c1.898.983 3.388 2.835 3.676 5.168l-2.483-.008c-.078-2-.52-3.758-1.193-5.16m-9.56 6.83 2.483-.02c.092 1.923.478 3.803 1.191 5.182a6.79 6.79 0 0 1-3.674-5.162m4.118.007 4.975-.01c-.184 3.303-1.38 5.833-2.48 5.833s-2.312-2.519-2.495-5.823m6.64-.008 2.471-.008c-.287 2.208-1.68 4.18-3.672 5.162.74-1.53 1.108-3.23 1.2-5.154\" />\n </svg>\n );\n});\n","import {\n LanguageSwitcherScriptOptions,\n useLanguageSwitcherScript,\n} from \"./languageSwitcher.script\";\nimport { LanguageSwitcher } from \"./languageSwitcher.ui\";\n\nexport type LanguageSwitcherWidgetProps = LanguageSwitcherScriptOptions;\n\nexport const LanguageSwitcherWidget = (props: LanguageSwitcherWidgetProps) => {\n const state = useLanguageSwitcherScript(props);\n return <LanguageSwitcher {...state} />;\n};\n","export {\n LanguageSwitcherWidget,\n type LanguageSwitcherWidgetProps,\n} from \"./widget\";\nexport {\n useLanguageSwitcherScript,\n type LanguageSwitcherScriptReturn,\n} from \"./languageSwitcher.script\";\nexport {\n LanguageSwitcher,\n type LanguageSwitcherProps,\n} from \"./languageSwitcher.ui\";\n","import { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\nimport React from \"react\";\n\nexport const CommuntiyTelegramIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M4.108 9.464S9.645 7.13 11.565 6.31c.736-.328 3.233-1.38 3.233-1.38s1.152-.46 1.056.658c-.032.46-.288 2.069-.544 3.81-.384 2.463-.8 5.157-.8 5.157s-.064.755-.608.887c-.544.13-1.44-.46-1.6-.592-.129-.098-2.401-1.576-3.233-2.299-.224-.197-.48-.591.032-1.051a124 124 0 0 0 3.36-3.285c.384-.394.768-1.313-.832-.197-2.272 1.61-4.513 3.12-4.513 3.12s-.512.33-1.472.034-2.08-.69-2.08-.69-.768-.493.544-1.018\" />\n </svg>\n );\n});\nexport const CommuntiyDiscordIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n {...rest}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M14.956 5.522c1.604 2.374 2.396 5.053 2.1 8.136a.05.05 0 0 1-.02.033 11.7 11.7 0 0 1-3.55 1.805.045.045 0 0 1-.05-.017 9.6 9.6 0 0 1-.725-1.188.046.046 0 0 1 .024-.063 7 7 0 0 0 1.108-.531.046.046 0 0 0 .004-.076 6 6 0 0 1-.22-.174.04.04 0 0 0-.047-.006c-2.296 1.068-4.812 1.068-7.136 0a.04.04 0 0 0-.046.006 6 6 0 0 1-.22.174.046.046 0 0 0 .005.076c.353.204.721.384 1.107.531.025.01.037.039.025.063a8.5 8.5 0 0 1-.725 1.188.05.05 0 0 1-.05.017 11.7 11.7 0 0 1-3.546-1.805.05.05 0 0 1-.018-.033c-.248-2.667.257-5.368 2.097-8.137a.04.04 0 0 1 .02-.016 11.6 11.6 0 0 1 2.89-.903.05.05 0 0 1 .046.022c.125.224.269.51.366.744a10.7 10.7 0 0 1 3.246 0 8 8 0 0 1 .36-.744.044.044 0 0 1 .046-.022 11.7 11.7 0 0 1 2.89.903q.012.005.019.017m-6.018 5.07c.011-.788-.56-1.44-1.276-1.44-.71 0-1.276.647-1.276 1.44 0 .795.576 1.442 1.276 1.442.71 0 1.276-.647 1.276-1.441m4.718 0c.011-.788-.56-1.44-1.276-1.44-.71 0-1.276.647-1.276 1.44 0 .795.577 1.442 1.276 1.442.717 0 1.276-.647 1.276-1.441\" />\n </svg>\n );\n});\nexport const CommuntiyXIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"m4.42 4.73 4.633 6.194-4.662 5.037H5.44l4.082-4.41 3.298 4.41h3.57l-4.893-6.543 4.34-4.689h-1.05l-3.759 4.062-3.037-4.062zm1.543.772h1.64l7.244 9.686h-1.64z\" />\n </svg>\n );\n});\n\nCommuntiyXIcon.displayName = \"CommuntiyXIcon\";\nCommuntiyTelegramIcon.displayName = \"CommuntiyTelegramIcon\";\nCommuntiyDiscordIcon.displayName = \"CommuntiyDiscordIcon\";\n","import React from \"react\";\nimport { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\n\nexport const OrderlyTextIcon = React.forwardRef<SVGSVGElement, BaseIconProps>(\n (props, ref) => {\n const { opacity = 1, ...rest } = props;\n return (\n <svg\n ref={ref}\n width=\"45\"\n height=\"14\"\n viewBox=\"0 0 45 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.352 2.558a.063.063 0 0 1-.04.112H2.419a.063.063 0 0 1-.04-.112A4.73 4.73 0 0 1 5.365 1.5c1.132 0 2.171.396 2.987 1.058M3.518 7.546a.18.18 0 0 0-.148-.08H.886a.085.085 0 0 0-.083.11 4.75 4.75 0 0 0 4.562 3.429 4.75 4.75 0 0 0 4.562-3.43.085.085 0 0 0-.082-.108H7.36a.18.18 0 0 0-.148.079 2.252 2.252 0 0 1-3.694 0m3.518-2.812a.18.18 0 0 0 .134.061h2.598c.06 0 .101-.057.082-.113a4.8 4.8 0 0 0-.801-1.432.17.17 0 0 0-.132-.062H1.814a.17.17 0 0 0-.132.062A4.8 4.8 0 0 0 .88 4.682a.085.085 0 0 0 .081.113h2.6c.05 0 .099-.023.133-.06a2.25 2.25 0 0 1 1.67-.742c.663 0 1.258.286 1.67.741M7.6 6.95a.067.067 0 0 1-.063-.086 2.26 2.26 0 0 0-.079-1.45.067.067 0 0 1 .061-.093h2.45c.03 0 .058.022.063.052a4.8 4.8 0 0 1 .04 1.52.064.064 0 0 1-.065.057zm-4.407-.086a.067.067 0 0 1-.063.086H.723a.064.064 0 0 1-.064-.056 4.8 4.8 0 0 1 .039-1.52.065.065 0 0 1 .063-.053h2.45c.047 0 .079.049.061.093a2.25 2.25 0 0 0-.079 1.45\"\n fill=\"#fff\"\n fillOpacity={opacity}\n />\n <path\n d=\"M11.272 4.438h1.685v1.61l-.275-.312q.237-.511.662-.874.425-.361.949-.487.524-.124 1.073.038v1.585q-.661-.224-1.223-.125-.55.1-.874.475-.312.375-.312.923v3.608h-1.685zm4.148 3.22q0-.923.4-1.697.41-.774 1.123-1.211a2.95 2.95 0 0 1 1.573-.437 2.7 2.7 0 0 1 1.523.437 2.8 2.8 0 0 1 1.01 1.198q.363.762.363 1.71 0 .95-.362 1.71-.35.762-1.011 1.199a2.7 2.7 0 0 1-1.523.437 2.95 2.95 0 0 1-1.573-.437 3.1 3.1 0 0 1-1.124-1.198 3.7 3.7 0 0 1-.4-1.71m1.748 0q0 .5.224.924.225.412.612.65.387.236.861.236.475 0 .862-.237.386-.237.611-.649.225-.424.225-.924 0-.498-.225-.91-.225-.425-.611-.65a1.6 1.6 0 0 0-.862-.237q-.474 0-.861.237a1.6 1.6 0 0 0-.612.65q-.224.412-.224.91m3.395-6.016h1.685v9.237h-1.685zm4.192 5.329h3.97l-.387.537a2 2 0 0 0-.25-.9 1.63 1.63 0 0 0-.612-.623 1.64 1.64 0 0 0-.861-.225q-.487 0-.886.25a1.6 1.6 0 0 0-.625.686 2.1 2.1 0 0 0-.224.961q0 .537.224.974.239.436.662.687.425.25.961.25.525 0 .937-.238.423-.25.661-.674l1.386.624q-.45.787-1.236 1.26-.786.463-1.798.463-.96 0-1.747-.437a3.3 3.3 0 0 1-1.248-1.198 3.34 3.34 0 0 1-.45-1.71q0-.924.437-1.686.45-.775 1.223-1.21.774-.45 1.723-.45 1.061 0 1.885.537.825.536 1.21 1.448.4.898.226 1.96h-5.181zm6.221-2.534h1.685v1.61l-.274-.312q.237-.511.661-.874.425-.361.949-.487.525-.124 1.073.038v1.585q-.661-.224-1.223-.125-.549.1-.874.475-.312.375-.312.923v3.608h-1.685zm4.885-2.796h1.686v9.237H35.86zm4.359 9.324q.224.487.587.737.362.262.836.262.711 0 1.186-.5.487-.486.487-1.26V9.08l.262.35a2.43 2.43 0 0 1-.911 1.011q-.6.362-1.373.362-.8 0-1.386-.337a2.3 2.3 0 0 1-.886-.936q-.312-.6-.312-1.386V4.438h1.685v3.408q0 .436.162.761.162.312.462.5.312.174.761.174.45 0 .8-.175a1.3 1.3 0 0 0 .549-.511q.187-.338.187-.75V4.439H45v5.767q0 .936-.45 1.685a3.07 3.07 0 0 1-1.21 1.186 3.4 3.4 0 0 1-1.698.424q-.973 0-1.735-.474a3.3 3.3 0 0 1-1.186-1.26z\"\n fill=\"#fff\"\n fillOpacity={opacity}\n />\n </svg>\n );\n }\n);\n","import { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\nimport React from \"react\";\n// import { BaseIcon, BaseIconProps } from \"./baseIcon\";\n\nexport const SignalIcon = React.forwardRef<SVGSVGElement, BaseIconProps>(\n (props, ref) => {\n const { size = 18, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n ref={ref}\n className=\"oui-fill-success-light\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M9.02092 2.92969C6.18562 2.92969 3.51037 4.13854 1.68502 6.18754C1.40947 6.49676 1.446 6.96671 1.75537 7.24218C2.0646 7.51743 2.53447 7.48143 2.81002 7.17183C4.35112 5.44196 6.6141 4.42969 9.02092 4.42969C11.4205 4.42969 13.6369 5.43123 15.185 7.17183C15.4603 7.48143 15.9301 7.51743 16.2397 7.24218C16.5492 6.96694 16.5853 6.49699 16.31 6.18754C14.4787 4.12856 11.8512 2.92969 9.02092 2.92969ZM9.02092 5.92969C7.04092 5.92969 5.20867 6.78461 3.93502 8.25019C3.6633 8.56294 3.6927 9.03318 4.00537 9.30468C4.31797 9.57618 4.7883 9.54693 5.06002 9.23418C6.05175 8.09343 7.47982 7.42968 9.02092 7.42968C10.5348 7.42968 11.9446 8.08144 12.935 9.18769C13.2113 9.49593 13.681 9.51093 13.9897 9.23418C14.2983 8.95818 14.3364 8.48793 14.06 8.17968C12.7879 6.75896 10.9659 5.92969 9.02092 5.92969ZM9.02092 8.92968C7.91917 8.92968 6.89242 9.40218 6.18502 10.2189C5.91375 10.5317 5.94225 11.0019 6.25537 11.2734C6.56835 11.5449 7.03875 11.5164 7.31002 11.2029C7.73542 10.7124 8.3589 10.4297 9.02092 10.4297C9.6684 10.4297 10.2604 10.7072 10.685 11.1797C10.962 11.4879 11.4552 11.5037 11.7631 11.2262C12.0712 10.9494 12.087 10.4799 11.81 10.1717C11.1037 9.38643 10.0983 8.92968 9.02092 8.92968ZM8.99752 11.9297C8.81609 11.9297 8.64374 12.0047 8.50537 12.1404C8.50537 12.1404 7.3935 13.2362 6.95842 13.6637C6.52342 14.0919 6.7968 14.9319 7.49752 14.9297H9.63037H10.4975C11.1864 14.9319 11.477 14.0739 11.0366 13.6404C10.5961 13.2069 9.51322 12.1404 9.51314 12.1404C9.37469 12.0047 9.17894 11.9297 8.99752 11.9297Z\" />\n </svg>\n );\n }\n);\n\nSignalIcon.displayName = \"SignalIcon\";\n","import React, { FC } from \"react\";\nimport { SVGProps } from \"react\";\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\n\nexport const InfoIcon: FC<IconProps> = (props) => {\n const { size = 20, viewBox, ...rest } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={`${size}px`}\n height={`${size}px`}\n fill=\"none\"\n viewBox={`0 0 20 20`}\n {...rest}\n >\n <path\n d=\"M10.012 1.66602C5.40954 1.66602 1.67871 5.39685 1.67871 9.99935C1.67871 14.6018 5.40954 18.3327 10.012 18.3327C14.6145 18.3327 18.3454 14.6018 18.3454 9.99935C18.3454 5.39685 14.6145 1.66602 10.012 1.66602ZM10.012 5.83268C10.472 5.83268 10.8454 6.20602 10.8454 6.66602V10.8327C10.8454 11.2927 10.472 11.666 10.012 11.666C9.55204 11.666 9.17871 11.2927 9.17871 10.8327V6.66602C9.17871 6.20602 9.55204 5.83268 10.012 5.83268ZM10.012 12.4993C10.472 12.4993 10.8454 12.8727 10.8454 13.3327C10.8454 13.7927 10.472 14.166 10.012 14.166C9.55204 14.166 9.17871 13.7927 9.17871 13.3327C9.17871 12.8727 9.55204 12.4993 10.012 12.4993Z\"\n fill=\"#FF7D00\"\n />\n </svg>\n );\n};\n","import React from \"react\";\nimport { SVGProps } from \"react\";\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\n\nexport const CloseIcon: React.FC<IconProps> = (props) => {\n const { size = 16, ...rest } = props;\n return (\n <svg\n width={`${size}px`}\n height={`${size}px`}\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path\n d=\"M3.32972 2.60449C3.15912 2.60449 2.98072 2.66183 2.85052 2.79183C2.59019 3.0525 2.59019 3.48982 2.85052 3.75049L7.03806 7.93782L2.85052 12.1252C2.59019 12.3858 2.59019 12.8232 2.85052 13.0838C3.11092 13.3438 3.54852 13.3438 3.80892 13.0838L7.99639 8.89649L12.1839 13.0838C12.4443 13.3438 12.8819 13.3438 13.1423 13.0838C13.4026 12.8232 13.4026 12.3858 13.1423 12.1252L8.95472 7.93782L13.1423 3.75049C13.4026 3.48982 13.4026 3.0525 13.1423 2.79183C13.0121 2.66183 12.8336 2.60449 12.6631 2.60449C12.4925 2.60449 12.3141 2.66183 12.1839 2.79183L7.99639 6.97916L3.80892 2.79183C3.67872 2.66183 3.50032 2.60449 3.32972 2.60449Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { SVGProps } from \"react\";\n\nexport const OrderlyLogo: FC<SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"200\"\n height=\"24\"\n viewBox=\"0 0 200 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M22.2637 18.5152H26.1444V13.3629C26.1444 10.2669 27.9664 9.39239 29.6701 9.39239C29.9777 9.39239 30.2617 9.41602 30.6639 9.46329V6.20176C30.2853 6.10722 29.9777 6.08359 29.7174 6.08359C27.8481 6.08359 26.6886 7.3362 26.2153 9.27421H26.1444V6.22539H22.2637V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M37.3191 18.7516C39.1411 18.7516 40.3952 17.7826 40.7265 16.8608V18.5152H44.6072V1.97122H40.7265V7.87979C40.3952 6.95806 39.1411 5.98905 37.3191 5.98905C34.8108 5.98905 31.9713 7.83252 31.9713 12.3703C31.9713 16.9317 34.8108 18.7516 37.3191 18.7516ZM35.6153 12.3703C35.6153 10.196 36.9168 9.20331 38.2892 9.20331C39.638 9.20331 40.8921 10.196 40.8921 12.3703C40.8921 14.5447 39.638 15.5373 38.2892 15.5373C36.9168 15.5373 35.6153 14.5447 35.6153 12.3703Z\"\n fill=\"white\"\n />\n <path\n d=\"M53.418 18.7516C56.4468 18.7516 58.6475 17.1917 59.2154 14.3556H55.8079C55.595 15.1592 55.0744 15.8209 53.489 15.8209C51.9746 15.8209 51.0281 15.1355 50.8151 13.3393H59.31C59.3573 13.0557 59.381 12.8194 59.381 12.3703C59.381 7.57255 56.5888 5.98905 53.418 5.98905C50.1289 5.98905 47.1474 7.73799 47.1474 12.323C47.1474 17.0972 50.3655 18.7516 53.418 18.7516ZM50.8388 11.0941C51.0754 9.676 51.8799 8.9197 53.3234 8.9197C55.0981 8.9197 55.6423 10.0305 55.7133 11.0941H50.8388Z\"\n fill=\"white\"\n />\n <path\n d=\"M61.8978 18.5152H65.7784V13.3629C65.7784 10.2669 67.6005 9.39239 69.3042 9.39239C69.6118 9.39239 69.8957 9.41602 70.298 9.46329V6.20176C69.9194 6.10722 69.6118 6.08359 69.3515 6.08359C67.4821 6.08359 66.3227 7.3362 65.8494 9.27421H65.7784V6.22539H61.8978V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M72.5672 18.5152H76.4479V1.97122H72.5672V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M79.8261 20.0278V23.2893C83.6358 23.6911 85.2212 22.4149 86.8776 18.3734L91.8468 6.22539H87.8714L85.1739 13.5757L82.5473 6.22539H78.5957L83.0679 17.2626C83.3755 17.9953 83.3992 18.3734 83.1389 18.9643C82.9259 19.437 82.3817 20.3587 79.8261 20.0278Z\"\n fill=\"white\"\n />\n <path\n d=\"M100.278 18.5152H104.229V8.63609H104.324L110.287 18.5152H114.546V1.97122H110.571V12.1103H110.476L104.371 1.97122H100.278V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M123.327 18.7516C126.356 18.7516 128.557 17.1917 129.125 14.3556H125.717C125.504 15.1592 124.984 15.8209 123.398 15.8209C121.884 15.8209 120.937 15.1355 120.724 13.3393H129.219C129.267 13.0557 129.29 12.8194 129.29 12.3703C129.29 7.57255 126.498 5.98905 123.327 5.98905C120.038 5.98905 117.057 7.73799 117.057 12.323C117.057 17.0972 120.275 18.7516 123.327 18.7516ZM120.748 11.0941C120.985 9.676 121.789 8.9197 123.233 8.9197C125.007 8.9197 125.552 10.0305 125.623 11.0941H120.748Z\"\n fill=\"white\"\n />\n <path\n d=\"M137.439 18.6807C138.172 18.6807 138.882 18.5861 139.474 18.4207V15.5609C138.93 15.6082 138.717 15.6082 138.456 15.6082C137.202 15.6082 136.966 14.9228 136.966 14.072V9.22695H139.379V6.22539H136.966V3.01113H133.085V6.22539H130.979V9.22695H133.085V14.6156C133.085 17.4753 134.789 18.6807 137.439 18.6807Z\"\n fill=\"white\"\n />\n <path\n d=\"M144.456 18.5152H148.833L150.797 11.3777L152.761 18.5152H157.115L160.333 6.22539H156.666L154.749 14.781H154.654L152.454 6.22539H149.117L146.917 14.781H146.822L144.905 6.22539H141.261L144.456 18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M167.796 18.7516C170.896 18.7516 174.043 16.8845 174.043 12.3703C174.043 7.85616 170.896 5.98905 167.796 5.98905C164.673 5.98905 161.549 7.85616 161.549 12.3703C161.549 16.8845 164.673 18.7516 167.796 18.7516ZM165.169 12.3703C165.169 10.196 166.282 9.20331 167.796 9.20331C169.287 9.20331 170.399 10.196 170.399 12.3703C170.399 14.5447 169.287 15.5373 167.796 15.5373C166.282 15.5373 165.169 14.5447 165.169 12.3703Z\"\n fill=\"white\"\n />\n <path\n d=\"M176.554 18.5152H180.434V13.3629C180.434 10.2669 182.256 9.39239 183.96 9.39239C184.268 9.39239 184.552 9.41602 184.954 9.46329V6.20176C184.575 6.10722 184.268 6.08359 184.007 6.08359C182.138 6.08359 180.979 7.3362 180.505 9.27421H180.434V6.22539H176.554V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M187.223 18.5152H191.104V14.9701L192.074 13.9302L195.742 18.5152H200.001L194.44 11.4249L199.362 6.22539H195.126L191.104 10.8104V1.97122H187.223V18.5152Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.66235 0.640167L9.70838 0.640167C12.1367 0.64581 14.355 1.54403 16.052 3.02375C16.1722 3.1286 16.0961 3.32102 15.9365 3.32102L3.43427 3.32102C3.27465 3.32102 3.1985 3.1286 3.31874 3.02375C5.01571 1.54403 7.23406 0.645809 9.66235 0.640167Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.9175 12.9472C5.84821 12.8485 5.73663 12.7865 5.61594 12.7865L0.606422 12.7865C0.461299 12.7865 0.355489 12.924 0.39667 13.063C1.58273 17.0661 5.29234 19.9869 9.68495 19.9869C14.0776 19.9869 17.7872 17.0661 18.9732 13.063C19.0144 12.924 18.9086 12.7865 18.7635 12.7865L13.754 12.7865C13.6333 12.7865 13.5218 12.8485 13.4525 12.9472C12.6208 14.1317 11.2434 14.9061 9.68499 14.9061C8.12654 14.9061 6.74917 14.1317 5.9175 12.9472Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.3322 7.51577C13.4208 7.63078 13.5556 7.7029 13.7009 7.7029L18.7216 7.7029C18.868 7.7029 18.9741 7.56325 18.9304 7.42361C18.551 6.2113 17.9392 5.10154 17.147 4.14637C17.0811 4.06686 16.9826 4.02197 16.8792 4.02197L2.4903 4.02197C2.38694 4.02197 2.28845 4.06686 2.22251 4.14637C1.43037 5.10153 0.818541 6.2113 0.439134 7.42361C0.395431 7.56325 0.501494 7.7029 0.647976 7.7029L5.66868 7.7029C5.81394 7.7029 5.9488 7.63078 6.03735 7.51577C6.87801 6.42387 8.19911 5.72017 9.68478 5.72017C11.1704 5.72017 12.4916 6.42387 13.3322 7.51577Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.1283 12.0868C14.0334 12.0868 13.969 11.9902 14.0018 11.9013C14.184 11.4069 14.2835 10.8724 14.2835 10.3148C14.2835 9.70687 14.1652 9.12653 13.9505 8.59547C13.9142 8.50592 13.9788 8.40582 14.0755 8.40582L19.0003 8.40582C19.1057 8.40582 19.1968 8.48012 19.2156 8.58377C19.3172 9.14546 19.3702 9.72401 19.3702 10.3149C19.3702 10.8567 19.3256 11.3881 19.2399 11.9057C19.2225 12.0108 19.1307 12.0868 19.0241 12.0868L14.1283 12.0868ZM5.36846 11.9013C5.40122 11.9902 5.33678 12.0868 5.24195 12.0868L0.346163 12.0868C0.239492 12.0868 0.147732 12.0108 0.130321 11.9057C0.0445957 11.3881 0 10.8567 0 10.3149C0 9.72401 0.0530502 9.14546 0.154653 8.58377C0.173403 8.48011 0.264481 8.40582 0.369941 8.40582L5.29476 8.40582C5.39146 8.40582 5.45599 8.50592 5.41977 8.59547C5.20498 9.12653 5.08673 9.70687 5.08673 10.3148C5.08673 10.8724 5.18623 11.4069 5.36846 11.9013Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n","export {\n CommuntiyXIcon,\n CommuntiyTelegramIcon,\n CommuntiyDiscordIcon,\n} from \"./communtiyIcons\";\nexport { OrderlyTextIcon } from \"./orderlyNetworkTextIcon\";\nexport { SignalIcon } from \"./signal\";\nexport { InfoIcon } from \"./infoIcon\";\nexport { CloseIcon } from \"./closeIcon\";\nexport { OrderlyLogo } from \"./orderlyLogo\";\n","import { FC } from \"react\";\nimport { useAppConfig } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderlyLogo } from \"../icons\";\nimport { Logo } from \"@kodiak-finance/orderly-ui\";\n\ntype MainLogoProps = {\n src?: string;\n alt?: string;\n};\n\nexport const MainLogo: FC<MainLogoProps> = (props) => {\n const { appIcons } = useAppConfig();\n\n if (props.src) {\n return <Logo src={props.src} alt={props.alt} />;\n }\n\n const { main } = appIcons || {};\n\n if (main?.img) {\n return <img src={main?.img} />;\n }\n\n if (main?.component) {\n return main.component;\n }\n\n return <OrderlyLogo />;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSubAccountQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAccountValue = (mainAccountId?: string) => {\n const [accountValue, setAccountValue] = useState<Record<string, number>>({});\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = useSubAccountQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n accountId: mainAccountId,\n });\n\n useEffect(() => {\n if (isPositionLoading) {\n return;\n }\n if (!newPositions || newPositions.length === 0) {\n setAccountValue({});\n return;\n }\n const value = newPositions.reduce(\n (acc, position) => {\n const accountId = position.account_id!;\n if (acc[accountId]) {\n acc[accountId] = new Decimal(acc[accountId])\n .plus(position.unsettled_pnl)\n .toNumber();\n } else {\n acc[accountId] = new Decimal(position.unsettled_pnl).toNumber();\n }\n return acc;\n },\n {} as Record<string, number>,\n );\n setAccountValue(value);\n }, [newPositions, isPositionLoading]);\n return {\n accountValue,\n };\n};\n","import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport {\n useAccount,\n useIndexPricesStream,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ABSTRACT_CHAIN_ID_MAP,\n API,\n EMPTY_LIST,\n EMPTY_OBJECT,\n} from \"@kodiak-finance/orderly-types\";\nimport { toast, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountValue } from \"./useAccountValue\";\n\nexport type SubAccountScriptReturn = ReturnType<typeof SubAccountScript>;\n\ntype AccountValueInfo = {\n id: string;\n userAddress?: string;\n description?: string;\n holding: API.Holding[];\n accountValue?: number;\n};\n\nexport const SubAccountScript = () => {\n const [open, setOpen] = useState(false);\n const [mainAccountHolding, setMainAccountHolding] = useState<API.Holding[]>(\n [],\n );\n const { wallet, connectedChain } = useWalletConnector();\n const { data: indexPrices } = useIndexPricesStream();\n const { isMobile } = useScreen();\n const { state, account, subAccount, switchAccount } = useAccount();\n const { t } = useTranslation();\n const mainAccountId = state.mainAccountId;\n\n const { accountValue } = useAccountValue(mainAccountId);\n\n const currentAccountId = state.accountId;\n\n const hasRefreshedRef = useRef(false);\n\n const userAddress = useMemo(() => {\n let address = state.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, state, account, connectedChain]);\n\n const subAccounts = useMemo(() => {\n if (!state.subAccounts || !state.subAccounts.length) {\n return [];\n }\n\n const currentSubAccount = state.subAccounts.find(\n (subAccount) => subAccount.id === currentAccountId,\n );\n\n if (currentSubAccount) {\n return [\n currentSubAccount,\n ...state.subAccounts.filter(\n (subAccount) => subAccount.id !== currentAccountId,\n ),\n ];\n }\n\n return [...state.subAccounts];\n }, [state.subAccounts, currentAccountId]);\n\n const _popup = useMemo(\n () => ({ mode: isMobile ? \"sheet\" : \"modal\" }),\n [isMobile],\n );\n\n const doCreatSubAccount = useCallback(\n (nickName: string) => {\n return subAccount.create(nickName);\n },\n [subAccount],\n );\n\n const onSwitch = useCallback(\n (accountId: string) => {\n return switchAccount(accountId)\n .catch((error) => {\n console.error(error);\n })\n .then((res) => {\n toast.success(t(\"subAccount.modal.switch.success.description\"));\n });\n },\n [switchAccount],\n );\n\n const accountsWithValues = useMemo(() => {\n const mainAccountUnsettlePnl = accountValue[mainAccountId!] ?? 0;\n\n const mainAccount =\n mainAccountId && state.address\n ? {\n id: mainAccountId,\n userAddress: state.address,\n holding: mainAccountHolding,\n accountValue: calculateAccountValue(\n mainAccountHolding,\n mainAccountUnsettlePnl,\n indexPrices || EMPTY_OBJECT,\n ),\n }\n : undefined;\n\n const updatedSubAccounts = subAccounts.map((subAccount) => {\n const subAccountUnsettlePnl = accountValue[subAccount.id] ?? 0;\n return {\n ...subAccount,\n accountValue: calculateAccountValue(\n subAccount.holding || EMPTY_LIST,\n subAccountUnsettlePnl,\n indexPrices || EMPTY_OBJECT,\n ),\n };\n });\n\n return {\n mainAccount,\n subAccounts: updatedSubAccounts,\n };\n }, [\n mainAccountId,\n state.address,\n mainAccountHolding,\n subAccounts,\n accountValue,\n indexPrices,\n ]);\n\n useEffect(() => {\n if (!open) {\n hasRefreshedRef.current = false;\n return;\n }\n\n if (!hasRefreshedRef.current && mainAccountId) {\n hasRefreshedRef.current = true;\n subAccount.refresh().then((res) => {\n setMainAccountHolding(res[mainAccountId] || []);\n });\n }\n }, [open, mainAccountId, subAccount]);\n\n return {\n userAddress,\n mainAccount: accountsWithValues.mainAccount,\n currentAccountId,\n open,\n onOpenChange: setOpen,\n popup: _popup,\n createSubAccount: doCreatSubAccount,\n subAccounts: accountsWithValues.subAccounts,\n onSwitch,\n };\n};\n\nconst calculateAccountValue = (\n holdings: API.Holding[],\n unsettlePnl: number,\n indexPrices: Record<string, number>,\n) => {\n const holding = holdings.reduce((acc, holding) => {\n const price = getTokenIndexPrice(holding.token, indexPrices);\n if (!price) {\n return acc;\n }\n return acc + new Decimal(holding.holding).times(price).toNumber();\n }, 0);\n return holding + unsettlePnl;\n};\n\nconst getTokenIndexPrice = (\n token: string,\n indexPrices: Record<string, number>,\n) => {\n if (token === \"USDC\") {\n return 1;\n }\n const symbol = `PERP_${token}_USDC`;\n return indexPrices[symbol] ?? 0;\n};\n","import { FC, forwardRef, SVGProps } from \"react\";\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nexport const SubAccountIcon = forwardRef<SVGSVGElement, IconProps>(\n (props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path\n d=\"M10 2.5C8.16892 2.5 6.66667 4.00225 6.66667 5.83333C6.66667 7.66441 8.16892 9.16667 10 9.16667C11.8311 9.16667 13.3333 7.66441 13.3333 5.83333C13.3333 4.00225 11.8311 2.5 10 2.5ZM10 4.16667C10.9303 4.16667 11.6667 4.90299 11.6667 5.83333C11.6667 6.76368 10.9303 7.5 10 7.5C9.06965 7.5 8.33333 6.76368 8.33333 5.83333C8.33333 4.90299 9.06965 4.16667 10 4.16667ZM10 11.6667C8.54587 11.6667 6.82264 12.0082 5.37435 12.5798C4.65021 12.8656 3.99558 13.205 3.47168 13.641C2.94778 14.0769 2.5 14.6662 2.5 15.4167V17.5H17.5V16.6667V15.4167C17.5 14.6662 17.0522 14.0769 16.5283 13.641C16.0044 13.205 15.3498 12.8656 14.6257 12.5798C13.1774 12.0082 11.4541 11.6667 10 11.6667ZM10 13.3333C11.1784 13.3333 12.7884 13.645 14.0153 14.1292C14.6288 14.3713 15.1475 14.66 15.4622 14.9219C15.777 15.1838 15.8333 15.3622 15.8333 15.4167V15.8333H4.16667V15.4167C4.16667 15.3622 4.22299 15.1838 4.53776 14.9219C4.85253 14.66 5.37124 14.3713 5.9847 14.1292C7.21162 13.645 8.82163 13.3333 10 13.3333Z\"\n fill=\"white\"\n fillOpacity=\"0.98\"\n />\n </svg>\n );\n },\n);\n\nexport const SwapIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M6 16L2 12L6 8L7.0625 9.0625L4.875 11.25H11V12.75H4.875L7.0625 14.9375L6 16ZM14 11L12.9375 9.9375L15.125 7.75H9V6.25H15.125L12.9375 4.0625L14 3L18 7L14 11Z\" />\n </svg>\n );\n});\n\nexport const AddIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M9.25 14H10.75V10.75H14V9.25H10.75V6H9.25V9.25H6V10.75H9.25V14ZM4.5 17C4.0875 17 3.73437 16.8531 3.44062 16.5594C3.14687 16.2656 3 15.9125 3 15.5V4.5C3 4.0875 3.14687 3.73438 3.44062 3.44063C3.73437 3.14688 4.0875 3 4.5 3H15.5C15.9125 3 16.2656 3.14688 16.5594 3.44063C16.8531 3.73438 17 4.0875 17 4.5V15.5C17 15.9125 16.8531 16.2656 16.5594 16.5594C16.2656 16.8531 15.9125 17 15.5 17H4.5ZM4.5 15.5H15.5V4.5H4.5V15.5Z\" />\n </svg>\n );\n});\n\nexport const EditIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 12, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M9.95551 2.00049C9.81619 2.00049 9.67686 2.05318 9.57074 2.15918L5.43256 6.29785L5.24945 7.25049L6.20209 7.06738L10.3403 2.9292C10.443 2.82645 10.4999 2.68968 10.4999 2.54443C10.4999 2.39918 10.443 2.26218 10.3403 2.15918C10.2341 2.05318 10.0948 2.00049 9.95551 2.00049ZM3.12494 2.25C2.37147 2.25 1.74994 2.87153 1.74994 3.625V9.375C1.74994 10.1285 2.37147 10.75 3.12494 10.75H8.87494C9.62841 10.75 10.2499 10.1285 10.2499 9.375V5.25C10.2509 5.18374 10.2386 5.11796 10.2139 5.05648C10.1892 4.99499 10.1525 4.93903 10.106 4.89185C10.0595 4.84466 10.0041 4.8072 9.94293 4.78162C9.8818 4.75605 9.8162 4.74288 9.74994 4.74288C9.68368 4.74288 9.61807 4.75605 9.55695 4.78162C9.49582 4.8072 9.44038 4.84466 9.39386 4.89185C9.34734 4.93903 9.31066 4.99499 9.28595 5.05648C9.26124 5.11796 9.249 5.18374 9.24994 5.25V9.375C9.24994 9.58803 9.08797 9.75 8.87494 9.75H3.12494C2.91191 9.75 2.74994 9.58803 2.74994 9.375V3.625C2.74994 3.41197 2.91191 3.25 3.12494 3.25H7.24994C7.3162 3.25094 7.38198 3.2387 7.44346 3.21399C7.50494 3.18928 7.5609 3.1526 7.60809 3.10608C7.65527 3.05956 7.69274 3.00412 7.71832 2.94299C7.74389 2.88186 7.75706 2.81626 7.75706 2.75C7.75706 2.68374 7.74389 2.61814 7.71832 2.55701C7.69274 2.49588 7.65527 2.44044 7.60809 2.39392C7.5609 2.3474 7.50494 2.31072 7.44346 2.28601C7.38198 2.2613 7.3162 2.24906 7.24994 2.25H3.12494Z\" />\n </svg>\n );\n});\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { CopyIcon, formatAddress, toast, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { EditIcon } from \"../icons\";\n\ninterface AccountItemProps {\n isMainAccount?: boolean;\n accountId: string;\n description?: string;\n userAddress?: string;\n balance?: string;\n isCurrent?: boolean;\n onSwitch?: (accountId: string) => void;\n accountValue?: number;\n onEdit?: (accountItem: { accountId: string; description: string }) => void;\n}\n\nconst AccountIdForCopy = (props: { accountId: string }) => {\n const { t } = useTranslation();\n const info = useMemo(() => {\n return {\n leading: props.accountId.slice(0, 6),\n middle: props.accountId.slice(6, -4),\n trailing: props.accountId.slice(-4),\n };\n }, [props.accountId]);\n const copy = useCallback(() => {\n navigator.clipboard.writeText(props.accountId);\n toast.success(t(\"common.copy.copied\"));\n }, [props.accountId]);\n return (\n <Flex\n className=\"oui-min-h-[50px] oui-w-[180px]\"\n gap={2}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Text className=\"oui-w-full oui-break-all oui-text-2xs oui-text-base-contrast-36\">\n <Text className=\"oui-text-base-contrast\">{info.leading}</Text>\n <Text>{info.middle}</Text>\n <Text className=\"oui-text-base-contrast\">{info.trailing}</Text>\n </Text>\n <CopyIcon\n onClick={copy}\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n />\n </Flex>\n );\n};\n\nexport const AccountItem = (props: AccountItemProps) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n className={cn(\n \"oui-relative oui-cursor-pointer oui-rounded-[6px] oui-bg-base-6 oui-px-3 oui-py-4\",\n \"oui-border oui-border-base-6\",\n props.isCurrent && \" oui-border-[#38E2FE] \",\n !props.isCurrent && \"hover:oui-border-base-contrast-16\",\n )}\n >\n <div\n className=\"oui-absolute oui-inset-0 oui-z-0 \"\n onClick={() => {\n if (props.isCurrent) {\n return;\n }\n props.onSwitch?.(props.accountId);\n }}\n />\n {props.isCurrent && (\n <div\n className={cn(\n \"oui-absolute -oui-right-[1px] -oui-top-[1px] oui-leading-3 oui-text-base-contrast-54\",\n \"oui-text-[10px] oui-font-semibold oui-text-black\",\n \"oui-rounded-[6px] oui-rounded-br-none oui-rounded-tl-none oui-bg-[#38E2FE] oui-py-0.5 oui-pl-1 oui-pr-[5px]\",\n )}\n >\n {t(\"subAccount.modal.current\")}\n </div>\n )}\n <Flex\n key={props.accountId}\n direction=\"column\"\n itemAlign=\"start\"\n gap={1}\n className=\"oui-z-[2]\"\n >\n {props.isMainAccount ? (\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast\">\n {formatAddress(props.userAddress ?? \"\")}\n </Text>\n ) : (\n <Flex\n justify=\"start\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-gap-[2px] oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n onClick={(event) => {\n props.onEdit?.({\n accountId: props.accountId,\n description: props.description ?? \"\",\n });\n event.stopPropagation();\n event.preventDefault();\n }}\n >\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast\">\n {props.description}\n </Text>\n <EditIcon className=\"oui-fill-base-contrast-54 hover:oui-fill-base-contrast\" />\n </Flex>\n )}\n <Tooltip content={<AccountIdForCopy accountId={props.accountId} />}>\n <Text className=\"oui-text-2xs oui-leading-3 oui-text-base-contrast-36 hover:oui-text-base-contrast\">\n ID: {formatAddress(props.accountId)}\n </Text>\n </Tooltip>\n </Flex>\n <Flex className=\"oui-text-xs\" itemAlign=\"end\" gap={1}>\n <Text.numeral rule=\"price\" dp={2}>\n {props.accountValue ?? 0}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter, TextField } from \"@kodiak-finance/orderly-ui\";\n\nexport const NickNameDescriptionText = \"\";\n\nexport const NickNameTextField = (props: {\n nickName: string | undefined;\n setNickName: (nickName: string | undefined) => void;\n subAccountCount?: number;\n invalid?: boolean;\n}) => {\n const { t } = useTranslation();\n return (\n <TextField\n placeholder={`Sub-account ${(props.subAccountCount ?? 0) + 1}`}\n fullWidth\n label={t(\"subAccount.modal.nickName.label\")}\n value={props.nickName}\n onChange={(e) => {\n const _value = e.target.value.replace(/[^a-zA-Z0-9@,\\s_-]/g, \"\");\n props.setNickName(_value);\n }}\n formatters={[\n inputFormatter.createRegexInputFormatter(/[^a-zA-Z0-9@,\\s_-]/g),\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 maxLength={20}\n minLength={1}\n autoComplete=\"off\"\n helpText={t(\"subAccount.modal.create.nickname.role\")}\n className=\"oui-mb-4\"\n color={props.invalid ? \"danger\" : undefined}\n />\n );\n};\n","import { useState, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n SimpleDialog,\n toast,\n Text,\n useScreen,\n cn,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AddIcon } from \"../icons\";\nimport { NickNameTextField } from \"./common\";\n\nconst MAX_SUB_ACCOUNT_COUNT = 10;\ntype CreateSubAccountProps = {\n create: (nickName: string) => Promise<void>;\n};\n\nexport const CreateSubAccount = (props: CreateSubAccountProps) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const [open, setOpen] = useState(false);\n const [nickName, setNickName] = useState<string | undefined>(undefined);\n const { state } = useAccount();\n const [invalid, setInvalid] = useState(false);\n const [loading, setLoading] = useState(false);\n const subAccountCount = useMemo(() => {\n return state.subAccounts?.length ?? 0;\n }, [state]);\n const trigger = useMemo(() => {\n return subAccountCount >= MAX_SUB_ACCOUNT_COUNT ? (\n <Tooltip\n className=\"oui-max-w-[188px]\"\n content={t(\"subAccount.modal.create.max.description\")}\n >\n <AddIcon\n className={cn(\"oui-cursor-not-allowed oui-fill-base-contrast-20\")}\n />\n </Tooltip>\n ) : (\n <AddIcon\n className={cn(\n \"oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\",\n )}\n onClick={() => {\n setOpen(true);\n }}\n />\n );\n }, [subAccountCount]);\n\n const header = (\n <Flex\n py={3}\n direction=\"column\"\n justify=\"between\"\n itemAlign=\"start\"\n width=\"100%\"\n >\n <Text weight=\"semibold\">{t(\"subAccount.modal.create.title\")}</Text>\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"subAccount.modal.create.description\", {\n subAccountCount,\n remainingCount: MAX_SUB_ACCOUNT_COUNT - subAccountCount,\n })}\n </Text>\n </Flex>\n );\n\n const reset = () => {\n setNickName(\"\");\n setInvalid(false);\n setLoading(false);\n };\n\n const validateNickName = (nickName: string | undefined) => {\n if (!nickName || !(nickName.length >= 1 && nickName.length <= 20)) {\n setInvalid(true);\n return true;\n }\n setInvalid(false);\n return false;\n };\n\n const doCreatSubAccount = (nickName: string | undefined) => {\n let _nickName = `Sub-account ${subAccountCount + 1}`;\n if (nickName) {\n _nickName = nickName.trim();\n }\n\n setLoading(true);\n props\n .create(_nickName)\n .then((res) => {\n console.log(\"res\", res);\n reset();\n toast.success(t(\"subAccount.modal.create.success.description\"));\n\n setOpen(false);\n })\n .catch((e: any) => {\n toast.error(t(\"subAccount.modal.create.failed.description\"));\n })\n .finally(() => {\n setLoading(false);\n });\n };\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={open}\n onOpenChange={(open) => {\n reset();\n setOpen(open);\n }}\n size={isMobile ? \"sm\" : \"xl\"}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n disabled: invalid || loading,\n loading: loading,\n onClick: () => {\n const invalid = validateNickName(nickName);\n if (invalid) {\n return;\n }\n doCreatSubAccount(nickName);\n },\n },\n }}\n classNames={{\n content: \"oui-w-[360px]\",\n }}\n >\n <NickNameTextField\n nickName={nickName}\n setNickName={(nickName) => {\n validateNickName(nickName);\n setNickName(nickName);\n }}\n subAccountCount={subAccountCount}\n invalid={invalid}\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog, toast, Text, TextField } from \"@kodiak-finance/orderly-ui\";\nimport { NickNameDescriptionText, NickNameTextField } from \"./common\";\n\nexport const EditNickNameDialog = (props: {\n nickName: string;\n open: boolean;\n accountId: string;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { subAccount } = useAccount();\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n const [newNickName, setNewNickName] = useState<string | undefined>(undefined);\n const [invalid, setInvalid] = useState(false);\n\n const validateNickName = (nickName: string | undefined) => {\n if (!nickName || !(nickName.length >= 1 && nickName.length <= 20)) {\n setInvalid(true);\n return true;\n }\n setInvalid(false);\n };\n useEffect(() => {\n setNewNickName(props.nickName);\n setInvalid(false);\n setLoading(false);\n }, [props.nickName, props.open]);\n return (\n <SimpleDialog\n title={<Text>{t(\"subAccount.modal.edit.title\")}</Text>}\n open={props.open}\n onOpenChange={props.onOpenChange}\n classNames={{\n content: \"oui-w-[360px]\",\n }}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n disabled: loading || invalid,\n loading: loading,\n onClick: () => {\n if (validateNickName(newNickName)) {\n return;\n }\n setLoading(true);\n subAccount\n ?.update({\n subAccountId: props.accountId,\n description: newNickName,\n })\n .catch((e) => {\n console.log(\"e\", e);\n toast.error(t(\"subAccount.modal.edit.failed.description\"));\n })\n .then((res) => {\n toast.success(t(\"subAccount.modal.edit.success.description\"));\n props.onOpenChange(false);\n })\n .finally(() => {\n setLoading(false);\n });\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => props.onOpenChange(false),\n },\n }}\n >\n <NickNameTextField\n nickName={newNickName}\n setNickName={(nickName) => {\n validateNickName(nickName);\n setNewNickName(nickName ?? \"\");\n }}\n invalid={invalid}\n />\n </SimpleDialog>\n );\n};\n","import { useCallback, useRef, useMemo, useState, ReactNode } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SimpleDialog,\n useScreen,\n Text,\n Flex,\n ScrollArea,\n modal,\n cn,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n PopoverRoot,\n PopoverContent,\n PopoverAnchor,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AccountItem } from \"./components/accountItem\";\nimport { CreateSubAccount } from \"./components/createSubAccountModal\";\nimport { EditNickNameDialog } from \"./components/editNickNameModal\";\nimport { SubAccountIcon, SwapIcon } from \"./icons\";\nimport { SubAccountScriptReturn } from \"./subAccount.script\";\n\nexport function SubAccountUI(\n props: SubAccountScriptReturn & { customTrigger?: ReactNode },\n) {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const onMouseEnter = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n // setOpen(true);\n }, []);\n const header = <Text weight=\"semibold\">{t(\"subAccount.modal.title\")}</Text>;\n const trigger = useMemo(() => {\n if (props.customTrigger && isMobile) {\n return (\n <div onClick={() => props.onOpenChange(true)}>\n {props.customTrigger}\n </div>\n );\n }\n if (isMobile) {\n return (\n <Flex\n className=\"oui-size-8 oui-rounded-md oui-bg-base-6\"\n itemAlign=\"center\"\n justify=\"center\"\n >\n <SubAccountIcon\n className={cn(\"oui-cursor-pointer\")}\n onClick={() => props.onOpenChange(true)}\n />\n </Flex>\n );\n }\n return <SubAccountIcon className={cn(\"oui-cursor-pointer\")} />;\n }, [isMobile, props.customTrigger]);\n\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [editAccountItem, setEditAccountItem] = useState<\n | {\n accountId: string;\n description: string;\n }\n | undefined\n >(undefined);\n\n const noSubAccount = (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n px={5}\n width=\"100%\"\n className=\"oui-h-[120px]\"\n >\n <Text className=\"oui-text-center oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"subAccount.modal.noAccount.description\")}\n </Text>\n </Flex>\n );\n\n const renderSubAccount = () => {\n if (!props.subAccounts?.length) {\n return noSubAccount;\n }\n return (\n <ScrollArea className=\"oui-custom-scrollbar oui-max-h-[200px] oui-w-full oui-overflow-y-auto\">\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n {props.subAccounts.map((subAccount) => (\n <AccountItem\n key={subAccount.id}\n accountId={subAccount.id}\n description={subAccount.description}\n isMainAccount={false}\n isCurrent={subAccount.id === props.currentAccountId}\n onSwitch={(accountId) => {\n props.onSwitch?.(accountId);\n }}\n accountValue={subAccount.accountValue ?? 0}\n onEdit={() => {\n setEditAccountItem({\n accountId: subAccount.id,\n description: subAccount.description ?? \"\",\n });\n setEditDialogOpen(true);\n }}\n />\n ))}\n </Flex>\n </ScrollArea>\n );\n };\n\n const content = (\n <>\n <Flex direction=\"column\" gap={5} itemAlign=\"start\" width=\"100%\">\n {!isMobile && header}\n <Flex direction=\"column\" gap={5} itemAlign=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast-54\">\n {t(\"subAccount.modal.mainAccount.title\")}\n </Text>\n <AccountItem\n accountId={props.mainAccount?.id ?? \"\"}\n isMainAccount={true}\n userAddress={props.userAddress ?? \"\"}\n isCurrent={props.currentAccountId === props.mainAccount?.id}\n onSwitch={(accountId) => {\n props.onSwitch?.(accountId);\n }}\n accountValue={props.mainAccount?.accountValue ?? 0}\n />\n </Flex>\n\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\" gap={2}>\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast-54\">\n {t(\"subAccount.modal.subAccounts.title\")}\n </Text>\n <Flex justify=\"end\" gap={2}>\n {props.subAccounts.length > 0 && (\n <SwapIcon\n className=\"oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n onClick={() => {\n // todo need show transfer modal\n let dialogId = \"TransferDialogId\";\n if (isMobile) {\n dialogId = \"TransferSheetId\";\n }\n modal.show(dialogId);\n }}\n />\n )}\n <CreateSubAccount create={props.createSubAccount} />\n </Flex>\n </Flex>\n {renderSubAccount()}\n </Flex>\n </Flex>\n </Flex>\n <EditNickNameDialog\n accountId={editAccountItem?.accountId ?? \"\"}\n nickName={editAccountItem?.description ?? \"\"}\n open={editDialogOpen}\n onOpenChange={setEditDialogOpen}\n />\n </>\n );\n if (isMobile) {\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"xs\"\n classNames={{\n content: \"oui-w-[300px]\",\n }}\n >\n {content}\n </SimpleDialog>\n </>\n );\n }\n\n return (\n <PopoverRoot open={props.open} onOpenChange={props.onOpenChange}>\n <PopoverAnchor>\n <div\n onMouseEnter={() => {\n props.onOpenChange(true);\n }}\n onMouseLeave={() => {\n timer.current = setTimeout(() => {\n props.onOpenChange(false);\n }, 150);\n }}\n >\n {trigger}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={16}\n collisionPadding={{ right: 16 }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={() => {\n props.onOpenChange(false);\n timer.current ? clearTimeout(timer.current) : void 0;\n }}\n className={cn(\n \"oui-w-[300px] oui-space-y-[2px] oui-border oui-border-line-6 oui-p-5\",\n )}\n >\n {content}\n </PopoverContent>\n </PopoverRoot>\n );\n}\n","import { FC, ReactNode } from \"react\";\nimport { SubAccountScript } from \"./subAccount.script\";\nimport { SubAccountUI } from \"./subAccount.ui\";\n\ntype SubAccountWidgetProps = {\n customTrigger?: ReactNode;\n};\n\nexport const SubAccountWidget: FC<SubAccountWidgetProps> = (props) => {\n const state = SubAccountScript();\n return <SubAccountUI {...state} customTrigger={props?.customTrigger} />;\n};\n","export { SubAccountWidget } from \"./subAccount.widget\";\nexport { SubAccountScript } from \"./subAccount.script\";\nexport { SubAccountUI } from \"./subAccount.ui\";\n","import { FC } from \"react\";\n\nexport interface CommunityProps {\n width?: number;\n height?: number;\n className?: string | undefined;\n}\n\nexport const CommunityDiscord: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M14.9559 5.5217C16.5596 7.89629 17.3515 10.5748 17.0555 13.6583C17.0542 13.6714 17.0475 13.6833 17.0368 13.6912C15.8224 14.5893 14.6458 15.1343 13.4857 15.4958C13.4767 15.4985 13.467 15.4984 13.4581 15.4953C13.4491 15.4923 13.4413 15.4865 13.4358 15.4788C13.1678 15.1032 12.9243 14.7073 12.7109 14.2915C12.6987 14.267 12.7099 14.2375 12.7351 14.2278C13.1218 14.0811 13.4896 13.9052 13.8434 13.6969C13.8712 13.6805 13.873 13.6403 13.8473 13.621C13.7722 13.5648 13.6978 13.5058 13.6266 13.4468C13.6133 13.4359 13.5954 13.4338 13.5803 13.4411C11.2837 14.5092 8.76789 14.5092 6.44412 13.4411C6.42903 13.4343 6.41111 13.4367 6.39815 13.4474C6.32715 13.5064 6.2526 13.5648 6.17823 13.621C6.1525 13.6403 6.15463 13.6805 6.18267 13.6969C6.53642 13.9012 6.90419 14.0811 7.29042 14.2285C7.31544 14.2382 7.32734 14.267 7.31491 14.2915C7.10618 14.7078 6.86265 15.1037 6.58967 15.4793C6.57777 15.4945 6.55825 15.5015 6.53979 15.4958C5.38518 15.1343 4.20857 14.5893 2.99415 13.6912C2.98403 13.6833 2.97676 13.6708 2.97569 13.6578C2.72826 10.9906 3.23253 8.28992 5.07333 5.52116C5.07776 5.51383 5.08451 5.50811 5.09232 5.50472C5.99808 5.08607 6.96844 4.77807 7.98265 4.60218C8.00111 4.59932 8.01957 4.6079 8.02915 4.62434C8.15446 4.84779 8.2977 5.13434 8.39461 5.36851C9.46367 5.20405 10.5494 5.20405 11.6408 5.36851C11.7377 5.13934 11.876 4.84779 12.0008 4.62434C12.0052 4.61619 12.0121 4.60965 12.0205 4.60567C12.0288 4.60169 12.0382 4.60047 12.0473 4.60218C13.062 4.77861 14.0324 5.08661 14.9374 5.50472C14.9454 5.50811 14.952 5.51383 14.9559 5.5217V5.5217ZM8.9381 10.593C8.94929 9.80452 8.37846 9.15206 7.66191 9.15206C6.95122 9.15206 6.3859 9.7988 6.3859 10.593C6.3859 11.387 6.96241 12.0338 7.66191 12.0338C8.37278 12.0338 8.9381 11.387 8.9381 10.593V10.593ZM13.6563 10.593C13.6675 9.80452 13.0966 9.15206 12.3803 9.15206C11.6694 9.15206 11.1041 9.7988 11.1041 10.593C11.1041 11.387 11.6806 12.0338 12.3803 12.0338C13.0966 12.0338 13.6563 11.387 13.6563 10.593V10.593Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityTG: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n // stroke=\"currentColor\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M4.10787 9.4635C4.10787 9.4635 9.64487 7.13143 11.5652 6.31025C12.3013 5.98181 14.7978 4.93069 14.7978 4.93069C14.7978 4.93069 15.95 4.47087 15.854 5.58763C15.822 6.0475 15.5659 7.65694 15.3099 9.39781C14.9258 11.8613 14.5097 14.5547 14.5097 14.5547C14.5097 14.5547 14.4457 15.3102 13.9016 15.4416C13.3575 15.5729 12.4613 14.9817 12.3013 14.8503C12.1733 14.7518 9.9009 13.2737 9.06876 12.5511C8.84471 12.354 8.58868 11.9599 9.10074 11.5C10.253 10.4161 11.6292 9.06937 12.4613 8.21537C12.8454 7.82119 13.2295 6.9015 11.6292 8.01825C9.35681 9.62774 7.11641 11.1387 7.11641 11.1387C7.11641 11.1387 6.60431 11.4671 5.64415 11.1715C4.68394 10.8759 3.56374 10.4817 3.56374 10.4817C3.56374 10.4817 2.79565 9.98906 4.10787 9.4635Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityX: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n // stroke=\"currentColor\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M4.41988 4.72946L9.05295 10.9243L4.39062 15.961H5.43993L9.52178 11.5513L12.8198 15.961H16.3906L11.4969 9.41769L15.8365 4.72946H14.7872L11.028 8.7907L7.9907 4.72946H4.41988ZM5.96296 5.50238H7.6034L14.8473 15.188H13.2069L5.96296 5.50238Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityDune: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.9957 19.1899C15.9699 19.1899 19.1916 15.9686 19.1916 11.995C19.1916 8.02132 15.9699 4.80005 11.9957 4.80005C8.02152 4.80005 4.7998 8.02132 4.7998 11.995C4.7998 15.9686 8.02152 19.1899 11.9957 19.1899Z\"\n fill=\"white\"\n fillOpacity={0.54}\n />\n <path\n d=\"M6.05127 16.0536C6.05127 16.0536 10.8064 14.496 19.1871 11.7634C19.1871 11.7634 19.6461 16.2385 15.0068 18.5726C15.0068 18.5726 12.7191 19.6691 10.2092 18.9658C10.2092 18.9658 7.70999 18.494 6.05127 16.0536Z\"\n fill=\"white\"\n fillOpacity={0.54}\n />\n </svg>\n );\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Sheet,\n SheetContent,\n modal,\n useModal,\n VectorIcon,\n SwapHorizIcon,\n PeopleIcon,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../main/mainLogo\";\nimport { RouterAdapter, RouteOption } from \"../scaffold\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport {\n CommunityDiscord,\n CommunityDune,\n CommunityTG,\n CommunityX,\n} from \"./communityIcon\";\nimport { LeftNavState } from \"./leftNav.script\";\nimport { LeftNavItem, LeftNavProps } from \"./leftNav.type\";\n\ntype LeftNavUIProps = LeftNavProps &\n LeftNavState & {\n className?: string;\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n showSubAccount?: boolean;\n };\n\nexport const LeftNavUI: FC<LeftNavUIProps> = (props) => {\n const showModal = () => {\n modal.show(LeftNavSheet, {\n ...props,\n });\n };\n\n return (\n <div onClick={showModal} className={props?.className}>\n <VectorIcon />\n </div>\n );\n};\n\nconst LeftNavSheet = modal.create<LeftNavUIProps>((props) => {\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n const { state } = useAccount();\n const { t } = useTranslation();\n\n const showSubAccount = useMemo(\n () => state.status >= AccountStatusEnum.EnableTrading,\n [state.status],\n );\n\n const onRouteChange = (option: RouteOption) => {\n props?.routerAdapter?.onRouteChange?.(option);\n hide();\n };\n\n const subAccountTrigger = useMemo(() => {\n const name =\n state.accountId === state.mainAccountId\n ? state.address\n : state.subAccounts?.find((item) => item.id === state.accountId)\n ?.description || \"\";\n return (\n <div className=\"oui-flex oui-w-full oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-5 oui-p-3\">\n <div>\n <PeopleIcon />\n </div>\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-font-semibold\">\n <Text.formatted\n rule=\"address\"\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n {name}\n </Text.formatted>\n <Text.formatted\n rule=\"address\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >{`ID: ${state.accountId}`}</Text.formatted>\n </div>\n <div className=\"oui-ml-auto\">\n <SwapHorizIcon />\n </div>\n </div>\n );\n }, [state, t]);\n\n const openExternalLink = (url: string) => {\n window.open(url, \"_blank\");\n };\n\n return (\n <Sheet open={visible} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"left\"\n className=\"oui-w-[276px] oui-bg-base-8\"\n closeable\n closeableSize={24}\n closeOpacity={0.54}\n >\n <div className=\"oui-relative oui-flex oui-h-full oui-flex-col oui-gap-3\">\n <div className=\"oui-mt-[6px] oui-flex oui-h-[44px] oui-items-center [&_img]:!oui-h-[18px]\">\n <MainLogo {...props?.logo} />\n </div>\n {props?.leading}\n {showSubAccount && (\n <SubAccountWidget customTrigger={subAccountTrigger} />\n )}\n {Array.isArray(props?.menus) && props.menus.length > 0 && (\n <div className=\"oui-flex oui-h-[calc(100vh-260px)] oui-flex-col oui-items-start oui-overflow-y-auto\">\n {props.menus?.map((item) => (\n <NavItem\n item={item}\n key={`item-${item.name}`}\n onClick={onRouteChange}\n />\n ))}\n </div>\n )}\n <div className=\"oui-absolute oui-bottom-6 oui-flex oui-w-full oui-flex-col oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-justify-around\">\n {props.telegramUrl && (\n <div\n onClick={() => openExternalLink(props.telegramUrl as string)}\n >\n <CommunityTG width={24} height={24} />\n </div>\n )}\n {props.twitterUrl && (\n <div\n onClick={() => openExternalLink(props.twitterUrl as string)}\n >\n <CommunityX width={24} height={24} />\n </div>\n )}\n {props.discordUrl && (\n <div\n onClick={() => openExternalLink(props.discordUrl as string)}\n >\n <CommunityDiscord width={24} height={24} />\n </div>\n )}\n {props.duneUrl && (\n <div\n onClick={() => openExternalLink(props.duneUrl as string)}\n className=\"oui-mb-1\"\n >\n <CommunityDune />\n </div>\n )}\n </div>\n {props.feedbackUrl && (\n <div\n className=\"oui-text-center oui-text-2xs oui-font-semibold oui-text-primary oui-underline\"\n onClick={() => openExternalLink(props.feedbackUrl as string)}\n >\n {t(\"leftNav.feedback\")}\n </div>\n )}\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n});\n\ntype NavItemProps = {\n item: LeftNavItem;\n onClick?: (option: RouteOption) => void;\n};\n\nconst NavItem: FC<NavItemProps> = ({ item, onClick }) => {\n const {\n href,\n name,\n icon,\n trailing,\n onlyInMainAccount,\n customRender,\n target,\n } = item;\n const { isMainAccount } = useAccount();\n const onItemClick = () => {\n if (target) {\n window.open(href, target);\n } else {\n onClick?.({ href: href, name: name, scope: \"leftNav\" });\n }\n };\n if (typeof customRender === \"function\") {\n return (\n <div\n className=\"oui-flex oui-w-full oui-items-center oui-px-3 oui-py-4\"\n onClick={onItemClick}\n >\n {customRender({ name: name, href: href })}\n </div>\n );\n }\n if (onlyInMainAccount && !isMainAccount) {\n return null;\n }\n return (\n <div\n className=\"oui-flex oui-w-full oui-items-center oui-gap-2 oui-px-3 oui-py-4\"\n onClick={onItemClick}\n >\n <div>{icon}</div>\n <div className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {name}\n </div>\n {trailing}\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport type UseScanQRCodeScriptReturn = ReturnType<typeof useScanQRCodeScript>;\n\nexport const useScanQRCodeScript = () => {\n const [open, setOpen] = useState(false);\n const { widgetConfigs } = useAppContext();\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const [showScanTooltip, setShowScanTooltip] = useLocalStorage(\n \"orderly_qr_code_scan_tooltip_open\",\n true,\n );\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n const onScanSuccess = (url: string) => {\n if (!isValidURL(url)) {\n return;\n }\n const { onSuccess } = widgetConfigs?.scanQRCode || {};\n if (typeof onSuccess === \"function\") {\n onSuccess(url);\n } else {\n window.location.href = url;\n }\n };\n\n useEffect(() => {\n if (showScanTooltip) {\n timerRef.current = setTimeout(() => {\n setShowScanTooltip(false);\n }, 8000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [showScanTooltip]);\n\n return {\n open,\n onOpenChange: setOpen,\n showDialog,\n hideDialog,\n onScanSuccess,\n showScanTooltip,\n };\n};\n\nfunction isValidURL(str: string) {\n try {\n const url = new URL(str);\n return [\"http:\", \"https:\"].includes(url.protocol);\n } catch {\n return false;\n }\n}\n","import { FC, useEffect, useRef } from \"react\";\nimport jsQR from \"jsqr\";\n\ntype ScannerProps = {\n onSuccess?: (data: string) => void;\n};\n\nexport const QRCODE_WIDTH = 320;\nexport const QRCODE_HEIGHT = 320;\nconst RATIO = 2;\n\n/**\n * QR Code Scanner\n * reference https://github.com/cozmo/jsQR/blob/master/docs/index.html\n */\nexport const QRCodeScanner: FC<ScannerProps> = (props) => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const tick = () => {\n const video = videoRef.current;\n const canvas = canvasRef.current;\n if (!video || !canvas) return;\n\n const ctx = canvas.getContext(\"2d\")!;\n\n if (video.readyState === video.HAVE_ENOUGH_DATA) {\n const videoWidth = video.videoWidth;\n const videoHeight = video.videoHeight;\n\n const canvasAspectRatio = canvas.width / canvas.height;\n const videoAspectRatio = videoWidth / videoHeight;\n\n let sx, sy, sWidth, sHeight;\n\n if (videoAspectRatio > canvasAspectRatio) {\n // The video is wide. Crop the left and right sides\n sHeight = videoHeight;\n sWidth = videoHeight * canvasAspectRatio;\n sx = (videoWidth - sWidth) / 2;\n sy = 0;\n } else {\n // The video is high. Crop the top and bottom sides\n sWidth = videoWidth;\n sHeight = videoWidth / canvasAspectRatio;\n sx = 0;\n sy = (videoHeight - sHeight) / 2;\n }\n\n ctx.drawImage(\n video,\n sx,\n sy,\n sWidth,\n sHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n // ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const res = jsQR(imageData.data, imageData.width, imageData.height, {\n inversionAttempts: \"dontInvert\",\n });\n\n if (res?.data) {\n console.log(\"scan result\", res.data);\n props.onSuccess?.(res.data);\n }\n }\n requestAnimationFrame(tick);\n };\n\n useEffect(() => {\n const video = videoRef.current;\n if (!open || !video) return;\n\n // Use facingMode: environment to attemt to get the front camera on phones\n navigator?.mediaDevices\n ?.getUserMedia({\n video: {\n facingMode: \"environment\",\n width: { ideal: QRCODE_WIDTH * RATIO },\n height: { ideal: QRCODE_HEIGHT * RATIO },\n },\n })\n .then((stream) => {\n video.srcObject = stream;\n // required to tell iOS safari we don't want fullscreen\n video.setAttribute(\"playsinline\", \"true\");\n video.play();\n\n video.onloadeddata = () => {\n console.log(\"Video data loaded.\");\n // const videoTrack = stream.getVideoTracks()[0];\n // const settings = videoTrack.getSettings();\n // console.log(\"video size\", `${settings.width}x${settings.height}`);\n\n requestAnimationFrame(tick);\n };\n })\n .catch((err) => {\n console.error(\"Error accessing camera:\", err);\n });\n\n return () => {\n // Cleanup: stop video stream when component unmounts\n const stream = video.srcObject as MediaStream;\n if (stream) {\n const tracks = stream.getTracks();\n tracks.forEach((track: any) => track.stop());\n }\n video.srcObject = null;\n };\n }, [videoRef, canvasRef]);\n\n return (\n <>\n <video\n ref={videoRef}\n width={QRCODE_WIDTH}\n height={QRCODE_HEIGHT}\n className=\"oui-hidden oui-rounded-2xl oui-bg-base-10\"\n />\n <canvas\n ref={canvasRef}\n width={QRCODE_WIDTH * RATIO}\n height={QRCODE_HEIGHT * RATIO}\n style={{ width: QRCODE_WIDTH, height: QRCODE_HEIGHT }}\n className=\"oui-rounded-2xl oui-bg-base-10\"\n />\n </>\n );\n};\n","import { FC, SVGProps } from \"react\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n cn,\n Flex,\n SimpleDialog,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../main/mainLogo\";\nimport { UseScanQRCodeScriptReturn } from \"./scanQRCode.script\";\nimport { QRCodeScanner, QRCODE_WIDTH, QRCODE_HEIGHT } from \"./scanner\";\n\ntype ScanQRCodeProps = UseScanQRCodeScriptReturn;\n\nexport const ScanQRCode: FC<ScanQRCodeProps> = (props) => {\n const { t } = useTranslation();\n return (\n <>\n <Tooltip\n open={props.showScanTooltip}\n content={t(\"linkDevice.scanQRCode.tooltip\")}\n className=\"oui-bg-base-6 oui-text-2xs oui-font-semibold oui-text-warning-darken\"\n arrow={{ className: \"!oui-fill-base-6\" }}\n >\n <Flex\n className=\"oui-h-8 oui-w-8 oui-cursor-pointer oui-items-center oui-justify-center oui-rounded-md oui-bg-base-5 oui-px-[6px]\"\n onClick={props.showDialog}\n >\n <ScanIcon className=\"oui-text-base-contrast-80\" />\n </Flex>\n </Tooltip>\n <SimpleDialog\n title={<MainLogo />}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n >\n <ScanQRCodeContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n\nconst ScanQRCodeContent: FC<ScanQRCodeProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify=\"center\" direction=\"column\" gapY={5}>\n <Box width={QRCODE_WIDTH} height={QRCODE_HEIGHT} className=\"oui-relative\">\n <QRCodeScanner onSuccess={props.onScanSuccess} />\n <>\n <LineGradient />\n <RadiusGradient className=\"oui-absolute oui-left-[-1.5px] oui-top-[-1.5px]\" />\n <RadiusGradient className=\"oui-absolute oui-right-[-1.5px] oui-top-[-1.5px] oui-rotate-90\" />\n <RadiusGradient className=\"oui-absolute oui-bottom-[-1.5px] oui-left-[-1.5px] -oui-rotate-90\" />\n <RadiusGradient className=\"oui-absolute oui-bottom-[-1.5px] oui-right-[-1.5px] -oui-rotate-180\" />\n </>\n </Box>\n\n {/* </Box> */}\n <Text size=\"sm\" intensity={98} weight=\"semibold\">\n {t(\"linkDevice.scanQRCode\")}\n </Text>\n <span className=\"oui-px-3 oui-text-center\">\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-break-words\"\n >\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"linkDevice.scanQRCode.description\"\n components={[\n <LinkDeviceIcon\n key=\"0\"\n className=\"oui-mx-1 oui-inline-block oui-text-base-contrast-80\"\n />,\n ]}\n />\n </Text>\n </span>\n </Flex>\n );\n};\n\nconst ScanIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M5.249 2.243a3 3 0 0 0-3 3v.75a.75.75 0 0 0 1.5 0v-.75a1.5 1.5 0 0 1 1.5-1.5h2.25a.75.75 0 0 0 0-1.5zm5.25 0a.75.75 0 0 0 0 1.5h2.25a1.5 1.5 0 0 1 1.5 1.5v.75a.75.75 0 0 0 1.5 0v-.75a3 3 0 0 0-3-3zm-7.5 9a.75.75 0 0 0-.75.75v.75a3 3 0 0 0 3 3h2.25a.75.75 0 0 0 0-1.5h-2.25a1.5 1.5 0 0 1-1.5-1.5v-.75a.75.75 0 0 0-.75-.75m12 0a.75.75 0 0 0-.75.75v.75a1.5 1.5 0 0 1-1.5 1.5h-2.25a.75.75 0 0 0 0 1.5h2.25a3 3 0 0 0 3-3v-.75a.75.75 0 0 0-.75-.75M5.25 8.999a.75.75 0 0 1 .75-.75h6a.75.75 0 0 1 0 1.5H6a.75.75 0 0 1-.75-.75\" />\n </svg>\n);\n\nexport interface LinkDeviceIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const LinkDeviceIcon: FC<LinkDeviceIconProps> = (props) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M19.167 7.583a1.74 1.74 0 0 0-1.731-1.75h-4.038a1.74 1.74 0 0 0-1.731 1.75v8.167c0 .967.775 1.75 1.73 1.75h4.039a1.74 1.74 0 0 0 1.73-1.75zm-1.154 0v7.584H12.82V7.583A.58.58 0 0 1 13.398 7h4.038a.58.58 0 0 1 .577.583m-2.02 8.75a.58.58 0 0 1-.576.584.58.58 0 0 1-.577-.584.58.58 0 0 1 .577-.583.58.58 0 0 1 .577.583\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.666 5a2.5 2.5 0 0 1 2.5-2.5h10a2.5 2.5 0 0 1 2.5 2.5.08.08 0 0 1-.078.078h-1.51a.08.08 0 0 1-.08-.078.834.834 0 0 0-.833-.833h-10A.834.834 0 0 0 3.333 5v5.633c0 .11.09.2.2.2h7.1c.11 0 .2.09.2.2V12.3a.2.2 0 0 1-.2.2H2.7a.2.2 0 0 0-.2.2v.633c0 .511.308.834.834.834h7.3c.11 0 .2.09.2.2v1.266a.2.2 0 0 1-.2.2h-7.3c-1.465 0-2.5-1.086-2.5-2.5v-1.666c0-.392.27-.72.635-.81.107-.026.198-.113.198-.224z\"\n />\n </svg>\n );\n};\n\nconst LineGradient: FC<SVGProps<SVGSVGElement>> = () => {\n return (\n <div\n className={cn(\n \"oui-absolute oui-left-[30px] oui-top-0\",\n \"oui-h-[2px] oui-w-[calc(100%-60px)] oui-rounded-full\",\n \"oui-bg-[linear-gradient(270deg,rgb(var(--oui-gradient-brand-end))_0%,rgb(var(--oui-gradient-brand-start))_100%)]\",\n \"oui-shadow-[0_0_8px_4px_rgba(var(--oui-gradient-brand-start)/0.12)]\",\n \"oui-animate-scan-qr-code\",\n )}\n />\n );\n};\n\nconst RadiusGradient: FC<SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M62 2H18C9.16344 2 2 9.16344 2 18V62\"\n stroke=\"url(#paint0_linear_136_6227)\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_136_6227\"\n x1=\"2\"\n y1=\"32\"\n x2=\"62\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n","import React from \"react\";\nimport { useScanQRCodeScript } from \"./scanQRCode.script\";\nimport { ScanQRCode } from \"./scanQRCode.ui\";\n\nexport const ScanQRCodeWidget: React.FC = () => {\n const state = useScanQRCodeScript();\n return <ScanQRCode {...state} />;\n};\n","export { ScanQRCodeWidget } from \"./scanQRCode.widget\";\nexport { ScanQRCode } from \"./scanQRCode.ui\";\nexport { useScanQRCodeScript } from \"./scanQRCode.script\";\n","import { useCallback, useEffect, useState } from \"react\";\nimport {\n useAccount,\n useChains,\n useEventEmitter,\n useTrack,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\n\nexport type UseLinkDeviceScriptReturn = ReturnType<typeof useLinkDeviceScript>;\n\nconst ExpireSeconds = 60;\n\nexport function useLinkDeviceScript() {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(true);\n const [confirm, setConfirm] = useState(false);\n const [seconds, setSeconds] = useState(ExpireSeconds);\n const [secretKey, setSecretKey] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const ee = useEventEmitter();\n const { track } = useTrack();\n\n const { state, account } = useAccount();\n\n const [_, { findByChainId }] = useChains(undefined, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const createTrackParams = () => {\n const chain = findByChainId(account.chainId as number);\n return {\n wallet: state?.connectWallet?.name,\n network: chain?.network_infos.name,\n };\n };\n\n const getOrderlyKey = useCallback(async () => {\n try {\n const res = await account.createApiKey(30);\n setSecretKey(res.secretKey);\n setLoading(false);\n\n track(TrackerEventName.signLinkDeviceMessageSuccess, createTrackParams());\n } catch (e) {\n console.error(\"getOrderlyKey\", e);\n\n if (e instanceof Error) {\n if (\n e.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: e.message,\n userAddress: account.address,\n });\n }\n }\n hideDialog();\n }\n }, [account]);\n\n const showDialog = useCallback(() => {\n setOpen(true);\n getOrderlyKey();\n track(TrackerEventName.clickLinkDeviceButton, createTrackParams());\n }, [account]);\n\n const hideDialog = useCallback(() => {\n setOpen(false);\n }, []);\n\n const onConfirm = useCallback(() => {\n setConfirm(true);\n track(TrackerEventName.linkDeviceModalClickConfirm, {});\n }, []);\n\n const copyUrl = useCallback(() => {\n navigator.clipboard.writeText(url);\n }, [url]);\n\n useEffect(() => {\n // when hide dialog, reset data\n if (!open) {\n setConfirm(false);\n setLoading(true);\n setSeconds(ExpireSeconds);\n setSecretKey(\"\");\n setUrl(\"\");\n }\n }, [open]);\n\n useEffect(() => {\n if (seconds === 0) {\n hideDialog();\n return;\n }\n\n if (!confirm) {\n return;\n }\n\n const timer = setTimeout(() => {\n setSeconds(seconds - 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }, [seconds, confirm]);\n\n useEffect(() => {\n if (confirm && secretKey) {\n const timestamp = Math.floor(Date.now() / 1000) + ExpireSeconds;\n const params = {\n k: secretKey,\n t: timestamp,\n a: account.address,\n i: account.chainId,\n n: account.walletAdapter?.chainNamespace,\n };\n const url = createUrl(params);\n setUrl(url);\n }\n }, [confirm, secretKey]);\n\n return {\n open,\n onOpenChange: setOpen,\n showDialog,\n hideDialog,\n loading,\n seconds,\n confirm,\n onConfirm,\n url,\n copyUrl,\n };\n}\n\nfunction createUrl(params: Record<string, any>) {\n const str = JSON.stringify(params);\n const base64 = window.btoa(str);\n console.log(\"str\", str.length, str);\n console.log(\"base64\", base64.length, base64);\n return `${window.location.origin}?link=${base64}`;\n}\n","import { FC, SVGProps, forwardRef, useEffect, useRef } from \"react\";\nimport { qrcode as qr } from \"@akamfoad/qr\";\nimport { Trans, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n cn,\n CopyIcon,\n Flex,\n SimpleDialog,\n SimpleDialogFooter,\n SimpleDialogFooterProps,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../mainLogo\";\nimport { UseLinkDeviceScriptReturn } from \"./linkDevice.script\";\n\nexport type LinkDeviceProps = UseLinkDeviceScriptReturn;\n\nexport const LinkDevice: FC<LinkDeviceProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Tooltip content={t(\"linkDevice.tooltip\")}>\n <LinkDeviceIcon\n className=\"oui-text-base-contrast-80 oui-cursor-pointer hover:oui-fill-base-contrast oui-transition-colors\"\n onClick={props.showDialog}\n />\n </Tooltip>\n\n <SimpleDialog\n title={<Text weight=\"semibold\">{t(\"common.confirm\")}</Text>}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n contentProps={{\n onInteractOutside: (e) => {\n const el = document.querySelector(\"#privy-dialog\");\n if (el) {\n e.preventDefault();\n }\n },\n }}\n >\n <LinkDeviceContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n\nexport const LinkDeviceContent: FC<LinkDeviceProps> = (props) => {\n if (props.loading) {\n return <Loading />;\n }\n\n if (props.confirm) {\n return (\n <QRCode\n hideDialog={props.hideDialog}\n seconds={props.seconds}\n url={props.url}\n copyUrl={props.copyUrl}\n />\n );\n }\n\n return (\n <LinkDeviceConfirm\n hideDialog={props.hideDialog}\n onConfirm={props.onConfirm}\n />\n );\n};\n\ntype QRCodeProps = Pick<\n LinkDeviceProps,\n \"seconds\" | \"hideDialog\" | \"copyUrl\"\n> & {\n url?: string;\n};\n\nconst QRCode: FC<QRCodeProps> = (props) => {\n const { t } = useTranslation();\n const actions: SimpleDialogFooterProps[\"actions\"] = {\n primary: {\n label: t(\"common.ok\"),\n onClick: props.hideDialog,\n size: \"md\",\n },\n };\n\n return (\n <Flex direction=\"column\" gapY={3}>\n <Text size=\"base\" intensity={98}>\n {t(\"linkDevice.scanQRCode\")}\n </Text>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-center\"\n >\n {/* @ts-ignore */}\n <Trans i18nKey=\"linkDevice.createQRCode.success.description\" />\n </Text>\n\n <Text size=\"sm\" intensity={54}>\n {`${t(\"common.countdown\")}: `}\n <Text.gradient color=\"brand\" className=\"oui-tabular-nums\">\n {props.seconds}s\n </Text.gradient>\n </Text>\n\n <Flex\n className={cn(\n \"oui-w-[240px] oui-h-[240px] \",\n \"oui-border oui-border-base-contrast-20 oui-rounded-2xl\",\n )}\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Flex\n className=\"oui-w-[220px] oui-h-[220px] oui-rounded-lg oui-bg-white\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <QRCodeCanvas width={196} height={196} content={props.url} />\n </Flex>\n </Flex>\n\n <Flex\n direction=\"row\"\n gap={1}\n className={cn(\n \"oui-cursor-pointer\",\n \"oui-group oui-text-base-contrast-54 hover:oui-text-base-contrast\",\n )}\n onClick={props.copyUrl}\n >\n <CopyIcon\n size={16}\n opacity={1}\n className=\"oui-text-base-contrast-54 group-hover:oui-text-base-contrast\"\n />\n <Text size=\"2xs\" weight=\"regular\">\n {t(\"linkDevice.createQRCode.success.copyUrl\")}\n </Text>\n </Flex>\n\n <SimpleDialogFooter\n actions={actions}\n className=\"oui-w-full oui-p-0 !oui-pt-8\"\n />\n </Flex>\n );\n};\n\ntype QRCodeCanvasProps = {\n width: number;\n height: number;\n content?: string;\n};\n\nconst QRCodeCanvas: FC<QRCodeCanvasProps> = (props) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n if (!canvasRef.current || !props.content) return;\n\n const qrcode = qr(props.content);\n const width = props.width;\n const height = props.height;\n\n const ctx = canvasRef.current.getContext(\"2d\")!;\n\n const cells = qrcode.modules!;\n\n const tileW = width / cells.length;\n const tileH = height / cells.length;\n\n for (let r = 0; r < cells.length; ++r) {\n const row = cells[r];\n for (let c = 0; c < row.length; ++c) {\n ctx.fillStyle = row[c] ? \"#000\" : \"#fff\";\n const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);\n const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);\n ctx.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);\n }\n }\n }, [canvasRef, props.content]);\n\n return <canvas width={props.width} height={props.height} ref={canvasRef} />;\n};\n\ntype LinkDeviceConfirmProps = Pick<LinkDeviceProps, \"hideDialog\" | \"onConfirm\">;\n\nconst LinkDeviceConfirm: FC<LinkDeviceConfirmProps> = (props) => {\n const { t } = useTranslation();\n\n const actions: SimpleDialogFooterProps[\"actions\"] = {\n secondary: {\n label: t(\"common.cancel\"),\n onClick: props.hideDialog,\n className: \"oui-flex-1\",\n size: \"md\",\n },\n primary: {\n label: t(\"common.confirm\"),\n onClick: props.onConfirm,\n className: \"oui-flex-1\",\n size: \"md\",\n },\n };\n\n return (\n <Flex direction=\"column\">\n <MainLogo />\n <Text size=\"base\" intensity={98} className=\"oui-mt-5\">\n {t(\"linkDevice.createQRCode.linkMobileDevice\")}\n </Text>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-center oui-mt-3\"\n >\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"linkDevice.createQRCode.linkMobileDevice.description\"\n values={{\n hostname: window.location.hostname,\n }}\n />\n </Text>\n <SimpleDialogFooter\n actions={actions}\n className=\"oui-w-full oui-p-0 !oui-pt-8\"\n />\n </Flex>\n );\n};\n\nconst Loading = () => {\n const { t } = useTranslation();\n\n return (\n <Flex direction=\"column\" gap={5}>\n <Spinner />\n <Text size=\"sm\" intensity={98}>\n {t(\"linkDevice.createQRCode.loading.description\")}\n </Text>\n </Flex>\n );\n};\n\nconst Spinner = () => {\n return (\n <svg\n width=\"80\"\n height=\"80\"\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-animate-spin\"\n >\n <path\n d=\"M11.4858 52.1631C10.4698 52.5965 9.28872 52.1259 8.91766 51.0855C7.68926 47.6412 7.04029 44.0121 7.00182 40.3463C6.95634 36.0129 7.76483 31.713 9.38113 27.6921C10.9974 23.6712 13.3899 20.0079 16.4219 16.9116C18.9868 14.2923 21.967 12.122 25.2375 10.4861C26.2253 9.99202 27.4035 10.4698 27.8369 11.4858L28.8571 13.8773C29.2904 14.8933 28.8139 16.0615 27.8336 16.5706C25.3569 17.8567 23.0959 19.5294 21.1375 21.5293C18.7119 24.0064 16.7979 26.9369 15.5049 30.1537C14.2119 33.3704 13.5651 36.8103 13.6015 40.277C13.6308 43.076 14.1051 45.8482 15.0026 48.4906C15.3579 49.5365 14.8933 50.7096 13.8773 51.143L11.4858 52.1631Z\"\n fill=\"url(#paint0_linear_177_6754)\"\n />\n <path\n d=\"M73 40C73 58.2254 58.2254 73 40 73C21.7746 73 7 58.2254 7 40C7 21.7746 21.7746 7 40 7C58.2254 7 73 21.7746 73 40ZM13.6 40C13.6 54.5803 25.4197 66.4 40 66.4C54.5803 66.4 66.4 54.5803 66.4 40C66.4 25.4197 54.5803 13.6 40 13.6C25.4197 13.6 13.6 25.4197 13.6 40Z\"\n fill=\"white\"\n fillOpacity=\"0.06\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_177_6754\"\n x1=\"73\"\n y1=\"40\"\n x2=\"7\"\n y2=\"40\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const LinkDeviceIcon = forwardRef<SVGSVGElement, IconProps>(\n (props, ref) => {\n const { size = 20, viewBox, ...rest } = props;\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M19.167 7.583a1.74 1.74 0 0 0-1.731-1.75h-4.038a1.74 1.74 0 0 0-1.731 1.75v8.167c0 .967.775 1.75 1.73 1.75h4.039a1.74 1.74 0 0 0 1.73-1.75zm-1.154 0v7.584H12.82V7.583A.58.58 0 0 1 13.398 7h4.038a.58.58 0 0 1 .577.583m-2.02 8.75a.58.58 0 0 1-.576.584.58.58 0 0 1-.577-.584.58.58 0 0 1 .577-.583.58.58 0 0 1 .577.583\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.666 5a2.5 2.5 0 0 1 2.5-2.5h10a2.5 2.5 0 0 1 2.5 2.5.08.08 0 0 1-.078.078h-1.51a.08.08 0 0 1-.08-.078.834.834 0 0 0-.833-.833h-10A.834.834 0 0 0 3.333 5v5.633c0 .11.09.2.2.2h7.1c.11 0 .2.09.2.2V12.3a.2.2 0 0 1-.2.2H2.7a.2.2 0 0 0-.2.2v.633c0 .511.308.834.834.834h7.3c.11 0 .2.09.2.2v1.266a.2.2 0 0 1-.2.2h-7.3c-1.465 0-2.5-1.086-2.5-2.5v-1.666c0-.392.27-.72.635-.81.107-.026.198-.113.198-.224z\"\n />\n </svg>\n );\n },\n);\n","import { FC, SVGProps, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { LinkDeviceProps } from \"./linkDevice.ui\";\n\nexport const LinkDeviceMobile: FC<LinkDeviceProps> = (props) => {\n const [open, setOpen] = useState(false);\n const { account } = useAccount();\n const { t } = useTranslation();\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n };\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n size=\"xs\"\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: hideDialog,\n size: \"md\",\n fullWidth: true,\n },\n primary: {\n label: t(\"connector.disconnect\"),\n onClick: async () => {\n await onDisconnect();\n hideDialog();\n },\n size: \"md\",\n variant: \"outlined\",\n color: \"danger\",\n },\n }}\n >\n <Text intensity={54} size=\"sm\">\n {t(\"linkDevice.scanQRCode.connected.description\")}\n </Text>\n </SimpleDialog>\n <Flex\n className=\"oui-text-base-contrast oui-px-[6px]\"\n intensity={500}\n height={28}\n r=\"md\"\n onClick={showDialog}\n >\n <DesktopIcon />\n <Dot />\n <LinkIcon />\n <Dot />\n <MobileIcon />\n </Flex>\n </>\n );\n};\n\nconst Dot = () => {\n return (\n <Flex className=\"oui-gap-x-px oui-px-px\">\n <DotIcon />\n <DotIcon />\n <DotIcon />\n </Flex>\n );\n};\n\nconst DesktopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.5 2.93a2.25 2.25 0 0 0-2.25 2.25v5.25a.75.75 0 0 0-.75.75v1.5c0 1.272.93 2.25 2.25 2.25h10.5c1.318 0 2.25-.978 2.25-2.25v-1.5a.75.75 0 0 0-.75-.75V5.18a2.25 2.25 0 0 0-2.25-2.25zm0 1.5h9a.75.75 0 0 1 .75.75v5.25H3.75V5.18a.75.75 0 0 1 .75-.75M3 11.93h12v.75c0 .46-.277.75-.75.75H3.75c-.474 0-.75-.29-.75-.75z\" />\n </svg>\n);\n\nconst MobileIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M13.498 3.715a2.25 2.25 0 0 0-2.25-2.25h-4.5a2.25 2.25 0 0 0-2.25 2.25v10.5a2.25 2.25 0 0 0 2.25 2.25h4.5a2.25 2.25 0 0 0 2.25-2.25zm-1.5 0v9.75h-6v-9.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 .75.75m-2.25 11.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0\" />\n </svg>\n);\n\nconst LinkIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.007 6a5 5 0 1 1 10 0 5 5 0 0 1-10 0m7.486-2.344A.6.6 0 0 1 8.91 3.5c.15 0 .305.048.418.156a.55.55 0 0 1 0 .798L5.254 8.337a.62.62 0 0 1-.837 0L2.67 6.673a.55.55 0 0 1 0-.798.62.62 0 0 1 .837 0l1.329 1.266z\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"11.007\"\n y1=\"5.999\"\n x2=\"1.007\"\n y2=\"5.999\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nconst DotIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"2\"\n height=\"2\"\n viewBox=\"0 0 2 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M.667.334a.667.667 0 1 1 0 1.333.667.667 0 0 1 0-1.333\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"1.333\"\n y1=\"1.001\"\n x2=\"0\"\n y2=\"1.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useLinkDeviceScript } from \"./linkDevice.script\";\nimport { LinkDevice } from \"./linkDevice.ui\";\nimport { LinkDeviceMobile } from \"./linkDevice.ui.mobile\";\n\nexport const LinkDeviceWidget: React.FC = () => {\n const { isMobile } = useScreen();\n const state = useLinkDeviceScript();\n if (isMobile) {\n return <LinkDeviceMobile {...state} />;\n }\n return <LinkDevice {...state} />;\n};\n","export { LinkDeviceWidget } from \"./widget\";\nexport {\n LinkDevice,\n LinkDeviceContent,\n type LinkDeviceProps,\n} from \"./linkDevice.ui\";\nexport { useLinkDeviceScript } from \"./linkDevice.script\";\n","import { FC, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, ChevronLeftIcon, cn } from \"@kodiak-finance/orderly-ui\";\nimport { WalletConnectButtonExtension } from \"../accountMenu/menu.widget\";\nimport { ChainMenuWidget } from \"../chainMenu\";\nimport { LanguageSwitcherWidget } from \"../languageSwitcher\";\nimport { LeftNavUI } from \"../leftNav/leftNav.ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { ScanQRCodeWidget } from \"../scanQRCode\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport { LinkDeviceWidget } from \"./linkDevice\";\nimport { MainLogo } from \"./mainLogo\";\nimport { MainNavWidgetProps } from \"./mainNav.widget\";\n\ntype MainNavMobileProps = {\n current?: string;\n subItems?: {\n name: string;\n href: string;\n }[];\n routerAdapter?: RouterAdapter;\n} & MainNavWidgetProps;\n\nexport const MainNavMobile: FC<MainNavMobileProps> = (props) => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const currentMenu = useMemo(() => {\n if (Array.isArray(props?.initialMenu)) {\n return props?.campaigns;\n }\n return props?.mainMenus?.find((menu) => {\n if (!props.current) {\n return menu.href === props?.initialMenu;\n } else {\n return menu.href === props.current;\n }\n });\n }, [props?.mainMenus, props?.initialMenu, props?.current]);\n\n const title = useMemo(() => {\n if (currentMenu?.isHomePageInMobile) {\n return <MainLogo {...props?.logo} />;\n }\n return (\n <Text className=\"oui-text-2xl oui-font-bold oui-text-base-contrast\">\n {currentMenu?.name}\n </Text>\n );\n }, [currentMenu, props?.logo]);\n\n const isSub = useMemo(() => {\n return Boolean(!currentMenu || currentMenu.isSubMenuInMobile);\n }, [currentMenu]);\n\n const subTitle = useMemo(() => {\n if (currentMenu?.isSubMenuInMobile) {\n return currentMenu?.name;\n }\n if (props?.subItems?.some((item) => item.href === props?.current)) {\n return props?.subItems?.find((item) => item.href === props?.current)\n ?.name;\n }\n return null;\n }, [props?.subItems, props?.current, currentMenu]);\n\n const onBack = () => {\n let target = props.mainMenus?.find(\n (item) => item.href === props.initialMenu,\n );\n if (currentMenu?.isSubMenuInMobile) {\n target = currentMenu?.subMenuBackNav;\n }\n props?.routerAdapter?.onRouteChange(target as any);\n };\n\n const showLinkDevice =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const showChainMenu = !showLinkDevice && !wrongNetwork;\n\n const showQrcode = state.status === AccountStatusEnum.NotConnected;\n\n const showSubAccount = useMemo(\n () => state.status >= AccountStatusEnum.EnableTrading,\n [state.status],\n );\n\n if (isSub) {\n return (\n <Flex\n width={\"100%\"}\n height={44}\n px={3}\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n className=\"oui-relative\"\n >\n <ChevronLeftIcon\n className=\"oui-absolute oui-left-6 oui-text-base-contrast-54\"\n onClick={onBack}\n />\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast\">\n {subTitle}\n </Text>\n </Flex>\n );\n }\n\n const renderContent = () => {\n const languageSwitcher = <LanguageSwitcherWidget />;\n const scanQRCode = showQrcode && <ScanQRCodeWidget />;\n const subAccount = showSubAccount && <SubAccountWidget />;\n const linkDevice = showLinkDevice && <LinkDeviceWidget />;\n const chainMenu = showChainMenu && <ChainMenuWidget />;\n const walletConnect = <WalletConnectButtonExtension />;\n\n const leftNav = props.leftNav && (\n <LeftNavUI\n {...props.leftNav}\n logo={props?.logo}\n routerAdapter={props?.routerAdapter}\n />\n );\n\n if (typeof props.customRender === \"function\") {\n return props.customRender?.({\n leftNav,\n title,\n languageSwitcher,\n scanQRCode,\n subAccount,\n linkDevice,\n chainMenu,\n walletConnect,\n });\n }\n\n return (\n <Flex width=\"100%\" justify=\"between\">\n <Flex gapX={2}>\n {props?.customLeftNav || leftNav}\n {title}\n </Flex>\n\n <Flex gapX={2}>\n {props.leading}\n {languageSwitcher}\n {scanQRCode}\n {/* {subAccount} */}\n {/* {linkDevice} */}\n {chainMenu}\n {walletConnect}\n {props.trailing}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <Flex\n width={\"100%\"}\n height={44}\n px={3}\n itemAlign={\"center\"}\n className={cn(props.className, props.classNames?.root)}\n >\n {renderContent()}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Checkbox, cn, Flex, SimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { InfoIcon } from \"../icons\";\nimport type { UseRestrictedInfoScriptReturn } from \"./restrictedInfo.script\";\n\nexport type RestrictedInfoProps = UseRestrictedInfoScriptReturn & {\n className?: string;\n};\n\nexport const RestrictedInfo: FC<RestrictedInfoProps> = (props) => {\n const { brokerName, agree, setAgree } = props;\n const {\n ip,\n content,\n restrictedOpen,\n canUnblock,\n accessRestricted,\n setAccessRestricted,\n } = props.restrictedInfo || {};\n const { t } = useTranslation();\n\n // if user region is in the canUnblock regions and accessRestricted is not set, show the dialog\n if (restrictedOpen && canUnblock && accessRestricted === undefined) {\n return (\n <SimpleDialog\n open={canUnblock}\n title={t(\"restrictedInfo.accessRestricted\")}\n size=\"sm\"\n closable={false}\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => {\n setAccessRestricted(true);\n },\n size: \"md\",\n },\n primary: {\n label: t(\"common.confirm\"),\n onClick: async () => {\n setAccessRestricted(false);\n },\n size: \"md\",\n disabled: !agree,\n },\n }}\n >\n {t(\"restrictedInfo.accessRestricted.description\")}\n\n <Flex gapX={1} pt={2}>\n <Checkbox\n id=\"orderConfirm\"\n color={\"white\"}\n checked={agree}\n onCheckedChange={(checked) => {\n setAgree(!!checked);\n }}\n />\n <label htmlFor=\"orderConfirm\" className=\"oui-cursor-pointer\">\n {t(\"restrictedInfo.accessRestricted.agree\")}\n </label>\n </Flex>\n </SimpleDialog>\n );\n }\n\n if (!restrictedOpen) {\n return;\n }\n\n const renderContent = () => {\n if (typeof content === \"function\") {\n return <span>{content({ ip: ip!, brokerName })}</span>;\n }\n return (\n content || (\n <span>\n {t(\"restrictedInfo.description.default\", {\n brokerName,\n ip,\n })}\n </span>\n )\n );\n };\n\n return (\n <Flex\n ref={props.container}\n justify=\"center\"\n className={cn(\n \"oui-restricted-info\",\n \"oui-rounded-xl oui-p-[7px]\",\n \"oui-text-warning-darken\",\n props.className,\n )}\n >\n <Flex\n className={cn(\n \"oui-min-h-[20px] oui-gap-1\",\n \"oui-text-2xs oui-leading-4 md:oui-text-sm\",\n \"oui-items-start lg:oui-justify-center\",\n props.mutiLine ? \"lg:oui-items-start\" : \"lg:oui-items-center\",\n )}\n >\n <InfoIcon size={20} className=\"oui-size-4 oui-shrink-0 lg:oui-size-5\" />\n {renderContent()}\n </Flex>\n </Flex>\n );\n};\n","import { useRef, useState } from \"react\";\nimport { useConfig, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useObserverElement } from \"@kodiak-finance/orderly-ui\";\n\nexport type UseRestrictedInfoScriptReturn = ReturnType<\n typeof useRestrictedInfoScript\n> & {\n brokerName?: string;\n};\n\nexport const useRestrictedInfoScript = () => {\n const { restrictedInfo } = useAppContext();\n const brokerName = useConfig(\"brokerName\");\n const container = useRef<HTMLDivElement>(null);\n const [mutiLine, setMutiLine] = useState(false);\n const [agree, setAgree] = useState(false);\n\n const [canUnblock, setCanUnblock] = useLocalStorage(\n \"orderly_unblock_restricted\",\n true,\n );\n\n useObserverElement(container.current, (entry) => {\n setMutiLine(entry.contentRect.height > 28);\n });\n\n return {\n restrictedInfo,\n brokerName,\n container,\n mutiLine,\n agree,\n setAgree,\n };\n};\n","import { FC } from \"react\";\nimport { useRestrictedInfoScript } from \"./restrictedInfo.script\";\nimport { RestrictedInfo, RestrictedInfoProps } from \"./restrictedInfo.ui\";\n\nexport type RestrictedInfoWidgetProps = Pick<RestrictedInfoProps, \"className\">;\n\nexport const RestrictedInfoWidget: FC<RestrictedInfoWidgetProps> = (props) => {\n const state = useRestrictedInfoScript();\n return <RestrictedInfo {...props} {...state} />;\n};\n","export { RestrictedInfo } from \"./restrictedInfo.ui\";\nexport { RestrictedInfoWidget } from \"./restrictedInfo.widget\";\nexport { useRestrictedInfoScript } from \"./restrictedInfo.script\";\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\ninterface Options {\n isActive: boolean; // 当前项是否正被展示\n pxPerSec?: number; // 滚动速度(像素/秒)\n startDelayMs?: number; // 开始前停顿\n endDelayMs?: number; // 结束后停顿\n fallbackStayMs?: number; // 不溢出时停留多久再切\n onFinish?: () => void; // 滚动(或停留)结束回调\n}\n\nexport const useMarqueeOnce = (opts: Options) => {\n const {\n isActive,\n pxPerSec = 60,\n startDelayMs = 500,\n endDelayMs = 500,\n fallbackStayMs = 2500,\n onFinish,\n } = opts;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const rafRef = useRef<number | null>(null);\n\n const stopAll = () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n rafRef.current = null;\n };\n\n const timers = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n const clearTimers = () => {\n timers.current?.forEach((id) => {\n if (id) {\n clearTimeout(id);\n }\n });\n timers.current = [];\n };\n\n const [overflow, setOverflow] = useState<boolean>(false);\n\n const [delta, setDelta] = useState<number>(0); // 需要水平滚动的距离(>0 表示需要左移这么多)\n\n useLayoutEffect(() => {\n const c = containerRef.current;\n const t = contentRef.current;\n if (!c || !t) {\n return;\n }\n\n const update = () => {\n const cw = c.clientWidth;\n const tw = t.scrollWidth;\n const need = Math.max(0, tw - cw);\n setOverflow(need > 0);\n setDelta(need);\n };\n\n update();\n\n const ro = new ResizeObserver(update);\n ro.observe(c);\n ro.observe(t);\n return () => {\n ro.disconnect();\n };\n }, []);\n\n useEffect(() => {\n // 只有成为激活项时才跑动画 / 计时\n if (!isActive) {\n stopAll();\n clearTimers();\n // 复位 transform,避免下一次出现时位置不对\n if (contentRef.current) {\n contentRef.current.style.transform = \"translate3d(0, 0, 0)\";\n }\n return;\n }\n\n const run = async () => {\n stopAll();\n clearTimers();\n\n if (!overflow || delta <= 0) {\n // 不溢出:停留 fallbackStayMs,结束回调\n const id = setTimeout(() => {\n onFinish?.();\n }, fallbackStayMs);\n timers.current.push(id);\n return;\n }\n\n // 溢出:先停顿,再按速度滚\n const startId = setTimeout(() => {\n const distance = delta; // 需要移动的像素\n const durationMs = (distance / pxPerSec) * 1000;\n\n const el = contentRef.current;\n if (!el) {\n return;\n }\n\n let startTs = 0;\n const startX = 0;\n const endX = -distance;\n\n const step = (ts: number) => {\n if (!startTs) {\n startTs = ts;\n }\n const progress = Math.min(1, (ts - startTs) / durationMs);\n const x = startX + (endX - startX) * progress;\n el.style.transform = `translate3d(${x}px, 0, 0)`;\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(step);\n } else {\n const endId = setTimeout(() => {\n onFinish?.();\n }, endDelayMs);\n timers.current.push(endId);\n }\n };\n\n rafRef.current = requestAnimationFrame(step);\n }, startDelayMs);\n\n timers.current.push(startId);\n };\n\n run();\n\n return () => {\n stopAll();\n clearTimers();\n };\n }, [\n isActive,\n overflow,\n delta,\n pxPerSec,\n startDelayMs,\n endDelayMs,\n fallbackStayMs,\n onFinish,\n ]);\n\n return { containerRef, contentRef, overflow, delta };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { EmblaCarouselType } from \"@kodiak-finance/orderly-ui\";\n\nexport const usePrevNextButtons = (\n emblaApi?: EmblaCarouselType,\n onButtonClick?: (emblaApi: EmblaCarouselType) => void,\n) => {\n const [prevBtnDisabled, setPrevBtnDisabled] = useState<boolean>(true);\n const [nextBtnDisabled, setNextBtnDisabled] = useState<boolean>(true);\n\n const onPrevButtonClick = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollPrev();\n onButtonClick?.(emblaApi);\n }, [emblaApi, onButtonClick]);\n\n const onNextButtonClick = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollNext();\n onButtonClick?.(emblaApi);\n }, [emblaApi, onButtonClick]);\n\n const onSelect = useCallback((emblaApi: EmblaCarouselType) => {\n setPrevBtnDisabled(!emblaApi.canScrollPrev());\n setNextBtnDisabled(!emblaApi.canScrollNext());\n }, []);\n\n useEffect(() => {\n if (!emblaApi) {\n return;\n }\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onSelect).on(\"select\", onSelect);\n return () => {\n emblaApi.off(\"reInit\", onSelect).off(\"select\", onSelect);\n };\n }, [emblaApi, onSelect]);\n\n return {\n prevBtnDisabled,\n nextBtnDisabled,\n onPrevButtonClick,\n onNextButtonClick,\n } as const;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { EmblaCarouselType } from \"@kodiak-finance/orderly-ui\";\n\nexport const useSelectedSnapDisplay = (emblaApi?: EmblaCarouselType) => {\n const [selectedSnap, setSelectedSnap] = useState<number>(0);\n const [snapCount, setSnapCount] = useState<number>(0);\n\n const updateScrollSnapState = useCallback((emblaApi?: EmblaCarouselType) => {\n if (emblaApi) {\n setSnapCount(emblaApi.scrollSnapList().length);\n setSelectedSnap(emblaApi.selectedScrollSnap());\n }\n }, []);\n\n useEffect(() => {\n if (!emblaApi) {\n return;\n }\n updateScrollSnapState(emblaApi);\n emblaApi.on(\"select\", updateScrollSnapState);\n emblaApi.on(\"reInit\", updateScrollSnapState);\n return () => {\n emblaApi.off(\"select\", updateScrollSnapState);\n emblaApi.off(\"reInit\", updateScrollSnapState);\n };\n }, [emblaApi, updateScrollSnapState]);\n\n return {\n selectedSnap,\n snapCount,\n } as const;\n};\n","export * from \"./useMarqueeOnce\";\nexport * from \"./usePrevNextButtons\";\nexport * from \"./useSelectedSnapDisplay\";\n","import React from \"react\";\n\nexport const SoundIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\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=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M11.5312 2.25534C11.2703 2.14734 10.9472 2.18333 10.7109 2.41958C10.1862 2.94383 9.52305 3.37884 8.7642 3.70434C7.99343 4.03434 6.411 4.46108 5.25547 4.45358C3.00765 4.43858 1.49993 5.71283 1.5 8.18033C1.5 10.3426 2.72745 11.6003 4.49423 11.8831L4.5 13.4476C4.5 14.6888 5.50733 15.6953 6.75 15.6953C7.89188 15.6953 8.83245 14.8118 8.97765 13.7071C8.98462 13.6538 9 13.4476 9 12.6976C9.67373 13.0118 10.232 13.5091 10.7109 13.9876C11.1834 14.4593 12 14.1166 12 13.4491C12 12.7711 11.9964 11.5433 11.9964 10.3186C12.8805 9.99159 13.5 9.15383 13.5 8.20358C13.5 7.25333 12.9149 6.39385 12.004 6.0751C12.004 4.85035 12 3.63609 12 2.95809C12 2.62434 11.7923 2.36409 11.5312 2.25534ZM13.3359 3.59033C13.1501 3.63833 12.9956 3.7636 12.8906 3.94135C12.6809 4.29835 12.7913 4.76259 13.1484 4.97184C14.2882 5.64084 15 6.85883 15 8.20358C15 9.54908 14.289 10.7663 13.1484 11.4353C12.7912 11.6446 12.6576 12.1081 12.8672 12.4651C13.0768 12.8221 13.5411 12.9323 13.8984 12.7231C15.4934 11.7878 16.4999 10.0861 16.5 8.20358C16.5 6.32183 15.4922 4.61933 13.8984 3.68408C13.7198 3.57908 13.5217 3.54233 13.3359 3.59033ZM10.5035 4.47384C10.5035 5.16759 10.5 5.89059 10.5 6.70509C10.5 8.20359 10.5 8.2036 10.5 9.7021C10.5 10.5166 10.5024 11.2103 10.5024 11.9041C8.98343 11.0078 7.41735 10.6103 6.00157 10.4828C6.00157 9.33909 5.99775 7.07709 5.99775 5.89884C6.14475 5.89209 6.31575 5.87335 6.5625 5.83885C7.52017 5.7016 8.4717 5.45259 9.375 5.06559C9.80505 4.88184 10.1247 4.71534 10.5035 4.47384ZM4.49887 6.02484C4.49887 7.17684 4.49775 9.21234 4.49775 10.3643C3.52177 10.0943 3 9.40508 3 8.18033C3 6.96983 3.47025 6.25209 4.49887 6.02484ZM6 11.9971C6.23745 12.0053 7.0977 12.1583 7.49243 12.2581L7.5 13.4476C7.5 13.8616 7.16423 14.1968 6.75 14.1968C6.33577 14.1968 6 13.8616 6 13.4476V11.9971Z\"\n fill=\"#fff\"\n fillOpacity={0.98}\n />\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n SoundIcon.displayName = \"SoundIcon\";\n}\n","export * from \"./soundIcon\";\n","import React, { useCallback, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AnnouncementType } from \"@kodiak-finance/orderly-types\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n cn,\n DialogTitle,\n DialogHeader,\n Dialog,\n DialogBody,\n DialogContent,\n Divider,\n Flex,\n useScreen,\n Text,\n useEmblaCarousel,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseIcon } from \"../icons\";\nimport type { AnnouncementScriptReturn } from \"./announcement.script\";\nimport {\n useMarqueeOnce,\n usePrevNextButtons,\n useSelectedSnapDisplay,\n} from \"./hooks\";\nimport { SoundIcon } from \"./icons\";\n\ninterface SwitchTipsProps {\n selectedSnap: number;\n snapCount: number;\n prevDisabled: boolean;\n nextDisabled: boolean;\n nextTips: React.MouseEventHandler<SVGSVGElement>;\n prevTips: React.MouseEventHandler<SVGSVGElement>;\n}\n\nconst SwitchTips: React.FC<Readonly<SwitchTipsProps>> = (props) => {\n const {\n selectedSnap,\n snapCount,\n prevDisabled,\n nextDisabled,\n prevTips,\n nextTips,\n } = props;\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div\n aria-live=\"polite\"\n className=\"oui-text-sm oui-tabular-nums oui-text-base-contrast-54\"\n >\n {selectedSnap + 1}/{snapCount}\n </div>\n );\n }\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-0 oui-text-base-contrast-54\">\n <ChevronLeftIcon\n size={16}\n opacity={1}\n className={cn(\n \"oui-size-4 oui-shrink-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 lg:oui-size-5\",\n prevDisabled ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n onClick={prevDisabled ? undefined : prevTips}\n />\n <div\n aria-live=\"polite\"\n className=\"oui-text-sm oui-tabular-nums oui-text-base-contrast-54\"\n >\n {selectedSnap + 1}/{snapCount}\n </div>\n <ChevronRightIcon\n size={16}\n opacity={1}\n className={cn(\n \"oui-size-4 oui-shrink-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 lg:oui-size-5\",\n nextDisabled ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n onClick={nextDisabled ? undefined : nextTips}\n />\n </div>\n );\n};\n\ninterface ControlsProps {\n selectedSnap: number;\n snapCount: number;\n prevDisabled: boolean;\n nextDisabled: boolean;\n nextTips: React.MouseEventHandler<SVGSVGElement>;\n prevTips: React.MouseEventHandler<SVGSVGElement>;\n closeTips: React.MouseEventHandler<SVGSVGElement>;\n}\n\nconst Controls: React.FC<ControlsProps> = (props) => {\n const {\n selectedSnap,\n snapCount,\n prevDisabled,\n nextDisabled,\n prevTips,\n nextTips,\n closeTips,\n } = props;\n const { isMobile } = useScreen();\n return (\n <Flex gap={isMobile ? 1 : 2} justify={\"center\"} itemAlign={\"center\"}>\n <SwitchTips\n prevDisabled={prevDisabled}\n nextDisabled={nextDisabled}\n selectedSnap={selectedSnap}\n snapCount={snapCount}\n prevTips={prevTips}\n nextTips={nextTips}\n />\n <CloseIcon\n size={18}\n onClick={closeTips}\n className=\"oui-cursor-pointer oui-text-base-contrast-80 hover:oui-text-base-contrast\"\n />\n </Flex>\n );\n};\n\nconst TipsType: React.FC<{ type?: AnnouncementType | null }> = (props) => {\n const { type } = props;\n\n const { t } = useTranslation();\n\n const { label, className } = useMemo(() => {\n const map: Record<AnnouncementType, { label: string; className: string }> =\n {\n [AnnouncementType.Listing]: {\n label: t(\"announcement.type.listing\"),\n className: \"oui-bg-primary/15 oui-text-primary\",\n },\n [AnnouncementType.Maintenance]: {\n label: t(\"announcement.type.maintenance\"),\n className: \"oui-bg-[rgba(232,136,0,0.15)] oui-text-warning-darken\",\n },\n [AnnouncementType.Delisting]: {\n label: t(\"announcement.type.delisting\"),\n className: \"oui-bg-[rgba(232,136,0,0.15)] oui-text-warning-darken\",\n },\n [AnnouncementType.Campaign]: {\n label: t(\"announcement.type.campaign\"),\n className: \"oui-bg-primary/15 oui-text-primary\",\n },\n };\n return (\n map[type!] || {\n label: type,\n className: map[AnnouncementType.Listing].className,\n }\n );\n }, [type, t]);\n\n if (!label) {\n return null;\n }\n\n return (\n <Flex\n justify=\"center\"\n px={2}\n r=\"base\"\n className={cn(\n \"oui-text-2xs oui-font-medium oui-leading-[18px]\",\n \"oui-whitespace-nowrap oui-break-normal\",\n className,\n )}\n >\n {label}\n </Flex>\n );\n};\n\ninterface ItemProps {\n type?: AnnouncementType | null;\n text: string;\n url?: string | null;\n isActive: boolean;\n onItemFinish: () => void;\n}\n\nconst AnnouncementItem: React.FC<ItemProps> = (props) => {\n const { type, text, url, isActive, onItemFinish } = props;\n\n const { containerRef, contentRef, overflow } = useMarqueeOnce({\n isActive: isActive,\n pxPerSec: 90,\n startDelayMs: 1000,\n endDelayMs: 1000,\n fallbackStayMs: 2500,\n onFinish: onItemFinish,\n });\n\n const onClick = () => {\n if (url) {\n window.open(url, \"_blank\");\n }\n };\n\n return (\n <Flex\n height={\"100%\"}\n itemAlign=\"center\"\n className=\"oui-flex-none oui-basis-full oui-transform-gpu\"\n >\n <div\n ref={containerRef}\n className={cn(\n \"oui-relative oui-flex oui-h-[34px] oui-w-full oui-transform-gpu oui-items-center oui-overflow-hidden\",\n overflow ? \"oui-justify-start\" : \"oui-justify-center\",\n )}\n >\n <div\n ref={contentRef}\n className={cn(\n \"oui-inline-flex oui-items-center oui-gap-2\",\n \"oui-h-[34px] oui-whitespace-nowrap oui-leading-[34px]\",\n \"oui-w-fit oui-transform-gpu oui-will-change-transform\",\n )}\n >\n <TipsType type={type} />\n <Text\n size=\"xs\"\n intensity={80}\n className={cn(\n \"oui-transform-gpu\",\n url ? \"oui-cursor-pointer\" : undefined,\n )}\n onClick={url ? onClick : undefined}\n >\n {text}\n </Text>\n </div>\n </div>\n </Flex>\n );\n};\n\nexport type AnnouncementProps = AnnouncementScriptReturn & {\n style?: React.CSSProperties;\n className?: string;\n hideTips?: boolean;\n};\n\nexport const AnnouncementUI: React.FC<Readonly<AnnouncementProps>> = (\n props,\n) => {\n const {\n maintenanceDialogInfo,\n showAnnouncement,\n tips,\n closeTips,\n className,\n style,\n } = props;\n\n const { t, i18n } = useTranslation();\n\n const [emblaRef, emblaApi] = useEmblaCarousel({\n loop: true,\n axis: \"y\",\n align: \"center\",\n duration: 30,\n });\n\n const {\n prevBtnDisabled,\n nextBtnDisabled,\n onPrevButtonClick,\n onNextButtonClick,\n } = usePrevNextButtons(emblaApi);\n\n const { selectedSnap, snapCount } = useSelectedSnapDisplay(emblaApi);\n\n const goNext = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollNext();\n }, [emblaApi]);\n\n if (maintenanceDialogInfo) {\n return (\n <Dialog open>\n <DialogContent\n closable={false}\n onOpenAutoFocus={(event) => event.preventDefault()}\n className=\"oui-w-[320px] lg:oui-w-auto\"\n >\n <DialogHeader>\n <DialogTitle>{t(\"maintenance.dialog.title\")}</DialogTitle>\n </DialogHeader>\n <Divider />\n <DialogBody className=\"oui-text-2xs lg:oui-text-xs\">\n {maintenanceDialogInfo}\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n }\n\n if (!showAnnouncement) {\n return null;\n }\n\n return (\n <div\n style={style}\n className={cn(\n \"oui-relative oui-z-[1] oui-flex oui-transform-gpu oui-flex-row oui-flex-nowrap oui-items-center oui-justify-between oui-gap-x-1.5 oui-overflow-hidden oui-rounded-xl oui-bg-base-9 oui-px-4 oui-font-semibold\",\n className,\n )}\n >\n <div className=\"oui-size-[18px]\">\n <SoundIcon />\n </div>\n <div\n ref={emblaRef}\n className=\"oui-relative oui-h-[34px] oui-w-full oui-max-w-full oui-transform-gpu oui-overflow-hidden\"\n >\n <div className=\"oui-flex oui-h-full oui-transform-gpu oui-flex-col\">\n {tips.map((item, index) => (\n <AnnouncementItem\n key={`item-${item.announcement_id}-${index}`}\n type={item?.type}\n text={item?.i18n?.[i18n.language] || item?.message?.trim()}\n url={item?.url}\n isActive={index === selectedSnap}\n onItemFinish={goNext}\n />\n ))}\n </div>\n </div>\n <Controls\n selectedSnap={selectedSnap}\n snapCount={snapCount}\n closeTips={closeTips}\n prevTips={onPrevButtonClick}\n nextTips={onNextButtonClick}\n prevDisabled={prevBtnDisabled}\n nextDisabled={nextBtnDisabled}\n />\n </div>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport { produce } from \"immer\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AnnouncementType,\n API,\n EMPTY_LIST,\n WSMessage,\n} from \"@kodiak-finance/orderly-types\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementScriptOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (ori: API.Announcement) => {\n return produce<API.Announcement>(ori, (draft) => {\n if (Array.isArray(draft.rows)) {\n draft.rows.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n }\n });\n};\n\nconst useAnnouncementData = () => {\n const ws = useWS();\n const { customAnnouncements } = useAppContext();\n\n const [announcementStore, setStore] = useLocalStorage<AnnouncementStore>(\n ORDERLY_ANNOUNCEMENT_KEY,\n {},\n );\n\n const [tips, setTips] = useState<API.Announcement>({});\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { t } = useTranslation();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n return produce(prev, (draft) => {\n // Make sure draft.rows is an array\n if (!Array.isArray(draft.rows)) {\n draft.rows = [];\n }\n const idx = draft.rows.findIndex(\n (tip) => tip.announcement_id === message.announcement_id,\n );\n // Filter out old tips with the same id\n if (idx !== -1) {\n draft.rows.splice(idx, 1);\n }\n // Add the latest tip\n draft.rows.push({\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n });\n });\n });\n // @ts-ignore\n setStore((prev) => ({ ...prev, show: true }));\n }\n },\n onError(err) {\n if (err instanceof Error) {\n console.error(\"Error receiving announcement:\", err.message);\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const apiTime = announcements.last_updated_time ?? 0;\n const cachedTime = announcementStore.lastUpdateTime ?? 0;\n if (cachedTime < apiTime) {\n setTips((prev) => ({ ...prev, rows: announcements?.rows }));\n setStore({ show: true, lastUpdateTime: apiTime });\n } else {\n setTips((prev) => {\n return produce<API.Announcement>(prev, (draft) => {\n if (announcements?.rows?.length) {\n // If there are announcement rows available, create a Set to store IDs of existing tips\n const existingIds = new Set<string | number>(\n prev.rows?.map((tip) => tip.announcement_id),\n );\n // Find the maintenance tip in previous tips (if any)\n const maintenanceTip = prev.rows?.find(\n (tip) => tip.announcement_id === maintentanceId,\n );\n // Clear the draft’s rows array to refill it\n draft.rows = [];\n announcements.rows.forEach((item) => {\n if (!existingIds.has(item.announcement_id)) {\n // If the item’s ID is not in existingIds, push it into the draft\n draft.rows?.push(item);\n }\n });\n if (maintenanceTip) {\n // If a maintenance tip existed before, unshift it to the front\n draft.rows.unshift(maintenanceTip);\n }\n } else {\n // Find the index of the maintenance tip in draft rows\n const idx = draft.rows?.findIndex(\n (tip) => tip.announcement_id === maintentanceId,\n );\n if (idx !== undefined && idx !== -1) {\n // Remove the maintenance tip from draft rows\n draft.rows?.splice(idx, 1);\n }\n }\n });\n });\n }\n }, [announcements]);\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n if (status === MaintenanceStatus.Maintenance) {\n setMaintenanceDialogInfo(getMaintentDialogContent(brokerName, endDate));\n return;\n }\n setMaintenanceDialogInfo(undefined);\n\n if (startTime) {\n if (startTime < getTimestamp() + oneDay) {\n setTips((prev) =>\n produce<API.Announcement>(prev, (draft) => {\n // Make sure draft.rows is an array\n if (!Array.isArray(draft.rows)) {\n draft.rows = [];\n }\n // Rebuild rows: insert the latest maintenance tip first, then put the old non-maintenance ones at the end\n draft.rows = [\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ...draft.rows.filter(\n (tip) => tip.type !== AnnouncementType.Maintenance,\n ),\n ];\n }),\n );\n }\n } else {\n setTips((prev) => {\n return produce<API.Announcement>(prev, (draft) => {\n const index = draft.rows?.findIndex(\n (tip) => tip.announcement_id === maintentanceId,\n );\n if (index !== undefined && index !== -1) {\n draft.rows?.splice(index, 1);\n }\n });\n });\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n // Merge custom announcements with API announcements\n const mergedTips = useMemo(() => {\n const tipsCopy = { ...tips };\n if (customAnnouncements && customAnnouncements.length > 0) {\n // Custom announcements appear first (higher priority)\n tipsCopy.rows = [...customAnnouncements, ...(tips.rows || [])];\n }\n return sortDataByUpdatedTime(tipsCopy);\n }, [tips, customAnnouncements]);\n\n return {\n tips: mergedTips,\n maintenanceDialogInfo: maintenanceDialogInfo,\n };\n};\n\nexport type AnnouncementScriptReturn = ReturnType<typeof useAnnouncementScript>;\n\nexport const useAnnouncementScript = (options?: AnnouncementScriptOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n const { dataAdapter } = useOrderlyContext();\n\n const { tips, maintenanceDialogInfo } = useAnnouncementData();\n\n const memoizedTips = useMemo<API.AnnouncementRow[]>(() => {\n if (typeof dataAdapter?.announcementList === \"function\") {\n return dataAdapter.announcementList(\n tips?.rows ?? (EMPTY_LIST as API.AnnouncementRow[]),\n );\n }\n return tips?.rows ?? (EMPTY_LIST as API.AnnouncementRow[]);\n }, [dataAdapter?.announcementList, tips?.rows]);\n\n const [announcementStore, setStore] = useLocalStorage<AnnouncementStore>(\n ORDERLY_ANNOUNCEMENT_KEY,\n {},\n );\n\n const closeTips = () => {\n // @ts-ignore\n setStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = memoizedTips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [\n memoizedTips,\n announcementStore.show,\n options?.hideTips,\n setShowAnnouncement,\n ]);\n\n return {\n maintenanceDialogInfo,\n tips: memoizedTips,\n closeTips: closeTips,\n showAnnouncement: showAnnouncement,\n };\n};\n","import React from \"react\";\nimport { useAnnouncementScript } from \"./announcement.script\";\nimport { AnnouncementUI, type AnnouncementProps } from \"./announcement.ui\";\n\nexport type AnnouncementWidgetProps = Pick<\n AnnouncementProps,\n \"style\" | \"className\" | \"hideTips\"\n>;\n\nexport const AnnouncementWidget: React.FC<AnnouncementWidgetProps> = (\n props,\n) => {\n const { hideTips, ...rest } = props;\n const state = useAnnouncementScript({ hideTips });\n return <AnnouncementUI {...state} {...rest} />;\n};\n","export { AnnouncementUI } from \"./announcement.ui\";\nexport { useAnnouncementScript } from \"./announcement.script\";\nexport {\n AnnouncementWidget,\n type AnnouncementWidgetProps,\n} from \"./announcement.widget\";\n","import React, { useMemo } from \"react\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { BottomNavItem } from \"./bottomNav.widget\";\n\nexport type BottomNavProps = {\n mainMenus?: BottomNavItem[];\n current?: string | string[];\n onRouteChange?: RouterAdapter[\"onRouteChange\"];\n};\n\nexport const BottomNav: React.FC<BottomNavProps> = (props) => {\n const { mainMenus, current, onRouteChange } = props;\n\n const isSubmenu = useMemo(() => {\n return mainMenus?.every((menu) => menu.href !== current);\n }, [mainMenus, current]);\n\n const menus = useMemo(() => {\n return mainMenus?.map((menu) => {\n const isActive = current === menu.href;\n return (\n <Flex\n key={menu.name}\n direction={\"column\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n className=\"oui-flex-1\"\n onClick={() => {\n onRouteChange?.({ href: menu.href, name: menu.name });\n }}\n >\n <Text>{isActive ? menu.activeIcon : menu.inactiveIcon}</Text>\n <Text>{menu.name}</Text>\n </Flex>\n );\n });\n }, [mainMenus, current, onRouteChange]);\n\n if (isSubmenu || !mainMenus) {\n return null;\n }\n\n return (\n <Flex\n width={\"100%\"}\n height={64}\n px={3}\n itemAlign={\"center\"}\n justify={\"between\"}\n className=\"oui-bg-base-9\"\n >\n {menus}\n </Flex>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { BottomNav } from \"./bottomNav.ui.mobile\";\n\nexport type BottomNavItem = {\n name: string;\n href: string;\n activeIcon: ReactNode;\n inactiveIcon: ReactNode;\n};\n\nexport type BottomNavProps = {\n mainMenus?: BottomNavItem[];\n current?: string;\n onRouteChange?: RouterAdapter[\"onRouteChange\"];\n};\n\nexport const BottomNavWidget: React.FC<BottomNavProps> = (props) => {\n const { isMobile } = useScreen();\n const { mainMenus, ...rest } = props;\n return isMobile ? <BottomNav mainMenus={mainMenus} {...rest} /> : null;\n};\n","export { BottomNavWidget, type BottomNavProps } from \"./bottomNav.widget\";\nexport { BottomNav } from \"./bottomNav.ui.mobile\";\n","import React from \"react\";\nimport { Box, cn } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavMobile } from \"../main/mainNav.ui.mobile\";\nimport type { ScaffoldScriptReturn } from \"./scaffold.script\";\nimport type { ScaffoldProps } from \"./scaffold.widget\";\n\nconst LazyRestrictedInfoWidget = React.lazy(() =>\n import(\"../restrictedInfo\").then((mod) => {\n return { default: mod.RestrictedInfoWidget };\n }),\n);\n\nconst LazyAnnouncementWidget = React.lazy(() =>\n import(\"../announcement\").then((mod) => {\n return { default: mod.AnnouncementWidget };\n }),\n);\n\nconst LazyBottomNav = React.lazy(() =>\n import(\"../bottomNav\").then((mod) => {\n return { default: mod.BottomNav };\n }),\n);\n\nexport const MobileScaffold: React.FC<\n React.PropsWithChildren<ScaffoldScriptReturn & ScaffoldProps>\n> = (props) => {\n const {\n classNames,\n topNavbarRef,\n bottomNavHeight,\n topBar,\n mainNavProps,\n routerAdapter,\n restrictedInfo,\n bottomNavRef,\n bottomNavProps,\n bottomNav,\n children,\n } = props;\n\n return (\n <div\n style={{\n paddingBottom: `calc(${bottomNavHeight}px + 12px + env(safe-area-inset-bottom))`,\n }}\n className={cn(\n \"oui-scaffold-root oui-w-full oui-bg-base-10 oui-pt-2\",\n classNames?.root,\n )}\n >\n <React.Suspense fallback={null}>\n <LazyAnnouncementWidget\n className={\"oui-mx-1 oui-mb-1 oui-bg-base-6\"}\n hideTips={restrictedInfo?.restrictedOpen}\n />\n </React.Suspense>\n <header\n ref={topNavbarRef}\n className={cn(\n \"oui-scaffold-topNavbar\",\n \"oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\",\n classNames?.topNavbar,\n )}\n >\n {topBar ?? (\n <MainNavMobile {...mainNavProps} routerAdapter={routerAdapter} />\n )}\n </header>\n\n <Box\n className={cn(\n \"oui-scaffold-container oui-overflow-hidden\",\n // \"oui-relative\",\n // \"oui-custom-scrollbar oui-overflow-y-auto\",\n classNames?.container,\n )}\n >\n <React.Suspense fallback={null}>\n <LazyRestrictedInfoWidget className=\"oui-mx-1 oui-mb-1 oui-bg-base-6\" />\n </React.Suspense>\n\n <Box\n height=\"100%\"\n width=\"100%\"\n className={cn(\"oui-scaffold-content\", classNames?.content)}\n >\n {children}\n </Box>\n </Box>\n <footer\n ref={bottomNavRef}\n className={cn(\n \"oui-scaffold-bottomNav\",\n \"oui-fixed oui-bottom-0 oui-z-10\",\n \"oui-w-full oui-bg-base-9\",\n // only effective on real device\n \"oui-pb-[calc(env(safe-area-inset-bottom))]\",\n classNames?.bottomNav,\n )}\n >\n {bottomNav ?? (\n <React.Suspense fallback={null}>\n <LazyBottomNav\n mainMenus={bottomNavProps?.mainMenus}\n current={bottomNavProps?.current || mainNavProps?.initialMenu}\n onRouteChange={routerAdapter?.onRouteChange}\n />\n </React.Suspense>\n )}\n </footer>\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useObserverElement, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { type ScaffoldProps } from \"./scaffold.widget\";\n\nexport type ScaffoldScriptReturn = ReturnType<typeof useScaffoldScript>;\n\ntype ScaffoldScriptOptions = ScaffoldProps;\n\nexport const useScaffoldScript = (options: ScaffoldScriptOptions) => {\n const { restrictedInfo, showAnnouncement } = useAppContext();\n\n const [topNavbarRef, topNavbarHeight] = useRefAndHeight(48);\n const [footerRef, footerHeight] = useRefAndHeight(29);\n const [bottomNavRef, bottomNavHeight] = useRefAndHeight(64);\n const [announcementRef, announcementHeight] = useRefAndHeight(0, [\n showAnnouncement,\n ]);\n\n const [expand, setExpand] = useLocalStorage(\n \"orderly_scaffold_expanded\",\n true,\n );\n\n const { isMobile } = useScreen();\n\n const sideBarExpandWidth = options.leftSideProps?.maxWidth || 185;\n const sideBarCollaspedWidth = options.leftSideProps?.minWidth || 98;\n const hasLeftSidebar = !!options.leftSidebar;\n\n return {\n topNavbarRef,\n footerRef,\n topNavbarHeight,\n footerHeight,\n announcementRef,\n announcementHeight,\n restrictedInfo,\n expand,\n setExpand,\n isMobile,\n sideBarExpandWidth,\n sideBarCollaspedWidth,\n hasLeftSidebar,\n footerProps: options.footerProps,\n routerAdapter: options.routerAdapter,\n mainNavProps: options.mainNavProps,\n bottomNavProps: options.bottomNavProps,\n bottomNavRef,\n bottomNavHeight,\n };\n};\n\nconst useRefAndHeight = (\n defaultHeight: number,\n deps: React.DependencyList = [],\n) => {\n const ref = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState(defaultHeight);\n\n useObserverElement(ref.current, (entry) => {\n setHeight(entry.contentRect.height);\n });\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n const rect = ref.current?.getBoundingClientRect();\n setHeight(rect.height);\n }, [ref, ...deps]);\n\n return [ref, height] as const;\n};\n","import { FC, useMemo } from \"react\";\nimport { WsNetworkStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport {\n CommuntiyDiscordIcon,\n CommuntiyTelegramIcon,\n CommuntiyXIcon,\n OrderlyTextIcon,\n SignalIcon,\n} from \"../icons/index\";\nimport type { FooterReturns } from \"./footer.script\";\nimport type { FooterProps } from \"./footer.widget\";\n\nexport const Footer: FC<FooterReturns & FooterProps> = (props) => {\n const { t } = useTranslation();\n\n const signalClsName = useMemo(() => {\n switch (props.wsStatus) {\n case WsNetworkStatus.Connected:\n return \"oui-fill-success-light oui-text-success-light\";\n case WsNetworkStatus.Disconnected:\n return \"oui-fill-danger-light oui-text-danger-light\";\n case WsNetworkStatus.Unstable:\n return \"oui-fill-warning-light oui-text-warning-light\";\n }\n }, [props.wsStatus]);\n\n const openUrl = (url?: string) => {\n window.open(url, \"_blank\");\n };\n\n return (\n <Flex\n direction={\"row\"}\n justify={\"between\"}\n height={28}\n px={3}\n width={\"100%\"}\n >\n <Flex>\n <Flex\n direction={\"row\"}\n itemAlign={\"center\"}\n gap={1}\n className={signalClsName}\n >\n <SignalIcon\n // className={cn(signalClsName, \"oui-fill-success-light\")}\n fillOpacity={1}\n fill=\"currentColor\"\n />\n <Text size=\"2xs\">{t(\"scaffold.footer.operational\")}</Text>\n </Flex>\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[18px] oui-px-1 oui-ml-2 oui-border-line-12\"\n />\n <Flex gap={2}>\n <Text intensity={54} size=\"2xs\">\n {t(\"scaffold.footer.joinCommunity\")}\n </Text>\n <Flex direction={\"row\"} gap={1}>\n {typeof props.telegramUrl !== \"undefined\" && (\n <CommuntiyTelegramIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.telegramUrl)}\n />\n )}\n {typeof props.discordUrl !== \"undefined\" && (\n <CommuntiyDiscordIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.discordUrl)}\n />\n )}\n {typeof props.twitterUrl !== \"undefined\" && (\n <CommuntiyXIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.twitterUrl)}\n />\n )}\n </Flex>\n {typeof props?.trailing !== \"undefined\" && (\n <>\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[18px] oui-border-line-12\"\n />\n {props?.trailing}\n </>\n )}\n </Flex>\n </Flex>\n <Flex\n direction={\"row\"}\n gap={1}\n className=\"oui-scaffold-footer-powered-by\"\n >\n <Text intensity={54} size=\"2xs\">\n {t(\"scaffold.footer.poweredBy\" as any)}\n </Text>\n <OrderlyTextIcon />\n </Flex>\n </Flex>\n );\n};\n","import { useWsStatus, WsNetworkStatus } from \"@kodiak-finance/orderly-hooks\";\n\nexport type FooterReturns = {\n wsStatus: WsNetworkStatus;\n};\n\nexport const useFooterScript = (): FooterReturns => {\n const wsStatus = useWsStatus();\n\n return {\n wsStatus,\n };\n};\n","import React, { ReactNode } from \"react\";\nimport { useFooterScript } from \"./footer.script\";\nimport { Footer } from \"./footer.ui\";\n\nexport type FooterProps = {\n telegramUrl?: string;\n twitterUrl?: string;\n discordUrl?: string;\n trailing?: ReactNode;\n};\n\nexport const FooterWidget: React.FC<FooterProps> = (props) => {\n const state = useFooterScript();\n return <Footer {...state} {...props} />;\n};\n","export { Footer } from \"./footer.ui\";\nexport { FooterWidget, type FooterProps } from \"./footer.widget\";\n","import React from \"react\";\nimport {\n Box,\n Flex,\n tv,\n VariantProps,\n Text,\n cn,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype SideMenuItem = {\n name: string;\n icon?: React.ReactNode;\n href?: string;\n disabled?: boolean;\n onClick?: () => void;\n hide?: boolean;\n};\n\nconst menuItemVariants = tv({\n slots: {\n button: [\n \"oui-min-h-10\",\n \"oui-px-3\",\n \"oui-py-2\",\n \"oui-rounded-md\",\n \"oui-w-full\",\n \"oui-text-left\",\n \"oui-text-base\",\n \"oui-text-base-contrast-36\",\n // \"oui-flex\",\n \"oui-group\",\n // \"oui-space-x-2\",\n // \"oui-items-center\",\n \"hover:oui-bg-base-8\",\n \"oui-transition-colors\",\n \"group-data-[state=closed]/bar:oui-w-[42px]\",\n \"oui-overflow-hidden\",\n ],\n icon: [],\n },\n variants: {\n mode: {\n \"icon-only\": {\n button: \"oui-w-10\",\n icon: \"w-6 h-6\",\n },\n full: {\n button: \"oui-full\",\n icon: \"w-6 h-6\",\n },\n },\n active: {\n true: {\n button: \"oui-bg-base-5 hover:oui-bg-base-5\",\n },\n },\n open: {\n true: {\n button: \"\",\n },\n },\n },\n});\n\nconst MenuItem = React.memo<\n {\n item: SideMenuItem;\n active?: boolean;\n open?: boolean;\n onClick?: (item: SideMenuItem) => void;\n } & VariantProps<typeof menuItemVariants>\n>((props) => {\n const { item, mode, open, onClick, active, ...rest } = props;\n const { button } = menuItemVariants({\n mode,\n active: props.active,\n open: props.open,\n });\n const children = (\n <button\n data-actived={props.active}\n disabled={item.disabled}\n className={button()}\n onClick={() => {\n props.onClick?.(item);\n }}\n >\n <Flex itemAlign={\"center\"} gap={2} as=\"span\">\n <div>{item.icon}</div>\n {props.open && (\n <Text.gradient\n color={props.active ? \"brand\" : \"inherit\"}\n angle={45}\n size=\"base\"\n className=\"oui-break-all oui-animate-in oui-fade-in\"\n >\n {item.name}\n </Text.gradient>\n )}\n </Flex>\n </button>\n );\n\n if (props.open) {\n return <li className=\"oui-min-w-[120px]\">{children}</li>;\n }\n\n return (\n <li>\n <Tooltip content={item.name} side=\"right\" align=\"center\" sideOffset={20}>\n {children}\n </Tooltip>\n </li>\n );\n});\n\nMenuItem.displayName = \"LeftMenuItem\";\n\nconst SideMenus: React.FC<{\n menus?: SideMenuItem[];\n current?: string;\n open?: boolean;\n onItemSelect?: (item: SideMenuItem) => void;\n}> = (props) => {\n return (\n <Box py={6}>\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-pointer-events-none oui-invisible oui-absolute\"\n >\n <defs>\n <linearGradient\n id=\"side-menu-gradient\"\n x1=\"15.7432\"\n y1=\"8.94726\"\n x2=\"2.24316\"\n y2=\"8.94726\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset=\"1\" />\n </linearGradient>\n </defs>\n </svg>\n <ul className=\"oui-space-y-4\">\n {props.menus?.map((item, index) => {\n if (item?.hide) {\n return null;\n }\n return (\n <MenuItem\n key={index}\n item={item}\n open={props.open}\n active={item.href === props.current}\n onClick={props.onItemSelect}\n />\n );\n })}\n </ul>\n </Box>\n );\n};\n\ntype SideBarHeaderProps = {\n onToggle?: () => void;\n open?: boolean;\n title?: React.ReactNode;\n};\n\nconst SideBarHeader: React.FC<SideBarHeaderProps> = (props) => {\n const { title } = props;\n\n const titleElemet =\n typeof title === \"string\" ? (\n <Text intensity={54} size=\"xs\">\n {title}\n </Text>\n ) : (\n title\n );\n\n const iconProps = {\n className:\n \"oui-text-base-contrast-36 hover:oui-text-base-contrast-80 oui-cursor-pointer\",\n onClick: props.onToggle,\n };\n\n return (\n <Flex\n justify={props.open ? \"between\" : \"center\"}\n itemAlign=\"center\"\n className=\"oui-h-6\"\n >\n {props.open ? titleElemet : null}\n\n {props.open ? (\n <CollapseIcon {...iconProps} />\n ) : (\n <ExpandIcon {...iconProps} />\n )}\n </Flex>\n );\n};\n\ntype SideBarProps = {\n title?: React.ReactNode;\n items?: SideMenuItem[];\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onItemSelect?: (item: SideMenuItem) => void;\n current?: string;\n className?: string;\n maxWidth?: number;\n minWidth?: number;\n style?: React.CSSProperties;\n};\n\nconst SideBar: React.FC<SideBarProps> = (props) => {\n const { open = true, items, current, onItemSelect } = props;\n\n return (\n <Box\n data-state={open ? \"opened\" : \"closed\"}\n className={cn(\"oui-group/bar\", props.className)}\n style={props.style}\n >\n <SideBarHeader\n open={open}\n title={props.title}\n onToggle={() => {\n props.onOpenChange?.(!open);\n }}\n />\n <SideMenus\n menus={items}\n current={current}\n onItemSelect={onItemSelect}\n open={open}\n />\n </Box>\n );\n};\n\nSideBar.displayName = \"SideBar\";\n\nconst ExpandIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.326 8.826a.84.84 0 0 0-.6.234L2.16 12.627v-2.135H.492v4.167c0 .46.373.833.834.833h4.166v-1.667H3.357l3.567-3.567a.857.857 0 0 0 0-1.198.84.84 0 0 0-.598-.234M10.502.492V2.16h2.135L9.07 5.726a.857.857 0 0 0 0 1.199.86.86 0 0 0 1.197 0l3.568-3.568v2.135h1.667V1.326a.834.834 0 0 0-.834-.834z\" />\n </svg>\n);\n\nconst CollapseIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M14.668.492a.85.85 0 0 0-.599.234l-3.567 3.568V2.159H8.835v4.167c0 .46.373.833.833.833h4.167V5.492H11.7l3.569-3.567a.86.86 0 0 0 0-1.199.85.85 0 0 0-.6-.234m-12.5 8.334v1.666h2.135L.736 14.06a.86.86 0 0 0 0 1.198.86.86 0 0 0 1.198 0l3.568-3.567v2.134h1.666V9.66a.834.834 0 0 0-.833-.833z\" />\n </svg>\n);\n\nexport { SideBar };\n\nexport type { SideBarProps, SideMenuItem };\n","import { useState } from \"react\";\nimport { SideBarProps } from \"./sidebar.ui\";\nimport { useScaffoldContext } from \"../scaffold\";\n\nexport const useSideNavBuilder = (\n props?: Partial<SideBarProps>\n): SideBarProps => {\n const [current, setCurrent] = useState(props?.items?.[0].href || \"/\");\n const { expanded, setExpand } = useScaffoldContext();\n\n if (typeof setExpand === \"undefined\") {\n console.warn(\"SideBar component must be used within a Scaffold component\");\n }\n\n return {\n items: [],\n current,\n open: expanded,\n onOpenChange: (open) => {\n setExpand?.(open);\n },\n onItemSelect: (item) => {\n if (item.href) {\n setCurrent(item.href);\n }\n },\n ...props,\n };\n};\n","import React from \"react\";\nimport { SideBar, SideBarProps } from \"./sidebar.ui\";\nimport { useSideNavBuilder } from \"./useSideNavBuilder.script\";\n\nexport const SideNavbarWidget: React.FC<Partial<SideBarProps>> = (props) => {\n const state = useSideNavBuilder(props);\n return <SideBar {...state} />;\n};\n","export { SideBar } from \"./sidebar.ui\";\nexport { SideNavbarWidget } from \"./sidebar.widget\";\n\nexport type { SideBarProps, SideMenuItem } from \"./sidebar.ui\";\n","import React from \"react\";\nimport { isValidElement } from \"react\";\nimport { Box, cn, Grid } from \"@kodiak-finance/orderly-ui\";\nimport type { ScaffoldScriptReturn } from \"./scaffold.script\";\nimport type { ScaffoldProps } from \"./scaffold.widget\";\n\nconst LazyMainNavWidget = React.lazy(() =>\n import(\"../main/mainNav.widget\").then((mod) => {\n return { default: mod.MainNavWidget };\n }),\n);\n\nconst LazyRestrictedInfoWidget = React.lazy(() =>\n import(\"../restrictedInfo\").then((mod) => {\n return { default: mod.RestrictedInfoWidget };\n }),\n);\n\nconst LazyAnnouncementWidget = React.lazy(() =>\n import(\"../announcement\").then((mod) => {\n return { default: mod.AnnouncementWidget };\n }),\n);\n\nconst LazyFooterWidget = React.lazy(() =>\n import(\"../footer\").then((mod) => {\n return { default: mod.FooterWidget };\n }),\n);\n\nconst LazySideNavbarWidget = React.lazy(() =>\n import(\"../sidebar\").then((mod) => {\n return { default: mod.SideNavbarWidget };\n }),\n);\n\nexport type DesktopScaffoldProps = React.PropsWithChildren<\n ScaffoldProps & ScaffoldScriptReturn\n>;\n\nexport const DesktopScaffold: React.FC<DesktopScaffoldProps> = (props) => {\n const {\n classNames,\n footerHeight,\n topNavbarRef,\n mainNavProps,\n topBar,\n announcementRef,\n restrictedInfo,\n hasLeftSidebar,\n expand,\n leftSideProps,\n leftSidebar,\n footer,\n footerRef,\n sideBarCollaspedWidth,\n sideBarExpandWidth,\n footerProps,\n children,\n } = props;\n return (\n <div\n style={{\n height: `calc(100vh - ${footerHeight}px)`,\n }}\n className={cn(\n \"oui-scaffold-root oui-font-semibold\",\n // default text and background color\n \"oui-bg-base-10 oui-text-base-contrast\",\n \"oui-flex oui-flex-col\",\n \"oui-custom-scrollbar oui-overflow-auto\",\n classNames?.root,\n )}\n >\n {/* topNavbar */}\n <Box\n ref={topNavbarRef}\n className={cn(\n \"oui-scaffold-topNavbar oui-bg-base-9\",\n classNames?.topNavbar,\n )}\n >\n {topBar ?? (\n <React.Suspense fallback={null}>\n <LazyMainNavWidget {...mainNavProps} />\n </React.Suspense>\n )}\n </Box>\n <div\n className={cn(\n \"oui-scaffold-container\",\n \"oui-relative oui-h-full\",\n // 1024px - 6px (scrollbar widt) = 1018px\n \"oui-min-w-[1018px]\",\n classNames?.container,\n )}\n >\n <Box px={2} ref={announcementRef}>\n <React.Suspense fallback={null}>\n <LazyRestrictedInfoWidget\n className={cn(\n \"oui-scaffold-restricted-info\",\n \"oui-relative oui-z-[1]\",\n \"oui-mt-2\",\n \"oui-bg-base-9\",\n \"oui-min-w-[994px]\",\n )}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAnnouncementWidget\n className={\"oui-mx-auto oui-mt-2\"}\n hideTips={restrictedInfo?.restrictedOpen}\n />\n </React.Suspense>\n </Box>\n {/*--------- body start ------ */}\n {!hasLeftSidebar ? (\n // ----------No leftSidebar layout start ---------\n <Box height=\"100%\" className={cn(classNames?.content)}>\n {children}\n </Box>\n ) : (\n // ----------No leftSidebar layout end ---------\n // ---------- left & body layout start ---------\n <Grid\n className={cn(\n \"oui-box-content oui-flex oui-transition-all xl:oui-grid\",\n \"oui-min-h-full oui-flex-1\",\n classNames?.body,\n )}\n style={{\n gridTemplateColumns: `${\n expand\n ? `${sideBarExpandWidth}px`\n : `${sideBarCollaspedWidth}px`\n } 1fr`,\n // gridTemplateRows: \"auto 1fr\",\n // gridTemplateAreas: `\"left main\" \"left main\"`,\n }}\n >\n <div className={cn(classNames?.leftSidebar)}>\n {isValidElement<any>(leftSidebar) ? (\n leftSidebar\n ) : (\n <React.Suspense fallback={null}>\n <LazySideNavbarWidget {...leftSideProps} />\n </React.Suspense>\n )}\n </div>\n <Box\n width={\"100%\"}\n className={cn(\"oui-overflow-hidden\", classNames?.content)}\n >\n {children}\n </Box>\n </Grid>\n // ---------- left & body layout end ---------\n )}\n </div>\n\n {/* footer */}\n <Box\n ref={footerRef}\n className={cn(\n \"oui-scaffold-footer oui-w-full oui-bg-base-10\",\n \"oui-fixed oui-bottom-0 oui-z-50\",\n \"oui-border-t oui-border-line-12\",\n classNames?.footer,\n )}\n >\n {footer || (\n <React.Suspense fallback={null}>\n <LazyFooterWidget {...footerProps} />\n </React.Suspense>\n )}\n </Box>\n </div>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\n\nexport function checkChainSupport(\n chainId: number | string,\n chains: API.Chain[]\n) {\n if (typeof chainId === \"string\") {\n chainId = parseInt(chainId);\n }\n return chains.some((chain) => {\n return chain.network_infos.chain_id === chainId;\n });\n}\n","import { createContext, useContext } from \"react\";\n\nexport type RouteOption = {\n href: string;\n name: string;\n scope?: string;\n target?: string;\n};\n\nexport type RouterAdapter = {\n onRouteChange: (option: RouteOption) => void;\n currentPath?: string;\n};\n\nexport type ScaffoldState = {\n routerAdapter?: RouterAdapter;\n expanded?: boolean;\n setExpand: (expand: boolean) => void;\n checkChainSupport: (chainId: number | string) => boolean;\n topNavbarHeight: number;\n footerHeight: number;\n announcementHeight: number;\n};\n\nexport const ScaffoldContext = createContext<ScaffoldState>(\n {} as ScaffoldState,\n);\n\nexport const useScaffoldContext = () => {\n return useContext(ScaffoldContext);\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport {\n OrderlyContext,\n useChains,\n useMemoizedFn,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { checkChainSupport } from \"../../utils/chain\";\nimport { ScaffoldContext, ScaffoldState } from \"./scaffoldContext\";\n\nexport type ScaffoldProviderProps = Omit<ScaffoldState, \"checkChainSupport\">;\n\nexport const ScaffoldProvider: React.FC<\n React.PropsWithChildren<ScaffoldProviderProps>\n> = (props) => {\n const {\n routerAdapter,\n expanded,\n setExpand,\n topNavbarHeight,\n footerHeight,\n announcementHeight,\n children,\n } = props;\n\n const [chains] = useChains();\n\n const { networkId } = useContext<any>(OrderlyContext);\n\n const checkChainSupportHandle = useMemoizedFn((chainId: number | string) => {\n return checkChainSupport(\n chainId,\n networkId === \"testnet\" ? chains.testnet : chains.mainnet,\n );\n });\n\n const memoizedValue = useMemo<ScaffoldState>(() => {\n return {\n routerAdapter: routerAdapter,\n expanded: expanded,\n setExpand: setExpand,\n checkChainSupport: checkChainSupportHandle,\n topNavbarHeight: topNavbarHeight,\n footerHeight: footerHeight,\n announcementHeight: announcementHeight,\n };\n }, [\n routerAdapter,\n expanded,\n setExpand,\n checkChainSupportHandle,\n topNavbarHeight,\n footerHeight,\n announcementHeight,\n ]);\n\n return (\n <ScaffoldContext.Provider value={memoizedValue}>\n {children}\n </ScaffoldContext.Provider>\n );\n};\n","import React, { PropsWithChildren, ReactNode } from \"react\";\nimport { BottomNavProps } from \"../bottomNav/bottomNav.widget\";\nimport { FooterProps } from \"../footer\";\nimport { LeftNavProps } from \"../leftNav\";\nimport { MainNavWidgetProps } from \"../main/mainNav.widget\";\nimport { SideBarProps } from \"../sidebar\";\nimport { MobileScaffold } from \"./scaffold.mobile.ui\";\nimport { useScaffoldScript } from \"./scaffold.script\";\nimport { DesktopScaffold } from \"./scaffold.ui\";\nimport { RouterAdapter } from \"./scaffoldContext\";\nimport { ScaffoldProvider } from \"./scaffoldProvider\";\n\nexport type ScaffoldProps = {\n /**\n * custom left sidebar component, only works on desktop\n * if provided, the layout will use this component over the default sidebar component\n */\n leftSidebar?: ReactNode;\n /**\n * custom left sidebar props, only works on desktop\n */\n leftSideProps?: SideBarProps;\n /**\n * custom left nav props, only works on mobile\n */\n leftNavProps?: LeftNavProps;\n /**\n * custom top bar component\n */\n topBar?: ReactNode;\n /**\n * custom top nav props\n */\n mainNavProps?: MainNavWidgetProps;\n /**\n * custom bottom nav component, only works on mobile\n */\n bottomNav?: ReactNode;\n /**\n * custom bottom nav component, only works on mobile\n */\n bottomNavProps?: BottomNavProps;\n /**\n * custom footer component, only works on desktop\n */\n footer?: ReactNode;\n /**\n * custom footer props, only works on desktop\n */\n footerProps?: FooterProps;\n routerAdapter?: RouterAdapter;\n classNames?: {\n // root = topNavbar + container + footer\n root?: string;\n container?: string;\n content?: string;\n // body = leftSidebar + content\n body?: string;\n leftSidebar?: string;\n topNavbar?: string;\n footer?: string;\n bottomNav?: string;\n };\n};\n\nexport const Scaffold: React.FC<PropsWithChildren<ScaffoldProps>> = (props) => {\n const state = useScaffoldScript(props);\n\n const renderContent = () => {\n if (state.isMobile) {\n return (\n <MobileScaffold {...props} {...state}>\n {props.children}\n </MobileScaffold>\n );\n }\n\n return (\n <DesktopScaffold {...props} {...state}>\n {props.children}\n </DesktopScaffold>\n );\n };\n\n return (\n <ScaffoldProvider\n routerAdapter={props.routerAdapter}\n expanded={state.expand}\n setExpand={state.setExpand}\n topNavbarHeight={state.topNavbarHeight}\n footerHeight={state.footerHeight}\n announcementHeight={state.announcementHeight}\n >\n {renderContent()}\n </ScaffoldProvider>\n );\n};\n","export { Scaffold, type ScaffoldProps } from \"./scaffold.widget\";\nexport { MobileScaffold } from \"./scaffold.mobile.ui\";\nexport { useScaffoldScript } from \"./scaffold.script\";\nexport * from \"./scaffoldContext\";\nexport * from \"./scaffoldProvider\";\n","import { useMemo, useState } from \"react\";\nimport { useAccount, useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useScaffoldContext } from \"../scaffold\";\nimport { CampaignProps } from \"./campaignButton\";\nimport { MainNavItemsProps } from \"./mainMenus/mainNavMenus.ui\";\nimport type { MainNavItem } from \"./mainMenus/navItem\";\nimport { MainNavWidgetProps } from \"./mainNav.widget\";\n\n// export type CampaignPosition = \"menuLeading\" | \"menuTailing\" | \"navTailing\";\nexport enum CampaignPositionEnum {\n menuLeading = \"menuLeading\",\n menuTailing = \"menuTailing\",\n navTailing = \"navTailing\",\n}\n\nexport type MainNavScriptReturn = ReturnType<typeof useMainNavScript>;\n\nexport const useMainNavScript = (props: MainNavWidgetProps) => {\n const { onItemClick, campaignPosition = CampaignPositionEnum.navTailing } =\n props;\n const { state } = useAccount();\n const { routerAdapter } = useScaffoldContext();\n const { connectedChain } = useWalletConnector();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [current, setCurrent] = useState(() => {\n if (typeof props.initialMenu === \"undefined\") return [];\n\n return !Array.isArray(props.initialMenu)\n ? [props.initialMenu]\n : props.initialMenu;\n });\n\n const onItemClickHandler = (scope: string) => (item: MainNavItem[]) => {\n const lastItem = item[item.length - 1];\n\n if (!lastItem) return;\n\n /**\n * If the target is not _blank, we should update the current state\n */\n if (lastItem.target !== \"_blank\") {\n setCurrent(item.map((item) => item.href));\n }\n\n const current = item[item.length - 1];\n const args = {\n href: current.href,\n name: current.name,\n scope,\n target: current.target,\n };\n\n if (typeof onItemClick === \"function\") {\n onItemClick(args);\n return;\n }\n\n routerAdapter?.onRouteChange(args);\n };\n\n const mainNavConfig = useMemo(() => {\n const config = {\n leading: null,\n trailing: null,\n logo: {},\n mainMenus: [\n // { name: \"Trading\", href: \"/trading\" },\n // { name: \"Portfolio\", href: \"/portfolio\" },\n // { name: \"Markets\", href: \"/markets\" },\n // { name: \"Rewards\", href: \"/rewards\" },\n ],\n ...props,\n campaignPosition,\n };\n if (props.leading) {\n config.leading = props.leading;\n }\n\n if (props.trailing) {\n config.trailing = props.trailing;\n }\n\n if (props.campaigns) {\n if (campaignPosition === CampaignPositionEnum.menuTailing) {\n config.mainMenus = [...config.mainMenus, props.campaigns];\n } else if (campaignPosition === CampaignPositionEnum.menuLeading) {\n config.mainMenus = [props.campaigns, ...config.mainMenus];\n } else {\n config.campaigns = props.campaigns;\n }\n }\n\n return config;\n }, [props]);\n\n const { mainMenus, campaigns } = useMemo(() => {\n const converted: {\n campaigns?: CampaignProps;\n mainMenus?: MainNavItemsProps;\n } = {};\n\n if (mainNavConfig.mainMenus && mainNavConfig.mainMenus.length) {\n converted.mainMenus = {\n items: mainNavConfig.mainMenus,\n /**\n * @type string\n * The current item of the router\n */\n current,\n onItemClick: onItemClickHandler(\"mainMenu\"),\n // onItemClick: (item: MainNavItem[]) => {\n // const lastItem = item[item.length - 1];\n\n // if (!lastItem) return;\n\n // /**\n // * If the target is not _blank, we should update the current state\n // */\n // if (lastItem.target !== \"_blank\") {\n // setCurrent(item.map((item) => item.href));\n // }\n\n // const current = item[item.length - 1];\n // const args = {\n // href: current.href,\n // name: current.name,\n // scope: \"mainMenu\",\n // target: current.target,\n // };\n\n // if (typeof onItemClick === \"function\") {\n // onItemClick(args);\n // return;\n // }\n\n // routerAdapter?.onRouteChange(args);\n // },\n };\n }\n\n if (mainNavConfig.campaigns && mainNavConfig.campaigns.children?.length) {\n converted.campaigns = {\n item: mainNavConfig.campaigns,\n current,\n onItemClick: onItemClickHandler(\"campaign\"),\n // onItemClick: (item: MainNavItem[]) => {\n // const lastItem = item[item.length - 1];\n\n // if (!lastItem) return;\n\n // /**\n // * If the target is not _blank, we should update the current state\n // */\n // if (lastItem.target !== \"_blank\") {\n // setCurrent(item.map((item) => item.href));\n // }\n\n // const current = item[item.length - 1];\n // const args = {\n // href: current.href,\n // name: current.name,\n // scope: \"campaign\",\n // target: current.target,\n // };\n\n // if (typeof onItemClick === \"function\") {\n // onItemClick(args);\n // return;\n // }\n\n // routerAdapter?.onRouteChange(args);\n // },\n };\n }\n\n return converted;\n }, [mainNavConfig]);\n\n return {\n // currentProduct,\n // logo: mainNavConfig.logo,\n ...mainNavConfig,\n mainMenus,\n campaigns,\n isConnected: !!connectedChain,\n wrongNetwork,\n status: state.status,\n disabledConnect,\n };\n};\n","import React, { FC, PropsWithChildren, useEffect } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Popover,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype AccountSummaryUi = {\n totalValue: number | null;\n freeCollateral: number | null;\n maxLeverage?: number | null;\n currentLeverage: number | null;\n unrealized_pnl_ROI: number | null;\n unrealPnL: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n // type: AccountSummaryType;\n keys: AccountSummaryList;\n elementKeys: AccountSummaryList;\n onToggleItemByKey: (key: string) => void;\n onKeyToTop: (key: string) => void;\n};\n\n//----------------- TotalValue -----------------\nconst TotalValue: FC<{\n totalValue: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const {\n totalValue = 0,\n visible = true,\n onToggleVisibility,\n visibleAvailable = true,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"common.totalValue\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n\n <Text intensity={54}>≈</Text>\n </Flex>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n unitClassName=\"oui-text-base-contrast-20 oui-ml-1\"\n as=\"div\"\n >\n {totalValue ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- FreeCollateral -----------------\nconst FreeCollateral: FC<{\n freeCollateral?: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const {\n freeCollateral,\n visible,\n onToggleVisibility,\n visibleAvailable = true,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"trading.asset.freeCollateral\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n </Flex>\n {/* <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n Free collateral\n </Text>\n </Box> */}\n <Text.numeral\n unit=\"USDC\"\n unitClassName=\"oui-text-base-contrast-20 oui-ml-1\"\n visible={visible}\n as=\"div\"\n >\n {freeCollateral ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- CurrentLeverage -----------------\nconst CurrentLeverage: FC<{\n currentLeverage: number | null;\n}> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"leverage.currentLeverage\")}\n </Text>\n </Box>\n <Text.numeral as={\"div\"} unit=\"x\">\n {currentLeverage ?? 0}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- MaxLeverage -----------------\nconst MaxLeverage: FC<{\n maxLeverage?: number | null;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"leverage.maxLeverage\")}\n </Text>\n </Box>\n <Text color=\"primary\" as={\"div\"}>{`${props.maxLeverage ?? \"--\"}x`}</Text>\n </Flex>\n );\n};\n\n//----------------- UnrealPnL -----------------\nconst UnrealPnL: FC<{\n unrealized_pnl_ROI: number | null;\n unrealPnL: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const { visible, onToggleVisibility, visibleAvailable = true } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"common.unrealizedPnl\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n </Flex>\n <Text.numeral\n as={\"div\"}\n coloring\n showIdentifier\n weight={\"semibold\"}\n visible={visible}\n suffix={\n <Text.numeral coloring prefix={\"(\"} suffix={\")\"} rule={\"percentages\"}>\n {props.unrealized_pnl_ROI ?? \"-\"}\n </Text.numeral>\n }\n >\n {props.unrealPnL ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- AccountInfoPopover -----------------\nconst AccountInfoPopover = (props: {\n totalValue: number | null;\n freeCollateral: number | null;\n maxLeverage?: number | null;\n currentLeverage: number | null;\n unrealPnL: number | null;\n unrealized_pnl_ROI: number | null;\n // type: AccountSummaryType;\n keys: AccountSummaryList;\n elementKeys: AccountSummaryList;\n onToggleItemByKey: (key: string) => void;\n visible?: boolean;\n onKeyToTop: (key: string) => void;\n}) => {\n const { totalValue, keys, elementKeys } = props;\n const { t } = useTranslation();\n\n const onSetToTop = (key: SummaryKey) => (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n props.onKeyToTop(key);\n };\n\n const elements = elementKeys.map((key) => {\n switch (key) {\n case \"totalValue\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"totalValue\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"totalValue\")}\n onClick={() => props.onToggleItemByKey(\"totalValue\")}\n />\n <span>{t(\"common.totalValue\")}</span>\n </Flex>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {totalValue ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"freeCollateral\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"freeCollateral\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"freeCollateral\")}\n onClick={() => props.onToggleItemByKey(\"freeCollateral\")}\n />\n <span>{t(\"trading.asset.freeCollateral\")}</span>\n </Flex>\n <Text.numeral\n unit=\"USDC\"\n visible={props.visible}\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {props.freeCollateral ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"unrealPnL\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"unrealPnL\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"unrealPnL\")}\n onClick={() => props.onToggleItemByKey(\"unrealPnL\")}\n />\n <span>{t(\"common.unrealizedPnl\")}</span>\n </Flex>\n <Text.numeral\n coloring\n showIdentifier\n visible={props.visible}\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n suffix={\n <Text.numeral\n coloring\n prefix={\"(\"}\n visible={props.visible}\n suffix={\")\"}\n rule={\"percentages\"}\n >\n {props.unrealized_pnl_ROI ?? \"-\"}\n </Text.numeral>\n }\n >\n {props.unrealPnL ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"currentLeverage\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"currentLeverage\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"currentLeverage\")}\n onClick={() => props.onToggleItemByKey(\"currentLeverage\")}\n />\n <span>{t(\"leverage.currentLeverage\")}</span>\n </Flex>\n <Text.numeral\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unit=\"x\"\n >\n {props.currentLeverage ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"maxLeverage\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"maxLeverage\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"maxLeverage\")}\n onClick={() => props.onToggleItemByKey(\"maxLeverage\")}\n />\n <span>{t(\"leverage.maxLeverage\")}</span>\n </Flex>\n <Text\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n color=\"primary\"\n >{`${props.maxLeverage ?? \"-\"}x`}</Text>\n </DropdownMenu>\n );\n default:\n return null;\n }\n });\n\n return (\n <Flex\n className={\"oui-text-2xs oui-font-semibold\"}\n direction={\"column\"}\n gapY={1}\n >\n {elements}\n </Flex>\n );\n};\n\nconst DropdownMenu: FC<\n PropsWithChildren<{\n onSetTop: (event: React.MouseEvent) => void;\n }>\n> = (props) => {\n return (\n <div className=\"oui-w-full oui-relative oui-group hover:oui-bg-base-6 oui-px-[6px] oui-py-1 oui-rounded\">\n <Flex justify={\"between\"} width={\"100%\"}>\n {props.children}\n </Flex>\n <button\n className=\"oui-absolute oui-right-1 oui-top-1\"\n onClick={props.onSetTop}\n >\n <svg\n className=\"group-hover:oui-opacity-100 group-hover:oui-translate-x-0 oui-opacity-0 oui-translate-x-3 oui-transition-all oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n width=\"16\"\n height=\"16\"\n rx=\"2\"\n fill=\"rgb(var(--oui-color-primary-darken))\"\n />\n <path d=\"M3.507 3.999a.5.5 0 1 0 0 1h9a.5.5 0 0 0 0-1zm4 8.006a.5.5 0 0 0 1 0V7.724l1.5 1.484.703-.703-2.343-2.36a.515.515 0 0 0-.72 0l-2.343 2.36.703.703 1.5-1.484z\" />\n </svg>\n </button>\n </div>\n );\n};\n\nconst IdentityButton = (props: {\n active: boolean;\n onClick: React.MouseEventHandler;\n}) => {\n return (\n <button onClick={props.onClick}>\n {props.active ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.506.977a.56.56 0 0 0-.365.16C6.367 1.88 6.13 2.5 6.413 3.348c-.661.506-1.078.63-1.903.63-1.127 0-1.863.137-2.364.637v.016a1.187 1.187 0 0 0 0 1.686l1.4 1.411-2.385 2.385a.513.513 0 0 0-.015.717.514.514 0 0 0 .719 0l2.394-2.395 1.403 1.396a1.19 1.19 0 0 0 1.687 0h.016c.501-.5.64-1.142.64-2.358 0-.773.16-1.319.64-1.893.924.271 1.462.012 2.22-.746a.5.5 0 0 0 .14-.36c0-.175-.044-.445-.156-.78a4 4 0 0 0-.984-1.577 4 4 0 0 0-1.578-.984C7.95 1.02 7.682.977 7.506.977\"\n fill=\"currentcolor\"\n className={\"oui-text-primary-light\"}\n />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.506.977a.56.56 0 0 0-.365.16C6.367 1.88 6.13 2.5 6.413 3.348c-.661.506-1.078.63-1.903.63-1.127 0-1.863.137-2.364.637v.016a1.187 1.187 0 0 0 0 1.686l1.4 1.411-2.385 2.385a.513.513 0 0 0-.015.717.514.514 0 0 0 .719 0l2.394-2.395 1.403 1.396a1.19 1.19 0 0 0 1.687 0h.016c.501-.5.64-1.142.64-2.358 0-.773.16-1.319.64-1.893.924.271 1.462.012 2.22-.746a.5.5 0 0 0 .14-.36c0-.175-.044-.445-.156-.78a4 4 0 0 0-.984-1.577 4 4 0 0 0-1.578-.984C7.95 1.02 7.682.977 7.506.977m.193 1.027c.531.098 1.066.45 1.447.83.381.382.706.848.84 1.459-.477.458-.77.494-1.247.243a.5.5 0 0 0-.583.087c-.91.91-1.15 1.736-1.15 2.85 0 .97-.057 1.33-.36 1.655-.085.092-.203.078-.281 0L2.849 5.615a.18.18 0 0 1-.012-.255c.178-.217.576-.386 1.669-.386 1.306.001 2-.335 2.859-1.14a.5.5 0 0 0 .094-.578c-.257-.513-.217-.784.24-1.252\"\n fill=\"currentcolor\"\n />\n </svg>\n )}\n </button>\n );\n};\n\ntype SummaryKey =\n | \"totalValue\"\n | \"freeCollateral\"\n | \"unrealPnL\"\n | \"currentLeverage\"\n | \"maxLeverage\";\n\nexport type AccountSummaryList = Array<SummaryKey>;\nconst AccountSummaryItems: Record<SummaryKey, JSX.ElementType> = {\n totalValue: TotalValue,\n freeCollateral: FreeCollateral,\n unrealPnL: UnrealPnL,\n currentLeverage: CurrentLeverage,\n maxLeverage: MaxLeverage,\n};\n\nexport const AccountSummary: React.FC<AccountSummaryUi> = (props) => {\n const { keys, ...rest } = props;\n let canToggleIndex = 0;\n const sizeRef = React.useRef(0);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n if (Array.isArray(entries) && entries.length > 0) {\n const width = entries[0].contentRect.width;\n if (width > 1556) {\n sizeRef.current = 5;\n } else if (width > 1480) {\n sizeRef.current = 4;\n } else if (width > 1366) {\n sizeRef.current = 3;\n } else if (width > 1280) {\n sizeRef.current = 2;\n } else if (width > 1180) {\n sizeRef.current = 1;\n } else {\n sizeRef.current = 0;\n }\n }\n });\n\n resizeObserver.observe(document.body);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const elements = keys.slice(0, sizeRef.current).map((key, index) => {\n switch (key) {\n case \"freeCollateral\": {\n return (\n <FreeCollateral\n freeCollateral={props.freeCollateral}\n visible={props.visible}\n onToggleVisibility={props.onToggleVisibility}\n visibleAvailable={index === canToggleIndex}\n />\n );\n }\n\n case \"unrealPnL\":\n return (\n <UnrealPnL\n unrealPnL={props.unrealPnL}\n unrealized_pnl_ROI={props.unrealized_pnl_ROI}\n visible={props.visible}\n onToggleVisibility={props.onToggleVisibility}\n visibleAvailable={index === canToggleIndex}\n />\n );\n case \"currentLeverage\": {\n canToggleIndex++;\n return <CurrentLeverage currentLeverage={props.currentLeverage} />;\n }\n case \"maxLeverage\": {\n canToggleIndex++;\n return <MaxLeverage maxLeverage={props.maxLeverage} />;\n }\n case \"totalValue\":\n default:\n return (\n <TotalValue\n totalValue={props.totalValue}\n onToggleVisibility={props.onToggleVisibility}\n visible={props.visible}\n visibleAvailable={index === canToggleIndex}\n />\n );\n }\n });\n\n return (\n <div className=\"oui-flex oui-items-center oui-gap-6\">\n <Items elements={elements} />\n <Popover\n content={\n <AccountInfoPopover\n totalValue={rest.totalValue}\n freeCollateral={props.freeCollateral}\n maxLeverage={props.maxLeverage}\n currentLeverage={props.currentLeverage}\n unrealized_pnl_ROI={props.unrealized_pnl_ROI}\n unrealPnL={props.unrealPnL}\n keys={keys}\n elementKeys={props.elementKeys}\n onToggleItemByKey={props.onToggleItemByKey}\n onKeyToTop={props.onKeyToTop}\n visible={props.visible}\n />\n }\n contentProps={{\n onOpenAutoFocus: (event) => event.preventDefault(),\n sideOffset: 12,\n className: \"oui-p-1\",\n }}\n arrow\n >\n <div className=\"oui-cursor-pointer oui-group\">\n <Dot />\n </div>\n </Popover>\n </div>\n );\n};\n\nconst Items: FC<{\n elements: JSX.Element[];\n}> = (props) => {\n return (\n <div className=\"oui-flex oui-gap-6\">\n {props.elements.map((Element, index) => (\n <div key={index}>{Element}</div>\n ))}\n </div>\n );\n};\n\nconst Dot = () => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-base-contrast-36 hover:oui-fill-primary-light group-data-[state=open]:oui-fill-primary-light\"\n >\n <path d=\"M10.007 8.335a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333m-5.84 0a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333m11.666 0a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333\" />\n </svg>\n );\n};\n","import { useState } from \"react\";\nimport {\n useLeverage,\n useLocalStorage,\n useMarginRatio,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useCollateral, useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\n\nexport type AccountSummaryType =\n | \"totalValue\"\n | \"freeCollateral\"\n | \"unrealPnL\"\n | \"currentLeverage\"\n | \"maxLeverage\";\n\nexport const useTotalValueBuilderScript = () => {\n const [keys, setKeys] = useLocalStorage<string[]>(\"accountSummaryTypes\", [\n \"totalValue\",\n ]);\n\n const [elementKeys, setElementKeys] = useState<string[]>([\n \"totalValue\",\n \"freeCollateral\",\n \"unrealPnL\",\n \"currentLeverage\",\n \"maxLeverage\",\n ]);\n\n const { freeCollateral, totalValue } = useCollateral({ dp: 2 });\n\n const { state } = useAccount();\n\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const [{ aggregated, totalUnrealizedROI }] = usePositionStream();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const { currentLeverage } = useMarginRatio();\n\n const { maxLeverage } = useLeverage();\n\n const onToggleItemByKey = (key: string) => {\n if (keys.includes(key)) {\n setKeys(keys.filter((k: string) => k !== key));\n } else {\n setKeys([...keys, key]);\n }\n };\n\n const onKeyToTop = (key: string) => {\n if (!keys.includes(key)) {\n setKeys([key, ...keys]);\n setElementKeys([key, ...elementKeys.filter((k: string) => k !== key)]);\n return;\n }\n\n setKeys([key, ...keys.filter((k: string) => k !== key)]);\n setElementKeys([key, ...elementKeys.filter((k: string) => k !== key)]);\n };\n\n const unavailable =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n totalValue: unavailable ? null : totalValue,\n freeCollateral: unavailable ? null : freeCollateral,\n maxLeverage: unavailable ? null : maxLeverage,\n currentLeverage: unavailable ? null : currentLeverage,\n unrealPnL: unavailable ? null : aggregated?.total_unreal_pnl,\n unrealized_pnl_ROI: unavailable ? null : totalUnrealizedROI,\n // type,\n keys,\n elementKeys,\n // onTypeChange,\n visible,\n wrongNetwork,\n onToggleItemByKey,\n onKeyToTop,\n onToggleVisibility: () => setVisible(!visible),\n };\n};\n\nexport type UseTotalValueBuilderScript = ReturnType<\n typeof useTotalValueBuilderScript\n>;\n","import React from \"react\";\nimport { AccountSummary } from \"./accountSummary.ui\";\nimport type { AccountSummaryList } from \"./accountSummary.ui\";\nimport { useTotalValueBuilderScript } from \"./useWidgetBuilder.script\";\n\nexport const AccountSummaryWidget: React.FC = () => {\n const state = useTotalValueBuilderScript();\n return (\n <AccountSummary\n {...state}\n elementKeys={state.elementKeys as AccountSummaryList}\n />\n );\n};\n","// export { TotalValue } from \"./totalValue.ui\";\nexport { AccountSummaryWidget } from \"./accountSummary.widget\";\nexport { AccountSummary } from \"./accountSummary.ui\";\n","import React, {\n cloneElement,\n FC,\n HTMLAttributeAnchorTarget,\n PropsWithChildren,\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { ChevronDownIcon, PopoverContent, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { Box, cn, PopoverAnchor, PopoverRoot, Text } from \"@kodiak-finance/orderly-ui\";\n\nconst ActiveIcon: React.FC = () => (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n >\n <path\n d=\"M2.913 4.515a.5.5 0 0 0-.328.202.51.51 0 0 0 .14.701L5.722 7.41a.51.51 0 0 0 .562 0l2.995-1.992a.51.51 0 0 0 .14-.7.51.51 0 0 0-.701-.14L6.002 6.382 3.287 4.577a.5.5 0 0 0-.374-.062\"\n fill=\"url(#mainNavDropDownIcon)\"\n />\n <defs>\n <linearGradient\n id=\"mainNavDropDownIcon\"\n x1=\"9.502\"\n y1=\"5.994\"\n x2=\"2.502\"\n y2=\"5.994\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport type MainNavItem = {\n id?: string;\n testid?: string;\n name: string;\n href: string;\n target?: HTMLAttributeAnchorTarget;\n icon?: string | React.ReactElement;\n activeIcon?: string | React.ReactElement;\n tag?: string;\n description?: string;\n disabled?: boolean;\n children?: MainNavItem[];\n className?: string;\n asChild?: boolean;\n\n /**\n * if true, the item will be shown as a submenu in mobile\n */\n isSubMenuInMobile?: boolean;\n /**\n * if provided, the item is a submenu in mobile, and this will be the a back nav\n */\n subMenuBackNav?: {\n name: string;\n href: string;\n };\n /**\n * if true, the item will be shown as a home page in mobile\n */\n isHomePageInMobile?: boolean;\n customRender?: (option: {\n name: string;\n href: string;\n isActive?: boolean;\n }) => React.ReactNode;\n /**\n * if true, this item will only be shown in the main account\n * @default false\n **/\n onlyInMainAccount?: boolean;\n tooltipConfig?: {\n /**\n * if true, the tooltip will be shown on first visit\n */\n showOnFirstVisit?: boolean;\n /**\n * the text to show in the tooltip\n */\n text?: string;\n };\n};\n\nconst isObject = (value: any): value is object => {\n return !!value && value.constructor === Object;\n};\n\nconst ORDERLY_NAV_BUTTON_TOOLTIP_OPEN = \"ORDERLY_NAV_BUTTON_TOOLTIP_OPEN\";\n\nexport const NavItem: FC<\n Omit<React.HTMLAttributes<HTMLButtonElement>, \"onClick\"> & {\n item: MainNavItem;\n onClick?: (item: MainNavItem[]) => void;\n // active?: boolean;\n currentPath?: string[];\n classNames?: {\n navItem?: string;\n subMenu?: string;\n };\n }\n> = (props) => {\n const { classNames, currentPath, item, onClick, ...buttonProps } = props;\n\n const { customRender, tooltipConfig, onlyInMainAccount } = item;\n\n const { isMainAccount } = useAccount();\n\n const [showButtonTooltip, setShowButtonTooltip] = useLocalStorage(\n ORDERLY_NAV_BUTTON_TOOLTIP_OPEN,\n true,\n );\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (showButtonTooltip) {\n timerRef.current = setTimeout(() => {\n setShowButtonTooltip(false);\n }, 8000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [showButtonTooltip]);\n\n const isActive = useMemo(\n () => currentPath?.[0] === item.href,\n [currentPath, item.href],\n );\n\n const onClickHandler = useCallback(() => {\n if (Array.isArray(item.children)) {\n return;\n }\n onClick?.([item]);\n }, [item, onClick]);\n\n const buttonRender = () => {\n if (typeof customRender === \"function\") {\n return customRender({\n name: item.name,\n href: item.href,\n isActive,\n });\n }\n const button = (\n <button\n id={item.id}\n data-testid={item.testid}\n {...buttonProps}\n disabled={item.disabled}\n data-actived={isActive}\n className={cn(\n \"oui-group oui-relative oui-h-[32px] oui-rounded oui-px-3 oui-py-1 oui-text-sm oui-text-base-contrast-36 hover:oui-bg-base-7\",\n classNames?.navItem,\n )}\n onClick={onClickHandler}\n >\n <span className={\"oui-flex oui-items-center\"}>\n <ItemIcon isActive={isActive} item={item} />\n <Text.gradient\n color={isActive ? \"brand\" : \"inherit\"}\n angle={45}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {item.name}\n </Text.gradient>\n {Array.isArray(item.children) && (\n <span className={\"oui-ml-1 group-data-[open=true]:oui-rotate-180\"}>\n {isActive ? (\n <ActiveIcon />\n ) : (\n <ChevronDownIcon size={12} color={\"white\"} />\n )}\n </span>\n )}\n </span>\n <Box\n invisible={!isActive}\n position=\"absolute\"\n bottom={0}\n left={\"50%\"}\n height={\"3px\"}\n r=\"full\"\n width={\"60%\"}\n gradient=\"brand\"\n angle={45}\n className=\"-oui-translate-x-1/2 \"\n />\n </button>\n );\n\n if (isObject(tooltipConfig) && tooltipConfig.showOnFirstVisit) {\n return (\n <Tooltip\n open={showButtonTooltip}\n content={tooltipConfig.text}\n className={\n \"oui-w-64 oui-max-w-64 oui-bg-base-6 oui-text-2xs oui-font-semibold\"\n }\n >\n {button}\n </Tooltip>\n );\n }\n return button;\n };\n\n if (onlyInMainAccount && !isMainAccount) {\n return null;\n }\n\n if (!Array.isArray(item.children)) {\n return buttonRender();\n }\n\n return (\n <SubMenus\n items={item.children}\n className={classNames?.subMenu}\n current={currentPath?.[1]}\n onItemClick={(subItem: MainNavItem) => {\n onClick?.([item, subItem]);\n }}\n >\n {buttonRender()}\n </SubMenus>\n );\n};\n\nconst SubMenus: React.FC<\n PropsWithChildren<{\n items: MainNavItem[];\n className?: string;\n current?: string;\n onItemClick: (item: MainNavItem) => void;\n }>\n> = (props) => {\n const { children, items, className, current, onItemClick } = props;\n const [open, setOpen] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const onMouseEnter = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n // setOpen(true);\n }, []);\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const classNames = (children as ReactElement).props?.className;\n\n return (\n <PopoverRoot open={open}>\n <PopoverAnchor>\n <div\n className={\"oui-group\"}\n data-open={open}\n onMouseEnter={() => {\n setOpen(true);\n }}\n onMouseLeave={() => {\n timer.current = setTimeout(() => {\n setOpen(false);\n }, 150);\n }}\n >\n {cloneElement(children as React.ReactElement<any>, {\n className: cn(classNames, open && \"oui-bg-base-7\"),\n })}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={() => {\n setOpen(false);\n if (timer.current) {\n clearTimeout(timer.current);\n }\n }}\n className={cn(\n \"oui-w-[260px] oui-space-y-[2px] oui-border oui-border-line-6 oui-p-1\",\n className,\n )}\n >\n {items.map((item, index) => {\n return (\n <SubMenu\n key={index}\n item={item}\n onClick={onItemClick}\n active={item.href === current}\n />\n );\n })}\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst SubMenu: React.FC<{\n item: MainNavItem;\n active?: boolean;\n onClick: (item: MainNavItem) => void;\n}> = (props) => {\n const { item, active, onClick } = props;\n const hasDescription = typeof item.description !== \"undefined\";\n const hasIcon = typeof item.icon !== \"undefined\" && item.icon !== null;\n return (\n <Flex\n px={2}\n py={3}\n gapX={2}\n data-active={active ?? false}\n itemAlign={hasDescription ? \"start\" : \"center\"}\n className={cn(\n \"oui-group oui-w-full oui-cursor-pointer oui-text-base-contrast-80 hover:oui-bg-base-6 data-[active=true]:oui-bg-base-5\",\n // props.active && \"oui-bg-base-5\"\n )}\n r={\"md\"}\n onClick={() => {\n onClick(item);\n }}\n data-testid={item.testid}\n >\n {hasIcon && (\n <div\n className={cn(\n \"oui-relative oui-size-6\",\n hasDescription && \"oui-translate-y-1\",\n )}\n >\n <ItemIcon isActive={active ?? false} item={item} />\n </div>\n )}\n <div className=\"oui-flex-1\">\n <SubMenuTitle item={item} isActive={active} />\n {hasDescription && (\n <Text size={\"2xs\"} as={\"div\"} intensity={36}>\n {item.description}\n </Text>\n )}\n </div>\n </Flex>\n );\n};\n\nconst SubMenuTitle: React.FC<{ item: MainNavItem; isActive?: boolean }> = (\n props,\n) => {\n const { item, isActive } = props;\n return (\n <Flex itemAlign={\"center\"} width={\"100%\"} position=\"relative\">\n <div className=\"oui-flex oui-flex-1\">\n <Text.gradient\n color={isActive ? \"brand\" : \"inherit\"}\n size={\"xs\"}\n as={\"div\"}\n intensity={80}\n weight={\"semibold\"}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {item.name}\n </Text.gradient>\n {typeof item.tag !== \"undefined\" && <Tag item={item} />}\n </div>\n {item.target === \"_blank\" && <OutlinkIcon />}\n </Flex>\n );\n};\n\nconst Tag: React.FC<{ item: MainNavItem }> = (props) => {\n return (\n <div\n className={\n \"oui-ml-1 oui-inline-flex oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-2 oui-py-1\"\n }\n >\n <Text.gradient\n color={\"brand\"}\n size={\"3xs\"}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.item.tag}\n </Text.gradient>\n </div>\n );\n};\n\nconst ICON_CLASSNAME =\n \"oui-flex oui-border oui-border-line oui-w-6 oui-h-6 oui-rounded-md oui-justify-center oui-items-center oui-absolute oui-left-0 oui-top-0\";\n\nconst ItemIcon: React.FC<{ item: MainNavItem; isActive: boolean }> = (\n props,\n) => {\n const { isActive } = props;\n if (!props.item.icon) {\n return null;\n }\n if (typeof props.item.icon === \"string\") {\n return (\n <span className={\"oui-mr-1 oui-size-[20px]\"}>\n {\n <img\n src={\n isActive\n ? (props.item.activeIcon as string) || props.item.icon\n : props.item.icon\n }\n className={\"oui-max-h-full oui-max-w-full\"}\n />\n }\n </span>\n );\n }\n // return isActive ? props.item.activeIcon || props.item.icon : props.item.icon;\n return (\n <>\n <div\n className={cn(\n ICON_CLASSNAME,\n \"group-hover:oui-invisible group-data-[active=true]:oui-invisible\",\n )}\n >\n {props.item.icon}\n </div>\n <div\n className={cn(\n ICON_CLASSNAME,\n \"oui-invisible group-hover:oui-visible group-data-[active=true]:oui-visible\",\n )}\n >\n {props.item.activeIcon || props.item.icon}\n </div>\n </>\n );\n};\n\nconst OutlinkIcon: React.FC = () => {\n return (\n <>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-absolute oui-right-0 oui-top-0 group-hover:oui-invisible\"\n >\n <path\n d=\"M14.159 17.492a3.333 3.333 0 0 0 3.333-3.333V5.826a3.333 3.333 0 0 0-3.333-3.334H5.826a3.333 3.333 0 0 0-3.334 3.334v8.333a3.333 3.333 0 0 0 3.334 3.333zm-6.667-4.166a.85.85 0 0 1-.599-.235.86.86 0 0 1 0-1.198l3.333-3.333-1.9-1.901h5v5l-1.901-1.9L8.09 13.09a.84.84 0 0 1-.599.235\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </svg>\n\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-invisible oui-absolute oui-right-0 oui-top-0 group-hover:oui-visible\"\n >\n <path\n d=\"M14.159 17.492a3.333 3.333 0 0 0 3.333-3.333V5.826a3.333 3.333 0 0 0-3.333-3.334H5.826a3.333 3.333 0 0 0-3.334 3.334v8.333a3.333 3.333 0 0 0 3.334 3.333zm-6.667-4.166a.85.85 0 0 1-.599-.235.86.86 0 0 1 0-1.198l3.333-3.333-1.9-1.901h5v5l-1.901-1.9L8.09 13.09a.84.84 0 0 1-.599.235\"\n fill=\"url(#outlineIcon)\"\n />\n <defs>\n <linearGradient\n id=\"outlineIcon\"\n x1=\"17.492\"\n y1=\"9.992\"\n x2=\"2.492\"\n y2=\"9.992\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n </>\n );\n};\n","import { cn } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavItem, NavItem } from \"./mainMenus/navItem\";\n\nexport type CampaignProps = {\n item: MainNavItem;\n className?: string;\n onItemClick?: (item: MainNavItem[]) => void;\n current?: string[];\n // classNames?: MainNavClassNames;\n};\n\nexport const CampaignButton = (props: CampaignProps) => {\n return (\n <>\n <NavItem\n item={props.item}\n onClick={props.onItemClick}\n classNames={{\n navItem: cn(\"oui-text-base-contrast-54 -oui-ml-2\", props.className),\n }}\n />\n </>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavItem, NavItem } from \"./navItem\";\n\nexport type MainNavClassNames = {\n root?: string;\n navItem?: string;\n subMenu?: string;\n};\n\nexport type MainNavItemsProps = {\n items?: MainNavItem[];\n current?: string[];\n classNames?: MainNavClassNames;\n onItemClick?: (item: MainNavItem[]) => void;\n};\n\nexport const MainNavMenus: FC<MainNavItemsProps> = (props) => {\n const { items, classNames } = props;\n\n if (!Array.isArray(items) || items.length === 0) {\n return null;\n }\n\n return (\n <Flex className={cn(\"oui-gap-1\", classNames?.root)}>\n {items?.map((item, index) => (\n <NavItem\n key={index}\n item={item}\n // active={item.href === props.current?.[0]}\n currentPath={props.current}\n onClick={props.onItemClick}\n />\n ))}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainNavMenus, type MainNavItemsProps } from \"./mainNavMenus.ui\";\n\nexport const MainNavMenusWidget: FC<MainNavItemsProps> = (props) => {\n return <MainNavMenus {...props} />;\n};\n\ninstallExtension<MainNavItemsProps>({\n name: \"default-main-nav-menus\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.MainMenus],\n __isInternal: true,\n})((props: MainNavItemsProps) => {\n return <MainNavMenus {...props} />;\n});\n\nexport const MainNavMenusExtension: FC<MainNavItemsProps> = (props) => {\n return (\n <ExtensionSlot position={ExtensionPositionEnum.MainMenus} {...props} />\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { cn, Divider, Flex, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { WalletConnectButtonExtension } from \"../accountMenu/menu.widget\";\nimport { AccountSummaryWidget } from \"../accountSummary\";\nimport { ChainMenuWidget } from \"../chainMenu\";\nimport { LanguageSwitcherWidget } from \"../languageSwitcher\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport { CampaignButton } from \"./campaignButton\";\nimport { LinkDeviceWidget } from \"./linkDevice\";\nimport { MainLogo } from \"./mainLogo\";\nimport { MainNavMenusExtension } from \"./mainMenus/mainNavMenus.widget\";\nimport { CampaignPositionEnum, MainNavScriptReturn } from \"./mainNav.script\";\n\nexport const MainNav: FC<PropsWithChildren<MainNavScriptReturn>> = (props) => {\n const { className, classNames, campaigns, campaignPosition } = props;\n\n const showCampaignButton =\n campaignPosition === CampaignPositionEnum.navTailing && campaigns;\n\n const showLinkIcon =\n !props.wrongNetwork &&\n !props.disabledConnect &&\n props.status! >= AccountStatusEnum.SignedIn;\n\n const showSubAccount = props.status! >= AccountStatusEnum.EnableTrading;\n\n const hideWalletConnectButton =\n !props.disabledConnect && props.wrongNetwork && props.isConnected;\n\n const { isDesktop } = useScreen();\n\n const children = useMemo(() => {\n if (typeof props.children === \"undefined\") {\n return null;\n }\n return <Flex grow>{props.children}</Flex>;\n }, [props.children]);\n\n const showChainMenu = isDesktop;\n\n const renderContent = () => {\n const title = <MainLogo {...props.logo} />;\n const accountSummary = <AccountSummaryWidget />;\n const linkDevice = showLinkIcon && <LinkDeviceWidget />;\n const languageSwitcher = <LanguageSwitcherWidget />;\n const subAccount = showSubAccount && <SubAccountWidget />;\n const chainMenu = showChainMenu && <ChainMenuWidget />;\n const walletConnect = !hideWalletConnectButton && (\n <WalletConnectButtonExtension />\n );\n\n const mainNav = (\n <>\n <MainNavMenusExtension\n {...props.mainMenus}\n classNames={classNames?.mainNav}\n />\n {!!showCampaignButton && (\n <CampaignButton\n {...campaigns}\n className={classNames?.campaignButton}\n />\n )}\n </>\n );\n\n if (typeof props.customRender === \"function\") {\n return props.customRender?.({\n title,\n mainNav,\n accountSummary,\n linkDevice,\n languageSwitcher,\n subAccount,\n chainMenu,\n walletConnect,\n });\n }\n\n return (\n <>\n <Flex\n itemAlign={\"center\"}\n className={cn(\n \"oui-gap-3\",\n // let the left and right views show spacing when overlapping\n \"oui-overflow-hidden\",\n )}\n >\n {title}\n {props.leading}\n {mainNav}\n {props.trailing}\n </Flex>\n\n {children}\n\n <Flex itemAlign={\"center\"} className=\"oui-gap-2\">\n {accountSummary}\n {showLinkIcon && (\n <>\n <Divider direction=\"vertical\" className=\"oui-h-8\" intensity={8} />\n {linkDevice}\n </>\n )}\n {languageSwitcher}\n {subAccount}\n {chainMenu}\n {walletConnect}\n </Flex>\n </>\n );\n };\n\n return (\n <Flex\n width=\"100%\"\n as=\"header\"\n itemAlign={\"center\"}\n height={\"48px\"}\n justify={\"between\"}\n px={3}\n gapX={3}\n className={cn(\n \"oui-main-nav oui-font-semibold\",\n className,\n classNames?.root,\n )}\n >\n {renderContent()}\n </Flex>\n );\n};\n\nMainNav.displayName = \"MainNav\";\n","import React, { PropsWithChildren, ReactNode } from \"react\";\nimport { LeftNavProps } from \"../leftNav/leftNav.type\";\nimport { MainNavClassNames } from \"./mainMenus/mainNavMenus.ui\";\nimport { MainNavItem } from \"./mainMenus/navItem\";\nimport { CampaignPositionEnum, useMainNavScript } from \"./mainNav.script\";\nimport { MainNav } from \"./mainNav.ui\";\n\nexport type MainNavWidgetProps = {\n leading?: ReactNode;\n trailing?: ReactNode;\n logo?: {\n src: string;\n alt: string;\n };\n mainMenus?: MainNavItem[];\n /** @deprecated use mainMenus instead */\n campaigns?: MainNavItem;\n /** @deprecated use mainMenus instead */\n campaignPosition?: CampaignPositionEnum;\n /**\n * initial menu path, if it has submenus, use array\n * @type string | string[]\n */\n initialMenu?: string | string[];\n\n onItemClick?: (options: {\n href: string;\n name: string;\n scope?: string;\n }) => void;\n\n /** only works on mobile */\n leftNav?: LeftNavProps;\n customLeftNav?: ReactNode;\n className?: string;\n classNames?: {\n root?: string;\n mainNav?: MainNavClassNames;\n // subNav?: string;\n logo?: string;\n account?: string;\n chains?: string;\n campaignButton?: string;\n };\n\n /** custom render main nav */\n customRender?: (components: {\n /** Logo or title component (desktop & mobile) */\n title?: ReactNode;\n /** Language selection component (desktop & mobile) */\n languageSwitcher?: ReactNode;\n /** Sub-account component (desktop & mobile) */\n subAccount?: ReactNode;\n /** Device linking component (desktop & mobile) */\n linkDevice?: ReactNode;\n /** Chain selection menu (desktop & mobile) */\n chainMenu?: ReactNode;\n /** Wallet connection component (desktop & mobile) */\n walletConnect?: ReactNode;\n\n /** Main navigation menu (desktop & mobile) */\n mainNav?: ReactNode;\n /** Account summary component (desktop only) */\n accountSummary?: ReactNode;\n\n /** Left navigation component (mobile only) */\n leftNav?: ReactNode;\n /** QR code scanner component (mobile only) */\n scanQRCode?: ReactNode;\n }) => ReactNode;\n};\n\nexport const MainNavWidget: React.FC<PropsWithChildren<MainNavWidgetProps>> = (\n props,\n) => {\n const { children, classNames, ...rest } = props;\n const state = useMainNavScript(rest);\n return (\n <MainNav classNames={classNames} {...state}>\n {children}\n </MainNav>\n );\n};\n","export { AccountMenuWidget } from \"./menu.widget\";\nexport { AccountMenu } from \"./menu.ui\";\n","export { AccountMenuWidget } from \"./components/accountMenu\";\nexport {\n MainNavWidget,\n type MainNavWidgetProps,\n} from \"./components/main/mainNav.widget\";\nexport { MainNavMobile } from \"./components/main/mainNav.ui.mobile\";\nexport {\n BottomNavWidget,\n BottomNav,\n type BottomNavProps,\n} from \"./components/bottomNav\";\nexport { AccountSummaryWidget } from \"./components/accountSummary\";\nexport { ChainMenuWidget, ChainMenu } from \"./components/chainMenu\";\nexport { SideNavbarWidget, SideBar } from \"./components/sidebar\";\nexport { CampaignPositionEnum } from \"./components/main/mainNav.script\";\n\nexport * from \"./components/subAccount\";\n\nexport * from \"./components/footer\";\nexport * from \"./components/maintenanceTips\";\nexport * from \"./components/announcement\";\nexport * from \"./components/restrictedInfo\";\n\nexport type { SideBarProps, SideMenuItem } from \"./components/sidebar\";\n\n// ----------------- Main layout component -----------------\nexport {\n Scaffold,\n type ScaffoldProps,\n useScaffoldContext,\n ScaffoldContext,\n type RouteOption,\n type RouterAdapter,\n} from \"./components/scaffold\";\n\nexport { MainLogo } from \"./components/main/mainLogo\";\nexport * from \"./components/languageSwitcher\";\nexport * from \"./components/scanQRCode\";\nexport * from \"./components/leftNav\";\n","import {\n Box,\n cn,\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n Divider,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseIcon, InfoIcon } from \"../icons\";\nimport { MaintenanceTipInterface } from \"./script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const MaintenanceTipsUI = (props: MaintenanceTipInterface) => {\n const { showTips, showDialog, tipsContent, closeTips, dialogContent } = props;\n const { t } = useTranslation();\n\n if (showDialog) {\n return (\n <Dialog open={true}>\n <DialogContent\n closable={false}\n onOpenAutoFocus={(event) => event.preventDefault()}\n className=\"oui-w-[320px] md:oui-w-auto\"\n >\n <DialogHeader>\n <DialogTitle>{t(\"maintenance.dialog.title\")}</DialogTitle>\n </DialogHeader>\n <Divider />\n <DialogBody className=\"oui-text-2xs md:oui-text-xs\">\n {dialogContent}\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n }\n if (!showTips) {\n return <></>;\n }\n return (\n <Flex\n className={cn(\n \"oui-bg-warning-darken/10 oui-text-warning-darken oui-text-2xs md:oui-text-sm oui-relative oui-gap-1\",\n \"oui-mx-1 md:oui-mx-0 md:oui-w-full oui-pl-2 md:oui-pl-4 oui-pr-9 md:oui-pr-[60px] oui-py-2 md:oui-py-3\",\n \"oui-leading-4\",\n \"oui-rounded-xl md:oui-rounded-none\",\n \"oui-min-h-[48px]\",\n \"oui-justify-start oui-items-start\",\n \"xl:oui-justify-center xl:oui-items-center xl:oui-px-4\"\n )}\n >\n <div className=\"oui-flex oui-items-start oui-justify-start oui-gap-1 \">\n <InfoIcon\n size={20}\n className=\"oui-flex-shrink-0 oui-w-4 md:oui-w-5 oui-h-4 md:oui-h-5 \"\n />\n <Box className=\"oui-font-semibold oui-leading-4\">{tipsContent}</Box>\n </div>\n <CloseIcon\n size={16}\n className=\"oui-absolute oui-right-2 md:oui-right-4 oui-text-secondary/[0.36] hover:oui-text-secondary/80 oui-cursor-pointer -oui-translate-y-2/4 oui-top-2/4\"\n onClick={closeTips}\n />\n </Flex>\n );\n};\n","import { useMaintenanceStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nfunction getTimeString(timestamp: number) {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n}\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nexport interface MaintenanceTipInterface {\n tipsContent: string;\n showTips: boolean;\n closeTips: () => void;\n showDialog: boolean;\n dialogContent?: string;\n}\n\nexport const useMaintenanceScript = (): MaintenanceTipInterface => {\n const { t } = useTranslation();\n const [showTips, setShowTips] = useState(false);\n const [showDialog, setShowDialog] = useState(false);\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n const startDate = useMemo(() => {\n if (!startTime) {\n return \"-\";\n }\n return getTimeString(startTime);\n }, [startTime]);\n\n const endDate = useMemo(() => {\n if (!endTime) {\n return \"-\";\n }\n return getTimeString(endTime);\n }, [endTime]);\n\n const closeTips = () => {\n window.localStorage.setItem(`Maintenance_${startTime}`, \"1\");\n setShowTips(false);\n };\n\n useEffect(() => {\n console.log(\"-- start time\", {\n startTime,\n status,\n });\n if (status === 2) {\n setShowTips(false);\n setShowDialog(true);\n return;\n }\n setShowDialog(false);\n if (startTime) {\n if (startTime < getTimestamp() + oneDay) {\n // check localstorage\n if (!window.localStorage.getItem(`Maintenance_${startTime}`)) {\n setShowTips(true);\n }\n }\n }\n }, [startTime, status]);\n\n const tipsContent = t(\"maintenance.tips.description\", {\n brokerName,\n startDate,\n endDate,\n });\n\n const dialogContent = t(\"maintenance.dialog.description\", {\n brokerName,\n endDate,\n });\n\n return {\n tipsContent,\n showTips,\n closeTips,\n showDialog,\n dialogContent,\n };\n};\n","import { MaintenanceTipsUI } from \"./ui\";\nimport { useMaintenanceScript } from \"./script\";\n\nexport const MaintenanceTipsWidget = () => {\n const props = useMaintenanceScript();\n return <MaintenanceTipsUI {...props} />;\n};\n","export const useLeftNavState = () => {\n return {};\n};\n\nexport type LeftNavState = ReturnType<typeof useLeftNavState>;\n","import { FC } from \"react\";\nimport { useLeftNavState } from \"./leftNav.script\";\nimport { LeftNavProps } from \"./leftNav.type\";\n\nexport const LeftNavWidget: FC<LeftNavProps> = (props) => {\n const state = useLeftNavState();\n return <div>LeftNavWidget</div>;\n};\n","export * from \"./leftNav.type\";\nexport * from \"./leftNav.widget\";\nexport * from \"./leftNav.ui\";\n"]}
1
+ {"version":3,"sources":["../src/components/accountMenu/menu.ui.tsx","../src/components/accountMenu/useWidgetBuilder.script.tsx","../src/components/accountMenu/menu.widget.tsx","../src/components/chainMenu/chainMenu.script.ts","../src/components/chainMenu/chainMenu.ui.tsx","../src/components/chainMenu/chainMenu.ui.mobile.tsx","../src/components/chainMenu/chainMenu.widget.tsx","../src/components/chainMenu/index.ts","../src/components/languageSwitcher/languageSwitcher.script.ts","../src/components/languageSwitcher/languageSwitcher.ui.tsx","../src/components/languageSwitcher/widget.tsx","../src/components/languageSwitcher/index.ts","../src/components/icons/communtiyIcons.tsx","../src/components/icons/orderlyNetworkTextIcon.tsx","../src/components/icons/signal.tsx","../src/components/icons/infoIcon.tsx","../src/components/icons/closeIcon.tsx","../src/components/icons/orderlyLogo.tsx","../src/components/icons/index.ts","../src/components/main/mainLogo.tsx","../src/components/subAccount/useAccountValue.tsx","../src/components/subAccount/subAccount.script.ts","../src/components/subAccount/icons.tsx","../src/components/subAccount/components/accountItem.tsx","../src/components/subAccount/components/common.tsx","../src/components/subAccount/components/createSubAccountModal.tsx","../src/components/subAccount/components/editNickNameModal.tsx","../src/components/subAccount/subAccount.ui.tsx","../src/components/subAccount/subAccount.widget.tsx","../src/components/subAccount/index.ts","../src/components/leftNav/communityIcon.tsx","../src/components/leftNav/leftNav.ui.tsx","../src/components/scanQRCode/scanQRCode.script.ts","../src/components/scanQRCode/scanner.tsx","../src/components/scanQRCode/scanQRCode.ui.tsx","../src/components/scanQRCode/scanQRCode.widget.tsx","../src/components/scanQRCode/index.ts","../src/components/main/linkDevice/linkDevice.script.tsx","../src/components/main/linkDevice/linkDevice.ui.tsx","../src/components/main/linkDevice/linkDevice.ui.mobile.tsx","../src/components/main/linkDevice/widget.tsx","../src/components/main/linkDevice/index.ts","../src/components/main/mainNav.ui.mobile.tsx","../src/components/restrictedInfo/restrictedInfo.ui.tsx","../src/components/restrictedInfo/restrictedInfo.script.tsx","../src/components/restrictedInfo/restrictedInfo.widget.tsx","../src/components/restrictedInfo/index.ts","../src/components/announcement/hooks/useMarqueeOnce.ts","../src/components/announcement/hooks/usePrevNextButtons.ts","../src/components/announcement/hooks/useSelectedSnapDisplay.ts","../src/components/announcement/hooks/index.ts","../src/components/announcement/icons/soundIcon.tsx","../src/components/announcement/icons/index.ts","../src/components/announcement/announcement.ui.tsx","../src/components/announcement/announcement.script.tsx","../src/components/announcement/announcement.widget.tsx","../src/components/announcement/index.ts","../src/components/bottomNav/bottomNav.ui.mobile.tsx","../src/components/bottomNav/bottomNav.widget.tsx","../src/components/bottomNav/index.ts","../src/components/scaffold/scaffold.mobile.ui.tsx","../src/components/scaffold/scaffold.script.ts","../src/components/footer/footer.ui.tsx","../src/components/footer/footer.script.tsx","../src/components/footer/footer.widget.tsx","../src/components/footer/index.ts","../src/components/sidebar/sidebar.ui.tsx","../src/components/sidebar/useSideNavBuilder.script.tsx","../src/components/sidebar/sidebar.widget.tsx","../src/components/sidebar/index.ts","../src/components/scaffold/scaffold.ui.tsx","../src/utils/chain.ts","../src/components/scaffold/scaffoldContext.ts","../src/components/scaffold/scaffoldProvider.tsx","../src/components/scaffold/scaffold.widget.tsx","../src/components/scaffold/index.ts","../src/components/main/mainNav.script.ts","../src/components/accountSummary/accountSummary.ui.tsx","../src/components/accountSummary/useWidgetBuilder.script.ts","../src/components/accountSummary/accountSummary.widget.tsx","../src/components/accountSummary/index.ts","../src/components/main/mainMenus/navItem.tsx","../src/components/main/campaignButton.tsx","../src/components/main/mainMenus/mainNavMenus.ui.tsx","../src/components/main/mainMenus/mainNavMenus.widget.tsx","../src/components/main/mainNav.ui.tsx","../src/components/main/mainNav.widget.tsx","../src/components/accountMenu/index.ts","../src/index.ts","../src/components/maintenanceTips/ui.tsx","../src/components/maintenanceTips/script.tsx","../src/components/maintenanceTips/widget.tsx","../src/components/leftNav/leftNav.script.ts","../src/components/leftNav/leftNav.widget.tsx","../src/components/leftNav/index.ts"],"names":["useTranslation","AccountStatusEnum","Button","Divider","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuPortal","DropdownMenuRoot","DropdownMenuTrigger","EVMAvatar","Flex","Text","jsx","jsxs","AccountMenu","WalletMenu","init_menu_ui","__esmMin","props","state","onDisconnect","onOpenExplorer","wrongNetwork","onSwitchNetwork","isMobile","disabled","r","e","address","t","event","useCallback","useAccount","useChains","useWalletConnector","useAppContext","modal","toast","useScreen","ChainSelectorDialogId","ChainSelectorSheetId","WalletConnectorModalId","WalletConnectorSheetId","ModalTitle","useAccountMenu","init_useWidgetBuilder_script","disconnect","connectedChain","account","connectWallet","disabledConnect","setCurrentChainId","findByChainId","onCrateAccount","modalId","res","err","onCreateOrderlyKey","switchChain","status","statusChangeHandler","error","connect","nextState","chainInfo","explorer_base_url","ExtensionPositionEnum","ExtensionSlot","installExtension","AccountMenuWidget","WalletConnectButtonExtension","init_menu_widget","useState","useConfig","useChainMenuScript","init_chainMenu_script","open","setOpen","loading","setLoading","currentChainId","networkId","hide","onChainChangeBefore","onChainChangeAfter","ChainIcon","cn","Tooltip","Spinner","ChainSelectorWidget","ChainMenu","init_chainMenu_ui","renderIcon","trigger","Box","ChainMenuUiMobile","init_chainMenu_ui_mobile","ChainMenuWidget","init_chainMenu_widget","init_chainMenu","useMemo","useTrack","i18n","useLocaleContext","TrackerEventName","useLanguageSwitcherScript","init_languageSwitcher_script","options","selectedLang","setSelectedLang","languages","onLanguageBeforeChanged","onLanguageChanged","popup","track","setIdentify","onOpenChange","onLangChange","lang","displayName","_popup","forwardRef","SimpleDialog","SimpleSheet","Fragment","LanguageSwitcher","LanguageItem","LanguageIcon","init_languageSwitcher_ui","header","languageList","item","selected","context","footer","renderTrailing","ref","size","rest","LanguageSwitcherWidget","init_widget","init_languageSwitcher","React","CommuntiyTelegramIcon","CommuntiyDiscordIcon","CommuntiyXIcon","init_communtiyIcons","OrderlyTextIcon","init_orderlyNetworkTextIcon","opacity","SignalIcon","init_signal","InfoIcon","init_infoIcon","viewBox","CloseIcon","init_closeIcon","OrderlyLogo","init_orderlyLogo","init_icons","useAppConfig","Logo","MainLogo","init_mainLogo","appIcons","main","useEffect","useSubAccountQuery","Decimal","useAccountValue","init_useAccountValue","mainAccountId","accountValue","setAccountValue","newPositions","isPositionLoading","mutatePositions","value","acc","position","accountId","useRef","useIndexPricesStream","ABSTRACT_CHAIN_ID_MAP","EMPTY_LIST","EMPTY_OBJECT","SubAccountScript","calculateAccountValue","getTokenIndexPrice","init_subAccount_script","mainAccountHolding","setMainAccountHolding","wallet","indexPrices","subAccount","switchAccount","currentAccountId","hasRefreshedRef","userAddress","subAccounts","currentSubAccount","doCreatSubAccount","nickName","onSwitch","accountsWithValues","mainAccountUnsettlePnl","mainAccount","updatedSubAccounts","subAccountUnsettlePnl","holdings","unsettlePnl","holding","price","token","symbol","SubAccountIcon","SwapIcon","AddIcon","EditIcon","CopyIcon","formatAddress","AccountIdForCopy","AccountItem","init_accountItem","info","copy","inputFormatter","TextField","NickNameTextField","init_common","_value","MAX_SUB_ACCOUNT_COUNT","CreateSubAccount","init_createSubAccountModal","setNickName","invalid","setInvalid","subAccountCount","reset","validateNickName","_nickName","EditNickNameDialog","init_editNickNameModal","newNickName","setNewNickName","ScrollArea","PopoverRoot","PopoverContent","PopoverAnchor","SubAccountUI","timer","onMouseEnter","editDialogOpen","setEditDialogOpen","editAccountItem","setEditAccountItem","noSubAccount","renderSubAccount","content","dialogId","init_subAccount_ui","SubAccountWidget","init_subAccount_widget","init_subAccount","CommunityDiscord","CommunityTG","CommunityX","CommunityDune","init_communityIcon","width","height","className","Sheet","SheetContent","useModal","VectorIcon","SwapHorizIcon","PeopleIcon","LeftNavUI","LeftNavSheet","NavItem","init_leftNav_ui","visible","resolve","reject","showSubAccount","onRouteChange","option","subAccountTrigger","name","openExternalLink","url","onClick","href","icon","trailing","onlyInMainAccount","customRender","target","isMainAccount","onItemClick","useLocalStorage","isValidURL","str","useScanQRCodeScript","init_scanQRCode_script","widgetConfigs","timerRef","showScanTooltip","setShowScanTooltip","showDialog","hideDialog","onScanSuccess","onSuccess","jsQR","QRCODE_WIDTH","QRCODE_HEIGHT","RATIO","QRCodeScanner","init_scanner","videoRef","canvasRef","tick","video","canvas","ctx","videoWidth","videoHeight","canvasAspectRatio","videoAspectRatio","sx","sy","sWidth","sHeight","imageData","stream","Trans","ScanQRCode","ScanQRCodeContent","ScanIcon","LinkDeviceIcon","LineGradient","RadiusGradient","init_scanQRCode_ui","ScanQRCodeWidget","init_scanQRCode_widget","init_scanQRCode","useEventEmitter","useLinkDeviceScript","confirm","setConfirm","seconds","setSeconds","ExpireSeconds","secretKey","setSecretKey","setUrl","ee","_","chain","createTrackParams","getOrderlyKey","onConfirm","copyUrl","timestamp","params","createUrl","base64","init_linkDevice_script","qr","SimpleDialogFooter","LinkDevice","LinkDeviceContent","QRCode","QRCodeCanvas","LinkDeviceConfirm","Loading","init_linkDevice_ui","actions","qrcode","cells","tileW","tileH","row","c","w","h","LinkDeviceMobile","Dot","DesktopIcon","MobileIcon","LinkIcon","DotIcon","init_linkDevice_ui_mobile","LinkDeviceWidget","init_linkDevice","ChevronLeftIcon","MainNavMobile","init_mainNav_ui_mobile","currentMenu","menu","title","isSub","subTitle","onBack","showLinkDevice","showChainMenu","showQrcode","renderContent","languageSwitcher","scanQRCode","linkDevice","chainMenu","walletConnect","leftNav","Checkbox","RestrictedInfo","init_restrictedInfo_ui","brokerName","agree","setAgree","ip","restrictedOpen","canUnblock","accessRestricted","setAccessRestricted","checked","useObserverElement","useRestrictedInfoScript","init_restrictedInfo_script","restrictedInfo","container","mutiLine","setMutiLine","setCanUnblock","entry","RestrictedInfoWidget","init_restrictedInfo_widget","restrictedInfo_exports","__export","init_restrictedInfo","useLayoutEffect","useMarqueeOnce","init_useMarqueeOnce","opts","isActive","pxPerSec","startDelayMs","endDelayMs","fallbackStayMs","onFinish","containerRef","contentRef","rafRef","stopAll","timers","clearTimers","id","overflow","setOverflow","delta","setDelta","update","cw","tw","need","ro","startId","distance","durationMs","el","startTs","startX","endX","step","ts","progress","x","endId","usePrevNextButtons","init_usePrevNextButtons","emblaApi","onButtonClick","prevBtnDisabled","setPrevBtnDisabled","nextBtnDisabled","setNextBtnDisabled","onPrevButtonClick","onNextButtonClick","onSelect","useSelectedSnapDisplay","init_useSelectedSnapDisplay","selectedSnap","setSelectedSnap","snapCount","setSnapCount","updateScrollSnapState","init_hooks","SoundIcon","init_soundIcon","AnnouncementType","ChevronRightIcon","DialogTitle","DialogHeader","Dialog","DialogBody","DialogContent","useEmblaCarousel","SwitchTips","Controls","TipsType","AnnouncementItem","AnnouncementUI","init_announcement_ui","prevDisabled","nextDisabled","prevTips","nextTips","closeTips","type","label","map","text","onItemFinish","maintenanceDialogInfo","showAnnouncement","tips","style","emblaRef","goNext","index","UTCDateMini","format","produce","MaintenanceStatus","useMaintenanceStatus","useOrderlyContext","useQuery","useWS","getTimestamp","oneDay","maintentanceId","ORDERLY_ANNOUNCEMENT_KEY","getTimeString","sortDataByUpdatedTime","useAnnouncementData","useAnnouncementScript","init_announcement_script","date","ori","draft","a","b","ws","customAnnouncements","announcementStore","setStore","setTips","setMaintenanceDialogInfo","startTime","endTime","announcements","data","getMaintentTipsContent","startDate","endDate","getMaintentDialogContent","unsubscribe","message","prev","idx","tip","apiTime","existingIds","maintenanceTip","tipsCopy","setShowAnnouncement","dataAdapter","memoizedTips","len","AnnouncementWidget","init_announcement_widget","hideTips","announcement_exports","init_announcement","BottomNav","init_bottomNav_ui_mobile","mainMenus","current","isSubmenu","menus","BottomNavWidget","init_bottomNav_widget","bottomNav_exports","init_bottomNav","LazyRestrictedInfoWidget","LazyAnnouncementWidget","LazyBottomNav","MobileScaffold","init_scaffold_mobile_ui","mod","classNames","topNavbarRef","bottomNavHeight","topBar","mainNavProps","routerAdapter","bottomNavRef","bottomNavProps","bottomNav","children","useScaffoldScript","useRefAndHeight","init_scaffold_script","topNavbarHeight","footerRef","footerHeight","announcementRef","announcementHeight","expand","setExpand","sideBarExpandWidth","sideBarCollaspedWidth","hasLeftSidebar","defaultHeight","deps","setHeight","rect","WsNetworkStatus","Footer","init_footer_ui","signalClsName","openUrl","useWsStatus","useFooterScript","init_footer_script","FooterWidget","init_footer_widget","footer_exports","init_footer","tv","menuItemVariants","MenuItem","SideMenus","SideBarHeader","SideBar","ExpandIcon","CollapseIcon","init_sidebar_ui","mode","active","button","titleElemet","iconProps","items","onItemSelect","useSideNavBuilder","init_useSideNavBuilder_script","init_scaffold","setCurrent","expanded","useScaffoldContext","SideNavbarWidget","init_sidebar_widget","sidebar_exports","init_sidebar","isValidElement","Grid","LazyMainNavWidget","LazyFooterWidget","LazySideNavbarWidget","DesktopScaffold","init_scaffold_ui","leftSideProps","leftSidebar","footerProps","checkChainSupport","chainId","chains","init_chain","createContext","useContext","ScaffoldContext","init_scaffoldContext","OrderlyContext","useMemoizedFn","ScaffoldProvider","init_scaffoldProvider","checkChainSupportHandle","memoizedValue","Scaffold","init_scaffold_widget","CampaignPositionEnum","useMainNavScript","init_mainNav_script","campaignPosition","onItemClickHandler","scope","lastItem","args","mainNavConfig","config","campaigns","converted","EyeCloseIcon","EyeIcon","Popover","TotalValue","FreeCollateral","CurrentLeverage","MaxLeverage","UnrealPnL","AccountInfoPopover","DropdownMenu","IdentityButton","AccountSummary","Items","init_accountSummary_ui","totalValue","onToggleVisibility","visibleAvailable","freeCollateral","currentLeverage","keys","elementKeys","onSetToTop","key","elements","canToggleIndex","sizeRef","resizeObserver","entries","Element","useLeverage","useMarginRatio","usePositionStream","useCollateral","useTotalValueBuilderScript","setKeys","setElementKeys","setVisible","aggregated","totalUnrealizedROI","maxLeverage","onToggleItemByKey","k","onKeyToTop","unavailable","AccountSummaryWidget","init_accountSummary_widget","init_accountSummary","cloneElement","ChevronDownIcon","ActiveIcon","isObject","ORDERLY_NAV_BUTTON_TOOLTIP_OPEN","SubMenus","SubMenu","SubMenuTitle","Tag","ICON_CLASSNAME","ItemIcon","OutlinkIcon","init_navItem","currentPath","buttonProps","tooltipConfig","showButtonTooltip","setShowButtonTooltip","onClickHandler","buttonRender","subItem","hasDescription","hasIcon","CampaignButton","init_campaignButton","MainNavMenus","init_mainNavMenus_ui","MainNavMenusExtension","init_mainNavMenus_widget","MainNav","init_mainNav_ui","showCampaignButton","showLinkIcon","hideWalletConnectButton","isDesktop","accountSummary","mainNav","mainNav_widget_exports","MainNavWidget","init_mainNav_widget","MaintenanceTipsUI","showTips","tipsContent","dialogContent","useMaintenanceScript","setShowTips","setShowDialog","MaintenanceTipsWidget","useLeftNavState","LeftNavWidget"],"mappings":"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","sourcesContent":["import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n Divider,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n EVMAvatar,\n Flex,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\nexport type AccountMenuProps = {\n accountState: AccountState;\n address?: string;\n onDisconnect: () => void;\n connect: () => Promise<void>;\n onCrateAccount: () => Promise<void>;\n onCreateOrderlyKey: () => Promise<void>;\n onOpenExplorer: () => void;\n onSwitchNetwork: () => void;\n wrongNetwork: boolean;\n disabledConnect?: boolean;\n isMobile: boolean;\n};\n\nexport const AccountMenu = (props: AccountMenuProps) => {\n const { t } = useTranslation();\n const {\n accountState: state,\n onDisconnect,\n onOpenExplorer,\n wrongNetwork,\n onSwitchNetwork,\n isMobile,\n } = props;\n const disabled = state.validating || props.disabledConnect;\n\n if (!disabled && wrongNetwork) {\n return (\n <Button\n data-testid=\"oui-testid-nav-bar-wrongNetwork-btn\"\n size=\"md\"\n color=\"warning\"\n onClick={onSwitchNetwork}\n >\n {t(\"connector.wrongNetwork\")}\n </Button>\n );\n }\n\n if (\n !disabled &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n ) {\n return (\n <WalletMenu\n address={state.address!}\n onDisconnect={onDisconnect}\n onOpenExplorer={onOpenExplorer}\n />\n );\n }\n\n if (state.status <= AccountStatusEnum.NotConnected || disabled) {\n return (\n <Button\n data-testid=\"oui-testid-nav-bar-connectWallet-btn\"\n size=\"md\"\n variant={disabled ? undefined : \"gradient\"}\n angle={45}\n className=\"wallet-connect-button\"\n loading={state.validating}\n disabled={disabled}\n onClick={() => {\n props\n .connect()\n .then((r) => {\n console.log(\"*****\", r);\n })\n .catch((e) => console.error(e));\n }}\n >\n {isMobile ? t(\"connector.connect\") : t(\"connector.connectWallet\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // content={\"Please connect wallet before starting to trade\"}\n // align={\"end\"}\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // >\n\n // </Tooltip>\n // );\n }\n\n if (state.status <= AccountStatusEnum.NotSignedIn) {\n return (\n <Button size=\"md\" onClick={() => props.onCrateAccount()}>\n {t(\"connector.createAccount\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // content={\"Please sign in before starting to trade\"}\n // align={\"end\"}\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // >\n\n // </Tooltip>\n // );\n }\n\n if (state.status <= AccountStatusEnum.DisabledTrading) {\n return (\n <Button\n size=\"md\"\n onClick={() => {\n props\n .onCreateOrderlyKey()\n .then((r) => console.log(r))\n .catch((e) => console.error(e));\n }}\n >\n {t(\"connector.enableTrading\")}\n </Button>\n );\n // return (\n // <Tooltip\n // open\n // className=\"oui-bg-base-5\"\n // arrow={{ className: \"oui-fill-base-5\" }}\n // content={\"Please enable trading before starting to trade\"}\n // align={\"end\"}\n // >\n\n // </Tooltip>\n // );\n }\n};\n\nexport type AccountState = {\n status: AccountStatusEnum;\n\n /**\n * whether the account is validating\n */\n validating: boolean;\n chainNamespace?: string;\n\n accountId?: string;\n userId?: string;\n address?: string;\n isNew?: boolean;\n\n connectWallet?: {\n name: string;\n chainId: number;\n };\n};\n\nconst WalletMenu = (props: {\n address: string;\n onDisconnect: () => void;\n onOpenExplorer: () => void;\n}) => {\n const { address, onDisconnect } = props;\n const { t } = useTranslation();\n\n return (\n <DropdownMenuRoot>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"md\"\n variant=\"gradient\"\n angle={45}\n data-testid=\"oui-testid-nav-bar-address-btn\"\n >\n <Text.formatted rule=\"address\" className=\"oui-text-[rgba(0,0,0,.88)]\">\n {address}\n </Text.formatted>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n size={\"xl\"}\n align={\"end\"}\n onCloseAutoFocus={(e) => e.preventDefault()}\n style={{ width: \"280px\" }}\n className={\"oui-py-5 oui-font-semibold\"}\n sideOffset={12}\n >\n <DropdownMenuGroup>\n <Flex px={4}>\n <Flex gap={2} className={\"oui-flex-1\"}>\n <EVMAvatar address={address} size={\"md\"} />\n <Text.formatted rule={\"address\"} size={\"base\"}>\n {address}\n </Text.formatted>\n </Flex>\n <Flex gap={2}>\n <button\n data-testid=\"oui-testid-nav-bar-dropDownMenuItem-copyAddress\"\n onClick={async () => {\n // copy\n await navigator.clipboard.writeText(address);\n }}\n >\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 className=\"oui-fill-[rgba(255,255,255,0.36)] hover:oui-fill-primary-darken\"\n >\n <path\n d=\"M5.249 2.243a3 3 0 0 0-3 3v4.5a3 3 0 0 0 3 3 3 3 0 0 0 3 3h4.5a3 3 0 0 0 3-3v-4.5a3 3 0 0 0-3-3 3 3 0 0 0-3-3zm7.5 4.5a1.5 1.5 0 0 1 1.5 1.5v4.5a1.5 1.5 0 0 1-1.5 1.5h-4.5a1.5 1.5 0 0 1-1.5-1.5h3a3 3 0 0 0 3-3z\"\n // fill=\"currentcolor\"\n // fillOpacity=\".36\"\n\n // className={''}\n />\n </svg>\n </button>\n <button onClick={() => props.onOpenExplorer()}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n className=\"oui-fill-[rgba(255,255,255,0.36)] hover:oui-fill-primary-darken\"\n >\n <path d=\"M12.7432 15.7432C14.3999 15.7432 15.7432 14.3999 15.7432 12.7432V5.24316C15.7432 3.58641 14.3999 2.24316 12.7432 2.24316H5.24316C3.58641 2.24316 2.24316 3.58641 2.24316 5.24316V12.7432C2.24316 14.3999 3.58641 15.7432 5.24316 15.7432H12.7432ZM6.74316 11.9932C6.55116 11.9932 6.35092 11.9287 6.20392 11.7824C5.91142 11.4892 5.91142 10.9972 6.20392 10.7039L9.20392 7.70392L7.49316 5.99316H11.9932V10.4932L10.2824 8.78241L7.28241 11.7824C7.13616 11.9287 6.93516 11.9932 6.74316 11.9932Z\" />\n </svg>\n </button>\n </Flex>\n </Flex>\n </DropdownMenuGroup>\n <Divider className={\"oui-mx-4 oui-my-3\"} intensity={8} />\n {/* <DropdownMenuGroup>\n <DropdownMenuItem size={\"xl\"}>\n <Flex gap={2}>\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 opacity=\".998\"\n d=\"M5.243 2.197a3 3 0 0 0-3 3v7.5a3 3 0 0 0 3 3h7.5a3 3 0 0 0 3-3v-7.5a3 3 0 0 0-3-3zm0 1.5h7.5a1.5 1.5 0 0 1 1.5 1.5v7.5a1.52 1.52 0 0 1-.754 1.298c-.144-1.771-2.046-2.798-4.496-2.798S4.603 12.251 4.486 14a1.52 1.52 0 0 1-.743-1.303v-7.5a1.5 1.5 0 0 1 1.5-1.5m3.75 1.5a2.625 2.625 0 1 0 0 5.25 2.625 2.625 0 0 0 0-5.25\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </svg>\n <span>Overview</span>\n </Flex>\n </DropdownMenuItem>\n <DropdownMenuItem size={\"xl\"}>\n <Flex gap={2}>\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=\"M5.693 1.499c-1.463 0-2.672 1.11-2.672 2.508v9.984c0 1.398 1.209 2.508 2.672 2.508h6.657c1.463 0 2.672-1.11 2.672-2.508V6.726c0-2.672-2.58-5.227-5.25-5.227zm4.829 1.594c1.329.352 2.562 1.58 2.906 2.906h-1.735c-.667 0-1.171-.472-1.171-1.008zm-3.75 2.906h.75a.75.75 0 0 1 0 1.5h-.75a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5m0 3h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5\"\n fill=\"#fff\"\n fillOpacity=\".8\"\n />\n </svg>\n <span>Orders</span>\n </Flex>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <Divider className={\"oui-mx-4 oui-my-3\"} intensity={8} /> */}\n <DropdownMenuGroup>\n <DropdownMenuItem\n size={\"xl\"}\n onSelect={(event) => {\n event.preventDefault();\n onDisconnect();\n }}\n data-testid=\"oui-testid-nav-bar-dropDownMenuItem-disconnect\"\n >\n <Flex gap={2} className={\"oui-text-danger-light\"}>\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 fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.97 14.03a.75.75 0 0 1 0-1.06l.262-.263C2.594 12.354 1.5 11.108 1.5 9.06c0-2.447 1.563-3.75 3.75-3.75H6a.75.75 0 0 1 0 1.5h-.75C3.837 6.81 3 7.508 3 9.06s.837 2.25 2.25 2.25h.38l1.188-1.188a.75.75 0 0 1-.068-.312v-.75c0-1.162.381-2.19 1.172-2.883.645-.565 1.512-.867 2.578-.867h1.13l1.34-1.34a.75.75 0 0 1 1.061 1.06l-9 9a.75.75 0 0 1-1.06 0m6.14-7.2L8.27 8.668c.065-.583.281-1.056.635-1.367.289-.253.684-.419 1.205-.473M7.825 12.8l3.414-3.415c-.126 2.12-1.496 3.297-3.414 3.415m7.705-6.58a.75.75 0 0 0-1.06 1.06c.508.509.53 1.202.53 1.72 0 .739-.014 1.203-.53 1.72-.165.164-.455.307-.825.405a3.8 3.8 0 0 1-.895.125H12a.75.75 0 0 0 0 1.5h.75c.31 0 .787-.045 1.28-.175.48-.127 1.065-.36 1.5-.795.97-.97.97-1.991.97-2.75v-.06c0-.51.002-1.778-.97-2.75\"\n fill=\"currentcolor\"\n />\n </svg>\n <span>{t(\"connector.disconnect\")}</span>\n </Flex>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useCallback } from \"react\";\nimport {\n useAccount,\n useChains,\n useWalletConnector,\n} 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 { modal, toast, useScreen, Text } 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 \"@kodiak-finance/orderly-ui-connector\";\n\nconst ModalTitle = () => {\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\nexport const useAccountMenu = (): any => {\n const { t } = useTranslation();\n const { disconnect, connectedChain } = useWalletConnector();\n const { account, state } = useAccount();\n const { connectWallet, disabledConnect, wrongNetwork, setCurrentChainId } =\n useAppContext();\n\n const [, { findByChainId }] = useChains();\n\n const { isMobile } = useScreen();\n\n const onCrateAccount = async () => {\n const modalId = isMobile ? WalletConnectorSheetId : WalletConnectorModalId;\n modal\n .show(modalId, {\n title: <ModalTitle />,\n })\n .then(\n (res) => console.log(\"return ::\", res),\n (err) => console.log(\"error:::\", err),\n );\n };\n\n const onCreateOrderlyKey = async () => {\n const modalId = isMobile ? WalletConnectorSheetId : WalletConnectorModalId;\n modal\n .show(modalId, {\n title: <ModalTitle />,\n })\n .then(\n (res) => console.log(\"return ::\", res),\n (err) => console.log(\"error:::\", err),\n );\n };\n\n const switchChain = () => {\n account.once(\"validate:end\", (status) => {\n if (status < AccountStatusEnum.EnableTrading) {\n statusChangeHandler({ status });\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n });\n\n modal.show<{ wrongNetwork: boolean }>(ChainSelectorDialogId).then(\n (r) => {\n if (!r.wrongNetwork) {\n if (state.status < AccountStatusEnum.EnableTrading) {\n statusChangeHandler(state);\n } else {\n toast.success(t(\"connector.walletConnected\"));\n }\n }\n },\n (error) => {\n console.log(\"[switchChain error]\", error);\n },\n );\n };\n\n const connect = async () => {\n const res = await connectWallet();\n\n if (!res) {\n return;\n }\n\n if (res.wrongNetwork) {\n switchChain();\n } else {\n statusChangeHandler(res);\n }\n };\n\n const statusChangeHandler = (nextState: any) => {\n if (\n nextState.validating ||\n nextState.status <= AccountStatusEnum.Connected\n ) {\n return;\n }\n\n if (nextState.status < AccountStatusEnum.SignedIn) {\n onCrateAccount();\n }\n if (nextState.status < AccountStatusEnum.EnableTrading) {\n onCreateOrderlyKey();\n }\n };\n\n const onOpenExplorer = useCallback(() => {\n if (!connectedChain) {\n return;\n }\n const chainInfo = findByChainId(\n connectedChain!.id as number,\n \"network_infos\",\n );\n\n if (chainInfo) {\n // @ts-ignore\n const { explorer_base_url } = chainInfo;\n if (explorer_base_url) {\n if (explorer_base_url.endsWith(\"/\")) {\n window.open(`${explorer_base_url}address/${account.address}`);\n } else {\n window.open(`${explorer_base_url}/address/${account.address}`);\n }\n }\n }\n }, [state, connectedChain]);\n\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await disconnect({\n label: state.connectWallet?.name,\n });\n await account.disconnect();\n };\n\n const onSwitchNetwork = () => {\n const modalId = isMobile ? ChainSelectorSheetId : ChainSelectorDialogId;\n modal\n .show<{\n wrongNetwork: boolean;\n }>(modalId, {\n bridgeLessOnly: false,\n isWrongNetwork: wrongNetwork,\n })\n .then(\n (r: any) => {\n console.log(r?.chainId);\n if (r?.chainId) {\n setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n };\n\n return {\n address: state.address,\n accountState: state,\n connect,\n onCrateAccount,\n onCreateOrderlyKey,\n onOpenExplorer,\n onDisconnect,\n onSwitchNetwork,\n wrongNetwork,\n disabledConnect,\n isMobile,\n } as const;\n};\n\nexport type AccountMenuProps = ReturnType<typeof useAccountMenu>;\n","import {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AccountMenu, AccountMenuProps } from \"./menu.ui\";\nimport { useAccountMenu } from \"./useWidgetBuilder.script\";\nimport { FC } from \"react\";\n\nexport const AccountMenuWidget = () => {\n const state = useAccountMenu();\n return <AccountMenu {...state} />;\n};\n\ninstallExtension<AccountMenuProps>({\n name: \"account-menu\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.AccountMenu],\n builder: useAccountMenu,\n __isInternal: true,\n})((props: AccountMenuProps) => {\n return <AccountMenu {...props} />;\n});\n\nexport const WalletConnectButtonExtension = () => {\n return <ExtensionSlot position={ExtensionPositionEnum.AccountMenu} />;\n};\n","import { useEffect, useState } from \"react\";\nimport {\n useChains,\n useConfig,\n useAccount,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { API, Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\n\nexport type UseChainMenuScriptReturn = ReturnType<typeof useChainMenuScript>;\n\nexport const useChainMenuScript = () => {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const { state } = useAccount();\n const { connectedChain } = useWalletConnector();\n const { currentChainId, wrongNetwork, disabledConnect, setCurrentChainId } =\n useAppContext();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const hide = () => {\n setOpen(false);\n };\n\n const onChainChangeBefore = () => {\n setLoading(true);\n hide();\n };\n\n const onChainChangeAfter = () => {\n setLoading(false);\n };\n\n return {\n isConnected: !!connectedChain,\n currentChainId,\n wrongNetwork,\n disabledConnect,\n accountStatus: state.status,\n networkId,\n open,\n onOpenChange: setOpen,\n hide,\n onChainChangeBefore,\n onChainChangeAfter,\n loading,\n setCurrentChainId,\n };\n};\n\nexport type UseChainMenuBuilderScript = ReturnType<typeof useChainMenuScript>;\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Button,\n ChainIcon,\n cn,\n Flex,\n modal,\n Tooltip,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Spinner,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n ChainSelectorDialogId,\n ChainSelectorWidget,\n} from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { WalletConnectorModalId } from \"@kodiak-finance/orderly-ui-connector\";\nimport { UseChainMenuScriptReturn } from \"./chainMenu.script\";\n\nconst ModalTitle = () => {\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\nexport const ChainMenu = (props: UseChainMenuScriptReturn) => {\n const { t } = useTranslation();\n\n if (props.wrongNetwork && props.isConnected && !props.disabledConnect) {\n return (\n <Tooltip\n open\n hideWhenDetached\n content={t(\"connector.wrongNetwork.tooltip\")}\n className=\"oui-bg-base-5\"\n arrow={{ className: \"oui-fill-base-5\" }}\n >\n <Button\n color=\"warning\"\n size=\"md\"\n onClick={() => {\n modal\n .show<{ wrongNetwork: boolean }>(ChainSelectorDialogId, {\n networkId: props.networkId,\n })\n .then(\n (r) => {\n if (\n !r.wrongNetwork &&\n props.accountStatus < AccountStatusEnum.EnableTrading\n ) {\n modal\n .show(WalletConnectorModalId, {\n title: <ModalTitle />,\n })\n .then(\n (r) => console.log(r),\n (error) => console.log(error),\n );\n }\n },\n (error) => console.log(error),\n );\n }}\n >\n {t(\"connector.wrongNetwork\")}\n </Button>\n </Tooltip>\n );\n }\n\n const renderIcon = () => {\n if (props.loading) {\n return <Spinner className=\"oui-w-[18px] oui-h-[18px]\" />;\n }\n\n if (props.currentChainId) {\n return <ChainIcon chainId={props.currentChainId} size=\"xs\" />;\n }\n };\n\n const trigger = (\n <Flex\n intensity={500}\n justify=\"center\"\n className={cn(\n \"oui-relative oui-cursor-pointer\",\n \"oui-w-11 oui-h-8\",\n \"oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px]\",\n )}\n >\n {renderIcon()}\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-absolute oui-right-0 oui-bottom-0\"\n >\n <defs>\n <linearGradient\n id=\"paint0_linear_490_5080\"\n x1=\"10\"\n y1=\"5\"\n x2=\"-5.79673e-08\"\n y2=\"5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n d=\"M10 7V0L0 10H7C8.65685 10 10 8.65685 10 7Z\"\n fill=\"url(#paint0_linear_490_5080)\"\n />\n </svg>\n </Flex>\n );\n\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n sideOffset={4}\n collisionPadding={{ right: 16 }}\n className={cn(\n \"oui-bg-base-8 oui-w-[456px] oui-p-4 oui-rounded-xl\",\n \"oui-border oui-border-line-6\",\n \"oui-font-semibold\",\n )}\n >\n <ChainSelectorWidget\n close={props.hide}\n onChainChangeBefore={props.onChainChangeBefore}\n onChainChangeAfter={props.onChainChangeAfter}\n />\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, ChainIcon, modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { ChainSelectorSheetId } from \"@kodiak-finance/orderly-ui-chain-selector\";\nimport { UseChainMenuScriptReturn } from \"./chainMenu.script\";\n\nexport const ChainMenuUiMobile = (props: UseChainMenuScriptReturn) => {\n const { t } = useTranslation();\n\n return (\n <button\n onClick={(e) => {\n modal\n .show<{\n wrongNetwork: boolean;\n }>(ChainSelectorSheetId, {\n // networkId: props.networkId,\n bridgeLessOnly: false,\n isWrongNetwork: props.wrongNetwork,\n })\n .then(\n (r: any) => {\n console.log(r?.chainId, props);\n if (r?.chainId) {\n props.setCurrentChainId(r?.chainId);\n }\n toast.success(t(\"connector.networkSwitched\"));\n },\n (error) => console.log(\"[switchChain error]\", error),\n );\n }}\n >\n <Box className=\"oui-relative oui-rounded-t-[6px] oui-rounded-bl-[6px] oui-rounded-br-[3px] oui-bg-base-5 oui-px-2 oui-h-8 oui-w-8 oui-flex oui-items-center oui-justify-center\">\n <ChainIcon\n chainId={props.currentChainId!}\n size=\"xs\"\n className=\"oui-h-[18px] oui-w-[18px]\"\n />\n <div className=\"oui-absolute oui-right-0 oui-bottom-0\">\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 6V0L0 9h6a3 3 0 0 0 3-3\" fill=\"url(#a)\" />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"9\"\n y1=\"4.5\"\n x2=\"0\"\n y2=\"4.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop\n offset=\"1\"\n stopColor=\"rgb(var(--oui-gradient-brand-start))\"\n />\n </linearGradient>\n </defs>\n </svg>\n </div>\n </Box>\n </button>\n );\n};\n","import { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useChainMenuScript } from \"./chainMenu.script\";\nimport { ChainMenu } from \"./chainMenu.ui\";\nimport { ChainMenuUiMobile } from \"./chainMenu.ui.mobile\";\n\nexport const ChainMenuWidget = () => {\n const state = useChainMenuScript();\n const { isMobile } = useScreen();\n if (isMobile) {\n return <ChainMenuUiMobile {...state} />;\n }\n return <ChainMenu {...state} />;\n};\n","export { ChainMenuWidget } from \"./chainMenu.widget\";\nexport { ChainMenu } from \"./chainMenu.ui\";\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n i18n,\n LocaleContextState,\n useLocaleContext,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\n\nexport type LanguageSwitcherScriptReturn = ReturnType<\n typeof useLanguageSwitcherScript\n>;\n\nexport type LanguageSwitcherScriptOptions = Pick<\n LocaleContextState,\n \"popup\"\n> & { open?: boolean; onOpenChange?: (open: boolean) => void };\n\nexport const useLanguageSwitcherScript = (\n options?: LanguageSwitcherScriptOptions,\n) => {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [selectedLang, setSelectedLang] = useState(i18n.language);\n const { languages, onLanguageBeforeChanged, onLanguageChanged, popup } =\n useLocaleContext();\n\n const { track, setIdentify } = useTrack();\n\n const { isMobile } = useScreen();\n\n const onOpenChange = useCallback(\n (open: boolean) => {\n if (typeof options?.onOpenChange === \"function\") {\n options.onOpenChange(open);\n } else {\n setOpen(open);\n }\n },\n [options?.onOpenChange, setOpen],\n );\n\n const onLangChange = async (lang: string, displayName: string) => {\n setLoading(true);\n setSelectedLang(lang);\n await onLanguageBeforeChanged(lang);\n await i18n.changeLanguage(lang);\n await onLanguageChanged(lang);\n onOpenChange(false);\n setLoading(false);\n track(TrackerEventName.switchLanguage, {\n language: displayName,\n language_code: lang,\n });\n\n setIdentify({\n language_code: lang,\n });\n };\n\n const _popup = useMemo(\n () => ({\n ...popup,\n ...options?.popup,\n mode:\n options?.popup?.mode || popup?.mode || (isMobile ? \"sheet\" : \"modal\"),\n }),\n [popup, options?.popup, isMobile],\n );\n\n const _open = useMemo(() => {\n if (typeof options?.open === \"boolean\") {\n return options.open;\n }\n return open;\n }, [options?.open, open]);\n\n return {\n open: _open,\n onOpenChange,\n languages,\n selectedLang,\n onLangChange,\n loading,\n popup: _popup,\n };\n};\n","import { FC, SVGProps, forwardRef } from \"react\";\nimport { useTranslation, Language } from \"@kodiak-finance/orderly-i18n\";\nimport {\n cn,\n Flex,\n DropdownMenuContent,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n Text,\n Box,\n Spinner,\n SimpleDialog,\n useScreen,\n SimpleSheet,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { LanguageSwitcherScriptReturn } from \"./languageSwitcher.script\";\n\nexport type LanguageSwitcherProps = LanguageSwitcherScriptReturn;\n\nexport const LanguageSwitcher: FC<LanguageSwitcherProps> = (props) => {\n const { languages, popup } = props;\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n if (languages.length <= 1) {\n return null;\n }\n\n const trigger = (\n <Tooltip content={t(\"languageSwitcher.tooltip\")}>\n <LanguageIcon\n className={cn(\n \"oui-size-6 lg:oui-size-5\",\n \"oui-cursor-pointer oui-text-base-contrast-80\",\n \"oui-transition-colors hover:oui-fill-base-contrast\",\n isMobile && \"oui-size-[18px]\",\n )}\n id=\"language-switcher-icon\"\n onClick={() => props.onOpenChange(true)}\n />\n </Tooltip>\n );\n\n const header = (\n <Text weight=\"semibold\">{t(\"languageSwitcher.language\")}</Text>\n );\n\n const languageList = languages.map((item) => {\n const selected = props.selectedLang === item.localCode;\n return (\n <LanguageItem\n className={cn(\n [\"modal\", \"sheet\"].includes(popup.mode ?? \"\") &&\n \"oui-w-[calc((100%_-_4px)/2)] lg:oui-w-[calc((100%_-_8px)/3)]\",\n )}\n key={item.localCode}\n selected={selected}\n item={item}\n onClick={() => props.onLangChange(item.localCode, item.displayName)}\n loading={props.loading}\n />\n );\n });\n\n const context = (\n <Flex gap={1} className=\"oui-flex-wrap\">\n {languageList}\n </Flex>\n );\n\n const footer = (\n <Box mt={4}>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-warning-darken\"\n >\n {t(\"languageSwitcher.tips\")}\n </Text>\n </Box>\n );\n\n if (popup?.mode === \"sheet\" && isMobile) {\n return (\n <>\n {trigger}\n <SimpleSheet\n open={props.open}\n onOpenChange={props.onOpenChange}\n classNames={{\n content: cn(\"oui-px-5 oui-pb-5\", popup?.className),\n body: \"oui-pb-[env(safe-area-inset-bottom)]\",\n }}\n contentProps={{\n style: popup?.style,\n }}\n title={header}\n >\n {context}\n {footer}\n </SimpleSheet>\n </>\n );\n }\n\n if (popup?.mode === \"dropdown\") {\n const context = (\n <Box\n mt={4}\n className={cn(\n //40 * 8 + 4 * 7 = 348px, more than 8 will show scrollbars\n \"oui-custom-scrollbar oui-max-h-[348px] oui-overflow-y-auto\",\n \"oui-grid oui-gap-1 oui-pr-[6px]\",\n )}\n >\n {languageList}\n </Box>\n );\n\n return (\n <DropdownMenuRoot open={props.open} onOpenChange={props.onOpenChange}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent\n onCloseAutoFocus={(e) => e.preventDefault()}\n onClick={(e) => e.stopPropagation()}\n sideOffset={10}\n align=\"start\"\n collisionPadding={{ right: 16 }}\n className={cn(\n \"oui-w-[320px] lg:oui-w-[360px]\",\n \"oui-rounded-xl oui-bg-base-8 oui-p-5\",\n \"oui-border oui-border-line-6\",\n \"oui-font-semibold\",\n )}\n >\n {header}\n {context}\n {footer}\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n );\n }\n\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size={isMobile ? \"sm\" : \"xl\"}\n classNames={{\n content: popup?.className,\n }}\n contentProps={{\n style: popup?.style,\n }}\n >\n {context}\n {footer}\n </SimpleDialog>\n </>\n );\n};\n\ntype LanguageItemProps = {\n selected: boolean;\n item: Language;\n onClick?: () => void;\n loading?: boolean;\n className?: string;\n};\n\nconst LanguageItem: FC<LanguageItemProps> = (props) => {\n const { item } = props;\n\n const renderTrailing = () => {\n if (props.loading && props.selected) {\n return <Spinner size=\"sm\" />;\n }\n if (props.selected) {\n return <Box gradient=\"brand\" r=\"full\" width={4} height={4} />;\n }\n return null;\n };\n\n return (\n <button\n className={cn(\n \"oui-group oui-rounded-md hover:oui-bg-base-5\",\n props.selected && \"oui-bg-base-5\",\n props.className,\n )}\n onClick={props.onClick}\n >\n <Flex justify=\"between\" className=\"oui-h-10\" px={3}>\n <Flex itemAlign=\"center\" width=\"100%\" className=\"oui-gap-x-[6px]\">\n <Text\n size=\"2xs\"\n className={cn(\n \"oui-text-base-contrast-36 group-hover:oui-text-base-contrast-80\",\n props.selected && \"oui-text-base-contrast-80\",\n )}\n >\n {item.displayName}\n </Text>\n </Flex>\n {renderTrailing()}\n </Flex>\n </button>\n );\n};\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nconst LanguageIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M10 1.678a8.333 8.333 0 1 0 0 16.667 8.333 8.333 0 1 0 0-16.667m0 1.667c1.1 0 2.308 2.527 2.492 5.831l-4.975.01c.183-3.304 1.382-5.84 2.482-5.84m-2.943.67c-.717 1.393-1.1 3.242-1.193 5.165L3.38 9.174c.248-2.271 1.778-4.176 3.676-5.159m5.889.003c1.898.983 3.388 2.835 3.676 5.168l-2.483-.008c-.078-2-.52-3.758-1.193-5.16m-9.56 6.83 2.483-.02c.092 1.923.478 3.803 1.191 5.182a6.79 6.79 0 0 1-3.674-5.162m4.118.007 4.975-.01c-.184 3.303-1.38 5.833-2.48 5.833s-2.312-2.519-2.495-5.823m6.64-.008 2.471-.008c-.287 2.208-1.68 4.18-3.672 5.162.74-1.53 1.108-3.23 1.2-5.154\" />\n </svg>\n );\n});\n","import {\n LanguageSwitcherScriptOptions,\n useLanguageSwitcherScript,\n} from \"./languageSwitcher.script\";\nimport { LanguageSwitcher } from \"./languageSwitcher.ui\";\n\nexport type LanguageSwitcherWidgetProps = LanguageSwitcherScriptOptions;\n\nexport const LanguageSwitcherWidget = (props: LanguageSwitcherWidgetProps) => {\n const state = useLanguageSwitcherScript(props);\n return <LanguageSwitcher {...state} />;\n};\n","export {\n LanguageSwitcherWidget,\n type LanguageSwitcherWidgetProps,\n} from \"./widget\";\nexport {\n useLanguageSwitcherScript,\n type LanguageSwitcherScriptReturn,\n} from \"./languageSwitcher.script\";\nexport {\n LanguageSwitcher,\n type LanguageSwitcherProps,\n} from \"./languageSwitcher.ui\";\n","import { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\nimport React from \"react\";\n\nexport const CommuntiyTelegramIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M4.108 9.464S9.645 7.13 11.565 6.31c.736-.328 3.233-1.38 3.233-1.38s1.152-.46 1.056.658c-.032.46-.288 2.069-.544 3.81-.384 2.463-.8 5.157-.8 5.157s-.064.755-.608.887c-.544.13-1.44-.46-1.6-.592-.129-.098-2.401-1.576-3.233-2.299-.224-.197-.48-.591.032-1.051a124 124 0 0 0 3.36-3.285c.384-.394.768-1.313-.832-.197-2.272 1.61-4.513 3.12-4.513 3.12s-.512.33-1.472.034-2.08-.69-2.08-.69-.768-.493.544-1.018\" />\n </svg>\n );\n});\nexport const CommuntiyDiscordIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n {...rest}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M14.956 5.522c1.604 2.374 2.396 5.053 2.1 8.136a.05.05 0 0 1-.02.033 11.7 11.7 0 0 1-3.55 1.805.045.045 0 0 1-.05-.017 9.6 9.6 0 0 1-.725-1.188.046.046 0 0 1 .024-.063 7 7 0 0 0 1.108-.531.046.046 0 0 0 .004-.076 6 6 0 0 1-.22-.174.04.04 0 0 0-.047-.006c-2.296 1.068-4.812 1.068-7.136 0a.04.04 0 0 0-.046.006 6 6 0 0 1-.22.174.046.046 0 0 0 .005.076c.353.204.721.384 1.107.531.025.01.037.039.025.063a8.5 8.5 0 0 1-.725 1.188.05.05 0 0 1-.05.017 11.7 11.7 0 0 1-3.546-1.805.05.05 0 0 1-.018-.033c-.248-2.667.257-5.368 2.097-8.137a.04.04 0 0 1 .02-.016 11.6 11.6 0 0 1 2.89-.903.05.05 0 0 1 .046.022c.125.224.269.51.366.744a10.7 10.7 0 0 1 3.246 0 8 8 0 0 1 .36-.744.044.044 0 0 1 .046-.022 11.7 11.7 0 0 1 2.89.903q.012.005.019.017m-6.018 5.07c.011-.788-.56-1.44-1.276-1.44-.71 0-1.276.647-1.276 1.44 0 .795.576 1.442 1.276 1.442.71 0 1.276-.647 1.276-1.441m4.718 0c.011-.788-.56-1.44-1.276-1.44-.71 0-1.276.647-1.276 1.44 0 .795.577 1.442 1.276 1.442.717 0 1.276-.647 1.276-1.441\" />\n </svg>\n );\n});\nexport const CommuntiyXIcon = React.forwardRef<\n SVGSVGElement,\n BaseIconProps\n>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n ref={ref}\n fill=\"#fff\"\n fillOpacity=\".54\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"m4.42 4.73 4.633 6.194-4.662 5.037H5.44l4.082-4.41 3.298 4.41h3.57l-4.893-6.543 4.34-4.689h-1.05l-3.759 4.062-3.037-4.062zm1.543.772h1.64l7.244 9.686h-1.64z\" />\n </svg>\n );\n});\n\nCommuntiyXIcon.displayName = \"CommuntiyXIcon\";\nCommuntiyTelegramIcon.displayName = \"CommuntiyTelegramIcon\";\nCommuntiyDiscordIcon.displayName = \"CommuntiyDiscordIcon\";\n","import React from \"react\";\nimport { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\n\nexport const OrderlyTextIcon = React.forwardRef<SVGSVGElement, BaseIconProps>(\n (props, ref) => {\n const { opacity = 1, ...rest } = props;\n return (\n <svg\n ref={ref}\n width=\"45\"\n height=\"14\"\n viewBox=\"0 0 45 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.352 2.558a.063.063 0 0 1-.04.112H2.419a.063.063 0 0 1-.04-.112A4.73 4.73 0 0 1 5.365 1.5c1.132 0 2.171.396 2.987 1.058M3.518 7.546a.18.18 0 0 0-.148-.08H.886a.085.085 0 0 0-.083.11 4.75 4.75 0 0 0 4.562 3.429 4.75 4.75 0 0 0 4.562-3.43.085.085 0 0 0-.082-.108H7.36a.18.18 0 0 0-.148.079 2.252 2.252 0 0 1-3.694 0m3.518-2.812a.18.18 0 0 0 .134.061h2.598c.06 0 .101-.057.082-.113a4.8 4.8 0 0 0-.801-1.432.17.17 0 0 0-.132-.062H1.814a.17.17 0 0 0-.132.062A4.8 4.8 0 0 0 .88 4.682a.085.085 0 0 0 .081.113h2.6c.05 0 .099-.023.133-.06a2.25 2.25 0 0 1 1.67-.742c.663 0 1.258.286 1.67.741M7.6 6.95a.067.067 0 0 1-.063-.086 2.26 2.26 0 0 0-.079-1.45.067.067 0 0 1 .061-.093h2.45c.03 0 .058.022.063.052a4.8 4.8 0 0 1 .04 1.52.064.064 0 0 1-.065.057zm-4.407-.086a.067.067 0 0 1-.063.086H.723a.064.064 0 0 1-.064-.056 4.8 4.8 0 0 1 .039-1.52.065.065 0 0 1 .063-.053h2.45c.047 0 .079.049.061.093a2.25 2.25 0 0 0-.079 1.45\"\n fill=\"#fff\"\n fillOpacity={opacity}\n />\n <path\n d=\"M11.272 4.438h1.685v1.61l-.275-.312q.237-.511.662-.874.425-.361.949-.487.524-.124 1.073.038v1.585q-.661-.224-1.223-.125-.55.1-.874.475-.312.375-.312.923v3.608h-1.685zm4.148 3.22q0-.923.4-1.697.41-.774 1.123-1.211a2.95 2.95 0 0 1 1.573-.437 2.7 2.7 0 0 1 1.523.437 2.8 2.8 0 0 1 1.01 1.198q.363.762.363 1.71 0 .95-.362 1.71-.35.762-1.011 1.199a2.7 2.7 0 0 1-1.523.437 2.95 2.95 0 0 1-1.573-.437 3.1 3.1 0 0 1-1.124-1.198 3.7 3.7 0 0 1-.4-1.71m1.748 0q0 .5.224.924.225.412.612.65.387.236.861.236.475 0 .862-.237.386-.237.611-.649.225-.424.225-.924 0-.498-.225-.91-.225-.425-.611-.65a1.6 1.6 0 0 0-.862-.237q-.474 0-.861.237a1.6 1.6 0 0 0-.612.65q-.224.412-.224.91m3.395-6.016h1.685v9.237h-1.685zm4.192 5.329h3.97l-.387.537a2 2 0 0 0-.25-.9 1.63 1.63 0 0 0-.612-.623 1.64 1.64 0 0 0-.861-.225q-.487 0-.886.25a1.6 1.6 0 0 0-.625.686 2.1 2.1 0 0 0-.224.961q0 .537.224.974.239.436.662.687.425.25.961.25.525 0 .937-.238.423-.25.661-.674l1.386.624q-.45.787-1.236 1.26-.786.463-1.798.463-.96 0-1.747-.437a3.3 3.3 0 0 1-1.248-1.198 3.34 3.34 0 0 1-.45-1.71q0-.924.437-1.686.45-.775 1.223-1.21.774-.45 1.723-.45 1.061 0 1.885.537.825.536 1.21 1.448.4.898.226 1.96h-5.181zm6.221-2.534h1.685v1.61l-.274-.312q.237-.511.661-.874.425-.361.949-.487.525-.124 1.073.038v1.585q-.661-.224-1.223-.125-.549.1-.874.475-.312.375-.312.923v3.608h-1.685zm4.885-2.796h1.686v9.237H35.86zm4.359 9.324q.224.487.587.737.362.262.836.262.711 0 1.186-.5.487-.486.487-1.26V9.08l.262.35a2.43 2.43 0 0 1-.911 1.011q-.6.362-1.373.362-.8 0-1.386-.337a2.3 2.3 0 0 1-.886-.936q-.312-.6-.312-1.386V4.438h1.685v3.408q0 .436.162.761.162.312.462.5.312.174.761.174.45 0 .8-.175a1.3 1.3 0 0 0 .549-.511q.187-.338.187-.75V4.439H45v5.767q0 .936-.45 1.685a3.07 3.07 0 0 1-1.21 1.186 3.4 3.4 0 0 1-1.698.424q-.973 0-1.735-.474a3.3 3.3 0 0 1-1.186-1.26z\"\n fill=\"#fff\"\n fillOpacity={opacity}\n />\n </svg>\n );\n }\n);\n","import { BaseIconProps } from \"@kodiak-finance/orderly-ui\";\nimport React from \"react\";\n// import { BaseIcon, BaseIconProps } from \"./baseIcon\";\n\nexport const SignalIcon = React.forwardRef<SVGSVGElement, BaseIconProps>(\n (props, ref) => {\n const { size = 18, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n ref={ref}\n className=\"oui-fill-success-light\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M9.02092 2.92969C6.18562 2.92969 3.51037 4.13854 1.68502 6.18754C1.40947 6.49676 1.446 6.96671 1.75537 7.24218C2.0646 7.51743 2.53447 7.48143 2.81002 7.17183C4.35112 5.44196 6.6141 4.42969 9.02092 4.42969C11.4205 4.42969 13.6369 5.43123 15.185 7.17183C15.4603 7.48143 15.9301 7.51743 16.2397 7.24218C16.5492 6.96694 16.5853 6.49699 16.31 6.18754C14.4787 4.12856 11.8512 2.92969 9.02092 2.92969ZM9.02092 5.92969C7.04092 5.92969 5.20867 6.78461 3.93502 8.25019C3.6633 8.56294 3.6927 9.03318 4.00537 9.30468C4.31797 9.57618 4.7883 9.54693 5.06002 9.23418C6.05175 8.09343 7.47982 7.42968 9.02092 7.42968C10.5348 7.42968 11.9446 8.08144 12.935 9.18769C13.2113 9.49593 13.681 9.51093 13.9897 9.23418C14.2983 8.95818 14.3364 8.48793 14.06 8.17968C12.7879 6.75896 10.9659 5.92969 9.02092 5.92969ZM9.02092 8.92968C7.91917 8.92968 6.89242 9.40218 6.18502 10.2189C5.91375 10.5317 5.94225 11.0019 6.25537 11.2734C6.56835 11.5449 7.03875 11.5164 7.31002 11.2029C7.73542 10.7124 8.3589 10.4297 9.02092 10.4297C9.6684 10.4297 10.2604 10.7072 10.685 11.1797C10.962 11.4879 11.4552 11.5037 11.7631 11.2262C12.0712 10.9494 12.087 10.4799 11.81 10.1717C11.1037 9.38643 10.0983 8.92968 9.02092 8.92968ZM8.99752 11.9297C8.81609 11.9297 8.64374 12.0047 8.50537 12.1404C8.50537 12.1404 7.3935 13.2362 6.95842 13.6637C6.52342 14.0919 6.7968 14.9319 7.49752 14.9297H9.63037H10.4975C11.1864 14.9319 11.477 14.0739 11.0366 13.6404C10.5961 13.2069 9.51322 12.1404 9.51314 12.1404C9.37469 12.0047 9.17894 11.9297 8.99752 11.9297Z\" />\n </svg>\n );\n }\n);\n\nSignalIcon.displayName = \"SignalIcon\";\n","import React, { FC } from \"react\";\nimport { SVGProps } from \"react\";\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\n\nexport const InfoIcon: FC<IconProps> = (props) => {\n const { size = 20, viewBox, ...rest } = props;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={`${size}px`}\n height={`${size}px`}\n fill=\"none\"\n viewBox={`0 0 20 20`}\n {...rest}\n >\n <path\n d=\"M10.012 1.66602C5.40954 1.66602 1.67871 5.39685 1.67871 9.99935C1.67871 14.6018 5.40954 18.3327 10.012 18.3327C14.6145 18.3327 18.3454 14.6018 18.3454 9.99935C18.3454 5.39685 14.6145 1.66602 10.012 1.66602ZM10.012 5.83268C10.472 5.83268 10.8454 6.20602 10.8454 6.66602V10.8327C10.8454 11.2927 10.472 11.666 10.012 11.666C9.55204 11.666 9.17871 11.2927 9.17871 10.8327V6.66602C9.17871 6.20602 9.55204 5.83268 10.012 5.83268ZM10.012 12.4993C10.472 12.4993 10.8454 12.8727 10.8454 13.3327C10.8454 13.7927 10.472 14.166 10.012 14.166C9.55204 14.166 9.17871 13.7927 9.17871 13.3327C9.17871 12.8727 9.55204 12.4993 10.012 12.4993Z\"\n fill=\"#FF7D00\"\n />\n </svg>\n );\n};\n","import React from \"react\";\nimport { SVGProps } from \"react\";\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size: number;\n}\n\nexport const CloseIcon: React.FC<IconProps> = (props) => {\n const { size = 16, ...rest } = props;\n return (\n <svg\n width={`${size}px`}\n height={`${size}px`}\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path\n d=\"M3.32972 2.60449C3.15912 2.60449 2.98072 2.66183 2.85052 2.79183C2.59019 3.0525 2.59019 3.48982 2.85052 3.75049L7.03806 7.93782L2.85052 12.1252C2.59019 12.3858 2.59019 12.8232 2.85052 13.0838C3.11092 13.3438 3.54852 13.3438 3.80892 13.0838L7.99639 8.89649L12.1839 13.0838C12.4443 13.3438 12.8819 13.3438 13.1423 13.0838C13.4026 12.8232 13.4026 12.3858 13.1423 12.1252L8.95472 7.93782L13.1423 3.75049C13.4026 3.48982 13.4026 3.0525 13.1423 2.79183C13.0121 2.66183 12.8336 2.60449 12.6631 2.60449C12.4925 2.60449 12.3141 2.66183 12.1839 2.79183L7.99639 6.97916L3.80892 2.79183C3.67872 2.66183 3.50032 2.60449 3.32972 2.60449Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n","import { FC } from \"react\";\nimport { SVGProps } from \"react\";\n\nexport const OrderlyLogo: FC<SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"200\"\n height=\"24\"\n viewBox=\"0 0 200 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M22.2637 18.5152H26.1444V13.3629C26.1444 10.2669 27.9664 9.39239 29.6701 9.39239C29.9777 9.39239 30.2617 9.41602 30.6639 9.46329V6.20176C30.2853 6.10722 29.9777 6.08359 29.7174 6.08359C27.8481 6.08359 26.6886 7.3362 26.2153 9.27421H26.1444V6.22539H22.2637V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M37.3191 18.7516C39.1411 18.7516 40.3952 17.7826 40.7265 16.8608V18.5152H44.6072V1.97122H40.7265V7.87979C40.3952 6.95806 39.1411 5.98905 37.3191 5.98905C34.8108 5.98905 31.9713 7.83252 31.9713 12.3703C31.9713 16.9317 34.8108 18.7516 37.3191 18.7516ZM35.6153 12.3703C35.6153 10.196 36.9168 9.20331 38.2892 9.20331C39.638 9.20331 40.8921 10.196 40.8921 12.3703C40.8921 14.5447 39.638 15.5373 38.2892 15.5373C36.9168 15.5373 35.6153 14.5447 35.6153 12.3703Z\"\n fill=\"white\"\n />\n <path\n d=\"M53.418 18.7516C56.4468 18.7516 58.6475 17.1917 59.2154 14.3556H55.8079C55.595 15.1592 55.0744 15.8209 53.489 15.8209C51.9746 15.8209 51.0281 15.1355 50.8151 13.3393H59.31C59.3573 13.0557 59.381 12.8194 59.381 12.3703C59.381 7.57255 56.5888 5.98905 53.418 5.98905C50.1289 5.98905 47.1474 7.73799 47.1474 12.323C47.1474 17.0972 50.3655 18.7516 53.418 18.7516ZM50.8388 11.0941C51.0754 9.676 51.8799 8.9197 53.3234 8.9197C55.0981 8.9197 55.6423 10.0305 55.7133 11.0941H50.8388Z\"\n fill=\"white\"\n />\n <path\n d=\"M61.8978 18.5152H65.7784V13.3629C65.7784 10.2669 67.6005 9.39239 69.3042 9.39239C69.6118 9.39239 69.8957 9.41602 70.298 9.46329V6.20176C69.9194 6.10722 69.6118 6.08359 69.3515 6.08359C67.4821 6.08359 66.3227 7.3362 65.8494 9.27421H65.7784V6.22539H61.8978V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M72.5672 18.5152H76.4479V1.97122H72.5672V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M79.8261 20.0278V23.2893C83.6358 23.6911 85.2212 22.4149 86.8776 18.3734L91.8468 6.22539H87.8714L85.1739 13.5757L82.5473 6.22539H78.5957L83.0679 17.2626C83.3755 17.9953 83.3992 18.3734 83.1389 18.9643C82.9259 19.437 82.3817 20.3587 79.8261 20.0278Z\"\n fill=\"white\"\n />\n <path\n d=\"M100.278 18.5152H104.229V8.63609H104.324L110.287 18.5152H114.546V1.97122H110.571V12.1103H110.476L104.371 1.97122H100.278V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M123.327 18.7516C126.356 18.7516 128.557 17.1917 129.125 14.3556H125.717C125.504 15.1592 124.984 15.8209 123.398 15.8209C121.884 15.8209 120.937 15.1355 120.724 13.3393H129.219C129.267 13.0557 129.29 12.8194 129.29 12.3703C129.29 7.57255 126.498 5.98905 123.327 5.98905C120.038 5.98905 117.057 7.73799 117.057 12.323C117.057 17.0972 120.275 18.7516 123.327 18.7516ZM120.748 11.0941C120.985 9.676 121.789 8.9197 123.233 8.9197C125.007 8.9197 125.552 10.0305 125.623 11.0941H120.748Z\"\n fill=\"white\"\n />\n <path\n d=\"M137.439 18.6807C138.172 18.6807 138.882 18.5861 139.474 18.4207V15.5609C138.93 15.6082 138.717 15.6082 138.456 15.6082C137.202 15.6082 136.966 14.9228 136.966 14.072V9.22695H139.379V6.22539H136.966V3.01113H133.085V6.22539H130.979V9.22695H133.085V14.6156C133.085 17.4753 134.789 18.6807 137.439 18.6807Z\"\n fill=\"white\"\n />\n <path\n d=\"M144.456 18.5152H148.833L150.797 11.3777L152.761 18.5152H157.115L160.333 6.22539H156.666L154.749 14.781H154.654L152.454 6.22539H149.117L146.917 14.781H146.822L144.905 6.22539H141.261L144.456 18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M167.796 18.7516C170.896 18.7516 174.043 16.8845 174.043 12.3703C174.043 7.85616 170.896 5.98905 167.796 5.98905C164.673 5.98905 161.549 7.85616 161.549 12.3703C161.549 16.8845 164.673 18.7516 167.796 18.7516ZM165.169 12.3703C165.169 10.196 166.282 9.20331 167.796 9.20331C169.287 9.20331 170.399 10.196 170.399 12.3703C170.399 14.5447 169.287 15.5373 167.796 15.5373C166.282 15.5373 165.169 14.5447 165.169 12.3703Z\"\n fill=\"white\"\n />\n <path\n d=\"M176.554 18.5152H180.434V13.3629C180.434 10.2669 182.256 9.39239 183.96 9.39239C184.268 9.39239 184.552 9.41602 184.954 9.46329V6.20176C184.575 6.10722 184.268 6.08359 184.007 6.08359C182.138 6.08359 180.979 7.3362 180.505 9.27421H180.434V6.22539H176.554V18.5152Z\"\n fill=\"white\"\n />\n <path\n d=\"M187.223 18.5152H191.104V14.9701L192.074 13.9302L195.742 18.5152H200.001L194.44 11.4249L199.362 6.22539H195.126L191.104 10.8104V1.97122H187.223V18.5152Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.66235 0.640167L9.70838 0.640167C12.1367 0.64581 14.355 1.54403 16.052 3.02375C16.1722 3.1286 16.0961 3.32102 15.9365 3.32102L3.43427 3.32102C3.27465 3.32102 3.1985 3.1286 3.31874 3.02375C5.01571 1.54403 7.23406 0.645809 9.66235 0.640167Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.9175 12.9472C5.84821 12.8485 5.73663 12.7865 5.61594 12.7865L0.606422 12.7865C0.461299 12.7865 0.355489 12.924 0.39667 13.063C1.58273 17.0661 5.29234 19.9869 9.68495 19.9869C14.0776 19.9869 17.7872 17.0661 18.9732 13.063C19.0144 12.924 18.9086 12.7865 18.7635 12.7865L13.754 12.7865C13.6333 12.7865 13.5218 12.8485 13.4525 12.9472C12.6208 14.1317 11.2434 14.9061 9.68499 14.9061C8.12654 14.9061 6.74917 14.1317 5.9175 12.9472Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.3322 7.51577C13.4208 7.63078 13.5556 7.7029 13.7009 7.7029L18.7216 7.7029C18.868 7.7029 18.9741 7.56325 18.9304 7.42361C18.551 6.2113 17.9392 5.10154 17.147 4.14637C17.0811 4.06686 16.9826 4.02197 16.8792 4.02197L2.4903 4.02197C2.38694 4.02197 2.28845 4.06686 2.22251 4.14637C1.43037 5.10153 0.818541 6.2113 0.439134 7.42361C0.395431 7.56325 0.501494 7.7029 0.647976 7.7029L5.66868 7.7029C5.81394 7.7029 5.9488 7.63078 6.03735 7.51577C6.87801 6.42387 8.19911 5.72017 9.68478 5.72017C11.1704 5.72017 12.4916 6.42387 13.3322 7.51577Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.1283 12.0868C14.0334 12.0868 13.969 11.9902 14.0018 11.9013C14.184 11.4069 14.2835 10.8724 14.2835 10.3148C14.2835 9.70687 14.1652 9.12653 13.9505 8.59547C13.9142 8.50592 13.9788 8.40582 14.0755 8.40582L19.0003 8.40582C19.1057 8.40582 19.1968 8.48012 19.2156 8.58377C19.3172 9.14546 19.3702 9.72401 19.3702 10.3149C19.3702 10.8567 19.3256 11.3881 19.2399 11.9057C19.2225 12.0108 19.1307 12.0868 19.0241 12.0868L14.1283 12.0868ZM5.36846 11.9013C5.40122 11.9902 5.33678 12.0868 5.24195 12.0868L0.346163 12.0868C0.239492 12.0868 0.147732 12.0108 0.130321 11.9057C0.0445957 11.3881 0 10.8567 0 10.3149C0 9.72401 0.0530502 9.14546 0.154653 8.58377C0.173403 8.48011 0.264481 8.40582 0.369941 8.40582L5.29476 8.40582C5.39146 8.40582 5.45599 8.50592 5.41977 8.59547C5.20498 9.12653 5.08673 9.70687 5.08673 10.3148C5.08673 10.8724 5.18623 11.4069 5.36846 11.9013Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n","export {\n CommuntiyXIcon,\n CommuntiyTelegramIcon,\n CommuntiyDiscordIcon,\n} from \"./communtiyIcons\";\nexport { OrderlyTextIcon } from \"./orderlyNetworkTextIcon\";\nexport { SignalIcon } from \"./signal\";\nexport { InfoIcon } from \"./infoIcon\";\nexport { CloseIcon } from \"./closeIcon\";\nexport { OrderlyLogo } from \"./orderlyLogo\";\n","import { FC } from \"react\";\nimport { useAppConfig } from \"@kodiak-finance/orderly-react-app\";\nimport { OrderlyLogo } from \"../icons\";\nimport { Logo } from \"@kodiak-finance/orderly-ui\";\n\ntype MainLogoProps = {\n src?: string;\n alt?: string;\n};\n\nexport const MainLogo: FC<MainLogoProps> = (props) => {\n const { appIcons } = useAppConfig();\n\n if (props.src) {\n return <Logo src={props.src} alt={props.alt} />;\n }\n\n const { main } = appIcons || {};\n\n if (main?.img) {\n return <img src={main?.img} />;\n }\n\n if (main?.component) {\n return main.component;\n }\n\n return <OrderlyLogo />;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSubAccountQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAccountValue = (mainAccountId?: string) => {\n const [accountValue, setAccountValue] = useState<Record<string, number>>({});\n const {\n data: newPositions = [],\n isLoading: isPositionLoading,\n mutate: mutatePositions,\n } = useSubAccountQuery<API.PositionExt[]>(\"/v1/client/aggregate/positions\", {\n // formatter: (data) => data,\n errorRetryCount: 3,\n accountId: mainAccountId,\n });\n\n useEffect(() => {\n if (isPositionLoading) {\n return;\n }\n if (!newPositions || newPositions.length === 0) {\n setAccountValue({});\n return;\n }\n const value = newPositions.reduce(\n (acc, position) => {\n const accountId = position.account_id!;\n if (acc[accountId]) {\n acc[accountId] = new Decimal(acc[accountId])\n .plus(position.unsettled_pnl)\n .toNumber();\n } else {\n acc[accountId] = new Decimal(position.unsettled_pnl).toNumber();\n }\n return acc;\n },\n {} as Record<string, number>,\n );\n setAccountValue(value);\n }, [newPositions, isPositionLoading]);\n return {\n accountValue,\n };\n};\n","import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport {\n useAccount,\n useIndexPricesStream,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ABSTRACT_CHAIN_ID_MAP,\n API,\n EMPTY_LIST,\n EMPTY_OBJECT,\n} from \"@kodiak-finance/orderly-types\";\nimport { toast, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useAccountValue } from \"./useAccountValue\";\n\nexport type SubAccountScriptReturn = ReturnType<typeof SubAccountScript>;\n\ntype AccountValueInfo = {\n id: string;\n userAddress?: string;\n description?: string;\n holding: API.Holding[];\n accountValue?: number;\n};\n\nexport const SubAccountScript = () => {\n const [open, setOpen] = useState(false);\n const [mainAccountHolding, setMainAccountHolding] = useState<API.Holding[]>(\n [],\n );\n const { wallet, connectedChain } = useWalletConnector();\n const { data: indexPrices } = useIndexPricesStream();\n const { isMobile } = useScreen();\n const { state, account, subAccount, switchAccount } = useAccount();\n const { t } = useTranslation();\n const mainAccountId = state.mainAccountId;\n\n const { accountValue } = useAccountValue(mainAccountId);\n\n const currentAccountId = state.accountId;\n\n const hasRefreshedRef = useRef(false);\n\n const userAddress = useMemo(() => {\n let address = state.address;\n if (\n connectedChain?.id &&\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain?.id as string))\n ) {\n address = account.getAdditionalInfo()?.AGWAddress;\n }\n\n return address;\n }, [wallet, state, account, connectedChain]);\n\n const subAccounts = useMemo(() => {\n if (!state.subAccounts || !state.subAccounts.length) {\n return [];\n }\n\n const currentSubAccount = state.subAccounts.find(\n (subAccount) => subAccount.id === currentAccountId,\n );\n\n if (currentSubAccount) {\n return [\n currentSubAccount,\n ...state.subAccounts.filter(\n (subAccount) => subAccount.id !== currentAccountId,\n ),\n ];\n }\n\n return [...state.subAccounts];\n }, [state.subAccounts, currentAccountId]);\n\n const _popup = useMemo(\n () => ({ mode: isMobile ? \"sheet\" : \"modal\" }),\n [isMobile],\n );\n\n const doCreatSubAccount = useCallback(\n (nickName: string) => {\n return subAccount.create(nickName);\n },\n [subAccount],\n );\n\n const onSwitch = useCallback(\n (accountId: string) => {\n return switchAccount(accountId)\n .catch((error) => {\n console.error(error);\n })\n .then((res) => {\n toast.success(t(\"subAccount.modal.switch.success.description\"));\n });\n },\n [switchAccount],\n );\n\n const accountsWithValues = useMemo(() => {\n const mainAccountUnsettlePnl = accountValue[mainAccountId!] ?? 0;\n\n const mainAccount =\n mainAccountId && state.address\n ? {\n id: mainAccountId,\n userAddress: state.address,\n holding: mainAccountHolding,\n accountValue: calculateAccountValue(\n mainAccountHolding,\n mainAccountUnsettlePnl,\n indexPrices || EMPTY_OBJECT,\n ),\n }\n : undefined;\n\n const updatedSubAccounts = subAccounts.map((subAccount) => {\n const subAccountUnsettlePnl = accountValue[subAccount.id] ?? 0;\n return {\n ...subAccount,\n accountValue: calculateAccountValue(\n subAccount.holding || EMPTY_LIST,\n subAccountUnsettlePnl,\n indexPrices || EMPTY_OBJECT,\n ),\n };\n });\n\n return {\n mainAccount,\n subAccounts: updatedSubAccounts,\n };\n }, [\n mainAccountId,\n state.address,\n mainAccountHolding,\n subAccounts,\n accountValue,\n indexPrices,\n ]);\n\n useEffect(() => {\n if (!open) {\n hasRefreshedRef.current = false;\n return;\n }\n\n if (!hasRefreshedRef.current && mainAccountId) {\n hasRefreshedRef.current = true;\n subAccount.refresh().then((res) => {\n setMainAccountHolding(res[mainAccountId] || []);\n });\n }\n }, [open, mainAccountId, subAccount]);\n\n return {\n userAddress,\n mainAccount: accountsWithValues.mainAccount,\n currentAccountId,\n open,\n onOpenChange: setOpen,\n popup: _popup,\n createSubAccount: doCreatSubAccount,\n subAccounts: accountsWithValues.subAccounts,\n onSwitch,\n };\n};\n\nconst calculateAccountValue = (\n holdings: API.Holding[],\n unsettlePnl: number,\n indexPrices: Record<string, number>,\n) => {\n const holding = holdings.reduce((acc, holding) => {\n const price = getTokenIndexPrice(holding.token, indexPrices);\n if (!price) {\n return acc;\n }\n return acc + new Decimal(holding.holding).times(price).toNumber();\n }, 0);\n return holding + unsettlePnl;\n};\n\nconst getTokenIndexPrice = (\n token: string,\n indexPrices: Record<string, number>,\n) => {\n if (token === \"USDC\") {\n return 1;\n }\n const symbol = `PERP_${token}_USDC`;\n return indexPrices[symbol] ?? 0;\n};\n","import { FC, forwardRef, SVGProps } from \"react\";\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\nexport const SubAccountIcon = forwardRef<SVGSVGElement, IconProps>(\n (props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path\n d=\"M10 2.5C8.16892 2.5 6.66667 4.00225 6.66667 5.83333C6.66667 7.66441 8.16892 9.16667 10 9.16667C11.8311 9.16667 13.3333 7.66441 13.3333 5.83333C13.3333 4.00225 11.8311 2.5 10 2.5ZM10 4.16667C10.9303 4.16667 11.6667 4.90299 11.6667 5.83333C11.6667 6.76368 10.9303 7.5 10 7.5C9.06965 7.5 8.33333 6.76368 8.33333 5.83333C8.33333 4.90299 9.06965 4.16667 10 4.16667ZM10 11.6667C8.54587 11.6667 6.82264 12.0082 5.37435 12.5798C4.65021 12.8656 3.99558 13.205 3.47168 13.641C2.94778 14.0769 2.5 14.6662 2.5 15.4167V17.5H17.5V16.6667V15.4167C17.5 14.6662 17.0522 14.0769 16.5283 13.641C16.0044 13.205 15.3498 12.8656 14.6257 12.5798C13.1774 12.0082 11.4541 11.6667 10 11.6667ZM10 13.3333C11.1784 13.3333 12.7884 13.645 14.0153 14.1292C14.6288 14.3713 15.1475 14.66 15.4622 14.9219C15.777 15.1838 15.8333 15.3622 15.8333 15.4167V15.8333H4.16667V15.4167C4.16667 15.3622 4.22299 15.1838 4.53776 14.9219C4.85253 14.66 5.37124 14.3713 5.9847 14.1292C7.21162 13.645 8.82163 13.3333 10 13.3333Z\"\n fill=\"white\"\n fillOpacity=\"0.98\"\n />\n </svg>\n );\n },\n);\n\nexport const SwapIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M6 16L2 12L6 8L7.0625 9.0625L4.875 11.25H11V12.75H4.875L7.0625 14.9375L6 16ZM14 11L12.9375 9.9375L15.125 7.75H9V6.25H15.125L12.9375 4.0625L14 3L18 7L14 11Z\" />\n </svg>\n );\n});\n\nexport const AddIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M9.25 14H10.75V10.75H14V9.25H10.75V6H9.25V9.25H6V10.75H9.25V14ZM4.5 17C4.0875 17 3.73437 16.8531 3.44062 16.5594C3.14687 16.2656 3 15.9125 3 15.5V4.5C3 4.0875 3.14687 3.73438 3.44062 3.44063C3.73437 3.14688 4.0875 3 4.5 3H15.5C15.9125 3 16.2656 3.14688 16.5594 3.44063C16.8531 3.73438 17 4.0875 17 4.5V15.5C17 15.9125 16.8531 16.2656 16.5594 16.5594C16.2656 16.8531 15.9125 17 15.5 17H4.5ZM4.5 15.5H15.5V4.5H4.5V15.5Z\" />\n </svg>\n );\n});\n\nexport const EditIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) => {\n const { size = 12, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n ref={ref}\n {...rest}\n >\n <path d=\"M9.95551 2.00049C9.81619 2.00049 9.67686 2.05318 9.57074 2.15918L5.43256 6.29785L5.24945 7.25049L6.20209 7.06738L10.3403 2.9292C10.443 2.82645 10.4999 2.68968 10.4999 2.54443C10.4999 2.39918 10.443 2.26218 10.3403 2.15918C10.2341 2.05318 10.0948 2.00049 9.95551 2.00049ZM3.12494 2.25C2.37147 2.25 1.74994 2.87153 1.74994 3.625V9.375C1.74994 10.1285 2.37147 10.75 3.12494 10.75H8.87494C9.62841 10.75 10.2499 10.1285 10.2499 9.375V5.25C10.2509 5.18374 10.2386 5.11796 10.2139 5.05648C10.1892 4.99499 10.1525 4.93903 10.106 4.89185C10.0595 4.84466 10.0041 4.8072 9.94293 4.78162C9.8818 4.75605 9.8162 4.74288 9.74994 4.74288C9.68368 4.74288 9.61807 4.75605 9.55695 4.78162C9.49582 4.8072 9.44038 4.84466 9.39386 4.89185C9.34734 4.93903 9.31066 4.99499 9.28595 5.05648C9.26124 5.11796 9.249 5.18374 9.24994 5.25V9.375C9.24994 9.58803 9.08797 9.75 8.87494 9.75H3.12494C2.91191 9.75 2.74994 9.58803 2.74994 9.375V3.625C2.74994 3.41197 2.91191 3.25 3.12494 3.25H7.24994C7.3162 3.25094 7.38198 3.2387 7.44346 3.21399C7.50494 3.18928 7.5609 3.1526 7.60809 3.10608C7.65527 3.05956 7.69274 3.00412 7.71832 2.94299C7.74389 2.88186 7.75706 2.81626 7.75706 2.75C7.75706 2.68374 7.74389 2.61814 7.71832 2.55701C7.69274 2.49588 7.65527 2.44044 7.60809 2.39392C7.5609 2.3474 7.50494 2.31072 7.44346 2.28601C7.38198 2.2613 7.3162 2.24906 7.24994 2.25H3.12494Z\" />\n </svg>\n );\n});\n","import { useCallback, useEffect, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { CopyIcon, formatAddress, toast, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { EditIcon } from \"../icons\";\n\ninterface AccountItemProps {\n isMainAccount?: boolean;\n accountId: string;\n description?: string;\n userAddress?: string;\n balance?: string;\n isCurrent?: boolean;\n onSwitch?: (accountId: string) => void;\n accountValue?: number;\n onEdit?: (accountItem: { accountId: string; description: string }) => void;\n}\n\nconst AccountIdForCopy = (props: { accountId: string }) => {\n const { t } = useTranslation();\n const info = useMemo(() => {\n return {\n leading: props.accountId.slice(0, 6),\n middle: props.accountId.slice(6, -4),\n trailing: props.accountId.slice(-4),\n };\n }, [props.accountId]);\n const copy = useCallback(() => {\n navigator.clipboard.writeText(props.accountId);\n toast.success(t(\"common.copy.copied\"));\n }, [props.accountId]);\n return (\n <Flex\n className=\"oui-min-h-[50px] oui-w-[180px]\"\n gap={2}\n justify=\"between\"\n itemAlign=\"center\"\n >\n <Text className=\"oui-w-full oui-break-all oui-text-2xs oui-text-base-contrast-36\">\n <Text className=\"oui-text-base-contrast\">{info.leading}</Text>\n <Text>{info.middle}</Text>\n <Text className=\"oui-text-base-contrast\">{info.trailing}</Text>\n </Text>\n <CopyIcon\n onClick={copy}\n className=\"oui-cursor-pointer oui-text-base-contrast-36 hover:oui-text-base-contrast\"\n />\n </Flex>\n );\n};\n\nexport const AccountItem = (props: AccountItemProps) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Flex\n justify=\"between\"\n itemAlign=\"center\"\n width=\"100%\"\n className={cn(\n \"oui-relative oui-cursor-pointer oui-rounded-[6px] oui-bg-base-6 oui-px-3 oui-py-4\",\n \"oui-border oui-border-base-6\",\n props.isCurrent && \" oui-border-[#38E2FE] \",\n !props.isCurrent && \"hover:oui-border-base-contrast-16\",\n )}\n >\n <div\n className=\"oui-absolute oui-inset-0 oui-z-0 \"\n onClick={() => {\n if (props.isCurrent) {\n return;\n }\n props.onSwitch?.(props.accountId);\n }}\n />\n {props.isCurrent && (\n <div\n className={cn(\n \"oui-absolute -oui-right-[1px] -oui-top-[1px] oui-leading-3 oui-text-base-contrast-54\",\n \"oui-text-[10px] oui-font-semibold oui-text-black\",\n \"oui-rounded-[6px] oui-rounded-br-none oui-rounded-tl-none oui-bg-[#38E2FE] oui-py-0.5 oui-pl-1 oui-pr-[5px]\",\n )}\n >\n {t(\"subAccount.modal.current\")}\n </div>\n )}\n <Flex\n key={props.accountId}\n direction=\"column\"\n itemAlign=\"start\"\n gap={1}\n className=\"oui-z-[2]\"\n >\n {props.isMainAccount ? (\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast\">\n {formatAddress(props.userAddress ?? \"\")}\n </Text>\n ) : (\n <Flex\n justify=\"start\"\n itemAlign=\"center\"\n className=\"oui-cursor-pointer oui-gap-[2px] oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n onClick={(event) => {\n props.onEdit?.({\n accountId: props.accountId,\n description: props.description ?? \"\",\n });\n event.stopPropagation();\n event.preventDefault();\n }}\n >\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast\">\n {props.description}\n </Text>\n <EditIcon className=\"oui-fill-base-contrast-54 hover:oui-fill-base-contrast\" />\n </Flex>\n )}\n <Tooltip content={<AccountIdForCopy accountId={props.accountId} />}>\n <Text className=\"oui-text-2xs oui-leading-3 oui-text-base-contrast-36 hover:oui-text-base-contrast\">\n ID: {formatAddress(props.accountId)}\n </Text>\n </Tooltip>\n </Flex>\n <Flex className=\"oui-text-xs\" itemAlign=\"end\" gap={1}>\n <Text.numeral rule=\"price\" dp={2}>\n {props.accountValue ?? 0}\n </Text.numeral>\n <Text>USDC</Text>\n </Flex>\n </Flex>\n </>\n );\n};\n","import { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { inputFormatter, TextField } from \"@kodiak-finance/orderly-ui\";\n\nexport const NickNameDescriptionText = \"\";\n\nexport const NickNameTextField = (props: {\n nickName: string | undefined;\n setNickName: (nickName: string | undefined) => void;\n subAccountCount?: number;\n invalid?: boolean;\n}) => {\n const { t } = useTranslation();\n return (\n <TextField\n placeholder={`Sub-account ${(props.subAccountCount ?? 0) + 1}`}\n fullWidth\n label={t(\"subAccount.modal.nickName.label\")}\n value={props.nickName}\n onChange={(e) => {\n const _value = e.target.value.replace(/[^a-zA-Z0-9@,\\s_-]/g, \"\");\n props.setNickName(_value);\n }}\n formatters={[\n inputFormatter.createRegexInputFormatter(/[^a-zA-Z0-9@,\\s_-]/g),\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 maxLength={20}\n minLength={1}\n autoComplete=\"off\"\n helpText={t(\"subAccount.modal.create.nickname.role\")}\n className=\"oui-mb-4\"\n color={props.invalid ? \"danger\" : undefined}\n />\n );\n};\n","import { useState, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Flex,\n SimpleDialog,\n toast,\n Text,\n useScreen,\n cn,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AddIcon } from \"../icons\";\nimport { NickNameTextField } from \"./common\";\n\nconst MAX_SUB_ACCOUNT_COUNT = 10;\ntype CreateSubAccountProps = {\n create: (nickName: string) => Promise<void>;\n};\n\nexport const CreateSubAccount = (props: CreateSubAccountProps) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const [open, setOpen] = useState(false);\n const [nickName, setNickName] = useState<string | undefined>(undefined);\n const { state } = useAccount();\n const [invalid, setInvalid] = useState(false);\n const [loading, setLoading] = useState(false);\n const subAccountCount = useMemo(() => {\n return state.subAccounts?.length ?? 0;\n }, [state]);\n const trigger = useMemo(() => {\n return subAccountCount >= MAX_SUB_ACCOUNT_COUNT ? (\n <Tooltip\n className=\"oui-max-w-[188px]\"\n content={t(\"subAccount.modal.create.max.description\")}\n >\n <AddIcon\n className={cn(\"oui-cursor-not-allowed oui-fill-base-contrast-20\")}\n />\n </Tooltip>\n ) : (\n <AddIcon\n className={cn(\n \"oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\",\n )}\n onClick={() => {\n setOpen(true);\n }}\n />\n );\n }, [subAccountCount]);\n\n const header = (\n <Flex\n py={3}\n direction=\"column\"\n justify=\"between\"\n itemAlign=\"start\"\n width=\"100%\"\n >\n <Text weight=\"semibold\">{t(\"subAccount.modal.create.title\")}</Text>\n <Text className=\"oui-text-2xs oui-text-base-contrast-36\">\n {t(\"subAccount.modal.create.description\", {\n subAccountCount,\n remainingCount: MAX_SUB_ACCOUNT_COUNT - subAccountCount,\n })}\n </Text>\n </Flex>\n );\n\n const reset = () => {\n setNickName(\"\");\n setInvalid(false);\n setLoading(false);\n };\n\n const validateNickName = (nickName: string | undefined) => {\n if (!nickName || !(nickName.length >= 1 && nickName.length <= 20)) {\n setInvalid(true);\n return true;\n }\n setInvalid(false);\n return false;\n };\n\n const doCreatSubAccount = (nickName: string | undefined) => {\n let _nickName = `Sub-account ${subAccountCount + 1}`;\n if (nickName) {\n _nickName = nickName.trim();\n }\n\n setLoading(true);\n props\n .create(_nickName)\n .then((res) => {\n console.log(\"res\", res);\n reset();\n toast.success(t(\"subAccount.modal.create.success.description\"));\n\n setOpen(false);\n })\n .catch((e: any) => {\n toast.error(t(\"subAccount.modal.create.failed.description\"));\n })\n .finally(() => {\n setLoading(false);\n });\n };\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={open}\n onOpenChange={(open) => {\n reset();\n setOpen(open);\n }}\n size={isMobile ? \"sm\" : \"xl\"}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n disabled: invalid || loading,\n loading: loading,\n onClick: () => {\n const invalid = validateNickName(nickName);\n if (invalid) {\n return;\n }\n doCreatSubAccount(nickName);\n },\n },\n }}\n classNames={{\n content: \"oui-w-[360px]\",\n }}\n >\n <NickNameTextField\n nickName={nickName}\n setNickName={(nickName) => {\n validateNickName(nickName);\n setNickName(nickName);\n }}\n subAccountCount={subAccountCount}\n invalid={invalid}\n />\n </SimpleDialog>\n </>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog, toast, Text, TextField } from \"@kodiak-finance/orderly-ui\";\nimport { NickNameDescriptionText, NickNameTextField } from \"./common\";\n\nexport const EditNickNameDialog = (props: {\n nickName: string;\n open: boolean;\n accountId: string;\n onOpenChange: (open: boolean) => void;\n}) => {\n const { subAccount } = useAccount();\n const [loading, setLoading] = useState(false);\n const { t } = useTranslation();\n const [newNickName, setNewNickName] = useState<string | undefined>(undefined);\n const [invalid, setInvalid] = useState(false);\n\n const validateNickName = (nickName: string | undefined) => {\n if (!nickName || !(nickName.length >= 1 && nickName.length <= 20)) {\n setInvalid(true);\n return true;\n }\n setInvalid(false);\n };\n useEffect(() => {\n setNewNickName(props.nickName);\n setInvalid(false);\n setLoading(false);\n }, [props.nickName, props.open]);\n return (\n <SimpleDialog\n title={<Text>{t(\"subAccount.modal.edit.title\")}</Text>}\n open={props.open}\n onOpenChange={props.onOpenChange}\n classNames={{\n content: \"oui-w-[360px]\",\n }}\n actions={{\n primary: {\n label: t(\"common.confirm\"),\n disabled: loading || invalid,\n loading: loading,\n onClick: () => {\n if (validateNickName(newNickName)) {\n return;\n }\n setLoading(true);\n subAccount\n ?.update({\n subAccountId: props.accountId,\n description: newNickName,\n })\n .catch((e) => {\n console.log(\"e\", e);\n toast.error(t(\"subAccount.modal.edit.failed.description\"));\n })\n .then((res) => {\n toast.success(t(\"subAccount.modal.edit.success.description\"));\n props.onOpenChange(false);\n })\n .finally(() => {\n setLoading(false);\n });\n },\n },\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => props.onOpenChange(false),\n },\n }}\n >\n <NickNameTextField\n nickName={newNickName}\n setNickName={(nickName) => {\n validateNickName(nickName);\n setNewNickName(nickName ?? \"\");\n }}\n invalid={invalid}\n />\n </SimpleDialog>\n );\n};\n","import { useCallback, useRef, useMemo, useState, ReactNode } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n SimpleDialog,\n useScreen,\n Text,\n Flex,\n ScrollArea,\n modal,\n cn,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n PopoverRoot,\n PopoverContent,\n PopoverAnchor,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AccountItem } from \"./components/accountItem\";\nimport { CreateSubAccount } from \"./components/createSubAccountModal\";\nimport { EditNickNameDialog } from \"./components/editNickNameModal\";\nimport { SubAccountIcon, SwapIcon } from \"./icons\";\nimport { SubAccountScriptReturn } from \"./subAccount.script\";\n\nexport function SubAccountUI(\n props: SubAccountScriptReturn & { customTrigger?: ReactNode },\n) {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const onMouseEnter = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n // setOpen(true);\n }, []);\n const header = <Text weight=\"semibold\">{t(\"subAccount.modal.title\")}</Text>;\n const trigger = useMemo(() => {\n if (props.customTrigger && isMobile) {\n return (\n <div onClick={() => props.onOpenChange(true)}>\n {props.customTrigger}\n </div>\n );\n }\n if (isMobile) {\n return (\n <Flex\n className=\"oui-size-8 oui-rounded-md oui-bg-base-6\"\n itemAlign=\"center\"\n justify=\"center\"\n >\n <SubAccountIcon\n className={cn(\"oui-cursor-pointer\")}\n onClick={() => props.onOpenChange(true)}\n />\n </Flex>\n );\n }\n return <SubAccountIcon className={cn(\"oui-cursor-pointer\")} />;\n }, [isMobile, props.customTrigger]);\n\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [editAccountItem, setEditAccountItem] = useState<\n | {\n accountId: string;\n description: string;\n }\n | undefined\n >(undefined);\n\n const noSubAccount = (\n <Flex\n direction=\"column\"\n itemAlign=\"start\"\n justify=\"center\"\n px={5}\n width=\"100%\"\n className=\"oui-h-[120px]\"\n >\n <Text className=\"oui-text-center oui-text-xs oui-font-semibold oui-text-base-contrast-36\">\n {t(\"subAccount.modal.noAccount.description\")}\n </Text>\n </Flex>\n );\n\n const renderSubAccount = () => {\n if (!props.subAccounts?.length) {\n return noSubAccount;\n }\n return (\n <ScrollArea className=\"oui-custom-scrollbar oui-max-h-[200px] oui-w-full oui-overflow-y-auto\">\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n {props.subAccounts.map((subAccount) => (\n <AccountItem\n key={subAccount.id}\n accountId={subAccount.id}\n description={subAccount.description}\n isMainAccount={false}\n isCurrent={subAccount.id === props.currentAccountId}\n onSwitch={(accountId) => {\n props.onSwitch?.(accountId);\n }}\n accountValue={subAccount.accountValue ?? 0}\n onEdit={() => {\n setEditAccountItem({\n accountId: subAccount.id,\n description: subAccount.description ?? \"\",\n });\n setEditDialogOpen(true);\n }}\n />\n ))}\n </Flex>\n </ScrollArea>\n );\n };\n\n const content = (\n <>\n <Flex direction=\"column\" gap={5} itemAlign=\"start\" width=\"100%\">\n {!isMobile && header}\n <Flex direction=\"column\" gap={5} itemAlign=\"start\" width=\"100%\">\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast-54\">\n {t(\"subAccount.modal.mainAccount.title\")}\n </Text>\n <AccountItem\n accountId={props.mainAccount?.id ?? \"\"}\n isMainAccount={true}\n userAddress={props.userAddress ?? \"\"}\n isCurrent={props.currentAccountId === props.mainAccount?.id}\n onSwitch={(accountId) => {\n props.onSwitch?.(accountId);\n }}\n accountValue={props.mainAccount?.accountValue ?? 0}\n />\n </Flex>\n\n <Flex direction=\"column\" gap={2} itemAlign=\"start\" width=\"100%\">\n <Flex justify=\"between\" itemAlign=\"center\" width=\"100%\" gap={2}>\n <Text className=\"oui-text-xs oui-leading-3 oui-text-base-contrast-54\">\n {t(\"subAccount.modal.subAccounts.title\")}\n </Text>\n <Flex justify=\"end\" gap={2}>\n {props.subAccounts.length > 0 && (\n <SwapIcon\n className=\"oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n onClick={() => {\n // todo need show transfer modal\n let dialogId = \"TransferDialogId\";\n if (isMobile) {\n dialogId = \"TransferSheetId\";\n }\n modal.show(dialogId);\n }}\n />\n )}\n <CreateSubAccount create={props.createSubAccount} />\n </Flex>\n </Flex>\n {renderSubAccount()}\n </Flex>\n </Flex>\n </Flex>\n <EditNickNameDialog\n accountId={editAccountItem?.accountId ?? \"\"}\n nickName={editAccountItem?.description ?? \"\"}\n open={editDialogOpen}\n onOpenChange={setEditDialogOpen}\n />\n </>\n );\n if (isMobile) {\n return (\n <>\n {trigger}\n <SimpleDialog\n title={header}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"xs\"\n classNames={{\n content: \"oui-w-[300px]\",\n }}\n >\n {content}\n </SimpleDialog>\n </>\n );\n }\n\n return (\n <PopoverRoot open={props.open} onOpenChange={props.onOpenChange}>\n <PopoverAnchor>\n <div\n onMouseEnter={() => {\n props.onOpenChange(true);\n }}\n onMouseLeave={() => {\n timer.current = setTimeout(() => {\n props.onOpenChange(false);\n }, 150);\n }}\n >\n {trigger}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={16}\n collisionPadding={{ right: 16 }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={() => {\n props.onOpenChange(false);\n timer.current ? clearTimeout(timer.current) : void 0;\n }}\n className={cn(\n \"oui-w-[300px] oui-space-y-[2px] oui-border oui-border-line-6 oui-p-5\",\n )}\n >\n {content}\n </PopoverContent>\n </PopoverRoot>\n );\n}\n","import { FC, ReactNode } from \"react\";\nimport { SubAccountScript } from \"./subAccount.script\";\nimport { SubAccountUI } from \"./subAccount.ui\";\n\ntype SubAccountWidgetProps = {\n customTrigger?: ReactNode;\n};\n\nexport const SubAccountWidget: FC<SubAccountWidgetProps> = (props) => {\n const state = SubAccountScript();\n return <SubAccountUI {...state} customTrigger={props?.customTrigger} />;\n};\n","export { SubAccountWidget } from \"./subAccount.widget\";\nexport { SubAccountScript } from \"./subAccount.script\";\nexport { SubAccountUI } from \"./subAccount.ui\";\n","import { FC } from \"react\";\n\nexport interface CommunityProps {\n width?: number;\n height?: number;\n className?: string | undefined;\n}\n\nexport const CommunityDiscord: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M14.9559 5.5217C16.5596 7.89629 17.3515 10.5748 17.0555 13.6583C17.0542 13.6714 17.0475 13.6833 17.0368 13.6912C15.8224 14.5893 14.6458 15.1343 13.4857 15.4958C13.4767 15.4985 13.467 15.4984 13.4581 15.4953C13.4491 15.4923 13.4413 15.4865 13.4358 15.4788C13.1678 15.1032 12.9243 14.7073 12.7109 14.2915C12.6987 14.267 12.7099 14.2375 12.7351 14.2278C13.1218 14.0811 13.4896 13.9052 13.8434 13.6969C13.8712 13.6805 13.873 13.6403 13.8473 13.621C13.7722 13.5648 13.6978 13.5058 13.6266 13.4468C13.6133 13.4359 13.5954 13.4338 13.5803 13.4411C11.2837 14.5092 8.76789 14.5092 6.44412 13.4411C6.42903 13.4343 6.41111 13.4367 6.39815 13.4474C6.32715 13.5064 6.2526 13.5648 6.17823 13.621C6.1525 13.6403 6.15463 13.6805 6.18267 13.6969C6.53642 13.9012 6.90419 14.0811 7.29042 14.2285C7.31544 14.2382 7.32734 14.267 7.31491 14.2915C7.10618 14.7078 6.86265 15.1037 6.58967 15.4793C6.57777 15.4945 6.55825 15.5015 6.53979 15.4958C5.38518 15.1343 4.20857 14.5893 2.99415 13.6912C2.98403 13.6833 2.97676 13.6708 2.97569 13.6578C2.72826 10.9906 3.23253 8.28992 5.07333 5.52116C5.07776 5.51383 5.08451 5.50811 5.09232 5.50472C5.99808 5.08607 6.96844 4.77807 7.98265 4.60218C8.00111 4.59932 8.01957 4.6079 8.02915 4.62434C8.15446 4.84779 8.2977 5.13434 8.39461 5.36851C9.46367 5.20405 10.5494 5.20405 11.6408 5.36851C11.7377 5.13934 11.876 4.84779 12.0008 4.62434C12.0052 4.61619 12.0121 4.60965 12.0205 4.60567C12.0288 4.60169 12.0382 4.60047 12.0473 4.60218C13.062 4.77861 14.0324 5.08661 14.9374 5.50472C14.9454 5.50811 14.952 5.51383 14.9559 5.5217V5.5217ZM8.9381 10.593C8.94929 9.80452 8.37846 9.15206 7.66191 9.15206C6.95122 9.15206 6.3859 9.7988 6.3859 10.593C6.3859 11.387 6.96241 12.0338 7.66191 12.0338C8.37278 12.0338 8.9381 11.387 8.9381 10.593V10.593ZM13.6563 10.593C13.6675 9.80452 13.0966 9.15206 12.3803 9.15206C11.6694 9.15206 11.1041 9.7988 11.1041 10.593C11.1041 11.387 11.6806 12.0338 12.3803 12.0338C13.0966 12.0338 13.6563 11.387 13.6563 10.593V10.593Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityTG: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n // stroke=\"currentColor\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M4.10787 9.4635C4.10787 9.4635 9.64487 7.13143 11.5652 6.31025C12.3013 5.98181 14.7978 4.93069 14.7978 4.93069C14.7978 4.93069 15.95 4.47087 15.854 5.58763C15.822 6.0475 15.5659 7.65694 15.3099 9.39781C14.9258 11.8613 14.5097 14.5547 14.5097 14.5547C14.5097 14.5547 14.4457 15.3102 13.9016 15.4416C13.3575 15.5729 12.4613 14.9817 12.3013 14.8503C12.1733 14.7518 9.9009 13.2737 9.06876 12.5511C8.84471 12.354 8.58868 11.9599 9.10074 11.5C10.253 10.4161 11.6292 9.06937 12.4613 8.21537C12.8454 7.82119 13.2295 6.9015 11.6292 8.01825C9.35681 9.62774 7.11641 11.1387 7.11641 11.1387C7.11641 11.1387 6.60431 11.4671 5.64415 11.1715C4.68394 10.8759 3.56374 10.4817 3.56374 10.4817C3.56374 10.4817 2.79565 9.98906 4.10787 9.4635Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityX: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <div className=\"orderly-fill-base-contrast-54 hover:orderly-fill-base-contrast\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n // stroke=\"currentColor\"\n fill=\"white\"\n fillOpacity={1}\n className={`${className}`}\n >\n <path d=\"M4.41988 4.72946L9.05295 10.9243L4.39062 15.961H5.43993L9.52178 11.5513L12.8198 15.961H16.3906L11.4969 9.41769L15.8365 4.72946H14.7872L11.028 8.7907L7.9907 4.72946H4.41988ZM5.96296 5.50238H7.6034L14.8473 15.188H13.2069L5.96296 5.50238Z\" />\n </svg>\n </div>\n );\n};\n\nexport const CommunityDune: FC<CommunityProps> = (props) => {\n const { width = 20, height = 20, className } = props;\n\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.9957 19.1899C15.9699 19.1899 19.1916 15.9686 19.1916 11.995C19.1916 8.02132 15.9699 4.80005 11.9957 4.80005C8.02152 4.80005 4.7998 8.02132 4.7998 11.995C4.7998 15.9686 8.02152 19.1899 11.9957 19.1899Z\"\n fill=\"white\"\n fillOpacity={0.54}\n />\n <path\n d=\"M6.05127 16.0536C6.05127 16.0536 10.8064 14.496 19.1871 11.7634C19.1871 11.7634 19.6461 16.2385 15.0068 18.5726C15.0068 18.5726 12.7191 19.6691 10.2092 18.9658C10.2092 18.9658 7.70999 18.494 6.05127 16.0536Z\"\n fill=\"white\"\n fillOpacity={0.54}\n />\n </svg>\n );\n};\n","import { FC, useCallback, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport {\n Sheet,\n SheetContent,\n modal,\n useModal,\n VectorIcon,\n SwapHorizIcon,\n PeopleIcon,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../main/mainLogo\";\nimport { RouterAdapter, RouteOption } from \"../scaffold\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport {\n CommunityDiscord,\n CommunityDune,\n CommunityTG,\n CommunityX,\n} from \"./communityIcon\";\nimport { LeftNavState } from \"./leftNav.script\";\nimport { LeftNavItem, LeftNavProps } from \"./leftNav.type\";\n\ntype LeftNavUIProps = LeftNavProps &\n LeftNavState & {\n className?: string;\n logo?: {\n src: string;\n alt: string;\n };\n routerAdapter?: RouterAdapter;\n showSubAccount?: boolean;\n };\n\nexport const LeftNavUI: FC<LeftNavUIProps> = (props) => {\n const showModal = () => {\n modal.show(LeftNavSheet, {\n ...props,\n });\n };\n\n return (\n <div onClick={showModal} className={props?.className}>\n <VectorIcon />\n </div>\n );\n};\n\nconst LeftNavSheet = modal.create<LeftNavUIProps>((props) => {\n const { visible, hide, resolve, reject, onOpenChange } = useModal();\n const { state } = useAccount();\n const { t } = useTranslation();\n\n const showSubAccount = useMemo(\n () => state.status >= AccountStatusEnum.EnableTrading,\n [state.status],\n );\n\n const onRouteChange = (option: RouteOption) => {\n props?.routerAdapter?.onRouteChange?.(option);\n hide();\n };\n\n const subAccountTrigger = useMemo(() => {\n const name =\n state.accountId === state.mainAccountId\n ? state.address\n : state.subAccounts?.find((item) => item.id === state.accountId)\n ?.description || \"\";\n return (\n <div className=\"oui-flex oui-w-full oui-cursor-pointer oui-items-center oui-gap-2 oui-rounded-xl oui-bg-base-5 oui-p-3\">\n <div>\n <PeopleIcon />\n </div>\n <div className=\"oui-flex oui-flex-col oui-gap-1 oui-font-semibold\">\n <Text.formatted\n rule=\"address\"\n className=\"oui-text-sm oui-text-base-contrast\"\n >\n {name}\n </Text.formatted>\n <Text.formatted\n rule=\"address\"\n className=\"oui-text-2xs oui-text-base-contrast-36\"\n >{`ID: ${state.accountId}`}</Text.formatted>\n </div>\n <div className=\"oui-ml-auto\">\n <SwapHorizIcon />\n </div>\n </div>\n );\n }, [state, t]);\n\n const openExternalLink = (url: string) => {\n window.open(url, \"_blank\");\n };\n\n return (\n <Sheet open={visible} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"left\"\n className=\"oui-w-[276px] oui-bg-base-8\"\n closeable\n closeableSize={24}\n closeOpacity={0.54}\n >\n <div className=\"oui-relative oui-flex oui-h-full oui-flex-col oui-gap-3\">\n <div className=\"oui-mt-[6px] oui-flex oui-h-[44px] oui-items-center [&_img]:!oui-h-[18px]\">\n <MainLogo {...props?.logo} />\n </div>\n {props?.leading}\n {showSubAccount && (\n <SubAccountWidget customTrigger={subAccountTrigger} />\n )}\n {Array.isArray(props?.menus) && props.menus.length > 0 && (\n <div className=\"oui-flex oui-h-[calc(100vh-260px)] oui-flex-col oui-items-start oui-overflow-y-auto\">\n {props.menus?.map((item) => (\n <NavItem\n item={item}\n key={`item-${item.name}`}\n onClick={onRouteChange}\n />\n ))}\n </div>\n )}\n <div className=\"oui-absolute oui-bottom-6 oui-flex oui-w-full oui-flex-col oui-gap-4\">\n <div className=\"oui-flex oui-items-center oui-justify-around\">\n {props.telegramUrl && (\n <div\n onClick={() => openExternalLink(props.telegramUrl as string)}\n >\n <CommunityTG width={24} height={24} />\n </div>\n )}\n {props.twitterUrl && (\n <div\n onClick={() => openExternalLink(props.twitterUrl as string)}\n >\n <CommunityX width={24} height={24} />\n </div>\n )}\n {props.discordUrl && (\n <div\n onClick={() => openExternalLink(props.discordUrl as string)}\n >\n <CommunityDiscord width={24} height={24} />\n </div>\n )}\n {props.duneUrl && (\n <div\n onClick={() => openExternalLink(props.duneUrl as string)}\n className=\"oui-mb-1\"\n >\n <CommunityDune />\n </div>\n )}\n </div>\n {props.feedbackUrl && (\n <div\n className=\"oui-text-center oui-text-2xs oui-font-semibold oui-text-primary oui-underline\"\n onClick={() => openExternalLink(props.feedbackUrl as string)}\n >\n {t(\"leftNav.feedback\")}\n </div>\n )}\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n});\n\ntype NavItemProps = {\n item: LeftNavItem;\n onClick?: (option: RouteOption) => void;\n};\n\nconst NavItem: FC<NavItemProps> = ({ item, onClick }) => {\n const {\n href,\n name,\n icon,\n trailing,\n onlyInMainAccount,\n customRender,\n target,\n } = item;\n const { isMainAccount } = useAccount();\n const onItemClick = () => {\n if (target) {\n window.open(href, target);\n } else {\n onClick?.({ href: href, name: name, scope: \"leftNav\" });\n }\n };\n if (typeof customRender === \"function\") {\n return (\n <div\n className=\"oui-flex oui-w-full oui-items-center oui-px-3 oui-py-4\"\n onClick={onItemClick}\n >\n {customRender({ name: name, href: href })}\n </div>\n );\n }\n if (onlyInMainAccount && !isMainAccount) {\n return null;\n }\n return (\n <div\n className=\"oui-flex oui-w-full oui-items-center oui-gap-2 oui-px-3 oui-py-4\"\n onClick={onItemClick}\n >\n <div>{icon}</div>\n <div className=\"oui-text-base oui-font-semibold oui-text-base-contrast-80\">\n {name}\n </div>\n {trailing}\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\n\nexport type UseScanQRCodeScriptReturn = ReturnType<typeof useScanQRCodeScript>;\n\nexport const useScanQRCodeScript = () => {\n const [open, setOpen] = useState(false);\n const { widgetConfigs } = useAppContext();\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const [showScanTooltip, setShowScanTooltip] = useLocalStorage(\n \"orderly_qr_code_scan_tooltip_open\",\n true,\n );\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n const onScanSuccess = (url: string) => {\n if (!isValidURL(url)) {\n return;\n }\n const { onSuccess } = widgetConfigs?.scanQRCode || {};\n if (typeof onSuccess === \"function\") {\n onSuccess(url);\n } else {\n window.location.href = url;\n }\n };\n\n useEffect(() => {\n if (showScanTooltip) {\n timerRef.current = setTimeout(() => {\n setShowScanTooltip(false);\n }, 8000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [showScanTooltip]);\n\n return {\n open,\n onOpenChange: setOpen,\n showDialog,\n hideDialog,\n onScanSuccess,\n showScanTooltip,\n };\n};\n\nfunction isValidURL(str: string) {\n try {\n const url = new URL(str);\n return [\"http:\", \"https:\"].includes(url.protocol);\n } catch {\n return false;\n }\n}\n","import { FC, useEffect, useRef } from \"react\";\nimport jsQR from \"jsqr\";\n\ntype ScannerProps = {\n onSuccess?: (data: string) => void;\n};\n\nexport const QRCODE_WIDTH = 320;\nexport const QRCODE_HEIGHT = 320;\nconst RATIO = 2;\n\n/**\n * QR Code Scanner\n * reference https://github.com/cozmo/jsQR/blob/master/docs/index.html\n */\nexport const QRCodeScanner: FC<ScannerProps> = (props) => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const tick = () => {\n const video = videoRef.current;\n const canvas = canvasRef.current;\n if (!video || !canvas) return;\n\n const ctx = canvas.getContext(\"2d\")!;\n\n if (video.readyState === video.HAVE_ENOUGH_DATA) {\n const videoWidth = video.videoWidth;\n const videoHeight = video.videoHeight;\n\n const canvasAspectRatio = canvas.width / canvas.height;\n const videoAspectRatio = videoWidth / videoHeight;\n\n let sx, sy, sWidth, sHeight;\n\n if (videoAspectRatio > canvasAspectRatio) {\n // The video is wide. Crop the left and right sides\n sHeight = videoHeight;\n sWidth = videoHeight * canvasAspectRatio;\n sx = (videoWidth - sWidth) / 2;\n sy = 0;\n } else {\n // The video is high. Crop the top and bottom sides\n sWidth = videoWidth;\n sHeight = videoWidth / canvasAspectRatio;\n sx = 0;\n sy = (videoHeight - sHeight) / 2;\n }\n\n ctx.drawImage(\n video,\n sx,\n sy,\n sWidth,\n sHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n // ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const res = jsQR(imageData.data, imageData.width, imageData.height, {\n inversionAttempts: \"dontInvert\",\n });\n\n if (res?.data) {\n console.log(\"scan result\", res.data);\n props.onSuccess?.(res.data);\n }\n }\n requestAnimationFrame(tick);\n };\n\n useEffect(() => {\n const video = videoRef.current;\n if (!open || !video) return;\n\n // Use facingMode: environment to attemt to get the front camera on phones\n navigator?.mediaDevices\n ?.getUserMedia({\n video: {\n facingMode: \"environment\",\n width: { ideal: QRCODE_WIDTH * RATIO },\n height: { ideal: QRCODE_HEIGHT * RATIO },\n },\n })\n .then((stream) => {\n video.srcObject = stream;\n // required to tell iOS safari we don't want fullscreen\n video.setAttribute(\"playsinline\", \"true\");\n video.play();\n\n video.onloadeddata = () => {\n console.log(\"Video data loaded.\");\n // const videoTrack = stream.getVideoTracks()[0];\n // const settings = videoTrack.getSettings();\n // console.log(\"video size\", `${settings.width}x${settings.height}`);\n\n requestAnimationFrame(tick);\n };\n })\n .catch((err) => {\n console.error(\"Error accessing camera:\", err);\n });\n\n return () => {\n // Cleanup: stop video stream when component unmounts\n const stream = video.srcObject as MediaStream;\n if (stream) {\n const tracks = stream.getTracks();\n tracks.forEach((track: any) => track.stop());\n }\n video.srcObject = null;\n };\n }, [videoRef, canvasRef]);\n\n return (\n <>\n <video\n ref={videoRef}\n width={QRCODE_WIDTH}\n height={QRCODE_HEIGHT}\n className=\"oui-hidden oui-rounded-2xl oui-bg-base-10\"\n />\n <canvas\n ref={canvasRef}\n width={QRCODE_WIDTH * RATIO}\n height={QRCODE_HEIGHT * RATIO}\n style={{ width: QRCODE_WIDTH, height: QRCODE_HEIGHT }}\n className=\"oui-rounded-2xl oui-bg-base-10\"\n />\n </>\n );\n};\n","import { FC, SVGProps } from \"react\";\nimport { useTranslation, Trans } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n cn,\n Flex,\n SimpleDialog,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../main/mainLogo\";\nimport { UseScanQRCodeScriptReturn } from \"./scanQRCode.script\";\nimport { QRCodeScanner, QRCODE_WIDTH, QRCODE_HEIGHT } from \"./scanner\";\n\ntype ScanQRCodeProps = UseScanQRCodeScriptReturn;\n\nexport const ScanQRCode: FC<ScanQRCodeProps> = (props) => {\n const { t } = useTranslation();\n return (\n <>\n <Tooltip\n open={props.showScanTooltip}\n content={t(\"linkDevice.scanQRCode.tooltip\")}\n className=\"oui-bg-base-6 oui-text-2xs oui-font-semibold oui-text-warning-darken\"\n arrow={{ className: \"!oui-fill-base-6\" }}\n >\n <Flex\n className=\"oui-h-8 oui-w-8 oui-cursor-pointer oui-items-center oui-justify-center oui-rounded-md oui-bg-base-5 oui-px-[6px]\"\n onClick={props.showDialog}\n >\n <ScanIcon className=\"oui-text-base-contrast-80\" />\n </Flex>\n </Tooltip>\n <SimpleDialog\n title={<MainLogo />}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n >\n <ScanQRCodeContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n\nconst ScanQRCodeContent: FC<ScanQRCodeProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex justify=\"center\" direction=\"column\" gapY={5}>\n <Box width={QRCODE_WIDTH} height={QRCODE_HEIGHT} className=\"oui-relative\">\n <QRCodeScanner onSuccess={props.onScanSuccess} />\n <>\n <LineGradient />\n <RadiusGradient className=\"oui-absolute oui-left-[-1.5px] oui-top-[-1.5px]\" />\n <RadiusGradient className=\"oui-absolute oui-right-[-1.5px] oui-top-[-1.5px] oui-rotate-90\" />\n <RadiusGradient className=\"oui-absolute oui-bottom-[-1.5px] oui-left-[-1.5px] -oui-rotate-90\" />\n <RadiusGradient className=\"oui-absolute oui-bottom-[-1.5px] oui-right-[-1.5px] -oui-rotate-180\" />\n </>\n </Box>\n\n {/* </Box> */}\n <Text size=\"sm\" intensity={98} weight=\"semibold\">\n {t(\"linkDevice.scanQRCode\")}\n </Text>\n <span className=\"oui-px-3 oui-text-center\">\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-break-words\"\n >\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"linkDevice.scanQRCode.description\"\n components={[\n <LinkDeviceIcon\n key=\"0\"\n className=\"oui-mx-1 oui-inline-block oui-text-base-contrast-80\"\n />,\n ]}\n />\n </Text>\n </span>\n </Flex>\n );\n};\n\nconst ScanIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M5.249 2.243a3 3 0 0 0-3 3v.75a.75.75 0 0 0 1.5 0v-.75a1.5 1.5 0 0 1 1.5-1.5h2.25a.75.75 0 0 0 0-1.5zm5.25 0a.75.75 0 0 0 0 1.5h2.25a1.5 1.5 0 0 1 1.5 1.5v.75a.75.75 0 0 0 1.5 0v-.75a3 3 0 0 0-3-3zm-7.5 9a.75.75 0 0 0-.75.75v.75a3 3 0 0 0 3 3h2.25a.75.75 0 0 0 0-1.5h-2.25a1.5 1.5 0 0 1-1.5-1.5v-.75a.75.75 0 0 0-.75-.75m12 0a.75.75 0 0 0-.75.75v.75a1.5 1.5 0 0 1-1.5 1.5h-2.25a.75.75 0 0 0 0 1.5h2.25a3 3 0 0 0 3-3v-.75a.75.75 0 0 0-.75-.75M5.25 8.999a.75.75 0 0 1 .75-.75h6a.75.75 0 0 1 0 1.5H6a.75.75 0 0 1-.75-.75\" />\n </svg>\n);\n\nexport interface LinkDeviceIconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const LinkDeviceIcon: FC<LinkDeviceIconProps> = (props) => {\n const { size = 20, ...rest } = props;\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M19.167 7.583a1.74 1.74 0 0 0-1.731-1.75h-4.038a1.74 1.74 0 0 0-1.731 1.75v8.167c0 .967.775 1.75 1.73 1.75h4.039a1.74 1.74 0 0 0 1.73-1.75zm-1.154 0v7.584H12.82V7.583A.58.58 0 0 1 13.398 7h4.038a.58.58 0 0 1 .577.583m-2.02 8.75a.58.58 0 0 1-.576.584.58.58 0 0 1-.577-.584.58.58 0 0 1 .577-.583.58.58 0 0 1 .577.583\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.666 5a2.5 2.5 0 0 1 2.5-2.5h10a2.5 2.5 0 0 1 2.5 2.5.08.08 0 0 1-.078.078h-1.51a.08.08 0 0 1-.08-.078.834.834 0 0 0-.833-.833h-10A.834.834 0 0 0 3.333 5v5.633c0 .11.09.2.2.2h7.1c.11 0 .2.09.2.2V12.3a.2.2 0 0 1-.2.2H2.7a.2.2 0 0 0-.2.2v.633c0 .511.308.834.834.834h7.3c.11 0 .2.09.2.2v1.266a.2.2 0 0 1-.2.2h-7.3c-1.465 0-2.5-1.086-2.5-2.5v-1.666c0-.392.27-.72.635-.81.107-.026.198-.113.198-.224z\"\n />\n </svg>\n );\n};\n\nconst LineGradient: FC<SVGProps<SVGSVGElement>> = () => {\n return (\n <div\n className={cn(\n \"oui-absolute oui-left-[30px] oui-top-0\",\n \"oui-h-[2px] oui-w-[calc(100%-60px)] oui-rounded-full\",\n \"oui-bg-[linear-gradient(270deg,rgb(var(--oui-gradient-brand-end))_0%,rgb(var(--oui-gradient-brand-start))_100%)]\",\n \"oui-shadow-[0_0_8px_4px_rgba(var(--oui-gradient-brand-start)/0.12)]\",\n \"oui-animate-scan-qr-code\",\n )}\n />\n );\n};\n\nconst RadiusGradient: FC<SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M62 2H18C9.16344 2 2 9.16344 2 18V62\"\n stroke=\"url(#paint0_linear_136_6227)\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_136_6227\"\n x1=\"2\"\n y1=\"32\"\n x2=\"62\"\n y2=\"32\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n","import React from \"react\";\nimport { useScanQRCodeScript } from \"./scanQRCode.script\";\nimport { ScanQRCode } from \"./scanQRCode.ui\";\n\nexport const ScanQRCodeWidget: React.FC = () => {\n const state = useScanQRCodeScript();\n return <ScanQRCode {...state} />;\n};\n","export { ScanQRCodeWidget } from \"./scanQRCode.widget\";\nexport { ScanQRCode } from \"./scanQRCode.ui\";\nexport { useScanQRCodeScript } from \"./scanQRCode.script\";\n","import { useCallback, useEffect, useState } from \"react\";\nimport {\n useAccount,\n useChains,\n useEventEmitter,\n useTrack,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\n\nexport type UseLinkDeviceScriptReturn = ReturnType<typeof useLinkDeviceScript>;\n\nconst ExpireSeconds = 60;\n\nexport function useLinkDeviceScript() {\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(true);\n const [confirm, setConfirm] = useState(false);\n const [seconds, setSeconds] = useState(ExpireSeconds);\n const [secretKey, setSecretKey] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const ee = useEventEmitter();\n const { track } = useTrack();\n\n const { state, account } = useAccount();\n\n const [_, { findByChainId }] = useChains(undefined, {\n pick: \"network_infos\",\n filter: (chain: any) =>\n chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n });\n\n const createTrackParams = () => {\n const chain = findByChainId(account.chainId as number);\n return {\n wallet: state?.connectWallet?.name,\n network: chain?.network_infos.name,\n };\n };\n\n const getOrderlyKey = useCallback(async () => {\n try {\n const res = await account.createApiKey(30);\n setSecretKey(res.secretKey);\n setLoading(false);\n\n track(TrackerEventName.signLinkDeviceMessageSuccess, createTrackParams());\n } catch (e) {\n console.error(\"getOrderlyKey\", e);\n\n if (e instanceof Error) {\n if (\n e.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: e.message,\n userAddress: account.address,\n });\n }\n }\n hideDialog();\n }\n }, [account]);\n\n const showDialog = useCallback(() => {\n setOpen(true);\n getOrderlyKey();\n track(TrackerEventName.clickLinkDeviceButton, createTrackParams());\n }, [account]);\n\n const hideDialog = useCallback(() => {\n setOpen(false);\n }, []);\n\n const onConfirm = useCallback(() => {\n setConfirm(true);\n track(TrackerEventName.linkDeviceModalClickConfirm, {});\n }, []);\n\n const copyUrl = useCallback(() => {\n navigator.clipboard.writeText(url);\n }, [url]);\n\n useEffect(() => {\n // when hide dialog, reset data\n if (!open) {\n setConfirm(false);\n setLoading(true);\n setSeconds(ExpireSeconds);\n setSecretKey(\"\");\n setUrl(\"\");\n }\n }, [open]);\n\n useEffect(() => {\n if (seconds === 0) {\n hideDialog();\n return;\n }\n\n if (!confirm) {\n return;\n }\n\n const timer = setTimeout(() => {\n setSeconds(seconds - 1);\n }, 1000);\n\n return () => clearTimeout(timer);\n }, [seconds, confirm]);\n\n useEffect(() => {\n if (confirm && secretKey) {\n const timestamp = Math.floor(Date.now() / 1000) + ExpireSeconds;\n const params = {\n k: secretKey,\n t: timestamp,\n a: account.address,\n i: account.chainId,\n n: account.walletAdapter?.chainNamespace,\n };\n const url = createUrl(params);\n setUrl(url);\n }\n }, [confirm, secretKey]);\n\n return {\n open,\n onOpenChange: setOpen,\n showDialog,\n hideDialog,\n loading,\n seconds,\n confirm,\n onConfirm,\n url,\n copyUrl,\n };\n}\n\nfunction createUrl(params: Record<string, any>) {\n const str = JSON.stringify(params);\n const base64 = window.btoa(str);\n console.log(\"str\", str.length, str);\n console.log(\"base64\", base64.length, base64);\n return `${window.location.origin}?link=${base64}`;\n}\n","import { FC, SVGProps, forwardRef, useEffect, useRef } from \"react\";\nimport { qrcode as qr } from \"@akamfoad/qr\";\nimport { Trans, useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n cn,\n CopyIcon,\n Flex,\n SimpleDialog,\n SimpleDialogFooter,\n SimpleDialogFooterProps,\n Text,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainLogo } from \"../mainLogo\";\nimport { UseLinkDeviceScriptReturn } from \"./linkDevice.script\";\n\nexport type LinkDeviceProps = UseLinkDeviceScriptReturn;\n\nexport const LinkDevice: FC<LinkDeviceProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Tooltip content={t(\"linkDevice.tooltip\")}>\n <LinkDeviceIcon\n className=\"oui-text-base-contrast-80 oui-cursor-pointer hover:oui-fill-base-contrast oui-transition-colors\"\n onClick={props.showDialog}\n />\n </Tooltip>\n\n <SimpleDialog\n title={<Text weight=\"semibold\">{t(\"common.confirm\")}</Text>}\n open={props.open}\n onOpenChange={props.onOpenChange}\n size=\"sm\"\n contentProps={{\n onInteractOutside: (e) => {\n const el = document.querySelector(\"#privy-dialog\");\n if (el) {\n e.preventDefault();\n }\n },\n }}\n >\n <LinkDeviceContent {...props} />\n </SimpleDialog>\n </>\n );\n};\n\nexport const LinkDeviceContent: FC<LinkDeviceProps> = (props) => {\n if (props.loading) {\n return <Loading />;\n }\n\n if (props.confirm) {\n return (\n <QRCode\n hideDialog={props.hideDialog}\n seconds={props.seconds}\n url={props.url}\n copyUrl={props.copyUrl}\n />\n );\n }\n\n return (\n <LinkDeviceConfirm\n hideDialog={props.hideDialog}\n onConfirm={props.onConfirm}\n />\n );\n};\n\ntype QRCodeProps = Pick<\n LinkDeviceProps,\n \"seconds\" | \"hideDialog\" | \"copyUrl\"\n> & {\n url?: string;\n};\n\nconst QRCode: FC<QRCodeProps> = (props) => {\n const { t } = useTranslation();\n const actions: SimpleDialogFooterProps[\"actions\"] = {\n primary: {\n label: t(\"common.ok\"),\n onClick: props.hideDialog,\n size: \"md\",\n },\n };\n\n return (\n <Flex direction=\"column\" gapY={3}>\n <Text size=\"base\" intensity={98}>\n {t(\"linkDevice.scanQRCode\")}\n </Text>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-center\"\n >\n {/* @ts-ignore */}\n <Trans i18nKey=\"linkDevice.createQRCode.success.description\" />\n </Text>\n\n <Text size=\"sm\" intensity={54}>\n {`${t(\"common.countdown\")}: `}\n <Text.gradient color=\"brand\" className=\"oui-tabular-nums\">\n {props.seconds}s\n </Text.gradient>\n </Text>\n\n <Flex\n className={cn(\n \"oui-w-[240px] oui-h-[240px] \",\n \"oui-border oui-border-base-contrast-20 oui-rounded-2xl\",\n )}\n justify=\"center\"\n itemAlign=\"center\"\n >\n <Flex\n className=\"oui-w-[220px] oui-h-[220px] oui-rounded-lg oui-bg-white\"\n justify=\"center\"\n itemAlign=\"center\"\n >\n <QRCodeCanvas width={196} height={196} content={props.url} />\n </Flex>\n </Flex>\n\n <Flex\n direction=\"row\"\n gap={1}\n className={cn(\n \"oui-cursor-pointer\",\n \"oui-group oui-text-base-contrast-54 hover:oui-text-base-contrast\",\n )}\n onClick={props.copyUrl}\n >\n <CopyIcon\n size={16}\n opacity={1}\n className=\"oui-text-base-contrast-54 group-hover:oui-text-base-contrast\"\n />\n <Text size=\"2xs\" weight=\"regular\">\n {t(\"linkDevice.createQRCode.success.copyUrl\")}\n </Text>\n </Flex>\n\n <SimpleDialogFooter\n actions={actions}\n className=\"oui-w-full oui-p-0 !oui-pt-8\"\n />\n </Flex>\n );\n};\n\ntype QRCodeCanvasProps = {\n width: number;\n height: number;\n content?: string;\n};\n\nconst QRCodeCanvas: FC<QRCodeCanvasProps> = (props) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n if (!canvasRef.current || !props.content) return;\n\n const qrcode = qr(props.content);\n const width = props.width;\n const height = props.height;\n\n const ctx = canvasRef.current.getContext(\"2d\")!;\n\n const cells = qrcode.modules!;\n\n const tileW = width / cells.length;\n const tileH = height / cells.length;\n\n for (let r = 0; r < cells.length; ++r) {\n const row = cells[r];\n for (let c = 0; c < row.length; ++c) {\n ctx.fillStyle = row[c] ? \"#000\" : \"#fff\";\n const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);\n const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);\n ctx.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);\n }\n }\n }, [canvasRef, props.content]);\n\n return <canvas width={props.width} height={props.height} ref={canvasRef} />;\n};\n\ntype LinkDeviceConfirmProps = Pick<LinkDeviceProps, \"hideDialog\" | \"onConfirm\">;\n\nconst LinkDeviceConfirm: FC<LinkDeviceConfirmProps> = (props) => {\n const { t } = useTranslation();\n\n const actions: SimpleDialogFooterProps[\"actions\"] = {\n secondary: {\n label: t(\"common.cancel\"),\n onClick: props.hideDialog,\n className: \"oui-flex-1\",\n size: \"md\",\n },\n primary: {\n label: t(\"common.confirm\"),\n onClick: props.onConfirm,\n className: \"oui-flex-1\",\n size: \"md\",\n },\n };\n\n return (\n <Flex direction=\"column\">\n <MainLogo />\n <Text size=\"base\" intensity={98} className=\"oui-mt-5\">\n {t(\"linkDevice.createQRCode.linkMobileDevice\")}\n </Text>\n <Text\n size=\"2xs\"\n intensity={54}\n weight=\"regular\"\n className=\"oui-text-center oui-mt-3\"\n >\n {/* @ts-ignore */}\n <Trans\n i18nKey=\"linkDevice.createQRCode.linkMobileDevice.description\"\n values={{\n hostname: window.location.hostname,\n }}\n />\n </Text>\n <SimpleDialogFooter\n actions={actions}\n className=\"oui-w-full oui-p-0 !oui-pt-8\"\n />\n </Flex>\n );\n};\n\nconst Loading = () => {\n const { t } = useTranslation();\n\n return (\n <Flex direction=\"column\" gap={5}>\n <Spinner />\n <Text size=\"sm\" intensity={98}>\n {t(\"linkDevice.createQRCode.loading.description\")}\n </Text>\n </Flex>\n );\n};\n\nconst Spinner = () => {\n return (\n <svg\n width=\"80\"\n height=\"80\"\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-animate-spin\"\n >\n <path\n d=\"M11.4858 52.1631C10.4698 52.5965 9.28872 52.1259 8.91766 51.0855C7.68926 47.6412 7.04029 44.0121 7.00182 40.3463C6.95634 36.0129 7.76483 31.713 9.38113 27.6921C10.9974 23.6712 13.3899 20.0079 16.4219 16.9116C18.9868 14.2923 21.967 12.122 25.2375 10.4861C26.2253 9.99202 27.4035 10.4698 27.8369 11.4858L28.8571 13.8773C29.2904 14.8933 28.8139 16.0615 27.8336 16.5706C25.3569 17.8567 23.0959 19.5294 21.1375 21.5293C18.7119 24.0064 16.7979 26.9369 15.5049 30.1537C14.2119 33.3704 13.5651 36.8103 13.6015 40.277C13.6308 43.076 14.1051 45.8482 15.0026 48.4906C15.3579 49.5365 14.8933 50.7096 13.8773 51.143L11.4858 52.1631Z\"\n fill=\"url(#paint0_linear_177_6754)\"\n />\n <path\n d=\"M73 40C73 58.2254 58.2254 73 40 73C21.7746 73 7 58.2254 7 40C7 21.7746 21.7746 7 40 7C58.2254 7 73 21.7746 73 40ZM13.6 40C13.6 54.5803 25.4197 66.4 40 66.4C54.5803 66.4 66.4 54.5803 66.4 40C66.4 25.4197 54.5803 13.6 40 13.6C25.4197 13.6 13.6 25.4197 13.6 40Z\"\n fill=\"white\"\n fillOpacity=\"0.06\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_177_6754\"\n x1=\"73\"\n y1=\"40\"\n x2=\"7\"\n y2=\"40\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const LinkDeviceIcon = forwardRef<SVGSVGElement, IconProps>(\n (props, ref) => {\n const { size = 20, viewBox, ...rest } = props;\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n <path d=\"M19.167 7.583a1.74 1.74 0 0 0-1.731-1.75h-4.038a1.74 1.74 0 0 0-1.731 1.75v8.167c0 .967.775 1.75 1.73 1.75h4.039a1.74 1.74 0 0 0 1.73-1.75zm-1.154 0v7.584H12.82V7.583A.58.58 0 0 1 13.398 7h4.038a.58.58 0 0 1 .577.583m-2.02 8.75a.58.58 0 0 1-.576.584.58.58 0 0 1-.577-.584.58.58 0 0 1 .577-.583.58.58 0 0 1 .577.583\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.666 5a2.5 2.5 0 0 1 2.5-2.5h10a2.5 2.5 0 0 1 2.5 2.5.08.08 0 0 1-.078.078h-1.51a.08.08 0 0 1-.08-.078.834.834 0 0 0-.833-.833h-10A.834.834 0 0 0 3.333 5v5.633c0 .11.09.2.2.2h7.1c.11 0 .2.09.2.2V12.3a.2.2 0 0 1-.2.2H2.7a.2.2 0 0 0-.2.2v.633c0 .511.308.834.834.834h7.3c.11 0 .2.09.2.2v1.266a.2.2 0 0 1-.2.2h-7.3c-1.465 0-2.5-1.086-2.5-2.5v-1.666c0-.392.27-.72.635-.81.107-.026.198-.113.198-.224z\"\n />\n </svg>\n );\n },\n);\n","import { FC, SVGProps, useState } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { SimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { LinkDeviceProps } from \"./linkDevice.ui\";\n\nexport const LinkDeviceMobile: FC<LinkDeviceProps> = (props) => {\n const [open, setOpen] = useState(false);\n const { account } = useAccount();\n const { t } = useTranslation();\n const onDisconnect = async () => {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n };\n\n const showDialog = () => {\n setOpen(true);\n };\n\n const hideDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <SimpleDialog\n open={open}\n onOpenChange={setOpen}\n title={t(\"common.tips\")}\n size=\"xs\"\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: hideDialog,\n size: \"md\",\n fullWidth: true,\n },\n primary: {\n label: t(\"connector.disconnect\"),\n onClick: async () => {\n await onDisconnect();\n hideDialog();\n },\n size: \"md\",\n variant: \"outlined\",\n color: \"danger\",\n },\n }}\n >\n <Text intensity={54} size=\"sm\">\n {t(\"linkDevice.scanQRCode.connected.description\")}\n </Text>\n </SimpleDialog>\n <Flex\n className=\"oui-text-base-contrast oui-px-[6px]\"\n intensity={500}\n height={28}\n r=\"md\"\n onClick={showDialog}\n >\n <DesktopIcon />\n <Dot />\n <LinkIcon />\n <Dot />\n <MobileIcon />\n </Flex>\n </>\n );\n};\n\nconst Dot = () => {\n return (\n <Flex className=\"oui-gap-x-px oui-px-px\">\n <DotIcon />\n <DotIcon />\n <DotIcon />\n </Flex>\n );\n};\n\nconst DesktopIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M4.5 2.93a2.25 2.25 0 0 0-2.25 2.25v5.25a.75.75 0 0 0-.75.75v1.5c0 1.272.93 2.25 2.25 2.25h10.5c1.318 0 2.25-.978 2.25-2.25v-1.5a.75.75 0 0 0-.75-.75V5.18a2.25 2.25 0 0 0-2.25-2.25zm0 1.5h9a.75.75 0 0 1 .75.75v5.25H3.75V5.18a.75.75 0 0 1 .75-.75M3 11.93h12v.75c0 .46-.277.75-.75.75H3.75c-.474 0-.75-.29-.75-.75z\" />\n </svg>\n);\n\nconst MobileIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M13.498 3.715a2.25 2.25 0 0 0-2.25-2.25h-4.5a2.25 2.25 0 0 0-2.25 2.25v10.5a2.25 2.25 0 0 0 2.25 2.25h4.5a2.25 2.25 0 0 0 2.25-2.25zm-1.5 0v9.75h-6v-9.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 .75.75m-2.25 11.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0\" />\n </svg>\n);\n\nconst LinkIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.007 6a5 5 0 1 1 10 0 5 5 0 0 1-10 0m7.486-2.344A.6.6 0 0 1 8.91 3.5c.15 0 .305.048.418.156a.55.55 0 0 1 0 .798L5.254 8.337a.62.62 0 0 1-.837 0L2.67 6.673a.55.55 0 0 1 0-.798.62.62 0 0 1 .837 0l1.329 1.266z\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"11.007\"\n y1=\"5.999\"\n x2=\"1.007\"\n y2=\"5.999\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n\nconst DotIcon: FC<SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"2\"\n height=\"2\"\n viewBox=\"0 0 2 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M.667.334a.667.667 0 1 1 0 1.333.667.667 0 0 1 0-1.333\"\n fill=\"url(#a)\"\n />\n <defs>\n <linearGradient\n id=\"a\"\n x1=\"1.333\"\n y1=\"1.001\"\n x2=\"0\"\n y2=\"1.001\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import React from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useLinkDeviceScript } from \"./linkDevice.script\";\nimport { LinkDevice } from \"./linkDevice.ui\";\nimport { LinkDeviceMobile } from \"./linkDevice.ui.mobile\";\n\nexport const LinkDeviceWidget: React.FC = () => {\n const { isMobile } = useScreen();\n const state = useLinkDeviceScript();\n if (isMobile) {\n return <LinkDeviceMobile {...state} />;\n }\n return <LinkDevice {...state} />;\n};\n","export { LinkDeviceWidget } from \"./widget\";\nexport {\n LinkDevice,\n LinkDeviceContent,\n type LinkDeviceProps,\n} from \"./linkDevice.ui\";\nexport { useLinkDeviceScript } from \"./linkDevice.script\";\n","import { FC, useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { Flex, Text, ChevronLeftIcon, cn } from \"@kodiak-finance/orderly-ui\";\nimport { WalletConnectButtonExtension } from \"../accountMenu/menu.widget\";\nimport { ChainMenuWidget } from \"../chainMenu\";\nimport { LanguageSwitcherWidget } from \"../languageSwitcher\";\nimport { LeftNavUI } from \"../leftNav/leftNav.ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { ScanQRCodeWidget } from \"../scanQRCode\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport { LinkDeviceWidget } from \"./linkDevice\";\nimport { MainLogo } from \"./mainLogo\";\nimport { MainNavWidgetProps } from \"./mainNav.widget\";\n\ntype MainNavMobileProps = {\n current?: string;\n subItems?: {\n name: string;\n href: string;\n }[];\n routerAdapter?: RouterAdapter;\n} & MainNavWidgetProps;\n\nexport const MainNavMobile: FC<MainNavMobileProps> = (props) => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n const currentMenu = useMemo(() => {\n if (Array.isArray(props?.initialMenu)) {\n return props?.campaigns;\n }\n return props?.mainMenus?.find((menu) => {\n if (!props.current) {\n return menu.href === props?.initialMenu;\n } else {\n return menu.href === props.current;\n }\n });\n }, [props?.mainMenus, props?.initialMenu, props?.current]);\n\n const title = useMemo(() => {\n if (currentMenu?.isHomePageInMobile) {\n return <MainLogo {...props?.logo} />;\n }\n return (\n <Text className=\"oui-text-2xl oui-font-bold oui-text-base-contrast\">\n {currentMenu?.name}\n </Text>\n );\n }, [currentMenu, props?.logo]);\n\n const isSub = useMemo(() => {\n return Boolean(!currentMenu || currentMenu.isSubMenuInMobile);\n }, [currentMenu]);\n\n const subTitle = useMemo(() => {\n if (currentMenu?.isSubMenuInMobile) {\n return currentMenu?.name;\n }\n if (props?.subItems?.some((item) => item.href === props?.current)) {\n return props?.subItems?.find((item) => item.href === props?.current)\n ?.name;\n }\n return null;\n }, [props?.subItems, props?.current, currentMenu]);\n\n const onBack = () => {\n let target = props.mainMenus?.find(\n (item) => item.href === props.initialMenu,\n );\n if (currentMenu?.isSubMenuInMobile) {\n target = currentMenu?.subMenuBackNav;\n }\n props?.routerAdapter?.onRouteChange(target as any);\n };\n\n const showLinkDevice =\n state.status === AccountStatusEnum.EnableTradingWithoutConnected;\n\n const showChainMenu = !showLinkDevice && !wrongNetwork;\n\n const showQrcode = state.status === AccountStatusEnum.NotConnected;\n\n const showSubAccount = useMemo(\n () => state.status >= AccountStatusEnum.EnableTrading,\n [state.status],\n );\n\n if (isSub) {\n return (\n <Flex\n width={\"100%\"}\n height={44}\n px={3}\n direction={\"row\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n className=\"oui-relative\"\n >\n <ChevronLeftIcon\n className=\"oui-absolute oui-left-6 oui-text-base-contrast-54\"\n onClick={onBack}\n />\n <Text className=\"oui-text-base oui-font-bold oui-text-base-contrast\">\n {subTitle}\n </Text>\n </Flex>\n );\n }\n\n const renderContent = () => {\n const languageSwitcher = <LanguageSwitcherWidget />;\n const scanQRCode = showQrcode && <ScanQRCodeWidget />;\n const subAccount = showSubAccount && <SubAccountWidget />;\n const linkDevice = showLinkDevice && <LinkDeviceWidget />;\n const chainMenu = showChainMenu && <ChainMenuWidget />;\n const walletConnect = <WalletConnectButtonExtension />;\n\n const leftNav = props.leftNav && (\n <LeftNavUI\n {...props.leftNav}\n logo={props?.logo}\n routerAdapter={props?.routerAdapter}\n />\n );\n\n if (typeof props.customRender === \"function\") {\n return props.customRender?.({\n leftNav,\n title,\n languageSwitcher,\n scanQRCode,\n subAccount,\n linkDevice,\n chainMenu,\n walletConnect,\n });\n }\n\n return (\n <Flex width=\"100%\" justify=\"between\">\n <Flex gapX={2}>\n {props?.customLeftNav || leftNav}\n {title}\n </Flex>\n\n <Flex gapX={2}>\n {props.leading}\n {languageSwitcher}\n {scanQRCode}\n {/* {subAccount} */}\n {/* {linkDevice} */}\n {chainMenu}\n {walletConnect}\n {props.trailing}\n </Flex>\n </Flex>\n );\n };\n\n return (\n <Flex\n width={\"100%\"}\n height={44}\n px={3}\n itemAlign={\"center\"}\n className={cn(props.className, props.classNames?.root)}\n >\n {renderContent()}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Checkbox, cn, Flex, SimpleDialog } from \"@kodiak-finance/orderly-ui\";\nimport { InfoIcon } from \"../icons\";\nimport type { UseRestrictedInfoScriptReturn } from \"./restrictedInfo.script\";\n\nexport type RestrictedInfoProps = UseRestrictedInfoScriptReturn & {\n className?: string;\n};\n\nexport const RestrictedInfo: FC<RestrictedInfoProps> = (props) => {\n const { brokerName, agree, setAgree } = props;\n const {\n ip,\n content,\n restrictedOpen,\n canUnblock,\n accessRestricted,\n setAccessRestricted,\n } = props.restrictedInfo || {};\n const { t } = useTranslation();\n\n // if user region is in the canUnblock regions and accessRestricted is not set, show the dialog\n if (restrictedOpen && canUnblock && accessRestricted === undefined) {\n return (\n <SimpleDialog\n open={canUnblock}\n title={t(\"restrictedInfo.accessRestricted\")}\n size=\"sm\"\n closable={false}\n actions={{\n secondary: {\n label: t(\"common.cancel\"),\n onClick: () => {\n setAccessRestricted(true);\n },\n size: \"md\",\n },\n primary: {\n label: t(\"common.confirm\"),\n onClick: async () => {\n setAccessRestricted(false);\n },\n size: \"md\",\n disabled: !agree,\n },\n }}\n >\n {t(\"restrictedInfo.accessRestricted.description\")}\n\n <Flex gapX={1} pt={2}>\n <Checkbox\n id=\"orderConfirm\"\n color={\"white\"}\n checked={agree}\n onCheckedChange={(checked) => {\n setAgree(!!checked);\n }}\n />\n <label htmlFor=\"orderConfirm\" className=\"oui-cursor-pointer\">\n {t(\"restrictedInfo.accessRestricted.agree\")}\n </label>\n </Flex>\n </SimpleDialog>\n );\n }\n\n if (!restrictedOpen) {\n return;\n }\n\n const renderContent = () => {\n if (typeof content === \"function\") {\n return <span>{content({ ip: ip!, brokerName })}</span>;\n }\n return (\n content || (\n <span>\n {t(\"restrictedInfo.description.default\", {\n brokerName,\n ip,\n })}\n </span>\n )\n );\n };\n\n return (\n <Flex\n ref={props.container}\n justify=\"center\"\n className={cn(\n \"oui-restricted-info\",\n \"oui-rounded-xl oui-p-[7px]\",\n \"oui-text-warning-darken\",\n props.className,\n )}\n >\n <Flex\n className={cn(\n \"oui-min-h-[20px] oui-gap-1\",\n \"oui-text-2xs oui-leading-4 md:oui-text-sm\",\n \"oui-items-start lg:oui-justify-center\",\n props.mutiLine ? \"lg:oui-items-start\" : \"lg:oui-items-center\",\n )}\n >\n <InfoIcon size={20} className=\"oui-size-4 oui-shrink-0 lg:oui-size-5\" />\n {renderContent()}\n </Flex>\n </Flex>\n );\n};\n","import { useRef, useState } from \"react\";\nimport { useConfig, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useObserverElement } from \"@kodiak-finance/orderly-ui\";\n\nexport type UseRestrictedInfoScriptReturn = ReturnType<\n typeof useRestrictedInfoScript\n> & {\n brokerName?: string;\n};\n\nexport const useRestrictedInfoScript = () => {\n const { restrictedInfo } = useAppContext();\n const brokerName = useConfig(\"brokerName\");\n const container = useRef<HTMLDivElement>(null);\n const [mutiLine, setMutiLine] = useState(false);\n const [agree, setAgree] = useState(false);\n\n const [canUnblock, setCanUnblock] = useLocalStorage(\n \"orderly_unblock_restricted\",\n true,\n );\n\n useObserverElement(container.current, (entry) => {\n setMutiLine(entry.contentRect.height > 28);\n });\n\n return {\n restrictedInfo,\n brokerName,\n container,\n mutiLine,\n agree,\n setAgree,\n };\n};\n","import { FC } from \"react\";\nimport { useRestrictedInfoScript } from \"./restrictedInfo.script\";\nimport { RestrictedInfo, RestrictedInfoProps } from \"./restrictedInfo.ui\";\n\nexport type RestrictedInfoWidgetProps = Pick<RestrictedInfoProps, \"className\">;\n\nexport const RestrictedInfoWidget: FC<RestrictedInfoWidgetProps> = (props) => {\n const state = useRestrictedInfoScript();\n return <RestrictedInfo {...props} {...state} />;\n};\n","export { RestrictedInfo } from \"./restrictedInfo.ui\";\nexport { RestrictedInfoWidget } from \"./restrictedInfo.widget\";\nexport { useRestrictedInfoScript } from \"./restrictedInfo.script\";\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\";\n\ninterface Options {\n isActive: boolean; // 当前项是否正被展示\n pxPerSec?: number; // 滚动速度(像素/秒)\n startDelayMs?: number; // 开始前停顿\n endDelayMs?: number; // 结束后停顿\n fallbackStayMs?: number; // 不溢出时停留多久再切\n onFinish?: () => void; // 滚动(或停留)结束回调\n}\n\nexport const useMarqueeOnce = (opts: Options) => {\n const {\n isActive,\n pxPerSec = 60,\n startDelayMs = 500,\n endDelayMs = 500,\n fallbackStayMs = 2500,\n onFinish,\n } = opts;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const rafRef = useRef<number | null>(null);\n\n const stopAll = () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n rafRef.current = null;\n };\n\n const timers = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n const clearTimers = () => {\n timers.current?.forEach((id) => {\n if (id) {\n clearTimeout(id);\n }\n });\n timers.current = [];\n };\n\n const [overflow, setOverflow] = useState<boolean>(false);\n\n const [delta, setDelta] = useState<number>(0); // 需要水平滚动的距离(>0 表示需要左移这么多)\n\n useLayoutEffect(() => {\n const c = containerRef.current;\n const t = contentRef.current;\n if (!c || !t) {\n return;\n }\n\n const update = () => {\n const cw = c.clientWidth;\n const tw = t.scrollWidth;\n const need = Math.max(0, tw - cw);\n setOverflow(need > 0);\n setDelta(need);\n };\n\n update();\n\n const ro = new ResizeObserver(update);\n ro.observe(c);\n ro.observe(t);\n return () => {\n ro.disconnect();\n };\n }, []);\n\n useEffect(() => {\n // 只有成为激活项时才跑动画 / 计时\n if (!isActive) {\n stopAll();\n clearTimers();\n // 复位 transform,避免下一次出现时位置不对\n if (contentRef.current) {\n contentRef.current.style.transform = \"translate3d(0, 0, 0)\";\n }\n return;\n }\n\n const run = async () => {\n stopAll();\n clearTimers();\n\n if (!overflow || delta <= 0) {\n // 不溢出:停留 fallbackStayMs,结束回调\n const id = setTimeout(() => {\n onFinish?.();\n }, fallbackStayMs);\n timers.current.push(id);\n return;\n }\n\n // 溢出:先停顿,再按速度滚\n const startId = setTimeout(() => {\n const distance = delta; // 需要移动的像素\n const durationMs = (distance / pxPerSec) * 1000;\n\n const el = contentRef.current;\n if (!el) {\n return;\n }\n\n let startTs = 0;\n const startX = 0;\n const endX = -distance;\n\n const step = (ts: number) => {\n if (!startTs) {\n startTs = ts;\n }\n const progress = Math.min(1, (ts - startTs) / durationMs);\n const x = startX + (endX - startX) * progress;\n el.style.transform = `translate3d(${x}px, 0, 0)`;\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(step);\n } else {\n const endId = setTimeout(() => {\n onFinish?.();\n }, endDelayMs);\n timers.current.push(endId);\n }\n };\n\n rafRef.current = requestAnimationFrame(step);\n }, startDelayMs);\n\n timers.current.push(startId);\n };\n\n run();\n\n return () => {\n stopAll();\n clearTimers();\n };\n }, [\n isActive,\n overflow,\n delta,\n pxPerSec,\n startDelayMs,\n endDelayMs,\n fallbackStayMs,\n onFinish,\n ]);\n\n return { containerRef, contentRef, overflow, delta };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { EmblaCarouselType } from \"@kodiak-finance/orderly-ui\";\n\nexport const usePrevNextButtons = (\n emblaApi?: EmblaCarouselType,\n onButtonClick?: (emblaApi: EmblaCarouselType) => void,\n) => {\n const [prevBtnDisabled, setPrevBtnDisabled] = useState<boolean>(true);\n const [nextBtnDisabled, setNextBtnDisabled] = useState<boolean>(true);\n\n const onPrevButtonClick = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollPrev();\n onButtonClick?.(emblaApi);\n }, [emblaApi, onButtonClick]);\n\n const onNextButtonClick = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollNext();\n onButtonClick?.(emblaApi);\n }, [emblaApi, onButtonClick]);\n\n const onSelect = useCallback((emblaApi: EmblaCarouselType) => {\n setPrevBtnDisabled(!emblaApi.canScrollPrev());\n setNextBtnDisabled(!emblaApi.canScrollNext());\n }, []);\n\n useEffect(() => {\n if (!emblaApi) {\n return;\n }\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onSelect).on(\"select\", onSelect);\n return () => {\n emblaApi.off(\"reInit\", onSelect).off(\"select\", onSelect);\n };\n }, [emblaApi, onSelect]);\n\n return {\n prevBtnDisabled,\n nextBtnDisabled,\n onPrevButtonClick,\n onNextButtonClick,\n } as const;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { EmblaCarouselType } from \"@kodiak-finance/orderly-ui\";\n\nexport const useSelectedSnapDisplay = (emblaApi?: EmblaCarouselType) => {\n const [selectedSnap, setSelectedSnap] = useState<number>(0);\n const [snapCount, setSnapCount] = useState<number>(0);\n\n const updateScrollSnapState = useCallback((emblaApi?: EmblaCarouselType) => {\n if (emblaApi) {\n setSnapCount(emblaApi.scrollSnapList().length);\n setSelectedSnap(emblaApi.selectedScrollSnap());\n }\n }, []);\n\n useEffect(() => {\n if (!emblaApi) {\n return;\n }\n updateScrollSnapState(emblaApi);\n emblaApi.on(\"select\", updateScrollSnapState);\n emblaApi.on(\"reInit\", updateScrollSnapState);\n return () => {\n emblaApi.off(\"select\", updateScrollSnapState);\n emblaApi.off(\"reInit\", updateScrollSnapState);\n };\n }, [emblaApi, updateScrollSnapState]);\n\n return {\n selectedSnap,\n snapCount,\n } as const;\n};\n","export * from \"./useMarqueeOnce\";\nexport * from \"./usePrevNextButtons\";\nexport * from \"./useSelectedSnapDisplay\";\n","import React from \"react\";\n\nexport const SoundIcon = React.forwardRef<\n SVGSVGElement,\n React.SVGAttributes<SVGSVGElement>\n>((props, ref) => {\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=\"currentColor\"\n ref={ref}\n focusable={false}\n {...props}\n >\n <path\n d=\"M11.5312 2.25534C11.2703 2.14734 10.9472 2.18333 10.7109 2.41958C10.1862 2.94383 9.52305 3.37884 8.7642 3.70434C7.99343 4.03434 6.411 4.46108 5.25547 4.45358C3.00765 4.43858 1.49993 5.71283 1.5 8.18033C1.5 10.3426 2.72745 11.6003 4.49423 11.8831L4.5 13.4476C4.5 14.6888 5.50733 15.6953 6.75 15.6953C7.89188 15.6953 8.83245 14.8118 8.97765 13.7071C8.98462 13.6538 9 13.4476 9 12.6976C9.67373 13.0118 10.232 13.5091 10.7109 13.9876C11.1834 14.4593 12 14.1166 12 13.4491C12 12.7711 11.9964 11.5433 11.9964 10.3186C12.8805 9.99159 13.5 9.15383 13.5 8.20358C13.5 7.25333 12.9149 6.39385 12.004 6.0751C12.004 4.85035 12 3.63609 12 2.95809C12 2.62434 11.7923 2.36409 11.5312 2.25534ZM13.3359 3.59033C13.1501 3.63833 12.9956 3.7636 12.8906 3.94135C12.6809 4.29835 12.7913 4.76259 13.1484 4.97184C14.2882 5.64084 15 6.85883 15 8.20358C15 9.54908 14.289 10.7663 13.1484 11.4353C12.7912 11.6446 12.6576 12.1081 12.8672 12.4651C13.0768 12.8221 13.5411 12.9323 13.8984 12.7231C15.4934 11.7878 16.4999 10.0861 16.5 8.20358C16.5 6.32183 15.4922 4.61933 13.8984 3.68408C13.7198 3.57908 13.5217 3.54233 13.3359 3.59033ZM10.5035 4.47384C10.5035 5.16759 10.5 5.89059 10.5 6.70509C10.5 8.20359 10.5 8.2036 10.5 9.7021C10.5 10.5166 10.5024 11.2103 10.5024 11.9041C8.98343 11.0078 7.41735 10.6103 6.00157 10.4828C6.00157 9.33909 5.99775 7.07709 5.99775 5.89884C6.14475 5.89209 6.31575 5.87335 6.5625 5.83885C7.52017 5.7016 8.4717 5.45259 9.375 5.06559C9.80505 4.88184 10.1247 4.71534 10.5035 4.47384ZM4.49887 6.02484C4.49887 7.17684 4.49775 9.21234 4.49775 10.3643C3.52177 10.0943 3 9.40508 3 8.18033C3 6.96983 3.47025 6.25209 4.49887 6.02484ZM6 11.9971C6.23745 12.0053 7.0977 12.1583 7.49243 12.2581L7.5 13.4476C7.5 13.8616 7.16423 14.1968 6.75 14.1968C6.33577 14.1968 6 13.8616 6 13.4476V11.9971Z\"\n fill=\"#fff\"\n fillOpacity={0.98}\n />\n </svg>\n );\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n SoundIcon.displayName = \"SoundIcon\";\n}\n","export * from \"./soundIcon\";\n","import React, { useCallback, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { AnnouncementType } from \"@kodiak-finance/orderly-types\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n cn,\n DialogTitle,\n DialogHeader,\n Dialog,\n DialogBody,\n DialogContent,\n Divider,\n Flex,\n useScreen,\n Text,\n useEmblaCarousel,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseIcon } from \"../icons\";\nimport type { AnnouncementScriptReturn } from \"./announcement.script\";\nimport {\n useMarqueeOnce,\n usePrevNextButtons,\n useSelectedSnapDisplay,\n} from \"./hooks\";\nimport { SoundIcon } from \"./icons\";\n\ninterface SwitchTipsProps {\n selectedSnap: number;\n snapCount: number;\n prevDisabled: boolean;\n nextDisabled: boolean;\n nextTips: React.MouseEventHandler<SVGSVGElement>;\n prevTips: React.MouseEventHandler<SVGSVGElement>;\n}\n\nconst SwitchTips: React.FC<Readonly<SwitchTipsProps>> = (props) => {\n const {\n selectedSnap,\n snapCount,\n prevDisabled,\n nextDisabled,\n prevTips,\n nextTips,\n } = props;\n const { isMobile } = useScreen();\n if (isMobile) {\n return (\n <div\n aria-live=\"polite\"\n className=\"oui-text-sm oui-tabular-nums oui-text-base-contrast-54\"\n >\n {selectedSnap + 1}/{snapCount}\n </div>\n );\n }\n return (\n <div className=\"oui-flex oui-items-center oui-justify-center oui-gap-0 oui-text-base-contrast-54\">\n <ChevronLeftIcon\n size={16}\n opacity={1}\n className={cn(\n \"oui-size-4 oui-shrink-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 lg:oui-size-5\",\n prevDisabled ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n onClick={prevDisabled ? undefined : prevTips}\n />\n <div\n aria-live=\"polite\"\n className=\"oui-text-sm oui-tabular-nums oui-text-base-contrast-54\"\n >\n {selectedSnap + 1}/{snapCount}\n </div>\n <ChevronRightIcon\n size={16}\n opacity={1}\n className={cn(\n \"oui-size-4 oui-shrink-0 oui-text-base-contrast-54 hover:oui-text-base-contrast-80 lg:oui-size-5\",\n nextDisabled ? \"oui-cursor-not-allowed\" : \"oui-cursor-pointer\",\n )}\n onClick={nextDisabled ? undefined : nextTips}\n />\n </div>\n );\n};\n\ninterface ControlsProps {\n selectedSnap: number;\n snapCount: number;\n prevDisabled: boolean;\n nextDisabled: boolean;\n nextTips: React.MouseEventHandler<SVGSVGElement>;\n prevTips: React.MouseEventHandler<SVGSVGElement>;\n closeTips: React.MouseEventHandler<SVGSVGElement>;\n}\n\nconst Controls: React.FC<ControlsProps> = (props) => {\n const {\n selectedSnap,\n snapCount,\n prevDisabled,\n nextDisabled,\n prevTips,\n nextTips,\n closeTips,\n } = props;\n const { isMobile } = useScreen();\n return (\n <Flex gap={isMobile ? 1 : 2} justify={\"center\"} itemAlign={\"center\"}>\n <SwitchTips\n prevDisabled={prevDisabled}\n nextDisabled={nextDisabled}\n selectedSnap={selectedSnap}\n snapCount={snapCount}\n prevTips={prevTips}\n nextTips={nextTips}\n />\n <CloseIcon\n size={18}\n onClick={closeTips}\n className=\"oui-cursor-pointer oui-text-base-contrast-80 hover:oui-text-base-contrast\"\n />\n </Flex>\n );\n};\n\nconst TipsType: React.FC<{ type?: AnnouncementType | null }> = (props) => {\n const { type } = props;\n\n const { t } = useTranslation();\n\n const { label, className } = useMemo(() => {\n const map: Record<AnnouncementType, { label: string; className: string }> =\n {\n [AnnouncementType.Listing]: {\n label: t(\"announcement.type.listing\"),\n className: \"oui-bg-primary/15 oui-text-primary\",\n },\n [AnnouncementType.Maintenance]: {\n label: t(\"announcement.type.maintenance\"),\n className: \"oui-bg-[rgba(232,136,0,0.15)] oui-text-warning-darken\",\n },\n [AnnouncementType.Delisting]: {\n label: t(\"announcement.type.delisting\"),\n className: \"oui-bg-[rgba(232,136,0,0.15)] oui-text-warning-darken\",\n },\n [AnnouncementType.Campaign]: {\n label: t(\"announcement.type.campaign\"),\n className: \"oui-bg-primary/15 oui-text-primary\",\n },\n };\n return (\n map[type!] || {\n label: type,\n className: map[AnnouncementType.Listing].className,\n }\n );\n }, [type, t]);\n\n if (!label) {\n return null;\n }\n\n return (\n <Flex\n justify=\"center\"\n px={2}\n r=\"base\"\n className={cn(\n \"oui-text-2xs oui-font-medium oui-leading-[18px]\",\n \"oui-whitespace-nowrap oui-break-normal\",\n className,\n )}\n >\n {label}\n </Flex>\n );\n};\n\ninterface ItemProps {\n type?: AnnouncementType | null;\n text: string;\n url?: string | null;\n isActive: boolean;\n onItemFinish: () => void;\n}\n\nconst AnnouncementItem: React.FC<ItemProps> = (props) => {\n const { type, text, url, isActive, onItemFinish } = props;\n\n const { containerRef, contentRef, overflow } = useMarqueeOnce({\n isActive: isActive,\n pxPerSec: 90,\n startDelayMs: 1000,\n endDelayMs: 1000,\n fallbackStayMs: 2500,\n onFinish: onItemFinish,\n });\n\n const onClick = () => {\n if (url) {\n window.open(url, \"_blank\");\n }\n };\n\n return (\n <Flex\n height={\"100%\"}\n itemAlign=\"center\"\n className=\"oui-flex-none oui-basis-full oui-transform-gpu\"\n >\n <div\n ref={containerRef}\n className={cn(\n \"oui-relative oui-flex oui-h-[34px] oui-w-full oui-transform-gpu oui-items-center oui-overflow-hidden\",\n overflow ? \"oui-justify-start\" : \"oui-justify-center\",\n )}\n >\n <div\n ref={contentRef}\n className={cn(\n \"oui-inline-flex oui-items-center oui-gap-2\",\n \"oui-h-[34px] oui-whitespace-nowrap oui-leading-[34px]\",\n \"oui-w-fit oui-transform-gpu oui-will-change-transform\",\n )}\n >\n <TipsType type={type} />\n <Text\n size=\"xs\"\n intensity={80}\n className={cn(\n \"oui-transform-gpu\",\n url ? \"oui-cursor-pointer\" : undefined,\n )}\n onClick={url ? onClick : undefined}\n >\n {text}\n </Text>\n </div>\n </div>\n </Flex>\n );\n};\n\nexport type AnnouncementProps = AnnouncementScriptReturn & {\n style?: React.CSSProperties;\n className?: string;\n hideTips?: boolean;\n};\n\nexport const AnnouncementUI: React.FC<Readonly<AnnouncementProps>> = (\n props,\n) => {\n const {\n maintenanceDialogInfo,\n showAnnouncement,\n tips,\n closeTips,\n className,\n style,\n } = props;\n\n const { t, i18n } = useTranslation();\n\n const [emblaRef, emblaApi] = useEmblaCarousel({\n loop: true,\n axis: \"y\",\n align: \"center\",\n duration: 30,\n });\n\n const {\n prevBtnDisabled,\n nextBtnDisabled,\n onPrevButtonClick,\n onNextButtonClick,\n } = usePrevNextButtons(emblaApi);\n\n const { selectedSnap, snapCount } = useSelectedSnapDisplay(emblaApi);\n\n const goNext = useCallback(() => {\n if (!emblaApi) {\n return;\n }\n emblaApi.scrollNext();\n }, [emblaApi]);\n\n if (maintenanceDialogInfo) {\n return (\n <Dialog open>\n <DialogContent\n closable={false}\n onOpenAutoFocus={(event) => event.preventDefault()}\n className=\"oui-w-[320px] lg:oui-w-auto\"\n >\n <DialogHeader>\n <DialogTitle>{t(\"maintenance.dialog.title\")}</DialogTitle>\n </DialogHeader>\n <Divider />\n <DialogBody className=\"oui-text-2xs lg:oui-text-xs\">\n {maintenanceDialogInfo}\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n }\n\n if (!showAnnouncement) {\n return null;\n }\n\n return (\n <div\n style={style}\n className={cn(\n \"oui-relative oui-z-[1] oui-flex oui-transform-gpu oui-flex-row oui-flex-nowrap oui-items-center oui-justify-between oui-gap-x-1.5 oui-overflow-hidden oui-rounded-xl oui-bg-base-9 oui-px-4 oui-font-semibold\",\n className,\n )}\n >\n <div className=\"oui-size-[18px]\">\n <SoundIcon />\n </div>\n <div\n ref={emblaRef}\n className=\"oui-relative oui-h-[34px] oui-w-full oui-max-w-full oui-transform-gpu oui-overflow-hidden\"\n >\n <div className=\"oui-flex oui-h-full oui-transform-gpu oui-flex-col\">\n {tips.map((item, index) => (\n <AnnouncementItem\n key={`item-${item.announcement_id}-${index}`}\n type={item?.type}\n text={item?.i18n?.[i18n.language] || item?.message?.trim()}\n url={item?.url}\n isActive={index === selectedSnap}\n onItemFinish={goNext}\n />\n ))}\n </div>\n </div>\n <Controls\n selectedSnap={selectedSnap}\n snapCount={snapCount}\n closeTips={closeTips}\n prevTips={onPrevButtonClick}\n nextTips={onNextButtonClick}\n prevDisabled={prevBtnDisabled}\n nextDisabled={nextBtnDisabled}\n />\n </div>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport { produce } from \"immer\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport {\n AnnouncementType,\n API,\n EMPTY_LIST,\n WSMessage,\n} from \"@kodiak-finance/orderly-types\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementScriptOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (ori: API.Announcement) => {\n return produce<API.Announcement>(ori, (draft) => {\n if (Array.isArray(draft.rows)) {\n draft.rows.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n }\n });\n};\n\nconst useAnnouncementData = () => {\n const ws = useWS();\n const { customAnnouncements } = useAppContext();\n\n const [announcementStore, setStore] = useLocalStorage<AnnouncementStore>(\n ORDERLY_ANNOUNCEMENT_KEY,\n {},\n );\n\n const [tips, setTips] = useState<API.Announcement>({});\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { t } = useTranslation();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n return produce(prev, (draft) => {\n // Make sure draft.rows is an array\n if (!Array.isArray(draft.rows)) {\n draft.rows = [];\n }\n const idx = draft.rows.findIndex(\n (tip) => tip.announcement_id === message.announcement_id,\n );\n // Filter out old tips with the same id\n if (idx !== -1) {\n draft.rows.splice(idx, 1);\n }\n // Add the latest tip\n draft.rows.push({\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n });\n });\n });\n // @ts-ignore\n setStore((prev) => ({ ...prev, show: true }));\n }\n },\n onError(err) {\n if (err instanceof Error) {\n console.error(\"Error receiving announcement:\", err.message);\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const apiTime = announcements.last_updated_time ?? 0;\n const cachedTime = announcementStore.lastUpdateTime ?? 0;\n if (cachedTime < apiTime) {\n setTips((prev) => ({ ...prev, rows: announcements?.rows }));\n setStore({ show: true, lastUpdateTime: apiTime });\n } else {\n setTips((prev) => {\n return produce<API.Announcement>(prev, (draft) => {\n if (announcements?.rows?.length) {\n // If there are announcement rows available, create a Set to store IDs of existing tips\n const existingIds = new Set<string | number>(\n prev.rows?.map((tip) => tip.announcement_id),\n );\n // Find the maintenance tip in previous tips (if any)\n const maintenanceTip = prev.rows?.find(\n (tip) => tip.announcement_id === maintentanceId,\n );\n // Clear the draft’s rows array to refill it\n draft.rows = [];\n announcements.rows.forEach((item) => {\n if (!existingIds.has(item.announcement_id)) {\n // If the item’s ID is not in existingIds, push it into the draft\n draft.rows?.push(item);\n }\n });\n if (maintenanceTip) {\n // If a maintenance tip existed before, unshift it to the front\n draft.rows.unshift(maintenanceTip);\n }\n } else {\n // Find the index of the maintenance tip in draft rows\n const idx = draft.rows?.findIndex(\n (tip) => tip.announcement_id === maintentanceId,\n );\n if (idx !== undefined && idx !== -1) {\n // Remove the maintenance tip from draft rows\n draft.rows?.splice(idx, 1);\n }\n }\n });\n });\n }\n }, [announcements]);\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n if (status === MaintenanceStatus.Maintenance) {\n setMaintenanceDialogInfo(getMaintentDialogContent(brokerName, endDate));\n return;\n }\n setMaintenanceDialogInfo(undefined);\n\n if (startTime) {\n if (startTime < getTimestamp() + oneDay) {\n setTips((prev) =>\n produce<API.Announcement>(prev, (draft) => {\n // Make sure draft.rows is an array\n if (!Array.isArray(draft.rows)) {\n draft.rows = [];\n }\n // Rebuild rows: insert the latest maintenance tip first, then put the old non-maintenance ones at the end\n draft.rows = [\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ...draft.rows.filter(\n (tip) => tip.type !== AnnouncementType.Maintenance,\n ),\n ];\n }),\n );\n }\n } else {\n setTips((prev) => {\n return produce<API.Announcement>(prev, (draft) => {\n const index = draft.rows?.findIndex(\n (tip) => tip.announcement_id === maintentanceId,\n );\n if (index !== undefined && index !== -1) {\n draft.rows?.splice(index, 1);\n }\n });\n });\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n // Merge custom announcements with API announcements\n const mergedTips = useMemo(() => {\n const tipsCopy = { ...tips };\n if (customAnnouncements && customAnnouncements.length > 0) {\n // Custom announcements appear first (higher priority)\n tipsCopy.rows = [...customAnnouncements, ...(tips.rows || [])];\n }\n return sortDataByUpdatedTime(tipsCopy);\n }, [tips, customAnnouncements]);\n\n return {\n tips: mergedTips,\n maintenanceDialogInfo: maintenanceDialogInfo,\n };\n};\n\nexport type AnnouncementScriptReturn = ReturnType<typeof useAnnouncementScript>;\n\nexport const useAnnouncementScript = (options?: AnnouncementScriptOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n const { dataAdapter } = useOrderlyContext();\n\n const { tips, maintenanceDialogInfo } = useAnnouncementData();\n\n const memoizedTips = useMemo<API.AnnouncementRow[]>(() => {\n if (typeof dataAdapter?.announcementList === \"function\") {\n return dataAdapter.announcementList(\n tips?.rows ?? (EMPTY_LIST as API.AnnouncementRow[]),\n );\n }\n return tips?.rows ?? (EMPTY_LIST as API.AnnouncementRow[]);\n }, [dataAdapter?.announcementList, tips?.rows]);\n\n const [announcementStore, setStore] = useLocalStorage<AnnouncementStore>(\n ORDERLY_ANNOUNCEMENT_KEY,\n {},\n );\n\n const closeTips = () => {\n // @ts-ignore\n setStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = memoizedTips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [\n memoizedTips,\n announcementStore.show,\n options?.hideTips,\n setShowAnnouncement,\n ]);\n\n return {\n maintenanceDialogInfo,\n tips: memoizedTips,\n closeTips: closeTips,\n showAnnouncement: showAnnouncement,\n };\n};\n","import React from \"react\";\nimport { useAnnouncementScript } from \"./announcement.script\";\nimport { AnnouncementUI, type AnnouncementProps } from \"./announcement.ui\";\n\nexport type AnnouncementWidgetProps = Pick<\n AnnouncementProps,\n \"style\" | \"className\" | \"hideTips\"\n>;\n\nexport const AnnouncementWidget: React.FC<AnnouncementWidgetProps> = (\n props,\n) => {\n const { hideTips, ...rest } = props;\n const state = useAnnouncementScript({ hideTips });\n return <AnnouncementUI {...state} {...rest} />;\n};\n","export { AnnouncementUI } from \"./announcement.ui\";\nexport { useAnnouncementScript } from \"./announcement.script\";\nexport {\n AnnouncementWidget,\n type AnnouncementWidgetProps,\n} from \"./announcement.widget\";\n","import React, { useMemo } from \"react\";\nimport { Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { BottomNavItem } from \"./bottomNav.widget\";\n\nexport type BottomNavProps = {\n mainMenus?: BottomNavItem[];\n current?: string | string[];\n onRouteChange?: RouterAdapter[\"onRouteChange\"];\n};\n\nexport const BottomNav: React.FC<BottomNavProps> = (props) => {\n const { mainMenus, current, onRouteChange } = props;\n\n const isSubmenu = useMemo(() => {\n return mainMenus?.every((menu) => menu.href !== current);\n }, [mainMenus, current]);\n\n const menus = useMemo(() => {\n return mainMenus?.map((menu) => {\n const isActive = current === menu.href;\n return (\n <Flex\n key={menu.name}\n direction={\"column\"}\n itemAlign={\"center\"}\n justify={\"center\"}\n className=\"oui-flex-1\"\n onClick={() => {\n onRouteChange?.({ href: menu.href, name: menu.name });\n }}\n >\n <Text>{isActive ? menu.activeIcon : menu.inactiveIcon}</Text>\n <Text>{menu.name}</Text>\n </Flex>\n );\n });\n }, [mainMenus, current, onRouteChange]);\n\n if (isSubmenu || !mainMenus) {\n return null;\n }\n\n return (\n <Flex\n width={\"100%\"}\n height={64}\n px={3}\n itemAlign={\"center\"}\n justify={\"between\"}\n className=\"oui-bg-base-9\"\n >\n {menus}\n </Flex>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { RouterAdapter } from \"../scaffold\";\nimport { BottomNav } from \"./bottomNav.ui.mobile\";\n\nexport type BottomNavItem = {\n name: string;\n href: string;\n activeIcon: ReactNode;\n inactiveIcon: ReactNode;\n};\n\nexport type BottomNavProps = {\n mainMenus?: BottomNavItem[];\n current?: string;\n onRouteChange?: RouterAdapter[\"onRouteChange\"];\n};\n\nexport const BottomNavWidget: React.FC<BottomNavProps> = (props) => {\n const { isMobile } = useScreen();\n const { mainMenus, ...rest } = props;\n return isMobile ? <BottomNav mainMenus={mainMenus} {...rest} /> : null;\n};\n","export { BottomNavWidget, type BottomNavProps } from \"./bottomNav.widget\";\nexport { BottomNav } from \"./bottomNav.ui.mobile\";\n","import React from \"react\";\nimport { Box, cn } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavMobile } from \"../main/mainNav.ui.mobile\";\nimport type { ScaffoldScriptReturn } from \"./scaffold.script\";\nimport type { ScaffoldProps } from \"./scaffold.widget\";\n\nconst LazyRestrictedInfoWidget = React.lazy(() =>\n import(\"../restrictedInfo\").then((mod) => {\n return { default: mod.RestrictedInfoWidget };\n }),\n);\n\nconst LazyAnnouncementWidget = React.lazy(() =>\n import(\"../announcement\").then((mod) => {\n return { default: mod.AnnouncementWidget };\n }),\n);\n\nconst LazyBottomNav = React.lazy(() =>\n import(\"../bottomNav\").then((mod) => {\n return { default: mod.BottomNav };\n }),\n);\n\nexport const MobileScaffold: React.FC<\n React.PropsWithChildren<ScaffoldScriptReturn & ScaffoldProps>\n> = (props) => {\n const {\n classNames,\n topNavbarRef,\n bottomNavHeight,\n topBar,\n mainNavProps,\n routerAdapter,\n restrictedInfo,\n bottomNavRef,\n bottomNavProps,\n bottomNav,\n children,\n } = props;\n\n return (\n <div\n style={{\n paddingBottom: `calc(${bottomNavHeight}px + 12px + env(safe-area-inset-bottom))`,\n }}\n className={cn(\n \"oui-scaffold-root oui-w-full oui-bg-base-10 oui-pt-2\",\n classNames?.root,\n )}\n >\n <React.Suspense fallback={null}>\n <LazyAnnouncementWidget\n className={\"oui-mx-1 oui-mb-1 oui-bg-base-6\"}\n hideTips={restrictedInfo?.restrictedOpen}\n />\n </React.Suspense>\n <header\n ref={topNavbarRef}\n className={cn(\n \"oui-scaffold-topNavbar\",\n \"oui-sticky oui-top-0 oui-z-10 oui-w-full oui-bg-base-10\",\n classNames?.topNavbar,\n )}\n >\n {topBar ?? (\n <MainNavMobile {...mainNavProps} routerAdapter={routerAdapter} />\n )}\n </header>\n\n <Box\n className={cn(\n \"oui-scaffold-container oui-overflow-hidden\",\n // \"oui-relative\",\n // \"oui-custom-scrollbar oui-overflow-y-auto\",\n classNames?.container,\n )}\n >\n <React.Suspense fallback={null}>\n <LazyRestrictedInfoWidget className=\"oui-mx-1 oui-mb-1 oui-bg-base-6\" />\n </React.Suspense>\n\n <Box\n height=\"100%\"\n width=\"100%\"\n className={cn(\"oui-scaffold-content\", classNames?.content)}\n >\n {children}\n </Box>\n </Box>\n <footer\n ref={bottomNavRef}\n className={cn(\n \"oui-scaffold-bottomNav\",\n \"oui-fixed oui-bottom-0 oui-z-10\",\n \"oui-w-full oui-bg-base-9\",\n // only effective on real device\n \"oui-pb-[calc(env(safe-area-inset-bottom))]\",\n classNames?.bottomNav,\n )}\n >\n {bottomNav ?? (\n <React.Suspense fallback={null}>\n <LazyBottomNav\n mainMenus={bottomNavProps?.mainMenus}\n current={bottomNavProps?.current || mainNavProps?.initialMenu}\n onRouteChange={routerAdapter?.onRouteChange}\n />\n </React.Suspense>\n )}\n </footer>\n </div>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useObserverElement, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { type ScaffoldProps } from \"./scaffold.widget\";\n\nexport type ScaffoldScriptReturn = ReturnType<typeof useScaffoldScript>;\n\ntype ScaffoldScriptOptions = ScaffoldProps;\n\nexport const useScaffoldScript = (options: ScaffoldScriptOptions) => {\n const { restrictedInfo, showAnnouncement } = useAppContext();\n\n const [topNavbarRef, topNavbarHeight] = useRefAndHeight(48);\n const [footerRef, footerHeight] = useRefAndHeight(29);\n const [bottomNavRef, bottomNavHeight] = useRefAndHeight(64);\n const [announcementRef, announcementHeight] = useRefAndHeight(0, [\n showAnnouncement,\n ]);\n\n const [expand, setExpand] = useLocalStorage(\n \"orderly_scaffold_expanded\",\n true,\n );\n\n const { isMobile } = useScreen();\n\n const sideBarExpandWidth = options.leftSideProps?.maxWidth || 185;\n const sideBarCollaspedWidth = options.leftSideProps?.minWidth || 98;\n const hasLeftSidebar = !!options.leftSidebar;\n\n return {\n topNavbarRef,\n footerRef,\n topNavbarHeight,\n footerHeight,\n announcementRef,\n announcementHeight,\n restrictedInfo,\n expand,\n setExpand,\n isMobile,\n sideBarExpandWidth,\n sideBarCollaspedWidth,\n hasLeftSidebar,\n footerProps: options.footerProps,\n routerAdapter: options.routerAdapter,\n mainNavProps: options.mainNavProps,\n bottomNavProps: options.bottomNavProps,\n bottomNavRef,\n bottomNavHeight,\n };\n};\n\nconst useRefAndHeight = (\n defaultHeight: number,\n deps: React.DependencyList = [],\n) => {\n const ref = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState(defaultHeight);\n\n useObserverElement(ref.current, (entry) => {\n setHeight(entry.contentRect.height);\n });\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n const rect = ref.current?.getBoundingClientRect();\n setHeight(rect.height);\n }, [ref, ...deps]);\n\n return [ref, height] as const;\n};\n","import { FC, useMemo } from \"react\";\nimport { WsNetworkStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Divider, Flex, Text } from \"@kodiak-finance/orderly-ui\";\nimport {\n CommuntiyDiscordIcon,\n CommuntiyTelegramIcon,\n CommuntiyXIcon,\n OrderlyTextIcon,\n SignalIcon,\n} from \"../icons/index\";\nimport type { FooterReturns } from \"./footer.script\";\nimport type { FooterProps } from \"./footer.widget\";\n\nexport const Footer: FC<FooterReturns & FooterProps> = (props) => {\n const { t } = useTranslation();\n\n const signalClsName = useMemo(() => {\n switch (props.wsStatus) {\n case WsNetworkStatus.Connected:\n return \"oui-fill-success-light oui-text-success-light\";\n case WsNetworkStatus.Disconnected:\n return \"oui-fill-danger-light oui-text-danger-light\";\n case WsNetworkStatus.Unstable:\n return \"oui-fill-warning-light oui-text-warning-light\";\n }\n }, [props.wsStatus]);\n\n const openUrl = (url?: string) => {\n window.open(url, \"_blank\");\n };\n\n return (\n <Flex\n direction={\"row\"}\n justify={\"between\"}\n height={28}\n px={3}\n width={\"100%\"}\n >\n <Flex>\n <Flex\n direction={\"row\"}\n itemAlign={\"center\"}\n gap={1}\n className={signalClsName}\n >\n <SignalIcon\n // className={cn(signalClsName, \"oui-fill-success-light\")}\n fillOpacity={1}\n fill=\"currentColor\"\n />\n <Text size=\"2xs\">{t(\"scaffold.footer.operational\")}</Text>\n </Flex>\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[18px] oui-px-1 oui-ml-2 oui-border-line-12\"\n />\n <Flex gap={2}>\n <Text intensity={54} size=\"2xs\">\n {t(\"scaffold.footer.joinCommunity\")}\n </Text>\n <Flex direction={\"row\"} gap={1}>\n {typeof props.telegramUrl !== \"undefined\" && (\n <CommuntiyTelegramIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.telegramUrl)}\n />\n )}\n {typeof props.discordUrl !== \"undefined\" && (\n <CommuntiyDiscordIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.discordUrl)}\n />\n )}\n {typeof props.twitterUrl !== \"undefined\" && (\n <CommuntiyXIcon\n className=\"oui-fill-white/[.54] hover:oui-fill-white/[.98] oui-cursor-pointer\"\n fill=\"currentColor\"\n fillOpacity={1}\n onClick={(e) => openUrl(props.twitterUrl)}\n />\n )}\n </Flex>\n {typeof props?.trailing !== \"undefined\" && (\n <>\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[18px] oui-border-line-12\"\n />\n {props?.trailing}\n </>\n )}\n </Flex>\n </Flex>\n <Flex\n direction={\"row\"}\n gap={1}\n className=\"oui-scaffold-footer-powered-by\"\n >\n <Text intensity={54} size=\"2xs\">\n {(t(\"scaffold.footer.poweredBy\" as any) as string)}\n </Text>\n <OrderlyTextIcon />\n </Flex>\n </Flex>\n );\n};\n","import { useWsStatus, WsNetworkStatus } from \"@kodiak-finance/orderly-hooks\";\n\nexport type FooterReturns = {\n wsStatus: WsNetworkStatus;\n};\n\nexport const useFooterScript = (): FooterReturns => {\n const wsStatus = useWsStatus();\n\n return {\n wsStatus,\n };\n};\n","import React, { ReactNode } from \"react\";\nimport { useFooterScript } from \"./footer.script\";\nimport { Footer } from \"./footer.ui\";\n\nexport type FooterProps = {\n telegramUrl?: string;\n twitterUrl?: string;\n discordUrl?: string;\n trailing?: ReactNode;\n};\n\nexport const FooterWidget: React.FC<FooterProps> = (props) => {\n const state = useFooterScript();\n return <Footer {...state} {...props} />;\n};\n","export { Footer } from \"./footer.ui\";\nexport { FooterWidget, type FooterProps } from \"./footer.widget\";\n","import React from \"react\";\nimport {\n Box,\n Flex,\n tv,\n VariantProps,\n Text,\n cn,\n Tooltip,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype SideMenuItem = {\n name: string;\n icon?: React.ReactNode;\n href?: string;\n disabled?: boolean;\n onClick?: () => void;\n hide?: boolean;\n};\n\nconst menuItemVariants = tv({\n slots: {\n button: [\n \"oui-min-h-10\",\n \"oui-px-3\",\n \"oui-py-2\",\n \"oui-rounded-md\",\n \"oui-w-full\",\n \"oui-text-left\",\n \"oui-text-base\",\n \"oui-text-base-contrast-36\",\n // \"oui-flex\",\n \"oui-group\",\n // \"oui-space-x-2\",\n // \"oui-items-center\",\n \"hover:oui-bg-base-8\",\n \"oui-transition-colors\",\n \"group-data-[state=closed]/bar:oui-w-[42px]\",\n \"oui-overflow-hidden\",\n ],\n icon: [],\n },\n variants: {\n mode: {\n \"icon-only\": {\n button: \"oui-w-10\",\n icon: \"w-6 h-6\",\n },\n full: {\n button: \"oui-full\",\n icon: \"w-6 h-6\",\n },\n },\n active: {\n true: {\n button: \"oui-bg-base-5 hover:oui-bg-base-5\",\n },\n },\n open: {\n true: {\n button: \"\",\n },\n },\n },\n});\n\nconst MenuItem = React.memo<\n {\n item: SideMenuItem;\n active?: boolean;\n open?: boolean;\n onClick?: (item: SideMenuItem) => void;\n } & VariantProps<typeof menuItemVariants>\n>((props) => {\n const { item, mode, open, onClick, active, ...rest } = props;\n const { button } = menuItemVariants({\n mode,\n active: props.active,\n open: props.open,\n });\n const children = (\n <button\n data-actived={props.active}\n disabled={item.disabled}\n className={button()}\n onClick={() => {\n props.onClick?.(item);\n }}\n >\n <Flex itemAlign={\"center\"} gap={2} as=\"span\">\n <div>{item.icon}</div>\n {props.open && (\n <Text.gradient\n color={props.active ? \"brand\" : \"inherit\"}\n angle={45}\n size=\"base\"\n className=\"oui-break-all oui-animate-in oui-fade-in\"\n >\n {item.name}\n </Text.gradient>\n )}\n </Flex>\n </button>\n );\n\n if (props.open) {\n return <li className=\"oui-min-w-[120px]\">{children}</li>;\n }\n\n return (\n <li>\n <Tooltip content={item.name} side=\"right\" align=\"center\" sideOffset={20}>\n {children}\n </Tooltip>\n </li>\n );\n});\n\nMenuItem.displayName = \"LeftMenuItem\";\n\nconst SideMenus: React.FC<{\n menus?: SideMenuItem[];\n current?: string;\n open?: boolean;\n onItemSelect?: (item: SideMenuItem) => void;\n}> = (props) => {\n return (\n <Box py={6}>\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-pointer-events-none oui-invisible oui-absolute\"\n >\n <defs>\n <linearGradient\n id=\"side-menu-gradient\"\n x1=\"15.7432\"\n y1=\"8.94726\"\n x2=\"2.24316\"\n y2=\"8.94726\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset=\"1\" />\n </linearGradient>\n </defs>\n </svg>\n <ul className=\"oui-space-y-4\">\n {props.menus?.map((item, index) => {\n if (item?.hide) {\n return null;\n }\n return (\n <MenuItem\n key={index}\n item={item}\n open={props.open}\n active={item.href === props.current}\n onClick={props.onItemSelect}\n />\n );\n })}\n </ul>\n </Box>\n );\n};\n\ntype SideBarHeaderProps = {\n onToggle?: () => void;\n open?: boolean;\n title?: React.ReactNode;\n};\n\nconst SideBarHeader: React.FC<SideBarHeaderProps> = (props) => {\n const { title } = props;\n\n const titleElemet =\n typeof title === \"string\" ? (\n <Text intensity={54} size=\"xs\">\n {title}\n </Text>\n ) : (\n title\n );\n\n const iconProps = {\n className:\n \"oui-text-base-contrast-36 hover:oui-text-base-contrast-80 oui-cursor-pointer\",\n onClick: props.onToggle,\n };\n\n return (\n <Flex\n justify={props.open ? \"between\" : \"center\"}\n itemAlign=\"center\"\n className=\"oui-h-6\"\n >\n {props.open ? titleElemet : null}\n\n {props.open ? (\n <CollapseIcon {...iconProps} />\n ) : (\n <ExpandIcon {...iconProps} />\n )}\n </Flex>\n );\n};\n\ntype SideBarProps = {\n title?: React.ReactNode;\n items?: SideMenuItem[];\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onItemSelect?: (item: SideMenuItem) => void;\n current?: string;\n className?: string;\n maxWidth?: number;\n minWidth?: number;\n style?: React.CSSProperties;\n};\n\nconst SideBar: React.FC<SideBarProps> = (props) => {\n const { open = true, items, current, onItemSelect } = props;\n\n return (\n <Box\n data-state={open ? \"opened\" : \"closed\"}\n className={cn(\"oui-group/bar\", props.className)}\n style={props.style}\n >\n <SideBarHeader\n open={open}\n title={props.title}\n onToggle={() => {\n props.onOpenChange?.(!open);\n }}\n />\n <SideMenus\n menus={items}\n current={current}\n onItemSelect={onItemSelect}\n open={open}\n />\n </Box>\n );\n};\n\nSideBar.displayName = \"SideBar\";\n\nconst ExpandIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M6.326 8.826a.84.84 0 0 0-.6.234L2.16 12.627v-2.135H.492v4.167c0 .46.373.833.834.833h4.166v-1.667H3.357l3.567-3.567a.857.857 0 0 0 0-1.198.84.84 0 0 0-.598-.234M10.502.492V2.16h2.135L9.07 5.726a.857.857 0 0 0 0 1.199.86.86 0 0 0 1.197 0l3.568-3.568v2.135h1.667V1.326a.834.834 0 0 0-.834-.834z\" />\n </svg>\n);\n\nconst CollapseIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M14.668.492a.85.85 0 0 0-.599.234l-3.567 3.568V2.159H8.835v4.167c0 .46.373.833.833.833h4.167V5.492H11.7l3.569-3.567a.86.86 0 0 0 0-1.199.85.85 0 0 0-.6-.234m-12.5 8.334v1.666h2.135L.736 14.06a.86.86 0 0 0 0 1.198.86.86 0 0 0 1.198 0l3.568-3.567v2.134h1.666V9.66a.834.834 0 0 0-.833-.833z\" />\n </svg>\n);\n\nexport { SideBar };\n\nexport type { SideBarProps, SideMenuItem };\n","import { useState } from \"react\";\nimport { SideBarProps } from \"./sidebar.ui\";\nimport { useScaffoldContext } from \"../scaffold\";\n\nexport const useSideNavBuilder = (\n props?: Partial<SideBarProps>\n): SideBarProps => {\n const [current, setCurrent] = useState(props?.items?.[0].href || \"/\");\n const { expanded, setExpand } = useScaffoldContext();\n\n if (typeof setExpand === \"undefined\") {\n console.warn(\"SideBar component must be used within a Scaffold component\");\n }\n\n return {\n items: [],\n current,\n open: expanded,\n onOpenChange: (open) => {\n setExpand?.(open);\n },\n onItemSelect: (item) => {\n if (item.href) {\n setCurrent(item.href);\n }\n },\n ...props,\n };\n};\n","import React from \"react\";\nimport { SideBar, SideBarProps } from \"./sidebar.ui\";\nimport { useSideNavBuilder } from \"./useSideNavBuilder.script\";\n\nexport const SideNavbarWidget: React.FC<Partial<SideBarProps>> = (props) => {\n const state = useSideNavBuilder(props);\n return <SideBar {...state} />;\n};\n","export { SideBar } from \"./sidebar.ui\";\nexport { SideNavbarWidget } from \"./sidebar.widget\";\n\nexport type { SideBarProps, SideMenuItem } from \"./sidebar.ui\";\n","import React from \"react\";\nimport { isValidElement } from \"react\";\nimport { Box, cn, Grid } from \"@kodiak-finance/orderly-ui\";\nimport type { ScaffoldScriptReturn } from \"./scaffold.script\";\nimport type { ScaffoldProps } from \"./scaffold.widget\";\n\nconst LazyMainNavWidget = React.lazy(() =>\n import(\"../main/mainNav.widget\").then((mod) => {\n return { default: mod.MainNavWidget };\n }),\n);\n\nconst LazyRestrictedInfoWidget = React.lazy(() =>\n import(\"../restrictedInfo\").then((mod) => {\n return { default: mod.RestrictedInfoWidget };\n }),\n);\n\nconst LazyAnnouncementWidget = React.lazy(() =>\n import(\"../announcement\").then((mod) => {\n return { default: mod.AnnouncementWidget };\n }),\n);\n\nconst LazyFooterWidget = React.lazy(() =>\n import(\"../footer\").then((mod) => {\n return { default: mod.FooterWidget };\n }),\n);\n\nconst LazySideNavbarWidget = React.lazy(() =>\n import(\"../sidebar\").then((mod) => {\n return { default: mod.SideNavbarWidget };\n }),\n);\n\nexport type DesktopScaffoldProps = React.PropsWithChildren<\n ScaffoldProps & ScaffoldScriptReturn\n>;\n\nexport const DesktopScaffold: React.FC<DesktopScaffoldProps> = (props) => {\n const {\n classNames,\n footerHeight,\n topNavbarRef,\n mainNavProps,\n topBar,\n announcementRef,\n restrictedInfo,\n hasLeftSidebar,\n expand,\n leftSideProps,\n leftSidebar,\n footer,\n footerRef,\n sideBarCollaspedWidth,\n sideBarExpandWidth,\n footerProps,\n children,\n } = props;\n return (\n <div\n style={{\n height: `calc(100vh - ${footerHeight}px)`,\n }}\n className={cn(\n \"oui-scaffold-root oui-font-semibold\",\n // default text and background color\n \"oui-bg-base-10 oui-text-base-contrast\",\n \"oui-flex oui-flex-col\",\n \"oui-custom-scrollbar oui-overflow-auto\",\n classNames?.root,\n )}\n >\n {/* topNavbar */}\n <Box\n ref={topNavbarRef}\n className={cn(\n \"oui-scaffold-topNavbar oui-bg-base-9\",\n classNames?.topNavbar,\n )}\n >\n {topBar ?? (\n <React.Suspense fallback={null}>\n <LazyMainNavWidget {...mainNavProps} />\n </React.Suspense>\n )}\n </Box>\n <div\n className={cn(\n \"oui-scaffold-container\",\n \"oui-relative oui-h-full\",\n // 1024px - 6px (scrollbar widt) = 1018px\n \"oui-min-w-[1018px]\",\n classNames?.container,\n )}\n >\n <Box px={2} ref={announcementRef}>\n <React.Suspense fallback={null}>\n <LazyRestrictedInfoWidget\n className={cn(\n \"oui-scaffold-restricted-info\",\n \"oui-relative oui-z-[1]\",\n \"oui-mt-2\",\n \"oui-bg-base-9\",\n \"oui-min-w-[994px]\",\n )}\n />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAnnouncementWidget\n className={\"oui-mx-auto oui-mt-2\"}\n hideTips={restrictedInfo?.restrictedOpen}\n />\n </React.Suspense>\n </Box>\n {/*--------- body start ------ */}\n {!hasLeftSidebar ? (\n // ----------No leftSidebar layout start ---------\n <Box height=\"100%\" className={cn(classNames?.content)}>\n {children}\n </Box>\n ) : (\n // ----------No leftSidebar layout end ---------\n // ---------- left & body layout start ---------\n <Grid\n className={cn(\n \"oui-box-content oui-flex oui-transition-all xl:oui-grid\",\n \"oui-min-h-full oui-flex-1\",\n classNames?.body,\n )}\n style={{\n gridTemplateColumns: `${\n expand\n ? `${sideBarExpandWidth}px`\n : `${sideBarCollaspedWidth}px`\n } 1fr`,\n // gridTemplateRows: \"auto 1fr\",\n // gridTemplateAreas: `\"left main\" \"left main\"`,\n }}\n >\n <div className={cn(classNames?.leftSidebar)}>\n {isValidElement<any>(leftSidebar) ? (\n leftSidebar\n ) : (\n <React.Suspense fallback={null}>\n <LazySideNavbarWidget {...leftSideProps} />\n </React.Suspense>\n )}\n </div>\n <Box\n width={\"100%\"}\n className={cn(\"oui-overflow-hidden\", classNames?.content)}\n >\n {children}\n </Box>\n </Grid>\n // ---------- left & body layout end ---------\n )}\n </div>\n\n {/* footer */}\n <Box\n ref={footerRef}\n className={cn(\n \"oui-scaffold-footer oui-w-full oui-bg-base-10\",\n \"oui-fixed oui-bottom-0 oui-z-50\",\n \"oui-border-t oui-border-line-12\",\n classNames?.footer,\n )}\n >\n {footer || (\n <React.Suspense fallback={null}>\n <LazyFooterWidget {...footerProps} />\n </React.Suspense>\n )}\n </Box>\n </div>\n );\n};\n","import { API } from \"@kodiak-finance/orderly-types\";\n\nexport function checkChainSupport(\n chainId: number | string,\n chains: API.Chain[]\n) {\n if (typeof chainId === \"string\") {\n chainId = parseInt(chainId);\n }\n return chains.some((chain) => {\n return chain.network_infos.chain_id === chainId;\n });\n}\n","import { createContext, useContext } from \"react\";\n\nexport type RouteOption = {\n href: string;\n name: string;\n scope?: string;\n target?: string;\n};\n\nexport type RouterAdapter = {\n onRouteChange: (option: RouteOption) => void;\n currentPath?: string;\n};\n\nexport type ScaffoldState = {\n routerAdapter?: RouterAdapter;\n expanded?: boolean;\n setExpand: (expand: boolean) => void;\n checkChainSupport: (chainId: number | string) => boolean;\n topNavbarHeight: number;\n footerHeight: number;\n announcementHeight: number;\n};\n\nexport const ScaffoldContext = createContext<ScaffoldState>(\n {} as ScaffoldState,\n);\n\nexport const useScaffoldContext = () => {\n return useContext(ScaffoldContext);\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport {\n OrderlyContext,\n useChains,\n useMemoizedFn,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { checkChainSupport } from \"../../utils/chain\";\nimport { ScaffoldContext, ScaffoldState } from \"./scaffoldContext\";\n\nexport type ScaffoldProviderProps = Omit<ScaffoldState, \"checkChainSupport\">;\n\nexport const ScaffoldProvider: React.FC<\n React.PropsWithChildren<ScaffoldProviderProps>\n> = (props) => {\n const {\n routerAdapter,\n expanded,\n setExpand,\n topNavbarHeight,\n footerHeight,\n announcementHeight,\n children,\n } = props;\n\n const [chains] = useChains();\n\n const { networkId } = useContext<any>(OrderlyContext);\n\n const checkChainSupportHandle = useMemoizedFn((chainId: number | string) => {\n return checkChainSupport(\n chainId,\n networkId === \"testnet\" ? chains.testnet : chains.mainnet,\n );\n });\n\n const memoizedValue = useMemo<ScaffoldState>(() => {\n return {\n routerAdapter: routerAdapter,\n expanded: expanded,\n setExpand: setExpand,\n checkChainSupport: checkChainSupportHandle,\n topNavbarHeight: topNavbarHeight,\n footerHeight: footerHeight,\n announcementHeight: announcementHeight,\n };\n }, [\n routerAdapter,\n expanded,\n setExpand,\n checkChainSupportHandle,\n topNavbarHeight,\n footerHeight,\n announcementHeight,\n ]);\n\n return (\n <ScaffoldContext.Provider value={memoizedValue}>\n {children}\n </ScaffoldContext.Provider>\n );\n};\n","import React, { PropsWithChildren, ReactNode } from \"react\";\nimport { BottomNavProps } from \"../bottomNav/bottomNav.widget\";\nimport { FooterProps } from \"../footer\";\nimport { LeftNavProps } from \"../leftNav\";\nimport { MainNavWidgetProps } from \"../main/mainNav.widget\";\nimport { SideBarProps } from \"../sidebar\";\nimport { MobileScaffold } from \"./scaffold.mobile.ui\";\nimport { useScaffoldScript } from \"./scaffold.script\";\nimport { DesktopScaffold } from \"./scaffold.ui\";\nimport { RouterAdapter } from \"./scaffoldContext\";\nimport { ScaffoldProvider } from \"./scaffoldProvider\";\n\nexport type ScaffoldProps = {\n /**\n * custom left sidebar component, only works on desktop\n * if provided, the layout will use this component over the default sidebar component\n */\n leftSidebar?: ReactNode;\n /**\n * custom left sidebar props, only works on desktop\n */\n leftSideProps?: SideBarProps;\n /**\n * custom left nav props, only works on mobile\n */\n leftNavProps?: LeftNavProps;\n /**\n * custom top bar component\n */\n topBar?: ReactNode;\n /**\n * custom top nav props\n */\n mainNavProps?: MainNavWidgetProps;\n /**\n * custom bottom nav component, only works on mobile\n */\n bottomNav?: ReactNode;\n /**\n * custom bottom nav component, only works on mobile\n */\n bottomNavProps?: BottomNavProps;\n /**\n * custom footer component, only works on desktop\n */\n footer?: ReactNode;\n /**\n * custom footer props, only works on desktop\n */\n footerProps?: FooterProps;\n routerAdapter?: RouterAdapter;\n classNames?: {\n // root = topNavbar + container + footer\n root?: string;\n container?: string;\n content?: string;\n // body = leftSidebar + content\n body?: string;\n leftSidebar?: string;\n topNavbar?: string;\n footer?: string;\n bottomNav?: string;\n };\n};\n\nexport const Scaffold: React.FC<PropsWithChildren<ScaffoldProps>> = (props) => {\n const state = useScaffoldScript(props);\n\n const renderContent = () => {\n if (state.isMobile) {\n return (\n <MobileScaffold {...props} {...state}>\n {props.children}\n </MobileScaffold>\n );\n }\n\n return (\n <DesktopScaffold {...props} {...state}>\n {props.children}\n </DesktopScaffold>\n );\n };\n\n return (\n <ScaffoldProvider\n routerAdapter={props.routerAdapter}\n expanded={state.expand}\n setExpand={state.setExpand}\n topNavbarHeight={state.topNavbarHeight}\n footerHeight={state.footerHeight}\n announcementHeight={state.announcementHeight}\n >\n {renderContent()}\n </ScaffoldProvider>\n );\n};\n","export { Scaffold, type ScaffoldProps } from \"./scaffold.widget\";\nexport { MobileScaffold } from \"./scaffold.mobile.ui\";\nexport { useScaffoldScript } from \"./scaffold.script\";\nexport * from \"./scaffoldContext\";\nexport * from \"./scaffoldProvider\";\n","import { useMemo, useState } from \"react\";\nimport { useAccount, useWalletConnector } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { useScaffoldContext } from \"../scaffold\";\nimport { CampaignProps } from \"./campaignButton\";\nimport { MainNavItemsProps } from \"./mainMenus/mainNavMenus.ui\";\nimport type { MainNavItem } from \"./mainMenus/navItem\";\nimport { MainNavWidgetProps } from \"./mainNav.widget\";\n\n// export type CampaignPosition = \"menuLeading\" | \"menuTailing\" | \"navTailing\";\nexport enum CampaignPositionEnum {\n menuLeading = \"menuLeading\",\n menuTailing = \"menuTailing\",\n navTailing = \"navTailing\",\n}\n\nexport type MainNavScriptReturn = ReturnType<typeof useMainNavScript>;\n\nexport const useMainNavScript = (props: MainNavWidgetProps) => {\n const { onItemClick, campaignPosition = CampaignPositionEnum.navTailing } =\n props;\n const { state } = useAccount();\n const { routerAdapter } = useScaffoldContext();\n const { connectedChain } = useWalletConnector();\n const { wrongNetwork, disabledConnect } = useAppContext();\n const [current, setCurrent] = useState(() => {\n if (typeof props.initialMenu === \"undefined\") return [];\n\n return !Array.isArray(props.initialMenu)\n ? [props.initialMenu]\n : props.initialMenu;\n });\n\n const onItemClickHandler = (scope: string) => (item: MainNavItem[]) => {\n const lastItem = item[item.length - 1];\n\n if (!lastItem) return;\n\n /**\n * If the target is not _blank, we should update the current state\n */\n if (lastItem.target !== \"_blank\") {\n setCurrent(item.map((item) => item.href));\n }\n\n const current = item[item.length - 1];\n const args = {\n href: current.href,\n name: current.name,\n scope,\n target: current.target,\n };\n\n if (typeof onItemClick === \"function\") {\n onItemClick(args);\n return;\n }\n\n routerAdapter?.onRouteChange(args);\n };\n\n const mainNavConfig = useMemo(() => {\n const config = {\n leading: null,\n trailing: null,\n logo: {},\n mainMenus: [\n // { name: \"Trading\", href: \"/trading\" },\n // { name: \"Portfolio\", href: \"/portfolio\" },\n // { name: \"Markets\", href: \"/markets\" },\n // { name: \"Rewards\", href: \"/rewards\" },\n ],\n ...props,\n campaignPosition,\n };\n if (props.leading) {\n config.leading = props.leading;\n }\n\n if (props.trailing) {\n config.trailing = props.trailing;\n }\n\n if (props.campaigns) {\n if (campaignPosition === CampaignPositionEnum.menuTailing) {\n config.mainMenus = [...config.mainMenus, props.campaigns];\n } else if (campaignPosition === CampaignPositionEnum.menuLeading) {\n config.mainMenus = [props.campaigns, ...config.mainMenus];\n } else {\n config.campaigns = props.campaigns;\n }\n }\n\n return config;\n }, [props]);\n\n const { mainMenus, campaigns } = useMemo(() => {\n const converted: {\n campaigns?: CampaignProps;\n mainMenus?: MainNavItemsProps;\n } = {};\n\n if (mainNavConfig.mainMenus && mainNavConfig.mainMenus.length) {\n converted.mainMenus = {\n items: mainNavConfig.mainMenus,\n /**\n * @type string\n * The current item of the router\n */\n current,\n onItemClick: onItemClickHandler(\"mainMenu\"),\n // onItemClick: (item: MainNavItem[]) => {\n // const lastItem = item[item.length - 1];\n\n // if (!lastItem) return;\n\n // /**\n // * If the target is not _blank, we should update the current state\n // */\n // if (lastItem.target !== \"_blank\") {\n // setCurrent(item.map((item) => item.href));\n // }\n\n // const current = item[item.length - 1];\n // const args = {\n // href: current.href,\n // name: current.name,\n // scope: \"mainMenu\",\n // target: current.target,\n // };\n\n // if (typeof onItemClick === \"function\") {\n // onItemClick(args);\n // return;\n // }\n\n // routerAdapter?.onRouteChange(args);\n // },\n };\n }\n\n if (mainNavConfig.campaigns && mainNavConfig.campaigns.children?.length) {\n converted.campaigns = {\n item: mainNavConfig.campaigns,\n current,\n onItemClick: onItemClickHandler(\"campaign\"),\n // onItemClick: (item: MainNavItem[]) => {\n // const lastItem = item[item.length - 1];\n\n // if (!lastItem) return;\n\n // /**\n // * If the target is not _blank, we should update the current state\n // */\n // if (lastItem.target !== \"_blank\") {\n // setCurrent(item.map((item) => item.href));\n // }\n\n // const current = item[item.length - 1];\n // const args = {\n // href: current.href,\n // name: current.name,\n // scope: \"campaign\",\n // target: current.target,\n // };\n\n // if (typeof onItemClick === \"function\") {\n // onItemClick(args);\n // return;\n // }\n\n // routerAdapter?.onRouteChange(args);\n // },\n };\n }\n\n return converted;\n }, [mainNavConfig]);\n\n return {\n // currentProduct,\n // logo: mainNavConfig.logo,\n ...mainNavConfig,\n mainMenus,\n campaigns,\n isConnected: !!connectedChain,\n wrongNetwork,\n status: state.status,\n disabledConnect,\n };\n};\n","import React, { FC, PropsWithChildren, useEffect } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n EyeCloseIcon,\n EyeIcon,\n Flex,\n Popover,\n Text,\n} from \"@kodiak-finance/orderly-ui\";\n\ntype AccountSummaryUi = {\n totalValue: number | null;\n freeCollateral: number | null;\n maxLeverage?: number | null;\n currentLeverage: number | null;\n unrealized_pnl_ROI: number | null;\n unrealPnL: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n // type: AccountSummaryType;\n keys: AccountSummaryList;\n elementKeys: AccountSummaryList;\n onToggleItemByKey: (key: string) => void;\n onKeyToTop: (key: string) => void;\n};\n\n//----------------- TotalValue -----------------\nconst TotalValue: FC<{\n totalValue: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const {\n totalValue = 0,\n visible = true,\n onToggleVisibility,\n visibleAvailable = true,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"common.totalValue\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n\n <Text intensity={54}>≈</Text>\n </Flex>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n unitClassName=\"oui-text-base-contrast-20 oui-ml-1\"\n as=\"div\"\n >\n {totalValue ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- FreeCollateral -----------------\nconst FreeCollateral: FC<{\n freeCollateral?: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const {\n freeCollateral,\n visible,\n onToggleVisibility,\n visibleAvailable = true,\n } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"trading.asset.freeCollateral\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n </Flex>\n {/* <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n Free collateral\n </Text>\n </Box> */}\n <Text.numeral\n unit=\"USDC\"\n unitClassName=\"oui-text-base-contrast-20 oui-ml-1\"\n visible={visible}\n as=\"div\"\n >\n {freeCollateral ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- CurrentLeverage -----------------\nconst CurrentLeverage: FC<{\n currentLeverage: number | null;\n}> = (props) => {\n const { currentLeverage } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"leverage.currentLeverage\")}\n </Text>\n </Box>\n <Text.numeral as={\"div\"} unit=\"x\">\n {currentLeverage ?? 0}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- MaxLeverage -----------------\nconst MaxLeverage: FC<{\n maxLeverage?: number | null;\n}> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Box>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"leverage.maxLeverage\")}\n </Text>\n </Box>\n <Text color=\"primary\" as={\"div\"}>{`${props.maxLeverage ?? \"--\"}x`}</Text>\n </Flex>\n );\n};\n\n//----------------- UnrealPnL -----------------\nconst UnrealPnL: FC<{\n unrealized_pnl_ROI: number | null;\n unrealPnL: number | null;\n visible?: boolean;\n onToggleVisibility?: () => void;\n visibleAvailable?: boolean;\n}> = (props) => {\n const { visible, onToggleVisibility, visibleAvailable = true } = props;\n const { t } = useTranslation();\n\n return (\n <Flex\n direction={\"column\"}\n gap={0}\n className=\"oui-text-2xs\"\n itemAlign={\"start\"}\n >\n <Flex gap={1} itemAlign={\"center\"}>\n <Text intensity={54} className=\"oui-whitespace-nowrap\">\n {t(\"common.unrealizedPnl\")}\n </Text>\n {visibleAvailable && (\n <button onClick={() => onToggleVisibility?.()}>\n {visible ? (\n <EyeIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n ) : (\n <EyeCloseIcon\n size={12}\n className=\"oui-text-primary-light\"\n opacity={1}\n />\n )}\n </button>\n )}\n </Flex>\n <Text.numeral\n as={\"div\"}\n coloring\n showIdentifier\n weight={\"semibold\"}\n visible={visible}\n suffix={\n <Text.numeral coloring prefix={\"(\"} suffix={\")\"} rule={\"percentages\"}>\n {props.unrealized_pnl_ROI ?? \"-\"}\n </Text.numeral>\n }\n >\n {props.unrealPnL ?? \"-\"}\n </Text.numeral>\n </Flex>\n );\n};\n\n//----------------- AccountInfoPopover -----------------\nconst AccountInfoPopover = (props: {\n totalValue: number | null;\n freeCollateral: number | null;\n maxLeverage?: number | null;\n currentLeverage: number | null;\n unrealPnL: number | null;\n unrealized_pnl_ROI: number | null;\n // type: AccountSummaryType;\n keys: AccountSummaryList;\n elementKeys: AccountSummaryList;\n onToggleItemByKey: (key: string) => void;\n visible?: boolean;\n onKeyToTop: (key: string) => void;\n}) => {\n const { totalValue, keys, elementKeys } = props;\n const { t } = useTranslation();\n\n const onSetToTop = (key: SummaryKey) => (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n props.onKeyToTop(key);\n };\n\n const elements = elementKeys.map((key) => {\n switch (key) {\n case \"totalValue\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"totalValue\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"totalValue\")}\n onClick={() => props.onToggleItemByKey(\"totalValue\")}\n />\n <span>{t(\"common.totalValue\")}</span>\n </Flex>\n <Text.numeral\n visible={props.visible}\n unit=\"USDC\"\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {totalValue ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"freeCollateral\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"freeCollateral\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"freeCollateral\")}\n onClick={() => props.onToggleItemByKey(\"freeCollateral\")}\n />\n <span>{t(\"trading.asset.freeCollateral\")}</span>\n </Flex>\n <Text.numeral\n unit=\"USDC\"\n visible={props.visible}\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unitClassName={\"oui-text-base-contrast-36 oui-ml-1\"}\n >\n {props.freeCollateral ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"unrealPnL\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"unrealPnL\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"unrealPnL\")}\n onClick={() => props.onToggleItemByKey(\"unrealPnL\")}\n />\n <span>{t(\"common.unrealizedPnl\")}</span>\n </Flex>\n <Text.numeral\n coloring\n showIdentifier\n visible={props.visible}\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n suffix={\n <Text.numeral\n coloring\n prefix={\"(\"}\n visible={props.visible}\n suffix={\")\"}\n rule={\"percentages\"}\n >\n {props.unrealized_pnl_ROI ?? \"-\"}\n </Text.numeral>\n }\n >\n {props.unrealPnL ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"currentLeverage\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"currentLeverage\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"currentLeverage\")}\n onClick={() => props.onToggleItemByKey(\"currentLeverage\")}\n />\n <span>{t(\"leverage.currentLeverage\")}</span>\n </Flex>\n <Text.numeral\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n unit=\"x\"\n >\n {props.currentLeverage ?? \"-\"}\n </Text.numeral>\n </DropdownMenu>\n );\n case \"maxLeverage\":\n return (\n <DropdownMenu onSetTop={onSetToTop(\"maxLeverage\")} key={key}>\n <Flex className={\"oui-text-base-contrast-54\"} gapX={2}>\n <IdentityButton\n active={keys.includes(\"maxLeverage\")}\n onClick={() => props.onToggleItemByKey(\"maxLeverage\")}\n />\n <span>{t(\"leverage.maxLeverage\")}</span>\n </Flex>\n <Text\n className=\"group-hover:-oui-translate-x-5 oui-transition-transform\"\n color=\"primary\"\n >{`${props.maxLeverage ?? \"-\"}x`}</Text>\n </DropdownMenu>\n );\n default:\n return null;\n }\n });\n\n return (\n <Flex\n className={\"oui-text-2xs oui-font-semibold\"}\n direction={\"column\"}\n gapY={1}\n >\n {elements}\n </Flex>\n );\n};\n\nconst DropdownMenu: FC<\n PropsWithChildren<{\n onSetTop: (event: React.MouseEvent) => void;\n }>\n> = (props) => {\n return (\n <div className=\"oui-w-full oui-relative oui-group hover:oui-bg-base-6 oui-px-[6px] oui-py-1 oui-rounded\">\n <Flex justify={\"between\"} width={\"100%\"}>\n {props.children}\n </Flex>\n <button\n className=\"oui-absolute oui-right-1 oui-top-1\"\n onClick={props.onSetTop}\n >\n <svg\n className=\"group-hover:oui-opacity-100 group-hover:oui-translate-x-0 oui-opacity-0 oui-translate-x-3 oui-transition-all oui-cursor-pointer oui-fill-base-contrast-54 hover:oui-fill-base-contrast\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n width=\"16\"\n height=\"16\"\n rx=\"2\"\n fill=\"rgb(var(--oui-color-primary-darken))\"\n />\n <path d=\"M3.507 3.999a.5.5 0 1 0 0 1h9a.5.5 0 0 0 0-1zm4 8.006a.5.5 0 0 0 1 0V7.724l1.5 1.484.703-.703-2.343-2.36a.515.515 0 0 0-.72 0l-2.343 2.36.703.703 1.5-1.484z\" />\n </svg>\n </button>\n </div>\n );\n};\n\nconst IdentityButton = (props: {\n active: boolean;\n onClick: React.MouseEventHandler;\n}) => {\n return (\n <button onClick={props.onClick}>\n {props.active ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.506.977a.56.56 0 0 0-.365.16C6.367 1.88 6.13 2.5 6.413 3.348c-.661.506-1.078.63-1.903.63-1.127 0-1.863.137-2.364.637v.016a1.187 1.187 0 0 0 0 1.686l1.4 1.411-2.385 2.385a.513.513 0 0 0-.015.717.514.514 0 0 0 .719 0l2.394-2.395 1.403 1.396a1.19 1.19 0 0 0 1.687 0h.016c.501-.5.64-1.142.64-2.358 0-.773.16-1.319.64-1.893.924.271 1.462.012 2.22-.746a.5.5 0 0 0 .14-.36c0-.175-.044-.445-.156-.78a4 4 0 0 0-.984-1.577 4 4 0 0 0-1.578-.984C7.95 1.02 7.682.977 7.506.977\"\n fill=\"currentcolor\"\n className={\"oui-text-primary-light\"}\n />\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.506.977a.56.56 0 0 0-.365.16C6.367 1.88 6.13 2.5 6.413 3.348c-.661.506-1.078.63-1.903.63-1.127 0-1.863.137-2.364.637v.016a1.187 1.187 0 0 0 0 1.686l1.4 1.411-2.385 2.385a.513.513 0 0 0-.015.717.514.514 0 0 0 .719 0l2.394-2.395 1.403 1.396a1.19 1.19 0 0 0 1.687 0h.016c.501-.5.64-1.142.64-2.358 0-.773.16-1.319.64-1.893.924.271 1.462.012 2.22-.746a.5.5 0 0 0 .14-.36c0-.175-.044-.445-.156-.78a4 4 0 0 0-.984-1.577 4 4 0 0 0-1.578-.984C7.95 1.02 7.682.977 7.506.977m.193 1.027c.531.098 1.066.45 1.447.83.381.382.706.848.84 1.459-.477.458-.77.494-1.247.243a.5.5 0 0 0-.583.087c-.91.91-1.15 1.736-1.15 2.85 0 .97-.057 1.33-.36 1.655-.085.092-.203.078-.281 0L2.849 5.615a.18.18 0 0 1-.012-.255c.178-.217.576-.386 1.669-.386 1.306.001 2-.335 2.859-1.14a.5.5 0 0 0 .094-.578c-.257-.513-.217-.784.24-1.252\"\n fill=\"currentcolor\"\n />\n </svg>\n )}\n </button>\n );\n};\n\ntype SummaryKey =\n | \"totalValue\"\n | \"freeCollateral\"\n | \"unrealPnL\"\n | \"currentLeverage\"\n | \"maxLeverage\";\n\nexport type AccountSummaryList = Array<SummaryKey>;\nconst AccountSummaryItems: Record<SummaryKey, JSX.ElementType> = {\n totalValue: TotalValue,\n freeCollateral: FreeCollateral,\n unrealPnL: UnrealPnL,\n currentLeverage: CurrentLeverage,\n maxLeverage: MaxLeverage,\n};\n\nexport const AccountSummary: React.FC<AccountSummaryUi> = (props) => {\n const { keys, ...rest } = props;\n let canToggleIndex = 0;\n const sizeRef = React.useRef(0);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n if (Array.isArray(entries) && entries.length > 0) {\n const width = entries[0].contentRect.width;\n if (width > 1556) {\n sizeRef.current = 5;\n } else if (width > 1480) {\n sizeRef.current = 4;\n } else if (width > 1366) {\n sizeRef.current = 3;\n } else if (width > 1280) {\n sizeRef.current = 2;\n } else if (width > 1180) {\n sizeRef.current = 1;\n } else {\n sizeRef.current = 0;\n }\n }\n });\n\n resizeObserver.observe(document.body);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const elements = keys.slice(0, sizeRef.current).map((key, index) => {\n switch (key) {\n case \"freeCollateral\": {\n return (\n <FreeCollateral\n freeCollateral={props.freeCollateral}\n visible={props.visible}\n onToggleVisibility={props.onToggleVisibility}\n visibleAvailable={index === canToggleIndex}\n />\n );\n }\n\n case \"unrealPnL\":\n return (\n <UnrealPnL\n unrealPnL={props.unrealPnL}\n unrealized_pnl_ROI={props.unrealized_pnl_ROI}\n visible={props.visible}\n onToggleVisibility={props.onToggleVisibility}\n visibleAvailable={index === canToggleIndex}\n />\n );\n case \"currentLeverage\": {\n canToggleIndex++;\n return <CurrentLeverage currentLeverage={props.currentLeverage} />;\n }\n case \"maxLeverage\": {\n canToggleIndex++;\n return <MaxLeverage maxLeverage={props.maxLeverage} />;\n }\n case \"totalValue\":\n default:\n return (\n <TotalValue\n totalValue={props.totalValue}\n onToggleVisibility={props.onToggleVisibility}\n visible={props.visible}\n visibleAvailable={index === canToggleIndex}\n />\n );\n }\n });\n\n return (\n <div className=\"oui-flex oui-items-center oui-gap-6\">\n <Items elements={elements} />\n <Popover\n content={\n <AccountInfoPopover\n totalValue={rest.totalValue}\n freeCollateral={props.freeCollateral}\n maxLeverage={props.maxLeverage}\n currentLeverage={props.currentLeverage}\n unrealized_pnl_ROI={props.unrealized_pnl_ROI}\n unrealPnL={props.unrealPnL}\n keys={keys}\n elementKeys={props.elementKeys}\n onToggleItemByKey={props.onToggleItemByKey}\n onKeyToTop={props.onKeyToTop}\n visible={props.visible}\n />\n }\n contentProps={{\n onOpenAutoFocus: (event) => event.preventDefault(),\n sideOffset: 12,\n className: \"oui-p-1\",\n }}\n arrow\n >\n <div className=\"oui-cursor-pointer oui-group\">\n <Dot />\n </div>\n </Popover>\n </div>\n );\n};\n\nconst Items: FC<{\n elements: JSX.Element[];\n}> = (props) => {\n return (\n <div className=\"oui-flex oui-gap-6\">\n {props.elements.map((Element, index) => (\n <div key={index}>{Element}</div>\n ))}\n </div>\n );\n};\n\nconst Dot = () => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-fill-base-contrast-36 hover:oui-fill-primary-light group-data-[state=open]:oui-fill-primary-light\"\n >\n <path d=\"M10.007 8.335a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333m-5.84 0a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333m11.666 0a1.666 1.666 0 1 1 0 3.333 1.666 1.666 0 0 1 0-3.333\" />\n </svg>\n );\n};\n","import { useState } from \"react\";\nimport {\n useLeverage,\n useLocalStorage,\n useMarginRatio,\n usePositionStream,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useCollateral, useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { useAppContext } from \"@kodiak-finance/orderly-react-app\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\n\nexport type AccountSummaryType =\n | \"totalValue\"\n | \"freeCollateral\"\n | \"unrealPnL\"\n | \"currentLeverage\"\n | \"maxLeverage\";\n\nexport const useTotalValueBuilderScript = () => {\n const [keys, setKeys] = useLocalStorage<string[]>(\"accountSummaryTypes\", [\n \"totalValue\",\n ]);\n\n const [elementKeys, setElementKeys] = useState<string[]>([\n \"totalValue\",\n \"freeCollateral\",\n \"unrealPnL\",\n \"currentLeverage\",\n \"maxLeverage\",\n ]);\n\n const { freeCollateral, totalValue } = useCollateral({ dp: 2 });\n\n const { state } = useAccount();\n\n const [visible, setVisible] = useLocalStorage(\"orderly_assets_visible\", true);\n\n const [{ aggregated, totalUnrealizedROI }] = usePositionStream();\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const { currentLeverage } = useMarginRatio();\n\n const { maxLeverage } = useLeverage();\n\n const onToggleItemByKey = (key: string) => {\n if (keys.includes(key)) {\n setKeys(keys.filter((k: string) => k !== key));\n } else {\n setKeys([...keys, key]);\n }\n };\n\n const onKeyToTop = (key: string) => {\n if (!keys.includes(key)) {\n setKeys([key, ...keys]);\n setElementKeys([key, ...elementKeys.filter((k: string) => k !== key)]);\n return;\n }\n\n setKeys([key, ...keys.filter((k: string) => k !== key)]);\n setElementKeys([key, ...elementKeys.filter((k: string) => k !== key)]);\n };\n\n const unavailable =\n wrongNetwork ||\n disabledConnect ||\n (state.status < AccountStatusEnum.EnableTrading &&\n state.status !== AccountStatusEnum.EnableTradingWithoutConnected);\n\n return {\n totalValue: unavailable ? null : totalValue,\n freeCollateral: unavailable ? null : freeCollateral,\n maxLeverage: unavailable ? null : maxLeverage,\n currentLeverage: unavailable ? null : currentLeverage,\n unrealPnL: unavailable ? null : aggregated?.total_unreal_pnl,\n unrealized_pnl_ROI: unavailable ? null : totalUnrealizedROI,\n // type,\n keys,\n elementKeys,\n // onTypeChange,\n visible,\n wrongNetwork,\n onToggleItemByKey,\n onKeyToTop,\n onToggleVisibility: () => setVisible(!visible),\n };\n};\n\nexport type UseTotalValueBuilderScript = ReturnType<\n typeof useTotalValueBuilderScript\n>;\n","import React from \"react\";\nimport { AccountSummary } from \"./accountSummary.ui\";\nimport type { AccountSummaryList } from \"./accountSummary.ui\";\nimport { useTotalValueBuilderScript } from \"./useWidgetBuilder.script\";\n\nexport const AccountSummaryWidget: React.FC = () => {\n const state = useTotalValueBuilderScript();\n return (\n <AccountSummary\n {...state}\n elementKeys={state.elementKeys as AccountSummaryList}\n />\n );\n};\n","// export { TotalValue } from \"./totalValue.ui\";\nexport { AccountSummaryWidget } from \"./accountSummary.widget\";\nexport { AccountSummary } from \"./accountSummary.ui\";\n","import React, {\n cloneElement,\n FC,\n HTMLAttributeAnchorTarget,\n PropsWithChildren,\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccount, useLocalStorage } from \"@kodiak-finance/orderly-hooks\";\nimport { ChevronDownIcon, PopoverContent, Tooltip } from \"@kodiak-finance/orderly-ui\";\nimport { Flex } from \"@kodiak-finance/orderly-ui\";\nimport { Box, cn, PopoverAnchor, PopoverRoot, Text } from \"@kodiak-finance/orderly-ui\";\n\nconst ActiveIcon: React.FC = () => (\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable={false}\n >\n <path\n d=\"M2.913 4.515a.5.5 0 0 0-.328.202.51.51 0 0 0 .14.701L5.722 7.41a.51.51 0 0 0 .562 0l2.995-1.992a.51.51 0 0 0 .14-.7.51.51 0 0 0-.701-.14L6.002 6.382 3.287 4.577a.5.5 0 0 0-.374-.062\"\n fill=\"url(#mainNavDropDownIcon)\"\n />\n <defs>\n <linearGradient\n id=\"mainNavDropDownIcon\"\n x1=\"9.502\"\n y1=\"5.994\"\n x2=\"2.502\"\n y2=\"5.994\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop stopColor=\"rgb(var(--oui-gradient-brand-start))\" offset={1} />\n </linearGradient>\n </defs>\n </svg>\n);\n\nexport type MainNavItem = {\n id?: string;\n testid?: string;\n name: string;\n href: string;\n target?: HTMLAttributeAnchorTarget;\n icon?: string | React.ReactElement;\n activeIcon?: string | React.ReactElement;\n tag?: string;\n description?: string;\n disabled?: boolean;\n children?: MainNavItem[];\n className?: string;\n asChild?: boolean;\n\n /**\n * if true, the item will be shown as a submenu in mobile\n */\n isSubMenuInMobile?: boolean;\n /**\n * if provided, the item is a submenu in mobile, and this will be the a back nav\n */\n subMenuBackNav?: {\n name: string;\n href: string;\n };\n /**\n * if true, the item will be shown as a home page in mobile\n */\n isHomePageInMobile?: boolean;\n customRender?: (option: {\n name: string;\n href: string;\n isActive?: boolean;\n }) => React.ReactNode;\n /**\n * if true, this item will only be shown in the main account\n * @default false\n **/\n onlyInMainAccount?: boolean;\n tooltipConfig?: {\n /**\n * if true, the tooltip will be shown on first visit\n */\n showOnFirstVisit?: boolean;\n /**\n * the text to show in the tooltip\n */\n text?: string;\n };\n};\n\nconst isObject = (value: any): value is object => {\n return !!value && value.constructor === Object;\n};\n\nconst ORDERLY_NAV_BUTTON_TOOLTIP_OPEN = \"ORDERLY_NAV_BUTTON_TOOLTIP_OPEN\";\n\nexport const NavItem: FC<\n Omit<React.HTMLAttributes<HTMLButtonElement>, \"onClick\"> & {\n item: MainNavItem;\n onClick?: (item: MainNavItem[]) => void;\n // active?: boolean;\n currentPath?: string[];\n classNames?: {\n navItem?: string;\n subMenu?: string;\n };\n }\n> = (props) => {\n const { classNames, currentPath, item, onClick, ...buttonProps } = props;\n\n const { customRender, tooltipConfig, onlyInMainAccount } = item;\n\n const { isMainAccount } = useAccount();\n\n const [showButtonTooltip, setShowButtonTooltip] = useLocalStorage(\n ORDERLY_NAV_BUTTON_TOOLTIP_OPEN,\n true,\n );\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (showButtonTooltip) {\n timerRef.current = setTimeout(() => {\n setShowButtonTooltip(false);\n }, 8000);\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [showButtonTooltip]);\n\n const isActive = useMemo(\n () => currentPath?.[0] === item.href,\n [currentPath, item.href],\n );\n\n const onClickHandler = useCallback(() => {\n if (Array.isArray(item.children)) {\n return;\n }\n onClick?.([item]);\n }, [item, onClick]);\n\n const buttonRender = () => {\n if (typeof customRender === \"function\") {\n return customRender({\n name: item.name,\n href: item.href,\n isActive,\n });\n }\n const button = (\n <button\n id={item.id}\n data-testid={item.testid}\n {...buttonProps}\n disabled={item.disabled}\n data-actived={isActive}\n className={cn(\n \"oui-group oui-relative oui-h-[32px] oui-rounded oui-px-3 oui-py-1 oui-text-sm oui-text-base-contrast-36 hover:oui-bg-base-7\",\n classNames?.navItem,\n )}\n onClick={onClickHandler}\n >\n <span className={\"oui-flex oui-items-center\"}>\n <ItemIcon isActive={isActive} item={item} />\n <Text.gradient\n color={isActive ? \"brand\" : \"inherit\"}\n angle={45}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {item.name}\n </Text.gradient>\n {Array.isArray(item.children) && (\n <span className={\"oui-ml-1 group-data-[open=true]:oui-rotate-180\"}>\n {isActive ? (\n <ActiveIcon />\n ) : (\n <ChevronDownIcon size={12} color={\"white\"} />\n )}\n </span>\n )}\n </span>\n <Box\n invisible={!isActive}\n position=\"absolute\"\n bottom={0}\n left={\"50%\"}\n height={\"3px\"}\n r=\"full\"\n width={\"60%\"}\n gradient=\"brand\"\n angle={45}\n className=\"-oui-translate-x-1/2 \"\n />\n </button>\n );\n\n if (isObject(tooltipConfig) && tooltipConfig.showOnFirstVisit) {\n return (\n <Tooltip\n open={showButtonTooltip}\n content={tooltipConfig.text}\n className={\n \"oui-w-64 oui-max-w-64 oui-bg-base-6 oui-text-2xs oui-font-semibold\"\n }\n >\n {button}\n </Tooltip>\n );\n }\n return button;\n };\n\n if (onlyInMainAccount && !isMainAccount) {\n return null;\n }\n\n if (!Array.isArray(item.children)) {\n return buttonRender();\n }\n\n return (\n <SubMenus\n items={item.children}\n className={classNames?.subMenu}\n current={currentPath?.[1]}\n onItemClick={(subItem: MainNavItem) => {\n onClick?.([item, subItem]);\n }}\n >\n {buttonRender()}\n </SubMenus>\n );\n};\n\nconst SubMenus: React.FC<\n PropsWithChildren<{\n items: MainNavItem[];\n className?: string;\n current?: string;\n onItemClick: (item: MainNavItem) => void;\n }>\n> = (props) => {\n const { children, items, className, current, onItemClick } = props;\n const [open, setOpen] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const onMouseEnter = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n // setOpen(true);\n }, []);\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const classNames = (children as ReactElement).props?.className;\n\n return (\n <PopoverRoot open={open}>\n <PopoverAnchor>\n <div\n className={\"oui-group\"}\n data-open={open}\n onMouseEnter={() => {\n setOpen(true);\n }}\n onMouseLeave={() => {\n timer.current = setTimeout(() => {\n setOpen(false);\n }, 150);\n }}\n >\n {cloneElement(children as React.ReactElement<any>, {\n className: cn(classNames, open && \"oui-bg-base-7\"),\n })}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={() => {\n setOpen(false);\n if (timer.current) {\n clearTimeout(timer.current);\n }\n }}\n className={cn(\n \"oui-w-[260px] oui-space-y-[2px] oui-border oui-border-line-6 oui-p-1\",\n className,\n )}\n >\n {items.map((item, index) => {\n return (\n <SubMenu\n key={index}\n item={item}\n onClick={onItemClick}\n active={item.href === current}\n />\n );\n })}\n </PopoverContent>\n </PopoverRoot>\n );\n};\n\nconst SubMenu: React.FC<{\n item: MainNavItem;\n active?: boolean;\n onClick: (item: MainNavItem) => void;\n}> = (props) => {\n const { item, active, onClick } = props;\n const hasDescription = typeof item.description !== \"undefined\";\n const hasIcon = typeof item.icon !== \"undefined\" && item.icon !== null;\n return (\n <Flex\n px={2}\n py={3}\n gapX={2}\n data-active={active ?? false}\n itemAlign={hasDescription ? \"start\" : \"center\"}\n className={cn(\n \"oui-group oui-w-full oui-cursor-pointer oui-text-base-contrast-80 hover:oui-bg-base-6 data-[active=true]:oui-bg-base-5\",\n // props.active && \"oui-bg-base-5\"\n )}\n r={\"md\"}\n onClick={() => {\n onClick(item);\n }}\n data-testid={item.testid}\n >\n {hasIcon && (\n <div\n className={cn(\n \"oui-relative oui-size-6\",\n hasDescription && \"oui-translate-y-1\",\n )}\n >\n <ItemIcon isActive={active ?? false} item={item} />\n </div>\n )}\n <div className=\"oui-flex-1\">\n <SubMenuTitle item={item} isActive={active} />\n {hasDescription && (\n <Text size={\"2xs\"} as={\"div\"} intensity={36}>\n {item.description}\n </Text>\n )}\n </div>\n </Flex>\n );\n};\n\nconst SubMenuTitle: React.FC<{ item: MainNavItem; isActive?: boolean }> = (\n props,\n) => {\n const { item, isActive } = props;\n return (\n <Flex itemAlign={\"center\"} width={\"100%\"} position=\"relative\">\n <div className=\"oui-flex oui-flex-1\">\n <Text.gradient\n color={isActive ? \"brand\" : \"inherit\"}\n size={\"xs\"}\n as={\"div\"}\n intensity={80}\n weight={\"semibold\"}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {item.name}\n </Text.gradient>\n {typeof item.tag !== \"undefined\" && <Tag item={item} />}\n </div>\n {item.target === \"_blank\" && <OutlinkIcon />}\n </Flex>\n );\n};\n\nconst Tag: React.FC<{ item: MainNavItem }> = (props) => {\n return (\n <div\n className={\n \"oui-ml-1 oui-inline-flex oui-rounded oui-bg-gradient-to-r oui-from-[rgb(var(--oui-gradient-brand-start)_/_0.12)] oui-to-[rgb(var(--oui-gradient-brand-end)_/_0.12)] oui-px-2 oui-py-1\"\n }\n >\n <Text.gradient\n color={\"brand\"}\n size={\"3xs\"}\n className=\"oui-whitespace-nowrap oui-break-normal\"\n >\n {props.item.tag}\n </Text.gradient>\n </div>\n );\n};\n\nconst ICON_CLASSNAME =\n \"oui-flex oui-border oui-border-line oui-w-6 oui-h-6 oui-rounded-md oui-justify-center oui-items-center oui-absolute oui-left-0 oui-top-0\";\n\nconst ItemIcon: React.FC<{ item: MainNavItem; isActive: boolean }> = (\n props,\n) => {\n const { isActive } = props;\n if (!props.item.icon) {\n return null;\n }\n if (typeof props.item.icon === \"string\") {\n return (\n <span className={\"oui-mr-1 oui-size-[20px]\"}>\n {\n <img\n src={\n isActive\n ? (props.item.activeIcon as string) || props.item.icon\n : props.item.icon\n }\n className={\"oui-max-h-full oui-max-w-full\"}\n />\n }\n </span>\n );\n }\n // return isActive ? props.item.activeIcon || props.item.icon : props.item.icon;\n return (\n <>\n <div\n className={cn(\n ICON_CLASSNAME,\n \"group-hover:oui-invisible group-data-[active=true]:oui-invisible\",\n )}\n >\n {props.item.icon}\n </div>\n <div\n className={cn(\n ICON_CLASSNAME,\n \"oui-invisible group-hover:oui-visible group-data-[active=true]:oui-visible\",\n )}\n >\n {props.item.activeIcon || props.item.icon}\n </div>\n </>\n );\n};\n\nconst OutlinkIcon: React.FC = () => {\n return (\n <>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-absolute oui-right-0 oui-top-0 group-hover:oui-invisible\"\n >\n <path\n d=\"M14.159 17.492a3.333 3.333 0 0 0 3.333-3.333V5.826a3.333 3.333 0 0 0-3.333-3.334H5.826a3.333 3.333 0 0 0-3.334 3.334v8.333a3.333 3.333 0 0 0 3.334 3.333zm-6.667-4.166a.85.85 0 0 1-.599-.235.86.86 0 0 1 0-1.198l3.333-3.333-1.9-1.901h5v5l-1.901-1.9L8.09 13.09a.84.84 0 0 1-.599.235\"\n fill=\"#fff\"\n fillOpacity=\".2\"\n />\n </svg>\n\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"oui-invisible oui-absolute oui-right-0 oui-top-0 group-hover:oui-visible\"\n >\n <path\n d=\"M14.159 17.492a3.333 3.333 0 0 0 3.333-3.333V5.826a3.333 3.333 0 0 0-3.333-3.334H5.826a3.333 3.333 0 0 0-3.334 3.334v8.333a3.333 3.333 0 0 0 3.334 3.333zm-6.667-4.166a.85.85 0 0 1-.599-.235.86.86 0 0 1 0-1.198l3.333-3.333-1.9-1.901h5v5l-1.901-1.9L8.09 13.09a.84.84 0 0 1-.599.235\"\n fill=\"url(#outlineIcon)\"\n />\n <defs>\n <linearGradient\n id=\"outlineIcon\"\n x1=\"17.492\"\n y1=\"9.992\"\n x2=\"2.492\"\n y2=\"9.992\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n </>\n );\n};\n","import { cn } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavItem, NavItem } from \"./mainMenus/navItem\";\n\nexport type CampaignProps = {\n item: MainNavItem;\n className?: string;\n onItemClick?: (item: MainNavItem[]) => void;\n current?: string[];\n // classNames?: MainNavClassNames;\n};\n\nexport const CampaignButton = (props: CampaignProps) => {\n return (\n <>\n <NavItem\n item={props.item}\n onClick={props.onItemClick}\n classNames={{\n navItem: cn(\"oui-text-base-contrast-54 -oui-ml-2\", props.className),\n }}\n />\n </>\n );\n};\n","import { FC } from \"react\";\nimport { cn, Flex } from \"@kodiak-finance/orderly-ui\";\nimport { MainNavItem, NavItem } from \"./navItem\";\n\nexport type MainNavClassNames = {\n root?: string;\n navItem?: string;\n subMenu?: string;\n};\n\nexport type MainNavItemsProps = {\n items?: MainNavItem[];\n current?: string[];\n classNames?: MainNavClassNames;\n onItemClick?: (item: MainNavItem[]) => void;\n};\n\nexport const MainNavMenus: FC<MainNavItemsProps> = (props) => {\n const { items, classNames } = props;\n\n if (!Array.isArray(items) || items.length === 0) {\n return null;\n }\n\n return (\n <Flex className={cn(\"oui-gap-1\", classNames?.root)}>\n {items?.map((item, index) => (\n <NavItem\n key={index}\n item={item}\n // active={item.href === props.current?.[0]}\n currentPath={props.current}\n onClick={props.onItemClick}\n />\n ))}\n </Flex>\n );\n};\n","import { FC } from \"react\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n installExtension,\n} from \"@kodiak-finance/orderly-ui\";\nimport { MainNavMenus, type MainNavItemsProps } from \"./mainNavMenus.ui\";\n\nexport const MainNavMenusWidget: FC<MainNavItemsProps> = (props) => {\n return <MainNavMenus {...props} />;\n};\n\ninstallExtension<MainNavItemsProps>({\n name: \"default-main-nav-menus\",\n scope: [\"*\"],\n positions: [ExtensionPositionEnum.MainMenus],\n __isInternal: true,\n})((props: MainNavItemsProps) => {\n return <MainNavMenus {...props} />;\n});\n\nexport const MainNavMenusExtension: FC<MainNavItemsProps> = (props) => {\n return (\n <ExtensionSlot position={ExtensionPositionEnum.MainMenus} {...props} />\n );\n};\n","import { FC, PropsWithChildren, useMemo } from \"react\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { cn, Divider, Flex, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { WalletConnectButtonExtension } from \"../accountMenu/menu.widget\";\nimport { AccountSummaryWidget } from \"../accountSummary\";\nimport { ChainMenuWidget } from \"../chainMenu\";\nimport { LanguageSwitcherWidget } from \"../languageSwitcher\";\nimport { SubAccountWidget } from \"../subAccount\";\nimport { CampaignButton } from \"./campaignButton\";\nimport { LinkDeviceWidget } from \"./linkDevice\";\nimport { MainLogo } from \"./mainLogo\";\nimport { MainNavMenusExtension } from \"./mainMenus/mainNavMenus.widget\";\nimport { CampaignPositionEnum, MainNavScriptReturn } from \"./mainNav.script\";\n\nexport const MainNav: FC<PropsWithChildren<MainNavScriptReturn>> = (props) => {\n const { className, classNames, campaigns, campaignPosition } = props;\n\n const showCampaignButton =\n campaignPosition === CampaignPositionEnum.navTailing && campaigns;\n\n const showLinkIcon =\n !props.wrongNetwork &&\n !props.disabledConnect &&\n props.status! >= AccountStatusEnum.SignedIn;\n\n const showSubAccount = props.status! >= AccountStatusEnum.EnableTrading;\n\n const hideWalletConnectButton =\n !props.disabledConnect && props.wrongNetwork && props.isConnected;\n\n const { isDesktop } = useScreen();\n\n const children = useMemo(() => {\n if (typeof props.children === \"undefined\") {\n return null;\n }\n return <Flex grow>{props.children}</Flex>;\n }, [props.children]);\n\n const showChainMenu = isDesktop;\n\n const renderContent = () => {\n const title = <MainLogo {...props.logo} />;\n const accountSummary = <AccountSummaryWidget />;\n const linkDevice = showLinkIcon && <LinkDeviceWidget />;\n const languageSwitcher = <LanguageSwitcherWidget />;\n const subAccount = showSubAccount && <SubAccountWidget />;\n const chainMenu = showChainMenu && <ChainMenuWidget />;\n const walletConnect = !hideWalletConnectButton && (\n <WalletConnectButtonExtension />\n );\n\n const mainNav = (\n <>\n <MainNavMenusExtension\n {...props.mainMenus}\n classNames={classNames?.mainNav}\n />\n {!!showCampaignButton && (\n <CampaignButton\n {...campaigns}\n className={classNames?.campaignButton}\n />\n )}\n </>\n );\n\n if (typeof props.customRender === \"function\") {\n return props.customRender?.({\n title,\n mainNav,\n accountSummary,\n linkDevice,\n languageSwitcher,\n subAccount,\n chainMenu,\n walletConnect,\n });\n }\n\n return (\n <>\n <Flex\n itemAlign={\"center\"}\n className={cn(\n \"oui-gap-3\",\n // let the left and right views show spacing when overlapping\n \"oui-overflow-hidden\",\n )}\n >\n {title}\n {props.leading}\n {mainNav}\n {props.trailing}\n </Flex>\n\n {children}\n\n <Flex itemAlign={\"center\"} className=\"oui-gap-2\">\n {accountSummary}\n {showLinkIcon && (\n <>\n <Divider direction=\"vertical\" className=\"oui-h-8\" intensity={8} />\n {linkDevice}\n </>\n )}\n {languageSwitcher}\n {subAccount}\n {chainMenu}\n {walletConnect}\n </Flex>\n </>\n );\n };\n\n return (\n <Flex\n width=\"100%\"\n as=\"header\"\n itemAlign={\"center\"}\n height={\"48px\"}\n justify={\"between\"}\n px={3}\n gapX={3}\n className={cn(\n \"oui-main-nav oui-font-semibold\",\n className,\n classNames?.root,\n )}\n >\n {renderContent()}\n </Flex>\n );\n};\n\nMainNav.displayName = \"MainNav\";\n","import React, { PropsWithChildren, ReactNode } from \"react\";\nimport { LeftNavProps } from \"../leftNav/leftNav.type\";\nimport { MainNavClassNames } from \"./mainMenus/mainNavMenus.ui\";\nimport { MainNavItem } from \"./mainMenus/navItem\";\nimport { CampaignPositionEnum, useMainNavScript } from \"./mainNav.script\";\nimport { MainNav } from \"./mainNav.ui\";\n\nexport type MainNavWidgetProps = {\n leading?: ReactNode;\n trailing?: ReactNode;\n logo?: {\n src: string;\n alt: string;\n };\n mainMenus?: MainNavItem[];\n /** @deprecated use mainMenus instead */\n campaigns?: MainNavItem;\n /** @deprecated use mainMenus instead */\n campaignPosition?: CampaignPositionEnum;\n /**\n * initial menu path, if it has submenus, use array\n * @type string | string[]\n */\n initialMenu?: string | string[];\n\n onItemClick?: (options: {\n href: string;\n name: string;\n scope?: string;\n }) => void;\n\n /** only works on mobile */\n leftNav?: LeftNavProps;\n customLeftNav?: ReactNode;\n className?: string;\n classNames?: {\n root?: string;\n mainNav?: MainNavClassNames;\n // subNav?: string;\n logo?: string;\n account?: string;\n chains?: string;\n campaignButton?: string;\n };\n\n /** custom render main nav */\n customRender?: (components: {\n /** Logo or title component (desktop & mobile) */\n title?: ReactNode;\n /** Language selection component (desktop & mobile) */\n languageSwitcher?: ReactNode;\n /** Sub-account component (desktop & mobile) */\n subAccount?: ReactNode;\n /** Device linking component (desktop & mobile) */\n linkDevice?: ReactNode;\n /** Chain selection menu (desktop & mobile) */\n chainMenu?: ReactNode;\n /** Wallet connection component (desktop & mobile) */\n walletConnect?: ReactNode;\n\n /** Main navigation menu (desktop & mobile) */\n mainNav?: ReactNode;\n /** Account summary component (desktop only) */\n accountSummary?: ReactNode;\n\n /** Left navigation component (mobile only) */\n leftNav?: ReactNode;\n /** QR code scanner component (mobile only) */\n scanQRCode?: ReactNode;\n }) => ReactNode;\n};\n\nexport const MainNavWidget: React.FC<PropsWithChildren<MainNavWidgetProps>> = (\n props,\n) => {\n const { children, classNames, ...rest } = props;\n const state = useMainNavScript(rest);\n return (\n <MainNav classNames={classNames} {...state}>\n {children}\n </MainNav>\n );\n};\n","export { AccountMenuWidget } from \"./menu.widget\";\nexport { AccountMenu } from \"./menu.ui\";\n","export { AccountMenuWidget } from \"./components/accountMenu\";\nexport {\n MainNavWidget,\n type MainNavWidgetProps,\n} from \"./components/main/mainNav.widget\";\nexport { MainNavMobile } from \"./components/main/mainNav.ui.mobile\";\nexport {\n BottomNavWidget,\n BottomNav,\n type BottomNavProps,\n} from \"./components/bottomNav\";\nexport { AccountSummaryWidget } from \"./components/accountSummary\";\nexport { ChainMenuWidget, ChainMenu } from \"./components/chainMenu\";\nexport { SideNavbarWidget, SideBar } from \"./components/sidebar\";\nexport { CampaignPositionEnum } from \"./components/main/mainNav.script\";\n\nexport * from \"./components/subAccount\";\n\nexport * from \"./components/footer\";\nexport * from \"./components/maintenanceTips\";\nexport * from \"./components/announcement\";\nexport * from \"./components/restrictedInfo\";\n\nexport type { SideBarProps, SideMenuItem } from \"./components/sidebar\";\n\n// ----------------- Main layout component -----------------\nexport {\n Scaffold,\n type ScaffoldProps,\n useScaffoldContext,\n ScaffoldContext,\n type RouteOption,\n type RouterAdapter,\n} from \"./components/scaffold\";\n\nexport { MainLogo } from \"./components/main/mainLogo\";\nexport * from \"./components/languageSwitcher\";\nexport * from \"./components/scanQRCode\";\nexport * from \"./components/leftNav\";\n","import {\n Box,\n cn,\n Dialog,\n DialogBody,\n DialogContent,\n DialogHeader,\n DialogTitle,\n Divider,\n Flex,\n} from \"@kodiak-finance/orderly-ui\";\nimport { CloseIcon, InfoIcon } from \"../icons\";\nimport { MaintenanceTipInterface } from \"./script\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport const MaintenanceTipsUI = (props: MaintenanceTipInterface) => {\n const { showTips, showDialog, tipsContent, closeTips, dialogContent } = props;\n const { t } = useTranslation();\n\n if (showDialog) {\n return (\n <Dialog open={true}>\n <DialogContent\n closable={false}\n onOpenAutoFocus={(event) => event.preventDefault()}\n className=\"oui-w-[320px] md:oui-w-auto\"\n >\n <DialogHeader>\n <DialogTitle>{t(\"maintenance.dialog.title\")}</DialogTitle>\n </DialogHeader>\n <Divider />\n <DialogBody className=\"oui-text-2xs md:oui-text-xs\">\n {dialogContent}\n </DialogBody>\n </DialogContent>\n </Dialog>\n );\n }\n if (!showTips) {\n return <></>;\n }\n return (\n <Flex\n className={cn(\n \"oui-bg-warning-darken/10 oui-text-warning-darken oui-text-2xs md:oui-text-sm oui-relative oui-gap-1\",\n \"oui-mx-1 md:oui-mx-0 md:oui-w-full oui-pl-2 md:oui-pl-4 oui-pr-9 md:oui-pr-[60px] oui-py-2 md:oui-py-3\",\n \"oui-leading-4\",\n \"oui-rounded-xl md:oui-rounded-none\",\n \"oui-min-h-[48px]\",\n \"oui-justify-start oui-items-start\",\n \"xl:oui-justify-center xl:oui-items-center xl:oui-px-4\"\n )}\n >\n <div className=\"oui-flex oui-items-start oui-justify-start oui-gap-1 \">\n <InfoIcon\n size={20}\n className=\"oui-flex-shrink-0 oui-w-4 md:oui-w-5 oui-h-4 md:oui-h-5 \"\n />\n <Box className=\"oui-font-semibold oui-leading-4\">{tipsContent}</Box>\n </div>\n <CloseIcon\n size={16}\n className=\"oui-absolute oui-right-2 md:oui-right-4 oui-text-secondary/[0.36] hover:oui-text-secondary/80 oui-cursor-pointer -oui-translate-y-2/4 oui-top-2/4\"\n onClick={closeTips}\n />\n </Flex>\n );\n};\n","import { useMaintenanceStatus } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { format } from \"date-fns\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nfunction getTimeString(timestamp: number) {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n}\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nexport interface MaintenanceTipInterface {\n tipsContent: string;\n showTips: boolean;\n closeTips: () => void;\n showDialog: boolean;\n dialogContent?: string;\n}\n\nexport const useMaintenanceScript = (): MaintenanceTipInterface => {\n const { t } = useTranslation();\n const [showTips, setShowTips] = useState(false);\n const [showDialog, setShowDialog] = useState(false);\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n const startDate = useMemo(() => {\n if (!startTime) {\n return \"-\";\n }\n return getTimeString(startTime);\n }, [startTime]);\n\n const endDate = useMemo(() => {\n if (!endTime) {\n return \"-\";\n }\n return getTimeString(endTime);\n }, [endTime]);\n\n const closeTips = () => {\n window.localStorage.setItem(`Maintenance_${startTime}`, \"1\");\n setShowTips(false);\n };\n\n useEffect(() => {\n console.log(\"-- start time\", {\n startTime,\n status,\n });\n if (status === 2) {\n setShowTips(false);\n setShowDialog(true);\n return;\n }\n setShowDialog(false);\n if (startTime) {\n if (startTime < getTimestamp() + oneDay) {\n // check localstorage\n if (!window.localStorage.getItem(`Maintenance_${startTime}`)) {\n setShowTips(true);\n }\n }\n }\n }, [startTime, status]);\n\n const tipsContent = t(\"maintenance.tips.description\", {\n brokerName,\n startDate,\n endDate,\n });\n\n const dialogContent = t(\"maintenance.dialog.description\", {\n brokerName,\n endDate,\n });\n\n return {\n tipsContent,\n showTips,\n closeTips,\n showDialog,\n dialogContent,\n };\n};\n","import { MaintenanceTipsUI } from \"./ui\";\nimport { useMaintenanceScript } from \"./script\";\n\nexport const MaintenanceTipsWidget = () => {\n const props = useMaintenanceScript();\n return <MaintenanceTipsUI {...props} />;\n};\n","export const useLeftNavState = () => {\n return {};\n};\n\nexport type LeftNavState = ReturnType<typeof useLeftNavState>;\n","import { FC } from \"react\";\nimport { useLeftNavState } from \"./leftNav.script\";\nimport { LeftNavProps } from \"./leftNav.type\";\n\nexport const LeftNavWidget: FC<LeftNavProps> = (props) => {\n const state = useLeftNavState();\n return <div>LeftNavWidget</div>;\n};\n","export * from \"./leftNav.type\";\nexport * from \"./leftNav.widget\";\nexport * from \"./leftNav.ui\";\n"]}