@n1xyz/wallet-widget 0.0.12 → 0.0.15
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/Logic/sessionManager.d.ts +0 -36
- package/dist/Logic/sessionManager.js +1 -146
- package/dist/Logic/sessionManager.js.map +1 -1
- package/dist/Modal/LoadingFallback.js +1 -1
- package/dist/Modal/LoadingFallback.js.map +1 -1
- package/dist/Modal/N1WalletModal.js +6 -5
- package/dist/Modal/N1WalletModal.js.map +1 -1
- package/dist/Modal/NTSFlow/LoadingFallback.js +1 -1
- package/dist/Modal/NTSFlow/LoadingFallback.js.map +1 -1
- package/dist/Modal/NTSFlow/components/BackButton.js +1 -1
- package/dist/Modal/NTSFlow/components/BackButton.js.map +1 -1
- package/dist/Modal/NTSFlow/components/ModalHeader.js +1 -1
- package/dist/Modal/NTSFlow/components/ModalHeader.js.map +1 -1
- package/dist/Modal/NTSFlow/views/ConnectView.js +2 -2
- package/dist/Modal/NTSFlow/views/ConnectView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateSessionView.js +5 -5
- package/dist/Modal/NTSFlow/views/CreateSessionView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateUserView.js +1 -1
- package/dist/Modal/NTSFlow/views/CreateUserView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/NoWhitelistView.js +3 -3
- package/dist/Modal/NTSFlow/views/NoWhitelistView.js.map +1 -1
- package/dist/Modal/NTSFlow/views/SigningView.js +1 -1
- package/dist/Modal/NTSFlow/views/SigningView.js.map +1 -1
- package/dist/Modal/NordFlow/NordFlow.js +2 -2
- package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
- package/dist/Modal/NordFlow/components/ChainButton.js +5 -5
- package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/EVMChainsButton.js +4 -4
- package/dist/Modal/NordFlow/components/EVMChainsButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/Header.js +1 -1
- package/dist/Modal/NordFlow/components/Header.js.map +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js +1 -1
- package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
- package/dist/Modal/NordFlow/components/LoadingSquares.js +1 -1
- package/dist/Modal/NordFlow/components/LoadingSquares.js.map +1 -1
- package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
- package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
- package/dist/Modal/NordFlow/components/TransactionTable.js +6 -6
- package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.js +1 -1
- package/dist/Modal/NordFlow/components/WaitingMessage.js.map +1 -1
- package/dist/Modal/NordFlow/context/DepositContext.js +1 -4
- package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
- package/dist/Modal/NordFlow/context/WalletConnectContext.js +0 -2
- package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -1
- package/dist/Modal/NordFlow/screens/00-IdleScreen.js +1 -1
- package/dist/Modal/NordFlow/screens/00-IdleScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +3 -3
- package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/02-EvmWalletAuthScreen.js +4 -4
- package/dist/Modal/NordFlow/screens/02-EvmWalletAuthScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/03-ChainSelectionScreen.js +2 -2
- package/dist/Modal/NordFlow/screens/03-ChainSelectionScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js +4 -22
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/05-DepositProgressScreen.js +1 -1
- package/dist/Modal/NordFlow/screens/05-DepositProgressScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/06-DepositSuccessScreen.js +4 -5
- package/dist/Modal/NordFlow/screens/06-DepositSuccessScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/07-AuthLoadingScreen.js +3 -3
- package/dist/Modal/NordFlow/screens/07-AuthLoadingScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js +2 -2
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/09-ErrorScreen.js +2 -2
- package/dist/Modal/NordFlow/screens/09-ErrorScreen.js.map +1 -1
- package/dist/Modal/Sidebar/N1Sidebar.js +10 -10
- package/dist/Modal/Sidebar/N1Sidebar.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.js +3 -3
- package/dist/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/NordTradingView.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/NordTradingView.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookHeader.js +4 -4
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookHeader.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookTable.js +6 -6
- package/dist/Modal/Sidebar/NordTradingView/OrderBook/OrderBookTable.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/AmountInput.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/AmountInput.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/BuySellTabs.js +3 -3
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/BuySellTabs.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/FillModeSelector.js +7 -7
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/FillModeSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/OrderTypeSelector.js +13 -13
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/OrderTypeSelector.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/PriceInput.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/PriceInput.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/SubmitButton.js +2 -2
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/SubmitButton.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TotalCalculator.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TotalCalculator.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TradeForm.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/TradeForm/TradeForm.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserBalances/UserBalances.js +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserBalances/UserBalances.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.js +5 -5
- package/dist/Modal/Sidebar/NordTradingView/UserOrders/UserOrders.js.map +1 -1
- package/dist/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.js +4 -4
- package/dist/Modal/Sidebar/NordTradingView/UserPositions/UserPositions.js.map +1 -1
- package/dist/Provider/LazyWalletProvider.js +3 -3
- package/dist/Provider/LazyWalletProvider.js.map +1 -1
- package/dist/Provider/N1WalletProvider.js +11 -21
- package/dist/Provider/N1WalletProvider.js.map +1 -1
- package/dist/Provider/hooks/useNordUserInitialization.d.ts +1 -20
- package/dist/Provider/hooks/useNordUserInitialization.js +5 -5
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/WidgetButton/N1ConnectButton.js +1 -1
- package/dist/WidgetButton/N1ConnectButton.js.map +1 -1
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/QRCodeLoader.js +1 -1
- package/dist/components/QRCodeLoader.js.map +1 -1
- package/dist/components/logos/EVMChainsGroup.js +1 -1
- package/dist/components/logos/EVMChainsGroup.js.map +1 -1
- package/dist/components/logos/MoreChainsGroup.js +1 -1
- package/dist/components/logos/MoreChainsGroup.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.css +2 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"N1Sidebar.js","sourceRoot":"","sources":["../../../src/Modal/Sidebar/N1Sidebar.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,EACL,SAAS,EACT,OAAO,EACP,CAAC,EACD,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAW,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,eAAe,MAAM,mCAAmC,CAAC;AAEhE,MAAM,UAAU,SAAS,CAAC,CAAM;IAAhC,iBAseC;IAreC,mBAAmB;IACb,IAAA,KAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,QAAA,EAAE,UAAU,QAAmB,CAAC;IACxC,IAAA,KAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,QAAA,EAAE,UAAU,QAAmB,CAAC;IACxC,IAAA,KAA4B,QAAQ,CAAC,KAAK,CAAC,EAA1C,SAAS,QAAA,EAAE,YAAY,QAAmB,CAAC;IAC5C,IAAA,KAAwB,QAAQ,CAAC,EAAE,CAAC,EAAnC,OAAO,QAAA,EAAE,UAAU,QAAgB,CAAC;IACrC,IAAA,KAAoC,QAAQ,CAAC,KAAK,CAAC,EAAlD,aAAa,QAAA,EAAE,gBAAgB,QAAmB,CAAC;IACpD,IAAA,KAAgC,QAAQ,CAAC,EAAE,CAAC,EAA3C,WAAW,QAAA,EAAE,cAAc,QAAgB,CAAC;IAC7C,IAAA,KAAgC,QAAQ,CAAC,EAAE,CAAC,EAA3C,WAAW,QAAA,EAAE,cAAc,QAAgB,CAAC;IAC7C,IAAA,KAAsB,QAAQ,CAAC,EAAE,CAAC,EAAjC,MAAM,QAAA,EAAE,SAAS,QAAgB,CAAC;IACnC,IAAA,KAA0C,QAAQ,CAAC,EAAE,CAAC,EAArD,gBAAgB,QAAA,EAAE,mBAAmB,QAAgB,CAAC;IACvD,IAAA,KAAoB,QAAQ,CAAC,EAAE,CAAC,EAA/B,KAAK,QAAA,EAAE,QAAQ,QAAgB,CAAC;IACjC,IAAA,KAAkC,QAAQ,CAAC,KAAK,CAAC,EAAhD,YAAY,QAAA,EAAE,eAAe,QAAmB,CAAC;IAClD,IAAA,KAAgC,QAAQ,CAE5C,UAAU,CAAC,EAFN,WAAW,QAAA,EAAE,cAAc,QAErB,CAAC;IAEd,gBAAgB;IACV,IAAA,KASF,kBAAkB,EAAE,EARtB,QAAQ,cAAA,EACR,WAAW,iBAAA,EACX,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,YAAY,kBAAA,EACZ,aAAa,mBAAA,EACb,yBAAyB,+BAAA,EACzB,WAAW,iBACW,CAAC;IAEnB,IAAA,KAQF,0BAA0B,EAAE,EAP9B,cAAc,oBAAA,EACd,WAAW,iBAAA,EACX,oBAAoB,0BAAA,EACpB,mBAAmB,yBAAA,EACnB,WAAW,iBAAA,EACX,WAAW,iBAAA,EACX,cAAc,oBACgB,CAAC;IAEjC,oBAAoB;IACpB,IAAM,gBAAgB,GAAG;QACvB,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,cAAc,CAAC,EAAE,CAAC,CAAC;QACnB,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACxB,cAAc,CAAC,EAAE,CAAC,CAAC;QACnB,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,CAAC;IAEF,IAAM,WAAW,GAAG;QAClB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG;QACjB,mBAAmB,EAAE,CAAC;QACtB,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACrC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,gBAAgB,GAAG;QACvB,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,UAAU;IACV,SAAS,CAAC;QACR,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC;QACR,IAAI,OAAuB,CAAC;QAC5B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,UAAU,CAAC;gBACnB,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,OAAO,cAAM,OAAA,YAAY,CAAC,OAAO,CAAC,EAArB,CAAqB,CAAC;IACrC,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC;QACR,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC;YAChC,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/B,sBAAsB;IACtB,IAAM,UAAU,GAAG,UAAO,CAAkB;;;;;oBAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAEb,IAAI,CAAC,aAAa,IAAI,CAAC,yBAAyB,IAAI,CAAC,YAAY;wBAAE,sBAAO;oBAE1E,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACjD,QAAQ,CAAC,0BAA0B,CAAC,CAAC;wBACrC,UAAU,CAAC,cAAM,OAAA,QAAQ,CAAC,EAAE,CAAC,EAAZ,CAAY,EAAE,IAAI,CAAC,CAAC;wBACrC,sBAAO;oBACT,CAAC;oBAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjD,QAAQ,CAAC,mCAAmC,CAAC,CAAC;wBAC9C,UAAU,CAAC,cAAM,OAAA,QAAQ,CAAC,EAAE,CAAC,EAAZ,CAAY,EAAE,IAAI,CAAC,CAAC;wBACrC,sBAAO;oBACT,CAAC;oBAED,gBAAgB,CAAC,IAAI,CAAC,CAAC;;;;oBAGT,qBAAM,YAAY,EAAE,EAAA;;oBAA1B,GAAG,GAAG,SAAoB;oBAC1B,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,OAAQ,CAAC,CAAC;oBAC3C,qBAAM,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,EAAA;;oBAAtC,GAAG,GAAG,SAAgC;oBACtC,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAClC,OAAO,CAAC,GAAG,CAAC,OAAQ,EACpB,WAAW,EACX,GAAG,EACH,YAAY,EACZ,aAAa,EACb,yBAAyB,CAC1B,CAAC;oBAEF,qBAAO,SAAiB,CAAC,UAAU,CAAC,CAClC,MAAM,EACN,WAAW,EACX,gBAAgB,CACjB,EAAA;;oBAJD,SAIC,CAAC;oBAEe,qBAAM,eAAe,CAAC,OAAO,CAAC,EAAA;;oBAAzC,aAAW,SAA8B;oBAC/C,WAAW,CAAC,UAAQ,CAAC,CAAC;oBAEtB,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBACxB,UAAU,CAAC,2BAA2B,CAAC,CAAC;oBACxC,UAAU,CAAC;wBACT,UAAU,CAAC,KAAK,CAAC,CAAC;wBAClB,gBAAgB,EAAE,CAAC;oBACrB,CAAC,EAAE,IAAI,CAAC,CAAC;;;;oBAET,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAK,CAAC,CAAC;oBAC7C,QAAQ,CAAC,yCAAyC,CAAC,CAAC;oBACpD,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBACxB,UAAU,CAAC,cAAM,OAAA,QAAQ,CAAC,EAAE,CAAC,EAAZ,CAAY,EAAE,IAAI,CAAC,CAAC;;;;;SAExC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,+KACT,CAAC,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,cAC9C,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAE,aAE1C,WAAW,IAAI,CACd,cACE,SAAS,EAAC,sCAAsC,EAChD,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,IAAI,CAAC,EAAhB,CAAgB,GAC/B,CACH,EACA,WAAW,IAAI,CACd,eACE,SAAS,EAAE,2LACT,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,cAC5C,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAE,aAG7C,eAAK,SAAS,EAAC,iGAAiG,aAC9G,eAAK,SAAS,EAAC,yBAAyB,aACrC,WAAW,KAAK,UAAU,IAAI,CAC7B,iBACE,OAAO,EAAE;4CACP,cAAc,CAAC,UAAU,CAAC,CAAC;4CAC3B,gBAAgB,EAAE,CAAC;wCACrB,CAAC,EACD,SAAS,EAAC,kHAAkH,YAE5H,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,GAChB,CACV,EACD,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,wBAAwB,GAClC,EACF,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,mDAAmD,YAChE,QAAQ,GACJ,EACP,eAAM,SAAS,EAAC,gDAAgD,YAC7D,cAAc,CAAC,OAAO,CAAC,GACnB,IACH,IACF,IACF,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBACE,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAC,0FAA0F,gBAElG,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,YAGtD,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CACxB,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CACxB,GACM,EACT,iBACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,0FAA0F,YAEpG,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACL,IACF,EAGN,cAAK,SAAS,EAAC,2CAA2C,YAExD,cAAK,SAAS,EAAC,WAAW,YACvB,WAAW,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CACpC,KAAC,eAAe,KAAG,CACpB,CAAC,CAAC,CAAC,CACF,8BACG,WAAW,KAAK,UAAU,IAAI,CAC7B,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,mCAAmC,aAChD,aAAI,SAAS,EAAC,6DAA6D,yBAEtE,EACL,eAAK,SAAS,EAAC,gBAAgB,aAC7B,kBACE,OAAO,EAAE;oEACP,YAAY,CAAC,IAAI,CAAC,CAAC;oEACnB,UAAU,CAAC,KAAK,CAAC,CAAC;oEAClB,cAAc,CAAC,SAAS,CAAC,CAAC;gEAC5B,CAAC,EACD,SAAS,EAAC,sLAAsL,aAEhM,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,QAAQ,GAAG,eAEnC,EACT,kBACE,OAAO,EAAE;oEACP,UAAU,CAAC,IAAI,CAAC,CAAC;oEACjB,YAAY,CAAC,KAAK,CAAC,CAAC;oEACpB,cAAc,CAAC,MAAM,CAAC,CAAC;gEACzB,CAAC,EACD,SAAS,EAAC,sLAAsL,aAEhM,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,QAAQ,GAAG,YAEjC,IACL,IACF,EAGL,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,cAAK,SAAS,EAAC,WAAW,YACvB,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAgB,EAAE,KAAa,IAAK,OAAA,CACjD,eAEE,SAAS,EAAC,2IAA2I,aAErJ,0BACE,cAAK,SAAS,EAAC,mDAAmD,YAC/D,OAAO,CAAC,OAAO,GACZ,EACN,cAAK,SAAS,EAAC,gDAAgD,YAC5D,OAAO,CAAC,KAAK,GACV,IACF,EACN,eAAK,SAAS,EAAC,YAAY,aACzB,cAAK,SAAS,EAAC,mDAAmD,YAC/D,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GACvB,EACN,cAAK,SAAS,EAAC,gDAAgD,0BAEzD,IACF,KAlBD,KAAK,CAmBN,CACP,EAtBkD,CAsBlD,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qGAAqG,kCAE9G,CACP,IACG,CACP,EAGA,WAAW,KAAK,MAAM,IAAI,CACzB,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,mBAAmB,aAChC,iBACE,OAAO,EAAE;4DACP,cAAc,CAAC,UAAU,CAAC,CAAC;4DAC3B,gBAAgB,EAAE,CAAC;wDACrB,CAAC,EACD,SAAS,EAAC,gGAAgG,YAE1G,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,GAChB,EACT,aAAI,SAAS,EAAC,6DAA6D,4BAEtE,IACD,EAEL,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,oFAAoF,YAChG,KAAK,GACF,CACP,EAEA,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,4FAA4F,YACxG,OAAO,GACJ,CACP,EAED,gBAAM,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAC,WAAW,aAE/C,0BACE,gBAAO,SAAS,EAAC,uEAAuE,sBAEhF,EACR,kBACE,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAA9B,CAA8B,EAC/C,SAAS,EAAC,yJAAyJ,EACnK,QAAQ,mBAER,iBAAQ,KAAK,EAAC,EAAE,6BAAsB,EACrC,QAAQ;wEACP,QAAQ,CAAC,GAAG,CACV,UAAC,OAAgB,EAAE,KAAa,IAAK,OAAA,CACnC,kBAAoB,KAAK,EAAE,OAAO,CAAC,IAAI,aACpC,OAAO,CAAC,OAAO,QACf,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAFhB,KAAK,CAGT,CACV,EALoC,CAKpC,CACF,IACI,IACL,EAGL,WAAW,IAAI,CACd,0BACE,gBAAO,SAAS,EAAC,uEAAuE,uBAEhF,EACR,kBACE,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAA9B,CAA8B,EAC/C,SAAS,EAAC,yJAAyJ,EACnK,QAAQ,mBAER,iBAAQ,KAAK,EAAC,EAAE,8BAAuB,EACtC,QAAQ;wEACP,QAAQ;6EACL,MAAM,CACL,UAAC,OAAgB;4EACf,OAAA,OAAO,CAAC,IAAI,KAAK,WAAW;wEAA5B,CAA4B,CAC/B;6EACA,GAAG,CAAC,UAAC,OAAgB,EAAE,KAAa,IAAK,OAAA,CACxC,iBAAoB,KAAK,EAAE,OAAO,CAAC,KAAK,YACrC,OAAO,CAAC,KAAK,IADH,KAAK,CAET,CACV,EAJyC,CAIzC,CAAC,IACC,IACL,CACP,EAGD,0BACE,gBAAO,SAAS,EAAC,uEAAuE,uBAEhF,EACR,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAzB,CAAyB,EAC1C,SAAS,EAAC,yJAAyJ,EACnK,WAAW,EAAC,cAAc,EAC1B,QAAQ,SACR,IACE,EAGN,0BACE,gBAAO,SAAS,EAAC,uEAAuE,kCAEhF,EACR,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,UAAC,CAAC;oEACV,OAAA,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gEAAnC,CAAmC,EAErC,SAAS,EAAC,yJAAyJ,EACnK,WAAW,EAAC,yBAAyB,EACrC,QAAQ,SACR,IACE,EAGN,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,4EACT,aAAa;4DACX,CAAC,CAAC,8FAA8F;4DAChG,CAAC,CAAC,0CAA0C,CAC9C,YAED,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,GACtC,IACJ,IACH,CACP,EAGA,WAAW,KAAK,SAAS,IAAI,CAC5B,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,mBAAmB,aAChC,iBACE,OAAO,EAAE;4DACP,cAAc,CAAC,UAAU,CAAC,CAAC;4DAC3B,YAAY,CAAC,KAAK,CAAC,CAAC;wDACtB,CAAC,EACD,SAAS,EAAC,gGAAgG,YAE1G,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,GAChB,EACT,aAAI,SAAS,EAAC,6DAA6D,+BAEtE,IACD,EAEN,eAAK,SAAS,EAAC,oIAAoI,aACjJ,cAAK,SAAS,EAAC,8BAA8B,YAC3C,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,GAC9B,EACN,cAAK,SAAS,EAAC,qDAAqD,qCAE9D,EACN,cAAK,SAAS,EAAC,qFAAqF,YACjG,OAAO,GACJ,EACN,iBACE,OAAO,EAAE;4DACP,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;wDACzC,CAAC,EACD,SAAS,EAAC,kKAAkK,6BAGrK,IACL,IACF,CACP,IACA,CACJ,GACG,GACF,EAGN,cAAK,SAAS,EAAC,4HAA4H,YACzI,kBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,+LAA+L,aAEzM,cAAK,SAAS,EAAC,gDAAgD,YAC7D,eAAM,SAAS,EAAC,sIAAsI,2BAE/I,GACH,EACN,cAAK,SAAS,EAAC,mIAAmI,GAAO,IAClJ,GACL,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import BlockiesSvg from 'blockies-react-svg';\nimport QRCodeLoader from '../../components/QRCodeLoader';\nimport {\n ArrowDown,\n ArrowUp,\n X,\n ArrowLeft,\n Maximize2,\n Minimize2,\n} from 'lucide-react';\nimport { useEffect, useState } from 'react';\nimport { Balance, N1ModalViewMode, N1SessionMode } from '../../Provider/types';\nimport { shortenAddress } from '../../utils/shortenString';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../Provider/hooks';\nimport { importNTSSDK } from '../../utils/dynamicImports';\nimport { getUserBalances } from '../../Logic/utils';\nimport { logger } from '../../utils/logger';\nimport NordTradingView from './NordTradingView/NordTradingView';\n\nexport function N1Sidebar(_: any) {\n // State management\n const [closing, setClosing] = useState(false);\n const [sending, setSending] = useState(false);\n const [receiving, setReceiving] = useState(false);\n const [success, setSuccess] = useState('');\n const [activeSending, setActiveSending] = useState(false);\n const [tokenToSend, setTokenToSend] = useState('');\n const [appIdAction, setAppIdAction] = useState('');\n const [amount, setAmount] = useState('');\n const [recipientAddress, setRecipientAddress] = useState('');\n const [error, setError] = useState('');\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [currentView, setCurrentView] = useState<\n 'balances' | 'send' | 'receive'\n >('balances');\n\n // Context hooks\n const {\n username,\n isConnected,\n address,\n balances,\n walletPubKey,\n sessionPubKey,\n signMessageWithSessionKey,\n sessionMode,\n } = useN1WalletContext();\n\n const {\n setShowSidebar,\n showSidebar,\n setStartClosingLogin,\n dynamicHandleLogOut,\n setBalances,\n setViewMode,\n setIsConnected,\n } = useN1WalletInternalContext();\n\n // Utility functions\n const clearSendingForm = () => {\n setAmount('');\n setTokenToSend('');\n setRecipientAddress('');\n setAppIdAction('');\n setSuccess('');\n setError('');\n };\n\n const handleClose = () => {\n setClosing(true);\n setStartClosingLogin(true);\n window.location.reload();\n };\n\n const disconnect = () => {\n dynamicHandleLogOut();\n setViewMode(N1ModalViewMode.Connect);\n setIsConnected(false);\n handleClose();\n };\n\n const toggleFullscreen = () => {\n setIsFullscreen(!isFullscreen);\n };\n\n // Effects\n useEffect(() => {\n if (showSidebar) {\n setClosing(false);\n }\n }, [showSidebar]);\n\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (closing) {\n timeout = setTimeout(() => {\n setShowSidebar(false);\n setClosing(false);\n }, 700);\n }\n return () => clearTimeout(timeout);\n }, [closing, setShowSidebar]);\n\n useEffect(() => {\n if (!isConnected && showSidebar) {\n setShowSidebar(false);\n }\n }, [isConnected, showSidebar]);\n\n // Send tokens handler\n const handleSend = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n\n if (!sessionPubKey || !signMessageWithSessionKey || !walletPubKey) return;\n\n if (!tokenToSend || !amount || !recipientAddress) {\n setError('All fields are required.');\n setTimeout(() => setError(''), 2000);\n return;\n }\n\n if (isNaN(Number(amount)) || Number(amount) <= 0) {\n setError('Amount must be a positive number.');\n setTimeout(() => setError(''), 2000);\n return;\n }\n\n setActiveSending(true);\n\n try {\n const sdk = await importNTSSDK();\n const nts = new sdk.NTSInterface(process.env.NTS_URL!);\n const idl = await nts.getAppIdl(appIdAction);\n const appClient = new sdk.NAppClient(\n process.env.NTS_URL!,\n appIdAction,\n idl,\n walletPubKey,\n sessionPubKey,\n signMessageWithSessionKey\n );\n\n await (appClient as any)['transfer'](\n amount,\n tokenToSend,\n recipientAddress\n );\n\n const balances = await getUserBalances(address);\n setBalances(balances);\n\n setActiveSending(false);\n setSuccess('Tokens sent successfully!');\n setTimeout(() => {\n setSending(false);\n clearSendingForm();\n }, 2000);\n } catch (error) {\n logger.error('Error sending tokens:', error);\n setError('Error sending tokens. Please try again.');\n setActiveSending(false);\n setTimeout(() => setError(''), 2000);\n }\n };\n\n return (\n <div\n className={`fixed inset-0 bg-white/45 dark:bg-black/45 h-screen w-screen duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] z-[9999] flex items-stretch justify-end backdrop-blur-sm ${\n !showSidebar ? 'hidden pointer-events-none' : ''\n } ${closing ? 'opacity-0' : 'opacity-100'}`}\n >\n {showSidebar && (\n <div\n className=\"w-screen h-screen fixed top-0 left-0\"\n onClick={() => setClosing(true)}\n />\n )}\n {showSidebar && (\n <div\n className={`relative h-screen bg-n1-gray-50 dark:bg-n1-gray-950 shadow-xl border-l border-n1-gray-200 dark:border-n1-gray-800 duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] overflow-hidden ${\n closing ? 'translate-x-full' : 'translate-x-0'\n } ${isFullscreen ? 'w-screen' : 'w-[420px]'}`}\n >\n {/* Header */}\n <div className=\"flex justify-between items-center px-6 py-4 border-b border-n1-gray-200 dark:border-n1-gray-800\">\n <div className=\"flex items-center gap-4\">\n {currentView !== 'balances' && (\n <button\n onClick={() => {\n setCurrentView('balances');\n clearSendingForm();\n }}\n className=\"text-n1-gray-500 hover:text-red-500 dark:text-n1-gray-400 dark:hover:text-red-500 transition-colors duration-200\"\n >\n <ArrowLeft size={20} />\n </button>\n )}\n <div className=\"flex items-center gap-3\">\n <BlockiesSvg\n address={address}\n className=\"w-10 h-10 rounded-full\"\n />\n <div className=\"flex flex-col\">\n <span className=\"font-medium text-n1-gray-900 dark:text-n1-gray-50\">\n {username}\n </span>\n <span className=\"text-sm text-n1-gray-500 dark:text-n1-gray-400\">\n {shortenAddress(address)}\n </span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <button\n onClick={toggleFullscreen}\n className=\"text-n1-gray-400 hover:text-red-500 transition-colors duration-200 h-6 flex items-center\"\n aria-label={\n isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'\n }\n >\n {isFullscreen ? (\n <Minimize2 size={20} />\n ) : (\n <Maximize2 size={20} />\n )}\n </button>\n <button\n onClick={handleClose}\n className=\"text-n1-gray-400 hover:text-red-500 transition-colors duration-200 h-6 flex items-center\"\n >\n <X size={20} />\n </button>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"p-6 overflow-y-auto h-[calc(100vh-144px)]\">\n {/* Views */}\n <div className=\"space-y-4\">\n {sessionMode === N1SessionMode.Nord ? (\n <NordTradingView />\n ) : (\n <>\n {currentView === 'balances' && (\n <div className=\"space-y-4\">\n {/* Balances View */}\n <div className=\"flex justify-between items-center\">\n <h2 className=\"text-xl font-semibold text-n1-gray-900 dark:text-n1-gray-50\">\n Balances\n </h2>\n <div className=\"flex space-x-2\">\n <button\n onClick={() => {\n setReceiving(true);\n setSending(false);\n setCurrentView('receive');\n }}\n className=\"px-3 py-1.5 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200 flex items-center\"\n >\n <ArrowDown size={16} className=\"mr-1.5\" />\n Receive\n </button>\n <button\n onClick={() => {\n setSending(true);\n setReceiving(false);\n setCurrentView('send');\n }}\n className=\"px-3 py-1.5 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200 flex items-center\"\n >\n <ArrowUp size={16} className=\"mr-1.5\" />\n Send\n </button>\n </div>\n </div>\n\n {/* Balance List */}\n {balances && balances.length > 0 ? (\n <div className=\"space-y-3\">\n {balances.map((balance: Balance, index: number) => (\n <div\n key={index}\n className=\"p-4 bg-white dark:bg-n1-gray-900 rounded-xl shadow-sm border border-n1-gray-200 dark:border-n1-gray-800 flex justify-between items-center\"\n >\n <div>\n <div className=\"font-medium text-n1-gray-900 dark:text-n1-gray-50\">\n {balance.appType}\n </div>\n <div className=\"text-sm text-n1-gray-500 dark:text-n1-gray-400\">\n {balance.appId}\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"font-medium text-n1-gray-900 dark:text-n1-gray-50\">\n {balance.balance.toString()}\n </div>\n <div className=\"text-sm text-n1-gray-500 dark:text-n1-gray-400\">\n Available\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"p-4 bg-n1-gray-50 dark:bg-n1-gray-800 rounded-xl text-n1-gray-500 dark:text-n1-gray-400 text-center\">\n No balances found\n </div>\n )}\n </div>\n )}\n\n {/* Send View */}\n {currentView === 'send' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center\">\n <button\n onClick={() => {\n setCurrentView('balances');\n clearSendingForm();\n }}\n className=\"mr-3 text-n1-gray-500 hover:text-n1-gray-700 dark:text-n1-gray-400 dark:hover:text-n1-gray-200\"\n >\n <ArrowLeft size={20} />\n </button>\n <h2 className=\"text-xl font-semibold text-n1-gray-900 dark:text-n1-gray-50\">\n Send Tokens\n </h2>\n </div>\n\n {error && (\n <div className=\"p-4 bg-red-50 dark:bg-red-900/20 rounded-xl text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n )}\n\n {success && (\n <div className=\"p-4 bg-green-50 dark:bg-green-900/20 rounded-xl text-green-600 dark:text-green-400 text-sm\">\n {success}\n </div>\n )}\n\n <form onSubmit={handleSend} className=\"space-y-4\">\n {/* Token Selection */}\n <div>\n <label className=\"block text-sm font-medium text-n1-gray-700 dark:text-n1-gray-300 mb-1\">\n Token\n </label>\n <select\n value={tokenToSend}\n onChange={(e) => setTokenToSend(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-gray-100 dark:bg-n1-gray-800 rounded-lg text-n1-gray-900 dark:text-n1-gray-100 border border-n1-gray-200 dark:border-n1-gray-800\"\n required\n >\n <option value=\"\">Select Token</option>\n {balances &&\n balances.map(\n (balance: Balance, index: number) => (\n <option key={index} value={balance.mint}>\n {balance.appType} (\n {balance.balance.toString()})\n </option>\n )\n )}\n </select>\n </div>\n\n {/* App ID Selection */}\n {tokenToSend && (\n <div>\n <label className=\"block text-sm font-medium text-n1-gray-700 dark:text-n1-gray-300 mb-1\">\n App ID\n </label>\n <select\n value={appIdAction}\n onChange={(e) => setAppIdAction(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-gray-100 dark:bg-n1-gray-800 rounded-lg text-n1-gray-900 dark:text-n1-gray-100 border border-n1-gray-200 dark:border-n1-gray-800\"\n required\n >\n <option value=\"\">Select App ID</option>\n {balances &&\n balances\n .filter(\n (balance: Balance) =>\n balance.mint === tokenToSend\n )\n .map((balance: Balance, index: number) => (\n <option key={index} value={balance.appId}>\n {balance.appId}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Amount Input */}\n <div>\n <label className=\"block text-sm font-medium text-n1-gray-700 dark:text-n1-gray-300 mb-1\">\n Amount\n </label>\n <input\n type=\"text\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-gray-100 dark:bg-n1-gray-800 rounded-lg text-n1-gray-900 dark:text-n1-gray-100 border border-n1-gray-200 dark:border-n1-gray-800\"\n placeholder=\"Enter amount\"\n required\n />\n </div>\n\n {/* Recipient Address */}\n <div>\n <label className=\"block text-sm font-medium text-n1-gray-700 dark:text-n1-gray-300 mb-1\">\n Recipient Address\n </label>\n <input\n type=\"text\"\n value={recipientAddress}\n onChange={(e) =>\n setRecipientAddress(e.target.value)\n }\n className=\"w-full px-3 py-2 bg-n1-gray-100 dark:bg-n1-gray-800 rounded-lg text-n1-gray-900 dark:text-n1-gray-100 border border-n1-gray-200 dark:border-n1-gray-800\"\n placeholder=\"Enter recipient address\"\n required\n />\n </div>\n\n {/* Submit Button */}\n <button\n type=\"submit\"\n disabled={activeSending}\n className={`w-full py-3 rounded-xl font-medium transition-colors duration-200 ${\n activeSending\n ? 'bg-n1-gray-300 dark:bg-n1-gray-700 text-n1-gray-500 dark:text-n1-gray-400 cursor-not-allowed'\n : 'bg-blue-600 hover:bg-blue-700 text-white'\n }`}\n >\n {activeSending ? 'Sending...' : 'Send Tokens'}\n </button>\n </form>\n </div>\n )}\n\n {/* Receive View */}\n {currentView === 'receive' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center\">\n <button\n onClick={() => {\n setCurrentView('balances');\n setReceiving(false);\n }}\n className=\"mr-3 text-n1-gray-500 hover:text-n1-gray-700 dark:text-n1-gray-400 dark:hover:text-n1-gray-200\"\n >\n <ArrowLeft size={20} />\n </button>\n <h2 className=\"text-xl font-semibold text-n1-gray-900 dark:text-n1-gray-50\">\n Receive Tokens\n </h2>\n </div>\n\n <div className=\"p-4 bg-white dark:bg-n1-gray-900 rounded-xl shadow-sm border border-n1-gray-200 dark:border-n1-gray-800 flex flex-col items-center\">\n <div className=\"mb-4 bg-white p-2 rounded-lg\">\n <QRCodeLoader address={address} />\n </div>\n <div className=\"text-sm text-n1-gray-500 dark:text-n1-gray-400 mb-2\">\n Your wallet address:\n </div>\n <div className=\"font-mono text-sm text-n1-gray-900 dark:text-n1-gray-100 mb-4 break-all text-center\">\n {address}\n </div>\n <button\n onClick={() => {\n navigator.clipboard.writeText(address);\n }}\n className=\"px-4 py-2 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200\"\n >\n Copy Address\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"absolute bottom-0 left-0 right-0 p-6 border-t border-n1-gray-200 dark:border-n1-gray-800 bg-n1-gray-50 dark:bg-n1-gray-950\">\n <button\n onClick={disconnect}\n className=\"group relative w-full px-6 py-3 rounded-sm bg-white dark:bg-n1-gray-900 border border-n1-gray-200 dark:border-n1-gray-800 font-medium transition-all duration-300 ease-in-out overflow-hidden\"\n >\n <div className=\"relative z-10 flex items-center justify-center\">\n <span className=\"text-n1-gray-900 dark:text-n1-gray-100 group-hover:text-white dark:group-hover:text-white transition-colors duration-300 ease-in-out\">\n Disconnect\n </span>\n </div>\n <div className=\"absolute inset-0 bg-red-700 transform scale-x-0 group-hover:scale-x-100 transition-transform duration-300 ease-in-out origin-left\"></div>\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"N1Sidebar.js","sourceRoot":"","sources":["../../../src/Modal/Sidebar/N1Sidebar.tsx"],"names":[],"mappings":"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","sourcesContent":["import BlockiesSvg from 'blockies-react-svg';\nimport QRCodeLoader from '../../components/QRCodeLoader';\nimport {\n ArrowDown,\n ArrowUp,\n X,\n ArrowLeft,\n Maximize2,\n Minimize2,\n} from 'lucide-react';\nimport { useEffect, useState } from 'react';\nimport { Balance, N1ModalViewMode, N1SessionMode } from '../../Provider/types';\nimport { shortenAddress } from '../../utils/shortenString';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../Provider/hooks';\nimport { importNTSSDK } from '../../utils/dynamicImports';\nimport { getUserBalances } from '../../Logic/utils';\nimport { logger } from '../../utils/logger';\nimport NordTradingView from './NordTradingView/NordTradingView';\n\nexport function N1Sidebar(_: any) {\n // State management\n const [closing, setClosing] = useState(false);\n const [sending, setSending] = useState(false);\n const [receiving, setReceiving] = useState(false);\n const [success, setSuccess] = useState('');\n const [activeSending, setActiveSending] = useState(false);\n const [tokenToSend, setTokenToSend] = useState('');\n const [appIdAction, setAppIdAction] = useState('');\n const [amount, setAmount] = useState('');\n const [recipientAddress, setRecipientAddress] = useState('');\n const [error, setError] = useState('');\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [currentView, setCurrentView] = useState<\n 'balances' | 'send' | 'receive'\n >('balances');\n\n // Context hooks\n const {\n username,\n isConnected,\n address,\n balances,\n walletPubKey,\n sessionPubKey,\n signMessageWithSessionKey,\n sessionMode,\n } = useN1WalletContext();\n\n const {\n setShowSidebar,\n showSidebar,\n setStartClosingLogin,\n dynamicHandleLogOut,\n setBalances,\n setViewMode,\n setIsConnected,\n } = useN1WalletInternalContext();\n\n // Utility functions\n const clearSendingForm = () => {\n setAmount('');\n setTokenToSend('');\n setRecipientAddress('');\n setAppIdAction('');\n setSuccess('');\n setError('');\n };\n\n const handleClose = () => {\n setClosing(true);\n setStartClosingLogin(true);\n window.location.reload();\n };\n\n const disconnect = () => {\n dynamicHandleLogOut();\n setViewMode(N1ModalViewMode.Connect);\n setIsConnected(false);\n handleClose();\n };\n\n const toggleFullscreen = () => {\n setIsFullscreen(!isFullscreen);\n };\n\n // Effects\n useEffect(() => {\n if (showSidebar) {\n setClosing(false);\n }\n }, [showSidebar]);\n\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (closing) {\n timeout = setTimeout(() => {\n setShowSidebar(false);\n setClosing(false);\n }, 700);\n }\n return () => clearTimeout(timeout);\n }, [closing, setShowSidebar]);\n\n useEffect(() => {\n if (!isConnected && showSidebar) {\n setShowSidebar(false);\n }\n }, [isConnected, showSidebar]);\n\n // Send tokens handler\n const handleSend = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n\n if (!sessionPubKey || !signMessageWithSessionKey || !walletPubKey) return;\n\n if (!tokenToSend || !amount || !recipientAddress) {\n setError('All fields are required.');\n setTimeout(() => setError(''), 2000);\n return;\n }\n\n if (isNaN(Number(amount)) || Number(amount) <= 0) {\n setError('Amount must be a positive number.');\n setTimeout(() => setError(''), 2000);\n return;\n }\n\n setActiveSending(true);\n\n try {\n const sdk = await importNTSSDK();\n const nts = new sdk.NTSInterface(process.env.NTS_URL!);\n const idl = await nts.getAppIdl(appIdAction);\n const appClient = new sdk.NAppClient(\n process.env.NTS_URL!,\n appIdAction,\n idl,\n walletPubKey,\n sessionPubKey,\n signMessageWithSessionKey\n );\n\n await (appClient as any)['transfer'](\n amount,\n tokenToSend,\n recipientAddress\n );\n\n const balances = await getUserBalances(address);\n setBalances(balances);\n\n setActiveSending(false);\n setSuccess('Tokens sent successfully!');\n setTimeout(() => {\n setSending(false);\n clearSendingForm();\n }, 2000);\n } catch (error) {\n logger.error('Error sending tokens:', error);\n setError('Error sending tokens. Please try again.');\n setActiveSending(false);\n setTimeout(() => setError(''), 2000);\n }\n };\n\n return (\n <div\n className={`fixed inset-0 bg-white/45 dark:bg-black/45 h-screen w-screen duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] z-[9999] flex items-stretch justify-end backdrop-blur-sm ${\n !showSidebar ? 'hidden pointer-events-none' : ''\n } ${closing ? 'opacity-0' : 'opacity-100'}`}\n >\n {showSidebar && (\n <div\n className=\"w-screen h-screen fixed top-0 left-0\"\n onClick={() => setClosing(true)}\n />\n )}\n {showSidebar && (\n <div\n className={`relative h-screen bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950 shadow-xl border-l border-n1-ww-gray-200 dark:border-n1-ww-gray-800 duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] overflow-hidden ${\n closing ? 'translate-x-full' : 'translate-x-0'\n } ${isFullscreen ? 'w-screen' : 'w-[420px]'}`}\n >\n {/* Header */}\n <div className=\"flex justify-between items-center px-6 py-4 border-b border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <div className=\"flex items-center gap-4\">\n {currentView !== 'balances' && (\n <button\n onClick={() => {\n setCurrentView('balances');\n clearSendingForm();\n }}\n className=\"text-n1-ww-gray-500 hover:text-red-500 dark:text-n1-ww-gray-400 dark:hover:text-red-500 transition-colors duration-200\"\n >\n <ArrowLeft size={20} />\n </button>\n )}\n <div className=\"flex items-center gap-3\">\n <BlockiesSvg\n address={address}\n className=\"w-10 h-10 rounded-full\"\n />\n <div className=\"flex flex-col\">\n <span className=\"font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n {username}\n </span>\n <span className=\"text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n {shortenAddress(address)}\n </span>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <button\n onClick={toggleFullscreen}\n className=\"text-n1-ww-gray-400 hover:text-red-500 transition-colors duration-200 h-6 flex items-center\"\n aria-label={\n isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'\n }\n >\n {isFullscreen ? (\n <Minimize2 size={20} />\n ) : (\n <Maximize2 size={20} />\n )}\n </button>\n <button\n onClick={handleClose}\n className=\"text-n1-ww-gray-400 hover:text-red-500 transition-colors duration-200 h-6 flex items-center\"\n >\n <X size={20} />\n </button>\n </div>\n </div>\n\n {/* Main Content */}\n <div className=\"p-6 overflow-y-auto h-[calc(100vh-144px)]\">\n {/* Views */}\n <div className=\"space-y-4\">\n {sessionMode === N1SessionMode.Nord ? (\n <NordTradingView />\n ) : (\n <>\n {currentView === 'balances' && (\n <div className=\"space-y-4\">\n {/* Balances View */}\n <div className=\"flex justify-between items-center\">\n <h2 className=\"text-xl font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n Balances\n </h2>\n <div className=\"flex space-x-2\">\n <button\n onClick={() => {\n setReceiving(true);\n setSending(false);\n setCurrentView('receive');\n }}\n className=\"px-3 py-1.5 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200 flex items-center\"\n >\n <ArrowDown size={16} className=\"mr-1.5\" />\n Receive\n </button>\n <button\n onClick={() => {\n setSending(true);\n setReceiving(false);\n setCurrentView('send');\n }}\n className=\"px-3 py-1.5 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200 flex items-center\"\n >\n <ArrowUp size={16} className=\"mr-1.5\" />\n Send\n </button>\n </div>\n </div>\n\n {/* Balance List */}\n {balances && balances.length > 0 ? (\n <div className=\"space-y-3\">\n {balances.map((balance: Balance, index: number) => (\n <div\n key={index}\n className=\"p-4 bg-white dark:bg-n1-ww-gray-900 rounded-xl shadow-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 flex justify-between items-center\"\n >\n <div>\n <div className=\"font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n {balance.appType}\n </div>\n <div className=\"text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n {balance.appId}\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n {balance.balance.toString()}\n </div>\n <div className=\"text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Available\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"p-4 bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 rounded-xl text-n1-ww-gray-500 dark:text-n1-ww-gray-400 text-center\">\n No balances found\n </div>\n )}\n </div>\n )}\n\n {/* Send View */}\n {currentView === 'send' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center\">\n <button\n onClick={() => {\n setCurrentView('balances');\n clearSendingForm();\n }}\n className=\"mr-3 text-n1-ww-gray-500 hover:text-n1-ww-gray-700 dark:text-n1-ww-gray-400 dark:hover:text-n1-ww-gray-200\"\n >\n <ArrowLeft size={20} />\n </button>\n <h2 className=\"text-xl font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n Send Tokens\n </h2>\n </div>\n\n {error && (\n <div className=\"p-4 bg-red-50 dark:bg-red-900/20 rounded-xl text-red-600 dark:text-red-400 text-sm\">\n {error}\n </div>\n )}\n\n {success && (\n <div className=\"p-4 bg-green-50 dark:bg-green-900/20 rounded-xl text-green-600 dark:text-green-400 text-sm\">\n {success}\n </div>\n )}\n\n <form onSubmit={handleSend} className=\"space-y-4\">\n {/* Token Selection */}\n <div>\n <label className=\"block text-sm font-medium text-n1-ww-gray-700 dark:text-n1-ww-gray-300 mb-1\">\n Token\n </label>\n <select\n value={tokenToSend}\n onChange={(e) => setTokenToSend(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-ww-gray-100 dark:bg-n1-ww-gray-800 rounded-lg text-n1-ww-gray-900 dark:text-n1-ww-gray-100 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\"\n required\n >\n <option value=\"\">Select Token</option>\n {balances &&\n balances.map(\n (balance: Balance, index: number) => (\n <option key={index} value={balance.mint}>\n {balance.appType} (\n {balance.balance.toString()})\n </option>\n )\n )}\n </select>\n </div>\n\n {/* App ID Selection */}\n {tokenToSend && (\n <div>\n <label className=\"block text-sm font-medium text-n1-ww-gray-700 dark:text-n1-ww-gray-300 mb-1\">\n App ID\n </label>\n <select\n value={appIdAction}\n onChange={(e) => setAppIdAction(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-ww-gray-100 dark:bg-n1-ww-gray-800 rounded-lg text-n1-ww-gray-900 dark:text-n1-ww-gray-100 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\"\n required\n >\n <option value=\"\">Select App ID</option>\n {balances &&\n balances\n .filter(\n (balance: Balance) =>\n balance.mint === tokenToSend\n )\n .map((balance: Balance, index: number) => (\n <option key={index} value={balance.appId}>\n {balance.appId}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Amount Input */}\n <div>\n <label className=\"block text-sm font-medium text-n1-ww-gray-700 dark:text-n1-ww-gray-300 mb-1\">\n Amount\n </label>\n <input\n type=\"text\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n className=\"w-full px-3 py-2 bg-n1-ww-gray-100 dark:bg-n1-ww-gray-800 rounded-lg text-n1-ww-gray-900 dark:text-n1-ww-gray-100 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\"\n placeholder=\"Enter amount\"\n required\n />\n </div>\n\n {/* Recipient Address */}\n <div>\n <label className=\"block text-sm font-medium text-n1-ww-gray-700 dark:text-n1-ww-gray-300 mb-1\">\n Recipient Address\n </label>\n <input\n type=\"text\"\n value={recipientAddress}\n onChange={(e) =>\n setRecipientAddress(e.target.value)\n }\n className=\"w-full px-3 py-2 bg-n1-ww-gray-100 dark:bg-n1-ww-gray-800 rounded-lg text-n1-ww-gray-900 dark:text-n1-ww-gray-100 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\"\n placeholder=\"Enter recipient address\"\n required\n />\n </div>\n\n {/* Submit Button */}\n <button\n type=\"submit\"\n disabled={activeSending}\n className={`w-full py-3 rounded-xl font-medium transition-colors duration-200 ${\n activeSending\n ? 'bg-n1-ww-gray-300 dark:bg-n1-ww-gray-700 text-n1-ww-gray-500 dark:text-n1-ww-gray-400 cursor-not-allowed'\n : 'bg-blue-600 hover:bg-blue-700 text-white'\n }`}\n >\n {activeSending ? 'Sending...' : 'Send Tokens'}\n </button>\n </form>\n </div>\n )}\n\n {/* Receive View */}\n {currentView === 'receive' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center\">\n <button\n onClick={() => {\n setCurrentView('balances');\n setReceiving(false);\n }}\n className=\"mr-3 text-n1-ww-gray-500 hover:text-n1-ww-gray-700 dark:text-n1-ww-gray-400 dark:hover:text-n1-ww-gray-200\"\n >\n <ArrowLeft size={20} />\n </button>\n <h2 className=\"text-xl font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-50\">\n Receive Tokens\n </h2>\n </div>\n\n <div className=\"p-4 bg-white dark:bg-n1-ww-gray-900 rounded-xl shadow-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 flex flex-col items-center\">\n <div className=\"mb-4 bg-white p-2 rounded-lg\">\n <QRCodeLoader address={address} />\n </div>\n <div className=\"text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400 mb-2\">\n Your wallet address:\n </div>\n <div className=\"font-mono text-sm text-n1-ww-gray-900 dark:text-n1-ww-gray-100 mb-4 break-all text-center\">\n {address}\n </div>\n <button\n onClick={() => {\n navigator.clipboard.writeText(address);\n }}\n className=\"px-4 py-2 bg-blue-100 dark:bg-blue-900/20 hover:bg-blue-200 dark:hover:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-lg transition-colors duration-200\"\n >\n Copy Address\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"absolute bottom-0 left-0 right-0 p-6 border-t border-n1-ww-gray-200 dark:border-n1-ww-gray-800 bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950\">\n <button\n onClick={disconnect}\n className=\"group relative w-full px-6 py-3 rounded-sm bg-white dark:bg-n1-ww-gray-900 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 font-medium transition-all duration-300 ease-in-out overflow-hidden\"\n >\n <div className=\"relative z-10 flex items-center justify-center\">\n <span className=\"text-n1-ww-gray-900 dark:text-n1-ww-gray-100 group-hover:text-white dark:group-hover:text-white transition-colors duration-300 ease-in-out\">\n Disconnect\n </span>\n </div>\n <div className=\"absolute inset-0 bg-red-700 transform scale-x-0 group-hover:scale-x-100 transition-transform duration-300 ease-in-out origin-left\"></div>\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -30,14 +30,14 @@ export default function MarketSelector(_a) {
|
|
|
30
30
|
var filteredMarkets = ((_b = nord === null || nord === void 0 ? void 0 : nord.markets) === null || _b === void 0 ? void 0 : _b.filter(function (market) {
|
|
31
31
|
return market.symbol.toLowerCase().includes(searchQuery.toLowerCase());
|
|
32
32
|
})) || [];
|
|
33
|
-
return (_jsxs("div", { className: "relative w-full", ref: containerRef, children: [_jsxs("button", { ref: buttonRef, onClick: function () { return setIsOpen(!isOpen); }, className: "w-full flex items-center justify-between font-medium text-n1-gray-900 dark:text-n1-gray-100 transition-colors duration-200", children: [_jsx("span", { className: "truncate", children: selectedMarket || 'Select Market' }), _jsx(ChevronDown, { size: 16, className: "ml-2 transition-transform duration-200 ".concat(isOpen ? 'rotate-180 text-n1-main' : 'text-n1-gray-500 dark:text-n1-gray-400') })] }), isOpen && (_jsx("div", { ref: dropdownRef, className: "absolute right-0 top-full mt-1 bg-white dark:bg-n1-gray-950 rounded-[2px] shadow-lg border border-n1-gray-200 dark:border-n1-gray-800 overflow-hidden z-50 w-[250px] max-h-[300px]", children: _jsx("div", { className: "overflow-y-auto max-h-[300px]", children: filteredMarkets.length > 0 ? (filteredMarkets.map(function (market) { return (_jsx("button", { onClick: function () {
|
|
33
|
+
return (_jsxs("div", { className: "relative w-full", ref: containerRef, children: [_jsxs("button", { ref: buttonRef, onClick: function () { return setIsOpen(!isOpen); }, className: "w-full flex items-center justify-between font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 transition-colors duration-200", children: [_jsx("span", { className: "truncate", children: selectedMarket || 'Select Market' }), _jsx(ChevronDown, { size: 16, className: "ml-2 transition-transform duration-200 ".concat(isOpen ? 'rotate-180 text-n1-ww-main' : 'text-n1-ww-gray-500 dark:text-n1-ww-gray-400') })] }), isOpen && (_jsx("div", { ref: dropdownRef, className: "absolute right-0 top-full mt-1 bg-white dark:bg-n1-ww-gray-950 rounded-[2px] shadow-lg border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 overflow-hidden z-50 w-[250px] max-h-[300px]", children: _jsx("div", { className: "overflow-y-auto max-h-[300px]", children: filteredMarkets.length > 0 ? (filteredMarkets.map(function (market) { return (_jsx("button", { onClick: function () {
|
|
34
34
|
onMarketChange(market.symbol);
|
|
35
35
|
setIsOpen(false);
|
|
36
36
|
setSearchQuery('');
|
|
37
|
-
}, className: "w-full text-left px-4 py-2 hover:bg-n1-gray-50 dark:hover:bg-n1-gray-900 transition-colors duration-200 ".concat(selectedMarket === market.symbol
|
|
38
|
-
? 'border-l-2 border-n1-main text-n1-main dark:text-n1-main bg-n1-gray-50 dark:bg-n1-gray-950'
|
|
39
|
-
: 'text-n1-gray-900 dark:text-n1-gray-100'), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "font-medium", children: market.symbol }), market.change24h !== undefined && (_jsxs("span", { className: "text-sm ".concat(market.change24h >= 0
|
|
37
|
+
}, className: "w-full text-left px-4 py-2 hover:bg-n1-ww-gray-50 dark:hover:bg-n1-ww-gray-900 transition-colors duration-200 ".concat(selectedMarket === market.symbol
|
|
38
|
+
? 'border-l-2 border-n1-ww-main text-n1-ww-main dark:text-n1-ww-main bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950'
|
|
39
|
+
: 'text-n1-ww-gray-900 dark:text-n1-ww-gray-100'), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "font-medium", children: market.symbol }), market.change24h !== undefined && (_jsxs("span", { className: "text-sm ".concat(market.change24h >= 0
|
|
40
40
|
? 'text-green-500'
|
|
41
|
-
: 'text-red-500'), children: [market.change24h >= 0 ? '+' : '', market.change24h.toFixed(2), "%"] }))] }) }, market.symbol)); })) : (_jsx("div", { className: "px-4 py-3 text-sm text-n1-gray-500 dark:text-n1-gray-400", children: "No markets found" })) }) }))] }));
|
|
41
|
+
: 'text-red-500'), children: [market.change24h >= 0 ? '+' : '', market.change24h.toFixed(2), "%"] }))] }) }, market.symbol)); })) : (_jsx("div", { className: "px-4 py-3 text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "No markets found" })) }) }))] }));
|
|
42
42
|
}
|
|
43
43
|
//# sourceMappingURL=MarketSelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketSelector.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAa,MAAM,cAAc,CAAC;AAOtD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAGjB;;QAFpB,cAAc,oBAAA,EACd,cAAc,oBAAA;IAEN,IAAA,IAAI,GAAK,kBAAkB,EAAE,KAAzB,CAA0B;IAChC,IAAA,KAAsB,QAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,QAAA,EAAE,SAAS,QAAmB,CAAC;IACtC,IAAA,KAAgC,QAAQ,CAAC,EAAE,CAAC,EAA3C,WAAW,QAAA,EAAE,cAAc,QAAgB,CAAC;IACnD,IAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACjD,IAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAClD,IAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAElD,uCAAuC;IACvC,SAAS,CAAC;QACR,SAAS,kBAAkB,CAAC,KAAiB;YAC3C,IACE,WAAW,CAAC,OAAO;gBACnB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;gBACnD,SAAS,CAAC,OAAO;gBACjB,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACjD,CAAC;gBACD,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC3D,OAAO;YACL,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uCAAuC;IACvC,IAAM,eAAe,GACnB,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,0CAAE,MAAM,CAAC,UAAC,MAAM;QAC3B,OAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IAA/D,CAA+D,CAChE,KAAI,EAAE,CAAC;IAEV,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,EAAC,GAAG,EAAE,YAAY,aAChD,kBACE,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,cAAM,OAAA,SAAS,CAAC,CAAC,MAAM,CAAC,EAAlB,CAAkB,EACjC,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"MarketSelector.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/MarketOverview/MarketSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport { ChevronDown, Search, X } from 'lucide-react';\n\ninterface MarketSelectorProps {\n selectedMarket: string | null;\n onMarketChange: (market: string) => void;\n}\n\nexport default function MarketSelector({\n selectedMarket,\n onMarketChange,\n}: MarketSelectorProps) {\n const { nord } = useN1WalletContext();\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const dropdownRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n // Filter markets based on search query\n const filteredMarkets =\n nord?.markets?.filter((market) =>\n market.symbol.toLowerCase().includes(searchQuery.toLowerCase())\n ) || [];\n\n return (\n <div className=\"relative w-full\" ref={containerRef}>\n <button\n ref={buttonRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 transition-colors duration-200\"\n >\n <span className=\"truncate\">{selectedMarket || 'Select Market'}</span>\n <ChevronDown\n size={16}\n className={`ml-2 transition-transform duration-200 ${isOpen ? 'rotate-180 text-n1-ww-main' : 'text-n1-ww-gray-500 dark:text-n1-ww-gray-400'}`}\n />\n </button>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n className=\"absolute right-0 top-full mt-1 bg-white dark:bg-n1-ww-gray-950 rounded-[2px] shadow-lg border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 overflow-hidden z-50 w-[250px] max-h-[300px]\"\n >\n {/* Market list */}\n <div className=\"overflow-y-auto max-h-[300px]\">\n {filteredMarkets.length > 0 ? (\n filteredMarkets.map((market) => (\n <button\n key={market.symbol}\n onClick={() => {\n onMarketChange(market.symbol);\n setIsOpen(false);\n setSearchQuery('');\n }}\n className={`w-full text-left px-4 py-2 hover:bg-n1-ww-gray-50 dark:hover:bg-n1-ww-gray-900 transition-colors duration-200 ${\n selectedMarket === market.symbol\n ? 'border-l-2 border-n1-ww-main text-n1-ww-main dark:text-n1-ww-main bg-n1-ww-gray-50 dark:bg-n1-ww-gray-950'\n : 'text-n1-ww-gray-900 dark:text-n1-ww-gray-100'\n }`}\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{market.symbol}</span>\n {(market as any).change24h !== undefined && (\n <span\n className={`text-sm ${\n (market as any).change24h >= 0\n ? 'text-green-500'\n : 'text-red-500'\n }`}\n >\n {(market as any).change24h >= 0 ? '+' : ''}\n {(market as any).change24h.toFixed(2)}%\n </span>\n )}\n </div>\n </button>\n ))\n ) : (\n <div className=\"px-4 py-3 text-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n No markets found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -7,10 +7,10 @@ export default function MarketStats(_a) {
|
|
|
7
7
|
return (_jsx("div", { className: "bg-red-50 dark:bg-red-900/20 p-3 rounded-sm text-red-600 dark:text-red-400 text-sm border border-red-200 dark:border-red-900/30", children: error }));
|
|
8
8
|
}
|
|
9
9
|
if (!marketStats && !loading) {
|
|
10
|
-
return (_jsx("div", { className: "bg-n1-gray-50 dark:bg-n1-gray-800 p-3 rounded-sm text-n1-gray-500 dark:text-n1-gray-400 text-sm border border-n1-gray-200 dark:border-n1-gray-800", children: "Select a market to view statistics" }));
|
|
10
|
+
return (_jsx("div", { className: "bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 p-3 rounded-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400 text-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: "Select a market to view statistics" }));
|
|
11
11
|
}
|
|
12
|
-
return (_jsx("div", { className: "bg-n1-gray-50 dark:bg-n1-gray-800 p-3 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: loading && !marketStats ? (_jsx("div", { className: "flex items-center justify-center h-24", children: _jsx(RefreshCw, { size: 24, className: "text-n1-main n1-animate-spin" }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-base font-semibold text-n1-gray-900 dark:text-n1-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.symbol }), _jsxs("div", { className: "flex items-center", children: [_jsxs("span", { className: "text-xs font-medium px-2 py-1 rounded-sm ".concat((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) >= 0
|
|
12
|
+
return (_jsx("div", { className: "bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 p-3 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: loading && !marketStats ? (_jsx("div", { className: "flex items-center justify-center h-24", children: _jsx(RefreshCw, { size: 24, className: "text-n1-ww-main n1-ww-animate-spin" }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h3", { className: "text-base font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.symbol }), _jsxs("div", { className: "flex items-center", children: [_jsxs("span", { className: "text-xs font-medium px-2 py-1 rounded-sm ".concat((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) >= 0
|
|
13
13
|
? 'bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400 border border-green-200 dark:border-green-900/30'
|
|
14
|
-
: 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400 border border-red-200 dark:border-red-900/30'), children: [(marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) >= 0 ? (_jsx(ArrowUp, { size: 12, className: "inline mr-1" })) : (_jsx(ArrowDown, { size: 12, className: "inline mr-1" })), Math.abs((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) || 0).toFixed(2), "%"] }), loading && (_jsx(RefreshCw, { size: 14, className: "ml-2 text-n1-main n1-animate-spin" }))] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "Last Price" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: (_b = marketStats === null || marketStats === void 0 ? void 0 : marketStats.lastPrice) === null || _b === void 0 ? void 0 : _b.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "24h High" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: (_c = marketStats === null || marketStats === void 0 ? void 0 : marketStats.highPrice) === null || _c === void 0 ? void 0 : _c.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "24h Low" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: (_d = marketStats === null || marketStats === void 0 ? void 0 : marketStats.lowPrice) === null || _d === void 0 ? void 0 : _d.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "24h Volume" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 font-mono", children: (_e = marketStats === null || marketStats === void 0 ? void 0 : marketStats.volume) === null || _e === void 0 ? void 0 : _e.toFixed(2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "Base Asset" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.baseAsset })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-gray-950 p-2 rounded-sm border border-n1-gray-200 dark:border-n1-gray-800", children: [_jsx("span", { className: "text-xs text-n1-gray-500 dark:text-n1-gray-400", children: "Quote Asset" }), _jsx("span", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.quoteAsset })] })] })] })] })) }));
|
|
14
|
+
: 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400 border border-red-200 dark:border-red-900/30'), children: [(marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) >= 0 ? (_jsx(ArrowUp, { size: 12, className: "inline mr-1" })) : (_jsx(ArrowDown, { size: 12, className: "inline mr-1" })), Math.abs((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceChangePercent) || 0).toFixed(2), "%"] }), loading && (_jsx(RefreshCw, { size: 14, className: "ml-2 text-n1-ww-main n1-ww-animate-spin" }))] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "Last Price" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono", children: (_b = marketStats === null || marketStats === void 0 ? void 0 : marketStats.lastPrice) === null || _b === void 0 ? void 0 : _b.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "24h High" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono", children: (_c = marketStats === null || marketStats === void 0 ? void 0 : marketStats.highPrice) === null || _c === void 0 ? void 0 : _c.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "24h Low" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono", children: (_d = marketStats === null || marketStats === void 0 ? void 0 : marketStats.lowPrice) === null || _d === void 0 ? void 0 : _d.toFixed((marketStats === null || marketStats === void 0 ? void 0 : marketStats.priceDecimals) || 2) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "24h Volume" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono", children: (_e = marketStats === null || marketStats === void 0 ? void 0 : marketStats.volume) === null || _e === void 0 ? void 0 : _e.toFixed(2) })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "Base Asset" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.baseAsset })] }), _jsxs("div", { className: "flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800", children: [_jsx("span", { className: "text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: "Quote Asset" }), _jsx("span", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100", children: marketStats === null || marketStats === void 0 ? void 0 : marketStats.quoteAsset })] })] })] })] })) }));
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=MarketStats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketStats.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ7D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAIjB;;QAHjB,WAAW,iBAAA,EACX,OAAO,aAAA,EACP,KAAK,WAAA;IAEL,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,cAAK,SAAS,EAAC,iIAAiI,YAC7I,KAAK,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,CACL,cAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"MarketStats.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/MarketOverview/MarketStats.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ArrowDown, ArrowUp, RefreshCw } from 'lucide-react';\n\ninterface MarketStatsProps {\n marketStats: any;\n loading: boolean;\n error: string | null;\n}\n\nexport default function MarketStats({\n marketStats,\n loading,\n error,\n}: MarketStatsProps) {\n if (error) {\n return (\n <div className=\"bg-red-50 dark:bg-red-900/20 p-3 rounded-sm text-red-600 dark:text-red-400 text-sm border border-red-200 dark:border-red-900/30\">\n {error}\n </div>\n );\n }\n\n if (!marketStats && !loading) {\n return (\n <div className=\"bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 p-3 rounded-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400 text-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n Select a market to view statistics\n </div>\n );\n }\n\n return (\n <div className=\"bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 p-3 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n {loading && !marketStats ? (\n <div className=\"flex items-center justify-center h-24\">\n <RefreshCw size={24} className=\"text-n1-ww-main n1-ww-animate-spin\" />\n </div>\n ) : (\n <>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-base font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-100\">\n {marketStats?.symbol}\n </h3>\n <div className=\"flex items-center\">\n <span\n className={`text-xs font-medium px-2 py-1 rounded-sm ${\n marketStats?.priceChangePercent >= 0\n ? 'bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400 border border-green-200 dark:border-green-900/30'\n : 'bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400 border border-red-200 dark:border-red-900/30'\n }`}\n >\n {marketStats?.priceChangePercent >= 0 ? (\n <ArrowUp size={12} className=\"inline mr-1\" />\n ) : (\n <ArrowDown size={12} className=\"inline mr-1\" />\n )}\n {Math.abs(marketStats?.priceChangePercent || 0).toFixed(2)}%\n </span>\n {loading && (\n <RefreshCw size={14} className=\"ml-2 text-n1-ww-main n1-ww-animate-spin\" />\n )}\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Last Price\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono\">\n {marketStats?.lastPrice?.toFixed(\n marketStats?.priceDecimals || 2\n )}\n </span>\n </div>\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n 24h High\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono\">\n {marketStats?.highPrice?.toFixed(\n marketStats?.priceDecimals || 2\n )}\n </span>\n </div>\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n 24h Low\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono\">\n {marketStats?.lowPrice?.toFixed(\n marketStats?.priceDecimals || 2\n )}\n </span>\n </div>\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n 24h Volume\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 font-mono\">\n {marketStats?.volume?.toFixed(2)}\n </span>\n </div>\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Base Asset\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100\">\n {marketStats?.baseAsset}\n </span>\n </div>\n <div className=\"flex justify-between items-center bg-white dark:bg-n1-ww-gray-950 p-2 rounded-sm border border-n1-ww-gray-200 dark:border-n1-ww-gray-800\">\n <span className=\"text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n Quote Asset\n </span>\n <span className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100\">\n {marketStats?.quoteAsset}\n </span>\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -49,7 +49,7 @@ export default function NordTradingView() {
|
|
|
49
49
|
history: 'History',
|
|
50
50
|
};
|
|
51
51
|
return (_jsxs("div", { className: "space-y-4 @container", children: [_jsxs("div", { className: "flex flex-col @md:flex-row justify-between items-start @md:items-center bg-transparent mb-3 gap-3 @md:gap-0", children: [_jsx("div", { className: "flex justify-start gap-2 flex-wrap w-full @md:w-auto", children: ['orderbook', 'tradeform', 'positions', 'orders'].map(function (view) { return (_jsxs("button", { onClick: function () { return setActiveView(view); }, className: "\n relative px-4 @md:px-5 py-2 text-sm font-medium tracking-wide transition-all duration-150 \n border ".concat(activeView === view
|
|
52
|
-
? 'border-n1-main/80 text-n1-main bg-n1-main/[0.03] shadow-[0_0_0_1px_rgba(255,68,26,0.1)]'
|
|
53
|
-
: 'border-n1-gray-200 dark:border-n1-gray-800 text-n1-gray-500 dark:text-n1-gray-400 hover:border-n1-gray-300 dark:hover:border-n1-gray-700', "\n first:ml-0 last:mr-0 group rounded-[2px] overflow-hidden flex-grow @md:flex-grow-0\n "), children: [_jsx("span", { className: "relative z-10", children: viewLabels[view] }), _jsx("span", { className: "\n absolute inset-0 bg-n1-main/[0.02] opacity-0 transition-opacity duration-150\n ".concat(activeView !== view ? 'group-hover:opacity-100' : '', "\n ") })] }, view)); }) }), _jsx("div", { className: "min-w-[160px] w-full @md:w-auto border border-n1-gray-200 dark:border-n1-gray-800 rounded-[2px] overflow-visible hover:border-n1-gray-300 dark:hover:border-n1-gray-700 transition-colors duration-150 relative z-20", children: _jsx("div", { className: "px-5 py-2 text-sm", children: _jsx(MarketOverview, { selectedMarket: selectedMarket, onMarketChange: setSelectedMarket }) }) })] }), _jsx("div", { className: "border border-n1-gray-200 dark:border-n1-gray-800 rounded-[3px] shadow-sm bg-white dark:bg-n1-gray-950", children: renderActiveView() })] }));
|
|
52
|
+
? 'border-n1-ww-main/80 text-n1-ww-main bg-n1-ww-main/[0.03] shadow-[0_0_0_1px_rgba(255,68,26,0.1)]'
|
|
53
|
+
: 'border-n1-ww-gray-200 dark:border-n1-ww-gray-800 text-n1-ww-gray-500 dark:text-n1-ww-gray-400 hover:border-n1-ww-gray-300 dark:hover:border-n1-ww-gray-700', "\n first:ml-0 last:mr-0 group rounded-[2px] overflow-hidden flex-grow @md:flex-grow-0\n "), children: [_jsx("span", { className: "relative z-10", children: viewLabels[view] }), _jsx("span", { className: "\n absolute inset-0 bg-n1-ww-main/[0.02] opacity-0 transition-opacity duration-150\n ".concat(activeView !== view ? 'group-hover:opacity-100' : '', "\n ") })] }, view)); }) }), _jsx("div", { className: "min-w-[160px] w-full @md:w-auto border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-[2px] overflow-visible hover:border-n1-ww-gray-300 dark:hover:border-n1-ww-gray-700 transition-colors duration-150 relative z-20", children: _jsx("div", { className: "px-5 py-2 text-sm", children: _jsx(MarketOverview, { selectedMarket: selectedMarket, onMarketChange: setSelectedMarket }) }) })] }), _jsx("div", { className: "border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-[3px] shadow-sm bg-white dark:bg-n1-ww-gray-950", children: renderActiveView() })] }));
|
|
54
54
|
}
|
|
55
55
|
//# sourceMappingURL=NordTradingView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NordTradingView.js","sourceRoot":"","sources":["../../../../src/Modal/Sidebar/NordTradingView/NordTradingView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,aAAa,MAAM,+BAA+B,CAAC;AAC1D,OAAO,YAAY,MAAM,6BAA6B,CAAC;AAWvD,MAAM,CAAC,OAAO,UAAU,eAAe;IAC/B,IAAA,KAAkC,kBAAkB,EAAE,EAApD,WAAW,iBAAA,EAAE,IAAI,UAAA,EAAE,QAAQ,cAAyB,CAAC;IACvD,IAAA,KAAsC,QAAQ,CAAgB,IAAI,CAAC,EAAlE,cAAc,QAAA,EAAE,iBAAiB,QAAiC,CAAC;IACpE,IAAA,KAA8B,QAAQ,CAAW,WAAW,CAAC,EAA5D,UAAU,QAAA,EAAE,aAAa,QAAmC,CAAC;IAEpE,gFAAgF;IAChF,IAAI,WAAW,KAAK,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,SAAS,CAAC;QACR,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAEnC,mCAAmC;IACnC,IAAM,gBAAgB,GAAG;QACvB,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,WAAW;gBACd,OAAO,KAAC,SAAS,IAAC,YAAY,EAAE,cAAc,GAAI,CAAC;YACrD,KAAK,WAAW;gBACd,OAAO,KAAC,SAAS,IAAC,YAAY,EAAE,cAAc,GAAI,CAAC;YACrD,KAAK,QAAQ;gBACX,OAAO,KAAC,UAAU,KAAG,CAAC;YACxB,KAAK,WAAW;gBACd,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,aAAa,KAAG,EACjB,KAAC,YAAY,KAAG,IACZ,CACP,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO,KAAC,YAAY,KAAG,CAAC;YAC1B;gBACE,OAAO,KAAC,SAAS,IAAC,YAAY,EAAE,cAAc,GAAI,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;IAEF,kCAAkC;IAClC,IAAM,UAAU,GAA6B;QAC3C,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;KACnB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aAEnC,eAAK,SAAS,EAAC,6GAA6G,aAE1H,cAAK,SAAS,EAAC,sDAAsD,YAClE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,CAC/D,kBAEE,OAAO,EAAE,cAAM,OAAA,aAAa,CAAC,IAAgB,CAAC,EAA/B,CAA+B,EAC9C,SAAS,EAAE,+IAGP,UAAU,KAAK,IAAI;gCACjB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"NordTradingView.js","sourceRoot":"","sources":["../../../../src/Modal/Sidebar/NordTradingView/NordTradingView.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useN1WalletContext } from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport MarketOverview from './MarketOverview/MarketOverview';\nimport OrderBook from './OrderBook/OrderBook';\nimport TradeForm from './TradeForm/TradeForm';\nimport UserOrders from './UserOrders/UserOrders';\nimport UserPositions from './UserPositions/UserPositions';\nimport UserBalances from './UserBalances/UserBalances';\n\n// Define the available view types\ntype ViewType =\n | 'orderbook'\n | 'tradeform'\n | 'orders'\n | 'positions'\n | 'balances'\n | 'history';\n\nexport default function NordTradingView() {\n const { sessionMode, nord, nordUser } = useN1WalletContext();\n const [selectedMarket, setSelectedMarket] = useState<string | null>(null);\n const [activeView, setActiveView] = useState<ViewType>('orderbook');\n\n // Early return if not in Nord session mode or if Nord/NordUser is not available\n if (sessionMode !== N1SessionMode.Nord || !nord || !nordUser) {\n return null;\n }\n\n // Set default selected market if not already set and markets are available\n useEffect(() => {\n if (!selectedMarket && nord.markets && nord.markets.length > 0) {\n setSelectedMarket(nord.markets[0].symbol);\n }\n }, [nord.markets, selectedMarket]);\n\n // Render the active view component\n const renderActiveView = () => {\n switch (activeView) {\n case 'orderbook':\n return <OrderBook marketSymbol={selectedMarket} />;\n case 'tradeform':\n return <TradeForm marketSymbol={selectedMarket} />;\n case 'orders':\n return <UserOrders />;\n case 'positions':\n return (\n <div className=\"space-y-4\">\n <UserPositions />\n <UserBalances />\n </div>\n );\n case 'balances':\n return <UserBalances />;\n default:\n return <OrderBook marketSymbol={selectedMarket} />;\n }\n };\n\n // Map view types to display names\n const viewLabels: Record<ViewType, string> = {\n orderbook: 'Order Book',\n tradeform: 'Trade',\n positions: 'Positions',\n orders: 'Orders',\n balances: 'Balances',\n history: 'History',\n };\n\n return (\n <div className=\"space-y-4 @container\">\n {/* Navigation Bar - Combined Menu and Market Overview */}\n <div className=\"flex flex-col @md:flex-row justify-between items-start @md:items-center bg-transparent mb-3 gap-3 @md:gap-0\">\n {/* View Selector Tabs - Redesigned */}\n <div className=\"flex justify-start gap-2 flex-wrap w-full @md:w-auto\">\n {['orderbook', 'tradeform', 'positions', 'orders'].map((view) => (\n <button\n key={view}\n onClick={() => setActiveView(view as ViewType)}\n className={`\n relative px-4 @md:px-5 py-2 text-sm font-medium tracking-wide transition-all duration-150 \n border ${\n activeView === view\n ? 'border-n1-ww-main/80 text-n1-ww-main bg-n1-ww-main/[0.03] shadow-[0_0_0_1px_rgba(255,68,26,0.1)]'\n : 'border-n1-ww-gray-200 dark:border-n1-ww-gray-800 text-n1-ww-gray-500 dark:text-n1-ww-gray-400 hover:border-n1-ww-gray-300 dark:hover:border-n1-ww-gray-700'\n }\n first:ml-0 last:mr-0 group rounded-[2px] overflow-hidden flex-grow @md:flex-grow-0\n `}\n >\n <span className=\"relative z-10\">\n {viewLabels[view as ViewType]}\n </span>\n <span\n className={`\n absolute inset-0 bg-n1-ww-main/[0.02] opacity-0 transition-opacity duration-150\n ${activeView !== view ? 'group-hover:opacity-100' : ''}\n `}\n />\n </button>\n ))}\n </div>\n\n {/* Market Overview - Styled to match the menu */}\n <div className=\"min-w-[160px] w-full @md:w-auto border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-[2px] overflow-visible hover:border-n1-ww-gray-300 dark:hover:border-n1-ww-gray-700 transition-colors duration-150 relative z-20\">\n <div className=\"px-5 py-2 text-sm\">\n <MarketOverview\n selectedMarket={selectedMarket}\n onMarketChange={setSelectedMarket}\n />\n </div>\n </div>\n </div>\n\n {/* Active View */}\n <div className=\"border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-[3px] shadow-sm bg-white dark:bg-n1-ww-gray-950\">\n {renderActiveView()}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -56,7 +56,7 @@ var OrderBookDepthVisualizer = function (_a) {
|
|
|
56
56
|
if (!data || data.bids.length === 0 || data.asks.length === 0) {
|
|
57
57
|
return null;
|
|
58
58
|
}
|
|
59
|
-
return (_jsxs("div", { className: "mt-3", children: [_jsx("h3", { className: "text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 mb-2", children: "Depth Chart" }), _jsx("div", { className: "w-full h-24 border border-n1-gray-200 dark:border-n1-gray-800 rounded-sm overflow-hidden flex items-center justify-center", children: _jsxs("div", { className: "relative w-full h-full", children: [_jsxs("div", { className: "absolute inset-0 flex", children: [_jsx("div", { className: "w-1/2 bg-gradient-to-r from-green-500/10 to-green-500/5" }), _jsx("div", { className: "w-1/2 bg-gradient-to-l from-red-500/10 to-red-500/5" })] }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: _jsx("div", { className: "h-full w-px bg-n1-gray-300 dark:bg-n1-gray-600" }) })] }) })] }));
|
|
59
|
+
return (_jsxs("div", { className: "mt-3", children: [_jsx("h3", { className: "text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 mb-2", children: "Depth Chart" }), _jsx("div", { className: "w-full h-24 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-sm overflow-hidden flex items-center justify-center", children: _jsxs("div", { className: "relative w-full h-full", children: [_jsxs("div", { className: "absolute inset-0 flex", children: [_jsx("div", { className: "w-1/2 bg-gradient-to-r from-green-500/10 to-green-500/5" }), _jsx("div", { className: "w-1/2 bg-gradient-to-l from-red-500/10 to-red-500/5" })] }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: _jsx("div", { className: "h-full w-px bg-n1-ww-gray-300 dark:bg-n1-ww-gray-600" }) })] }) })] }));
|
|
60
60
|
};
|
|
61
61
|
export default function OrderBook(_a) {
|
|
62
62
|
var _this = this;
|
|
@@ -204,6 +204,6 @@ export default function OrderBook(_a) {
|
|
|
204
204
|
return Math.max.apply(Math, __spreadArray(__spreadArray([], allSizes, false), [0], false));
|
|
205
205
|
};
|
|
206
206
|
var maxSize = calculateMaxSize(aggregatedData);
|
|
207
|
-
return (_jsxs("div", { className: "p-4", children: [_jsx(OrderBookHeader, { marketSymbol: marketSymbol, aggregationLevel: aggregationLevel, onAggregationChange: setAggregationLevel }), error ? (_jsx("div", { className: "p-3 mt-3 border border-red-200 dark:border-red-900/30 rounded-sm text-red-600 dark:text-red-400 text-xs", children: error })) : loading && !orderBookData ? (_jsx("div", { className: "flex items-center justify-center h-40 mt-3", children: _jsx(RefreshCw, { size: 24, className: "text-n1-main n1-animate-spin" }) })) : !marketSymbol ? (_jsx("div", { className: "p-3 mt-3 border border-n1-gray-200 dark:border-n1-gray-800 rounded-sm text-n1-gray-500 dark:text-n1-gray-400 text-xs", children: "Select a market to view orderbook" })) : (_jsx("div", { className: "mt-3", children: _jsxs("div", { className: "flex flex-col", children: [_jsx(OrderBookTable, { data: aggregatedData, loading: loading, maxSize: maxSize }), _jsx(OrderBookDepthVisualizer, { data: aggregatedData, maxSize: maxSize })] }) }))] }));
|
|
207
|
+
return (_jsxs("div", { className: "p-4", children: [_jsx(OrderBookHeader, { marketSymbol: marketSymbol, aggregationLevel: aggregationLevel, onAggregationChange: setAggregationLevel }), error ? (_jsx("div", { className: "p-3 mt-3 border border-red-200 dark:border-red-900/30 rounded-sm text-red-600 dark:text-red-400 text-xs", children: error })) : loading && !orderBookData ? (_jsx("div", { className: "flex items-center justify-center h-40 mt-3", children: _jsx(RefreshCw, { size: 24, className: "text-n1-ww-main n1-animate-spin" }) })) : !marketSymbol ? (_jsx("div", { className: "p-3 mt-3 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400 text-xs", children: "Select a market to view orderbook" })) : (_jsx("div", { className: "mt-3", children: _jsxs("div", { className: "flex flex-col", children: [_jsx(OrderBookTable, { data: aggregatedData, loading: loading, maxSize: maxSize }), _jsx(OrderBookDepthVisualizer, { data: aggregatedData, maxSize: maxSize })] }) }))] }));
|
|
208
208
|
}
|
|
209
209
|
//# sourceMappingURL=OrderBook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderBook.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,oFAAoF;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,oDAAoD;AACpD,IAAM,wBAAwB,GAAG,UAAC,EAUjC;QATC,IAAI,UAAA,EACJ,OAAO,aAAA;IASP,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,iEAAiE,4BAE1E,EACL,cAAK,SAAS,EAAC,2HAA2H,YACxI,eAAK,SAAS,EAAC,wBAAwB,aAErC,eAAK,SAAS,EAAC,uBAAuB,aACpC,cAAK,SAAS,EAAC,yDAAyD,GAAO,EAC/E,cAAK,SAAS,EAAC,qDAAqD,GAAO,IACvE,EACN,cAAK,SAAS,EAAC,mDAAmD,YAChE,cAAK,SAAS,EAAC,gDAAgD,GAAO,GAClE,IACF,GACF,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAkBF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAgC;IAAlE,iBAqLC;QArLmC,YAAY,kBAAA;IACtC,IAAA,IAAI,GAAK,kBAAkB,EAAE,KAAzB,CAA0B;IAChC,IAAA,KAAoC,QAAQ,CAChD,IAAI,CACL,EAFM,aAAa,QAAA,EAAE,gBAAgB,QAErC,CAAC;IACI,IAAA,KAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,QAAA,EAAE,UAAU,QAAmB,CAAC;IACxC,IAAA,KAAoB,QAAQ,CAAgB,IAAI,CAAC,EAAhD,KAAK,QAAA,EAAE,QAAQ,QAAiC,CAAC;IAClD,IAAA,KAA0C,QAAQ,CAAS,IAAI,CAAC,EAA/D,gBAAgB,QAAA,EAAE,mBAAmB,QAA0B,CAAC;IAEvE,2CAA2C;IAC3C,SAAS,CAAC;QACR,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI;YAAE,OAAO;QAEnC,IAAI,YAAY,GAAQ,IAAI,CAAC;QAE7B,IAAM,cAAc,GAAG;;;;;wBACrB,UAAU,CAAC,IAAI,CAAC,CAAC;wBACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;wBAIK,qBAAM,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAA;;wBAA7D,SAAS,GAAG,SAAiD;wBAI7D,IAAI,GAA4B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACpE,CAAC,CAAE,SAAS,CAAC,IAA2C;4BACxD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAqB,IAAK,OAAA;gCAC5C,KAAK,CAAC,KAAK;gCACX,KAAK,CAAC,IAAI;6BACX,EAH6C,CAG7C,CAAC,CAAC;wBAED,IAAI,GAA4B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACpE,CAAC,CAAE,SAAS,CAAC,IAA2C;4BACxD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAqB,IAAK,OAAA;gCAC5C,KAAK,CAAC,KAAK;gCACX,KAAK,CAAC,IAAI;6BACX,EAH6C,CAG7C,CAAC,CAAC;wBAEP,gBAAgB,CAAC;4BACf,IAAI,MAAA;4BACJ,IAAI,MAAA;4BACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB,CAAC,CAAC;wBAEH,iCAAiC;wBACjC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;wBACrD,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAC,MAAW;4BACpC,gBAAgB,CAAC,UAAC,IAAI;gCACpB,IAAI,CAAC,IAAI;oCAAE,OAAO,MAAM,CAAC;gCAEzB,2DAA2D;gCAC3D,IAAM,WAAW,GAAG,MAAM,CAAC,IAAI;oCAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAqB,IAAK,OAAA;wCACzC,KAAK,CAAC,KAAK;wCACX,KAAK,CAAC,IAAI;qCACX,EAH0C,CAG1C,CAAC;oCACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gCAEd,IAAM,WAAW,GAAG,MAAM,CAAC,IAAI;oCAC7B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAqB,IAAK,OAAA;wCACzC,KAAK,CAAC,KAAK;wCACX,KAAK,CAAC,IAAI;qCACX,EAH0C,CAG1C,CAAC;oCACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gCAEd,OAAO;oCACL,IAAI,EAAE,WAAW;oCACjB,IAAI,EAAE,WAAW;oCACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iCACtB,CAAC;4BACJ,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;;;;wBAEH,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAG,CAAC,CAAC;wBAChD,QAAQ,CAAC,+BAA+B,CAAC,CAAC;;;wBAE1C,UAAU,CAAC,KAAK,CAAC,CAAC;;;;;aAErB,CAAC;QAEF,cAAc,EAAE,CAAC;QAEjB,mDAAmD;QACnD,OAAO;YACL,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzB,sDAAsD;IACtD,IAAM,kBAAkB,GAAG,UACzB,IAA0B,EAC1B,KAAa;QAEb,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAM,cAAc,GAA8B,EAAE,CAAC;QACrD,IAAM,cAAc,GAA8B,EAAE,CAAC;QAErD,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,EAAa;gBAAZ,KAAK,QAAA,EAAE,IAAI,QAAA;YAC7B,IAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;YAC1D,cAAc,CAAC,eAAe,CAAC;gBAC7B,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,EAAa;gBAAZ,KAAK,QAAA,EAAE,IAAI,QAAA;YAC7B,IAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;YACzD,cAAc,CAAC,eAAe,CAAC;gBAC7B,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;aACxC,GAAG,CAAC,UAAC,EAAa;gBAAZ,KAAK,QAAA,EAAE,IAAI,QAAA;YAAM,OAAA,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAzB,CAAyB,CAAC;aACjD,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAA4B,CAAC;QAE1D,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;aACxC,GAAG,CAAC,UAAC,EAAa;gBAAZ,KAAK,QAAA,EAAE,IAAI,QAAA;YAAM,OAAA,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QAAzB,CAAyB,CAAC;aACjD,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAA4B,CAAC;QAE1D,OAAO;YACL,IAAI,MAAA;YACJ,IAAI,MAAA;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAE3E,6CAA6C;IAC7C,IAAM,gBAAgB,GAAG,UAAC,IAA0B;QAClD,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC;QAEpB,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,EAAS;gBAAR,CAAC,QAAA,EAAE,IAAI,QAAA;YAAM,OAAA,IAAI;QAAJ,CAAI,CAAC,CAAC;QACpD,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,EAAS;gBAAR,CAAC,QAAA,EAAE,IAAI,QAAA;YAAM,OAAA,IAAI;QAAJ,CAAI,CAAC,CAAC;QACpD,IAAM,QAAQ,mCAAO,QAAQ,SAAK,QAAQ,OAAC,CAAC;QAE5C,OAAO,IAAI,CAAC,GAAG,OAAR,IAAI,kCAAQ,QAAQ,WAAE,CAAC,WAAE;IAClC,CAAC,CAAC;IAEF,IAAM,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAEjD,OAAO,CACL,eAAK,SAAS,EAAC,KAAK,aAClB,KAAC,eAAe,IACd,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,mBAAmB,GACxC,EAED,KAAK,CAAC,CAAC,CAAC,CACP,cAAK,SAAS,EAAC,yGAAyG,YACrH,KAAK,GACF,CACP,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAC9B,cAAK,SAAS,EAAC,4CAA4C,YACzD,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,8BAA8B,GAAG,GAC5D,CACP,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAClB,cAAK,SAAS,EAAC,sHAAsH,kDAE/H,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,MAAM,YACnB,eAAK,SAAS,EAAC,eAAe,aAC5B,KAAC,cAAc,IACb,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GAChB,EAEF,KAAC,wBAAwB,IAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAI,IAChE,GACF,CACP,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport OrderBookHeader from './OrderBookHeader';\nimport OrderBookTable from './OrderBookTable';\n// Create a simple implementation for the missing OrderBookDepthVisualizer component\nimport { RefreshCw } from 'lucide-react';\n\n// Simple implementation of OrderBookDepthVisualizer\nconst OrderBookDepthVisualizer = ({\n data,\n maxSize,\n}: {\n data: {\n bids: Array<[number, number]>;\n asks: Array<[number, number]>;\n timestamp: number;\n } | null;\n maxSize: number;\n}) => {\n if (!data || data.bids.length === 0 || data.asks.length === 0) {\n return null;\n }\n\n return (\n <div className=\"mt-3\">\n <h3 className=\"text-xs font-medium text-n1-gray-900 dark:text-n1-gray-100 mb-2\">\n Depth Chart\n </h3>\n <div className=\"w-full h-24 border border-n1-gray-200 dark:border-n1-gray-800 rounded-sm overflow-hidden flex items-center justify-center\">\n <div className=\"relative w-full h-full\">\n {/* Simple visualization with gradient backgrounds */}\n <div className=\"absolute inset-0 flex\">\n <div className=\"w-1/2 bg-gradient-to-r from-green-500/10 to-green-500/5\"></div>\n <div className=\"w-1/2 bg-gradient-to-l from-red-500/10 to-red-500/5\"></div>\n </div>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"h-full w-px bg-n1-gray-300 dark:bg-n1-gray-600\"></div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface OrderBookProps {\n marketSymbol: string | null;\n}\n\ninterface OrderBookData {\n bids: Array<[number, number]>; // [price, size]\n asks: Array<[number, number]>; // [price, size]\n timestamp: number;\n}\n\n// Define the OrderbookEntry interface to match the API response\ninterface OrderbookEntry {\n price: number;\n size: number;\n}\n\nexport default function OrderBook({ marketSymbol }: OrderBookProps) {\n const { nord } = useN1WalletContext();\n const [orderBookData, setOrderBookData] = useState<OrderBookData | null>(\n null\n );\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [aggregationLevel, setAggregationLevel] = useState<number>(0.01);\n\n // Fetch orderbook data when market changes\n useEffect(() => {\n if (!marketSymbol || !nord) return;\n\n let subscription: any = null;\n\n const fetchOrderBook = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Initial fetch\n const orderbook = await nord.getOrderbook({ symbol: marketSymbol });\n\n // The API now returns bids and asks directly as arrays of [price, size] pairs\n // instead of OrderbookEntry objects\n const bids: Array<[number, number]> = Array.isArray(orderbook.bids[0])\n ? (orderbook.bids as unknown as Array<[number, number]>)\n : orderbook.bids.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ]);\n\n const asks: Array<[number, number]> = Array.isArray(orderbook.asks[0])\n ? (orderbook.asks as unknown as Array<[number, number]>)\n : orderbook.asks.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ]);\n\n setOrderBookData({\n bids,\n asks,\n timestamp: Date.now(),\n });\n\n // Subscribe to real-time updates\n subscription = nord.subscribeOrderbook(marketSymbol);\n subscription.on('update', (update: any) => {\n setOrderBookData((prev) => {\n if (!prev) return update;\n\n // Convert OrderbookEntry[] to [number, number][] if needed\n const updatedBids = update.bids\n ? update.bids.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ])\n : prev.bids;\n\n const updatedAsks = update.asks\n ? update.asks.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ])\n : prev.asks;\n\n return {\n bids: updatedBids,\n asks: updatedAsks,\n timestamp: Date.now(),\n };\n });\n });\n } catch (err) {\n console.error('Error fetching orderbook:', err);\n setError('Failed to load orderbook data');\n } finally {\n setLoading(false);\n }\n };\n\n fetchOrderBook();\n\n // Cleanup subscription on unmount or market change\n return () => {\n if (subscription) {\n subscription.close();\n }\n };\n }, [marketSymbol, nord]);\n\n // Aggregate orderbook data based on aggregation level\n const aggregateOrderBook = (\n data: OrderBookData | null,\n level: number\n ): OrderBookData | null => {\n if (!data) return null;\n\n const aggregatedBids: { [key: number]: number } = {};\n const aggregatedAsks: { [key: number]: number } = {};\n\n // Aggregate bids\n data.bids.forEach(([price, size]) => {\n const aggregatedPrice = Math.floor(price / level) * level;\n aggregatedBids[aggregatedPrice] =\n (aggregatedBids[aggregatedPrice] || 0) + size;\n });\n\n // Aggregate asks\n data.asks.forEach(([price, size]) => {\n const aggregatedPrice = Math.ceil(price / level) * level;\n aggregatedAsks[aggregatedPrice] =\n (aggregatedAsks[aggregatedPrice] || 0) + size;\n });\n\n // Convert back to arrays and sort\n const bids = Object.entries(aggregatedBids)\n .map(([price, size]) => [parseFloat(price), size])\n .sort((a, b) => b[0] - a[0]) as Array<[number, number]>;\n\n const asks = Object.entries(aggregatedAsks)\n .map(([price, size]) => [parseFloat(price), size])\n .sort((a, b) => a[0] - b[0]) as Array<[number, number]>;\n\n return {\n bids,\n asks,\n timestamp: data.timestamp,\n };\n };\n\n const aggregatedData = aggregateOrderBook(orderBookData, aggregationLevel);\n\n // Calculate max size for depth visualization\n const calculateMaxSize = (data: OrderBookData | null): number => {\n if (!data) return 0;\n\n const bidSizes = data.bids.map(([_, size]) => size);\n const askSizes = data.asks.map(([_, size]) => size);\n const allSizes = [...bidSizes, ...askSizes];\n\n return Math.max(...allSizes, 0);\n };\n\n const maxSize = calculateMaxSize(aggregatedData);\n\n return (\n <div className=\"p-4\">\n <OrderBookHeader\n marketSymbol={marketSymbol}\n aggregationLevel={aggregationLevel}\n onAggregationChange={setAggregationLevel}\n />\n\n {error ? (\n <div className=\"p-3 mt-3 border border-red-200 dark:border-red-900/30 rounded-sm text-red-600 dark:text-red-400 text-xs\">\n {error}\n </div>\n ) : loading && !orderBookData ? (\n <div className=\"flex items-center justify-center h-40 mt-3\">\n <RefreshCw size={24} className=\"text-n1-main n1-animate-spin\" />\n </div>\n ) : !marketSymbol ? (\n <div className=\"p-3 mt-3 border border-n1-gray-200 dark:border-n1-gray-800 rounded-sm text-n1-gray-500 dark:text-n1-gray-400 text-xs\">\n Select a market to view orderbook\n </div>\n ) : (\n <div className=\"mt-3\">\n <div className=\"flex flex-col\">\n <OrderBookTable\n data={aggregatedData}\n loading={loading}\n maxSize={maxSize}\n />\n\n <OrderBookDepthVisualizer data={aggregatedData} maxSize={maxSize} />\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OrderBook.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/OrderBook/OrderBook.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useN1WalletContext } from '../../../../Provider/hooks';\nimport OrderBookHeader from './OrderBookHeader';\nimport OrderBookTable from './OrderBookTable';\n// Create a simple implementation for the missing OrderBookDepthVisualizer component\nimport { RefreshCw } from 'lucide-react';\n\n// Simple implementation of OrderBookDepthVisualizer\nconst OrderBookDepthVisualizer = ({\n data,\n maxSize,\n}: {\n data: {\n bids: Array<[number, number]>;\n asks: Array<[number, number]>;\n timestamp: number;\n } | null;\n maxSize: number;\n}) => {\n if (!data || data.bids.length === 0 || data.asks.length === 0) {\n return null;\n }\n\n return (\n <div className=\"mt-3\">\n <h3 className=\"text-xs font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 mb-2\">\n Depth Chart\n </h3>\n <div className=\"w-full h-24 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-sm overflow-hidden flex items-center justify-center\">\n <div className=\"relative w-full h-full\">\n {/* Simple visualization with gradient backgrounds */}\n <div className=\"absolute inset-0 flex\">\n <div className=\"w-1/2 bg-gradient-to-r from-green-500/10 to-green-500/5\"></div>\n <div className=\"w-1/2 bg-gradient-to-l from-red-500/10 to-red-500/5\"></div>\n </div>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"h-full w-px bg-n1-ww-gray-300 dark:bg-n1-ww-gray-600\"></div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface OrderBookProps {\n marketSymbol: string | null;\n}\n\ninterface OrderBookData {\n bids: Array<[number, number]>; // [price, size]\n asks: Array<[number, number]>; // [price, size]\n timestamp: number;\n}\n\n// Define the OrderbookEntry interface to match the API response\ninterface OrderbookEntry {\n price: number;\n size: number;\n}\n\nexport default function OrderBook({ marketSymbol }: OrderBookProps) {\n const { nord } = useN1WalletContext();\n const [orderBookData, setOrderBookData] = useState<OrderBookData | null>(\n null\n );\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [aggregationLevel, setAggregationLevel] = useState<number>(0.01);\n\n // Fetch orderbook data when market changes\n useEffect(() => {\n if (!marketSymbol || !nord) return;\n\n let subscription: any = null;\n\n const fetchOrderBook = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Initial fetch\n const orderbook = await nord.getOrderbook({ symbol: marketSymbol });\n\n // The API now returns bids and asks directly as arrays of [price, size] pairs\n // instead of OrderbookEntry objects\n const bids: Array<[number, number]> = Array.isArray(orderbook.bids[0])\n ? (orderbook.bids as unknown as Array<[number, number]>)\n : orderbook.bids.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ]);\n\n const asks: Array<[number, number]> = Array.isArray(orderbook.asks[0])\n ? (orderbook.asks as unknown as Array<[number, number]>)\n : orderbook.asks.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ]);\n\n setOrderBookData({\n bids,\n asks,\n timestamp: Date.now(),\n });\n\n // Subscribe to real-time updates\n subscription = nord.subscribeOrderbook(marketSymbol);\n subscription.on('update', (update: any) => {\n setOrderBookData((prev) => {\n if (!prev) return update;\n\n // Convert OrderbookEntry[] to [number, number][] if needed\n const updatedBids = update.bids\n ? update.bids.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ])\n : prev.bids;\n\n const updatedAsks = update.asks\n ? update.asks.map((entry: OrderbookEntry) => [\n entry.price,\n entry.size,\n ])\n : prev.asks;\n\n return {\n bids: updatedBids,\n asks: updatedAsks,\n timestamp: Date.now(),\n };\n });\n });\n } catch (err) {\n console.error('Error fetching orderbook:', err);\n setError('Failed to load orderbook data');\n } finally {\n setLoading(false);\n }\n };\n\n fetchOrderBook();\n\n // Cleanup subscription on unmount or market change\n return () => {\n if (subscription) {\n subscription.close();\n }\n };\n }, [marketSymbol, nord]);\n\n // Aggregate orderbook data based on aggregation level\n const aggregateOrderBook = (\n data: OrderBookData | null,\n level: number\n ): OrderBookData | null => {\n if (!data) return null;\n\n const aggregatedBids: { [key: number]: number } = {};\n const aggregatedAsks: { [key: number]: number } = {};\n\n // Aggregate bids\n data.bids.forEach(([price, size]) => {\n const aggregatedPrice = Math.floor(price / level) * level;\n aggregatedBids[aggregatedPrice] =\n (aggregatedBids[aggregatedPrice] || 0) + size;\n });\n\n // Aggregate asks\n data.asks.forEach(([price, size]) => {\n const aggregatedPrice = Math.ceil(price / level) * level;\n aggregatedAsks[aggregatedPrice] =\n (aggregatedAsks[aggregatedPrice] || 0) + size;\n });\n\n // Convert back to arrays and sort\n const bids = Object.entries(aggregatedBids)\n .map(([price, size]) => [parseFloat(price), size])\n .sort((a, b) => b[0] - a[0]) as Array<[number, number]>;\n\n const asks = Object.entries(aggregatedAsks)\n .map(([price, size]) => [parseFloat(price), size])\n .sort((a, b) => a[0] - b[0]) as Array<[number, number]>;\n\n return {\n bids,\n asks,\n timestamp: data.timestamp,\n };\n };\n\n const aggregatedData = aggregateOrderBook(orderBookData, aggregationLevel);\n\n // Calculate max size for depth visualization\n const calculateMaxSize = (data: OrderBookData | null): number => {\n if (!data) return 0;\n\n const bidSizes = data.bids.map(([_, size]) => size);\n const askSizes = data.asks.map(([_, size]) => size);\n const allSizes = [...bidSizes, ...askSizes];\n\n return Math.max(...allSizes, 0);\n };\n\n const maxSize = calculateMaxSize(aggregatedData);\n\n return (\n <div className=\"p-4\">\n <OrderBookHeader\n marketSymbol={marketSymbol}\n aggregationLevel={aggregationLevel}\n onAggregationChange={setAggregationLevel}\n />\n\n {error ? (\n <div className=\"p-3 mt-3 border border-red-200 dark:border-red-900/30 rounded-sm text-red-600 dark:text-red-400 text-xs\">\n {error}\n </div>\n ) : loading && !orderBookData ? (\n <div className=\"flex items-center justify-center h-40 mt-3\">\n <RefreshCw size={24} className=\"text-n1-ww-main n1-animate-spin\" />\n </div>\n ) : !marketSymbol ? (\n <div className=\"p-3 mt-3 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 rounded-sm text-n1-ww-gray-500 dark:text-n1-ww-gray-400 text-xs\">\n Select a market to view orderbook\n </div>\n ) : (\n <div className=\"mt-3\">\n <div className=\"flex flex-col\">\n <OrderBookTable\n data={aggregatedData}\n loading={loading}\n maxSize={maxSize}\n />\n\n <OrderBookDepthVisualizer data={aggregatedData} maxSize={maxSize} />\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -57,6 +57,6 @@ export default function OrderBookDepthVisualizer(_a) {
|
|
|
57
57
|
path += "L ".concat(getPricePosition(cumulativeAsks[cumulativeAsks.length - 1][0]), " 100 Z");
|
|
58
58
|
return path;
|
|
59
59
|
};
|
|
60
|
-
return (_jsxs("div", { className: "mt-4", children: [_jsx("h3", { className: "text-sm font-medium text-n1-gray-900 dark:text-n1-gray-100 mb-2", children: "Depth Chart" }), _jsx("div", { className: "w-full h-32 bg-n1-gray-50 dark:bg-n1-gray-800 rounded-lg overflow-hidden", children: _jsxs("svg", { width: "100%", height: "100%", viewBox: "0 0 100 100", preserveAspectRatio: "none", children: [_jsx("path", { d: generateBidPath(), fill: "rgba(16, 185, 129, 0.2)", stroke: "rgb(16, 185, 129)", strokeWidth: "0.5" }), _jsx("path", { d: generateAskPath(), fill: "rgba(239, 68, 68, 0.2)", stroke: "rgb(239, 68, 68)", strokeWidth: "0.5" }), _jsx("line", { x1: getPricePosition(data.asks[0][0]), y1: "0", x2: getPricePosition(data.asks[0][0]), y2: "100", stroke: "rgba(156, 163, 175, 0.5)", strokeWidth: "0.5", strokeDasharray: "2,2" })] }) }), _jsxs("div", { className: "flex justify-between mt-1 text-xs text-n1-gray-500 dark:text-n1-gray-400", children: [_jsx("span", { children: minPrice.toFixed(2) }), _jsx("span", { children: ((minPrice + maxPrice) / 2).toFixed(2) }), _jsx("span", { children: maxPrice.toFixed(2) })] })] }));
|
|
60
|
+
return (_jsxs("div", { className: "mt-4", children: [_jsx("h3", { className: "text-sm font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 mb-2", children: "Depth Chart" }), _jsx("div", { className: "w-full h-32 bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 rounded-lg overflow-hidden", children: _jsxs("svg", { width: "100%", height: "100%", viewBox: "0 0 100 100", preserveAspectRatio: "none", children: [_jsx("path", { d: generateBidPath(), fill: "rgba(16, 185, 129, 0.2)", stroke: "rgb(16, 185, 129)", strokeWidth: "0.5" }), _jsx("path", { d: generateAskPath(), fill: "rgba(239, 68, 68, 0.2)", stroke: "rgb(239, 68, 68)", strokeWidth: "0.5" }), _jsx("line", { x1: getPricePosition(data.asks[0][0]), y1: "0", x2: getPricePosition(data.asks[0][0]), y2: "100", stroke: "rgba(156, 163, 175, 0.5)", strokeWidth: "0.5", strokeDasharray: "2,2" })] }) }), _jsxs("div", { className: "flex justify-between mt-1 text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400", children: [_jsx("span", { children: minPrice.toFixed(2) }), _jsx("span", { children: ((minPrice + maxPrice) / 2).toFixed(2) }), _jsx("span", { children: maxPrice.toFixed(2) })] })] }));
|
|
61
61
|
}
|
|
62
62
|
//# sourceMappingURL=OrderBookDepthVisualizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderBookDepthVisualizer.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OrderBookDepthVisualizer.js","sourceRoot":"","sources":["../../../../../src/Modal/Sidebar/NordTradingView/OrderBook/OrderBookDepthVisualizer.tsx"],"names":[],"mappings":"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","sourcesContent":["interface OrderBookDepthVisualizerProps {\n data: {\n bids: Array<[number, number]>;\n asks: Array<[number, number]>;\n timestamp: number;\n } | null;\n maxSize: number;\n}\n\nexport default function OrderBookDepthVisualizer({\n data,\n maxSize,\n}: OrderBookDepthVisualizerProps) {\n if (!data || data.bids.length === 0 || data.asks.length === 0) {\n return null;\n }\n\n // Calculate cumulative sizes\n const calculateCumulativeSizes = (\n orders: Array<[number, number]>\n ): Array<[number, number]> => {\n let cumulative = 0;\n return orders.map(([price, size]) => {\n cumulative += size;\n return [price, cumulative];\n });\n };\n\n const cumulativeBids = calculateCumulativeSizes(data.bids);\n const cumulativeAsks = calculateCumulativeSizes(data.asks);\n\n // Find max cumulative size for scaling\n const maxCumulativeSize = Math.max(\n cumulativeBids[cumulativeBids.length - 1][1],\n cumulativeAsks[cumulativeAsks.length - 1][1]\n );\n\n // Calculate price range for x-axis\n const minPrice = cumulativeBids[cumulativeBids.length - 1][0];\n const maxPrice = cumulativeAsks[cumulativeAsks.length - 1][0];\n const priceRange = maxPrice - minPrice;\n\n // Helper function to calculate x position based on price\n const getPricePosition = (price: number): number => {\n return ((price - minPrice) / priceRange) * 100;\n };\n\n // Helper function to calculate y position based on cumulative size\n const getSizePosition = (size: number): number => {\n return (size / maxCumulativeSize) * 100;\n };\n\n // Generate SVG path for bids\n const generateBidPath = (): string => {\n if (cumulativeBids.length === 0) return '';\n\n let path = `M ${getPricePosition(cumulativeBids[0][0])} 100 `;\n\n cumulativeBids.forEach(([price, size]) => {\n const x = getPricePosition(price);\n const y = 100 - getSizePosition(size);\n path += `L ${x} ${y} `;\n });\n\n path += `L ${getPricePosition(cumulativeBids[cumulativeBids.length - 1][0])} 100 Z`;\n\n return path;\n };\n\n // Generate SVG path for asks\n const generateAskPath = (): string => {\n if (cumulativeAsks.length === 0) return '';\n\n let path = `M ${getPricePosition(cumulativeAsks[0][0])} 100 `;\n\n cumulativeAsks.forEach(([price, size]) => {\n const x = getPricePosition(price);\n const y = 100 - getSizePosition(size);\n path += `L ${x} ${y} `;\n });\n\n path += `L ${getPricePosition(cumulativeAsks[cumulativeAsks.length - 1][0])} 100 Z`;\n\n return path;\n };\n\n return (\n <div className=\"mt-4\">\n <h3 className=\"text-sm font-medium text-n1-ww-gray-900 dark:text-n1-ww-gray-100 mb-2\">\n Depth Chart\n </h3>\n <div className=\"w-full h-32 bg-n1-ww-gray-50 dark:bg-n1-ww-gray-800 rounded-lg overflow-hidden\">\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"none\"\n >\n {/* Bid depth (green) */}\n <path\n d={generateBidPath()}\n fill=\"rgba(16, 185, 129, 0.2)\"\n stroke=\"rgb(16, 185, 129)\"\n strokeWidth=\"0.5\"\n />\n\n {/* Ask depth (red) */}\n <path\n d={generateAskPath()}\n fill=\"rgba(239, 68, 68, 0.2)\"\n stroke=\"rgb(239, 68, 68)\"\n strokeWidth=\"0.5\"\n />\n\n {/* Center line (current price) */}\n <line\n x1={getPricePosition(data.asks[0][0])}\n y1=\"0\"\n x2={getPricePosition(data.asks[0][0])}\n y2=\"100\"\n stroke=\"rgba(156, 163, 175, 0.5)\"\n strokeWidth=\"0.5\"\n strokeDasharray=\"2,2\"\n />\n </svg>\n </div>\n\n {/* Price labels */}\n <div className=\"flex justify-between mt-1 text-xs text-n1-ww-gray-500 dark:text-n1-ww-gray-400\">\n <span>{minPrice.toFixed(2)}</span>\n <span>{((minPrice + maxPrice) / 2).toFixed(2)}</span>\n <span>{maxPrice.toFixed(2)}</span>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -20,11 +20,11 @@ export default function OrderBookHeader(_a) {
|
|
|
20
20
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
21
21
|
};
|
|
22
22
|
}, []);
|
|
23
|
-
return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("h2", { className: "text-base font-semibold text-n1-gray-900 dark:text-n1-gray-100", children: ["Order Book", ' ', marketSymbol ? _jsx("span", { className: "text-n1-main", children: marketSymbol }) : ''] }), _jsxs("div", { className: "relative", ref: dropdownRef, children: [_jsxs("button", { onClick: function () { return setIsOpen(!isOpen); }, className: "flex items-center gap-1 px-2 py-1 bg-n1-gray-100 dark:bg-n1-gray-950 rounded-sm text-xs text-n1-gray-900 dark:text-n1-gray-100 border border-n1-gray-200 dark:border-n1-gray-800 hover:border-n1-main dark:hover:border-n1-main transition-colors duration-200", children: [_jsxs("span", { children: ["Precision:", ' ', _jsx("span", { className: "font-mono font-medium", children: aggregationLevel })] }), _jsx(ChevronDown, { size: 14, className: "transition-transform duration-200 ".concat(isOpen ? 'rotate-180 text-n1-main' : 'text-n1-gray-500 dark:text-n1-gray-400') })] }), isOpen && (_jsx("div", { className: "absolute right-0 z-50 mt-1 w-36 bg-white dark:bg-n1-gray-950 rounded-sm shadow-lg border border-n1-gray-200 dark:border-n1-gray-800 overflow-hidden", children: aggregationOptions.map(function (level) { return (_jsx("button", { onClick: function () {
|
|
23
|
+
return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("h2", { className: "text-base font-semibold text-n1-ww-gray-900 dark:text-n1-ww-gray-100", children: ["Order Book", ' ', marketSymbol ? _jsx("span", { className: "text-n1-ww-main", children: marketSymbol }) : ''] }), _jsxs("div", { className: "relative", ref: dropdownRef, children: [_jsxs("button", { onClick: function () { return setIsOpen(!isOpen); }, className: "flex items-center gap-1 px-2 py-1 bg-n1-ww-gray-100 dark:bg-n1-ww-gray-950 rounded-sm text-xs text-n1-ww-gray-900 dark:text-n1-ww-gray-100 border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 hover:border-n1-ww-main dark:hover:border-n1-ww-main transition-colors duration-200", children: [_jsxs("span", { children: ["Precision:", ' ', _jsx("span", { className: "font-mono font-medium", children: aggregationLevel })] }), _jsx(ChevronDown, { size: 14, className: "transition-transform duration-200 ".concat(isOpen ? 'rotate-180 text-n1-ww-main' : 'text-n1-ww-gray-500 dark:text-n1-ww-gray-400') })] }), isOpen && (_jsx("div", { className: "absolute right-0 z-50 mt-1 w-36 bg-white dark:bg-n1-ww-gray-950 rounded-sm shadow-lg border border-n1-ww-gray-200 dark:border-n1-ww-gray-800 overflow-hidden", children: aggregationOptions.map(function (level) { return (_jsx("button", { onClick: function () {
|
|
24
24
|
onAggregationChange(level);
|
|
25
25
|
setIsOpen(false);
|
|
26
|
-
}, className: "w-full text-left px-3 py-1.5 text-xs hover:bg-n1-gray-100 dark:hover:bg-n1-gray-800 transition-colors duration-200 ".concat(aggregationLevel === level
|
|
27
|
-
? 'bg-n1-gray-100 dark:bg-n1-gray-800 border-l-2 border-n1-main text-n1-main'
|
|
28
|
-
: 'text-n1-gray-900 dark:text-n1-gray-100'), children: level }, level)); }) }))] })] }));
|
|
26
|
+
}, className: "w-full text-left px-3 py-1.5 text-xs hover:bg-n1-ww-gray-100 dark:hover:bg-n1-ww-gray-800 transition-colors duration-200 ".concat(aggregationLevel === level
|
|
27
|
+
? 'bg-n1-ww-gray-100 dark:bg-n1-ww-gray-800 border-l-2 border-n1-ww-main text-n1-ww-main'
|
|
28
|
+
: 'text-n1-ww-gray-900 dark:text-n1-ww-gray-100'), children: level }, level)); }) }))] })] }));
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=OrderBookHeader.js.map
|