@b3dotfun/sdk 0.0.7-alpha.16 → 0.0.7-alpha.17
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/cjs/anyspend/react/components/AnySpendCustom.js +28 -25
- package/dist/cjs/anyspend/react/components/modals/EnterRecipientModal.js +5 -5
- package/dist/esm/anyspend/react/components/AnySpendCustom.js +29 -26
- package/dist/esm/anyspend/react/components/modals/EnterRecipientModal.js +1 -1
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpendCustom.tsx +44 -9
- package/src/anyspend/react/components/modals/EnterRecipientModal.tsx +1 -1
|
@@ -95,14 +95,15 @@ function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", recipient
|
|
|
95
95
|
const [activeTab, setActiveTab] = (0, react_2.useState)("crypto");
|
|
96
96
|
// Get current user's wallet
|
|
97
97
|
const currentWallet = (0, react_1.useAccountWallet)();
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
// Add state for recipient modal
|
|
99
|
+
const [isRecipientModalOpen, setIsRecipientModalOpen] = (0, react_2.useState)(false);
|
|
100
|
+
// Add state for custom recipient
|
|
101
|
+
const [customRecipientAddress, setCustomRecipientAddress] = (0, react_2.useState)(recipientAddressProps);
|
|
102
|
+
// Update recipient logic to use custom recipient
|
|
103
|
+
const recipientAddress = customRecipientAddress || currentWallet.address;
|
|
104
|
+
const recipientPropsProfile = (0, react_1.useBsmntProfile)({ address: recipientAddress });
|
|
105
|
+
const recipientEnsName = recipientPropsProfile.data?.username?.replaceAll(".b3.fun", "");
|
|
106
|
+
const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
|
|
106
107
|
const [orderId, setOrderId] = (0, react_2.useState)(loadOrder);
|
|
107
108
|
const [srcChainId, setSrcChainId] = (0, react_2.useState)(isMainnet ? chains_1.base.id : chains_1.baseSepolia.id);
|
|
108
109
|
// Get token list for token balance check
|
|
@@ -350,7 +351,7 @@ function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", recipient
|
|
|
350
351
|
? "Receive NFT at"
|
|
351
352
|
: orderType === anyspend_1.OrderType.JoinTournament
|
|
352
353
|
? "Join for"
|
|
353
|
-
: "Recipient" }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)(react_1.Button, { variant: "outline", className: "w-full justify-between border-none p-0", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [recipientImageUrl && ((0, jsx_runtime_1.jsx)("img", { src: recipientImageUrl, alt: recipientImageUrl, className: "bg-b3-react-foreground size-7 rounded-full object-cover opacity-100" })), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-start gap-1", children: [recipientEnsName && (0, jsx_runtime_1.jsxs)("span", { children: ["@", recipientEnsName] }), (0, jsx_runtime_1.jsx)("span", { children: (0, centerTruncate_1.default)(recipientAddress) })] })] }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRightCircle, { className: "ml-2 size-4 shrink-0 opacity-50" })] }) })] })) : null;
|
|
354
|
+
: "Recipient" }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)(react_1.Button, { variant: "outline", className: "w-full justify-between border-none p-0", onClick: () => setIsRecipientModalOpen(true), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [recipientImageUrl && ((0, jsx_runtime_1.jsx)("img", { src: recipientImageUrl, alt: recipientImageUrl, className: "bg-b3-react-foreground size-7 rounded-full object-cover opacity-100" })), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-start gap-1", children: [recipientEnsName && (0, jsx_runtime_1.jsxs)("span", { children: ["@", recipientEnsName] }), (0, jsx_runtime_1.jsx)("span", { children: (0, centerTruncate_1.default)(recipientAddress) })] })] }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRightCircle, { className: "ml-2 size-4 shrink-0 opacity-50" })] }) })] })) : null;
|
|
354
355
|
const historyView = ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("mx-auto flex w-full max-w-2xl flex-col items-center p-5", mode === "modal" && "bg-b3-react-background"), children: (0, jsx_runtime_1.jsx)(OrderHistory_1.OrderHistory, { mode: mode, onBack: () => {
|
|
355
356
|
setActivePanel(PanelView.HISTORY);
|
|
356
357
|
}, onSelectOrder: onSelectOrder }) }));
|
|
@@ -408,20 +409,22 @@ function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", recipient
|
|
|
408
409
|
}
|
|
409
410
|
: undefined, recipientEnsName: recipientEnsName, recipientImageUrl: recipientImageUrl }) }) })] })] }));
|
|
410
411
|
// Return the TransitionPanel with all views
|
|
411
|
-
return ((0, jsx_runtime_1.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
412
|
+
return ((0, jsx_runtime_1.jsxs)(react_1.StyleRoot, { children: [(0, jsx_runtime_1.jsx)(react_1.TransitionPanel, { activeIndex: orderId
|
|
413
|
+
? oat
|
|
414
|
+
? PanelView.ORDER_DETAILS
|
|
415
|
+
: PanelView.LOADING
|
|
416
|
+
: activePanel === PanelView.ORDER_DETAILS
|
|
417
|
+
? PanelView.CONFIRM_ORDER
|
|
418
|
+
: activePanel, className: (0, utils_1.cn)("w-full"), variants: {
|
|
419
|
+
enter: { x: 300, opacity: 0 },
|
|
420
|
+
center: { x: 0, opacity: 1 },
|
|
421
|
+
exit: { x: -300, opacity: 0 },
|
|
422
|
+
}, transition: { type: "spring", stiffness: 300, damping: 30 }, children: [
|
|
423
|
+
(0, jsx_runtime_1.jsx)("div", { className: "w-full", children: confirmOrderView }, "edit-recipient-view"),
|
|
424
|
+
(0, jsx_runtime_1.jsx)("div", { className: "w-full", children: historyView }, "history-view"),
|
|
425
|
+
(0, jsx_runtime_1.jsx)("div", { className: "w-full", children: orderDetailsView }, "order-details-view"),
|
|
426
|
+
(0, jsx_runtime_1.jsx)("div", { className: "w-full", children: loadingView }, "loading-view"),
|
|
427
|
+
] }), (0, jsx_runtime_1.jsx)(react_1.Dialog, { open: isRecipientModalOpen, onOpenChange: setIsRecipientModalOpen, children: (0, jsx_runtime_1.jsx)(react_1.DialogContent, { className: "w-[420px] max-w-[calc(100vw-32px)] rounded-2xl p-3.5", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-as-primary font-semibold", children: "To address" }), (0, jsx_runtime_1.jsx)(react_1.Input, { value: customRecipientAddress || "", onChange: e => setCustomRecipientAddress(e.target.value), placeholder: "Enter address", className: "h-12 rounded-lg", spellCheck: false }), (0, jsx_runtime_1.jsx)(react_1.ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "w-full rounded-lg", onClick: () => {
|
|
428
|
+
setIsRecipientModalOpen(false);
|
|
429
|
+
}, children: "Save" })] }) }) })] }));
|
|
427
430
|
}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EnterRecipientModal = EnterRecipientModal;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const react_2 = require("
|
|
5
|
+
const react_1 = require("../../../../global-account/react");
|
|
6
|
+
const react_2 = require("react");
|
|
7
7
|
function EnterRecipientModal({ isOpenPasteRecipientAddress, setIsOpenPasteRecipientAddress, recipientAddress, setRecipientAddress, }) {
|
|
8
|
-
const [modalRecipientAddress, setModalRecipientAddress] = (0,
|
|
9
|
-
(0,
|
|
8
|
+
const [modalRecipientAddress, setModalRecipientAddress] = (0, react_2.useState)(recipientAddress || "");
|
|
9
|
+
(0, react_2.useEffect)(() => {
|
|
10
10
|
setModalRecipientAddress(recipientAddress || "");
|
|
11
11
|
}, [recipientAddress]);
|
|
12
|
-
return ((0, jsx_runtime_1.jsx)(
|
|
12
|
+
return ((0, jsx_runtime_1.jsx)(react_1.Dialog, { open: isOpenPasteRecipientAddress, onOpenChange: setIsOpenPasteRecipientAddress, children: (0, jsx_runtime_1.jsx)(react_1.DialogContent, { className: "w-[420px] max-w-[calc(100vw-32px)] rounded-2xl p-3.5", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-as-primary font-semibold", children: "To address" }), (0, jsx_runtime_1.jsx)(react_1.Input, { value: modalRecipientAddress, onChange: e => setModalRecipientAddress(e.target.value), placeholder: "Enter address", className: "h-12 rounded-lg", spellCheck: false }), (0, jsx_runtime_1.jsx)(react_1.ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "w-full rounded-lg", onClick: () => {
|
|
13
13
|
setIsOpenPasteRecipientAddress(false);
|
|
14
14
|
setRecipientAddress(modalRecipientAddress);
|
|
15
15
|
}, children: "Save" })] }) }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { eqci, getDefaultToken, isCustomTxMetadata, isNftMetadata, isTournamentMetadata, NftType, OrderStatus, OrderType, RELAY_ETH_ADDRESS, USDC_BASE, useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useAnyspendTokenList, useGeoOnrampOptions, } from "../../../anyspend/index.js";
|
|
3
|
-
import { Badge, Button, ShinyButton, Skeleton, StyleRoot, Tabs, TabsContent, TabsList, TabTrigger, TextShimmer, TransitionPanel, useAccountWallet, useB3, useBsmntProfile, useHasMounted, useModalStore, useRouter, useSearchParamsSSR, useTokenBalancesByChain, } from "../../../global-account/react/index.js";
|
|
3
|
+
import { Badge, Button, ShinyButton, Skeleton, StyleRoot, Tabs, TabsContent, TabsList, TabTrigger, TextShimmer, TransitionPanel, useAccountWallet, useB3, useBsmntProfile, useHasMounted, useModalStore, useRouter, useSearchParamsSSR, useTokenBalancesByChain, Dialog, DialogContent, Input, } from "../../../global-account/react/index.js";
|
|
4
4
|
import { cn } from "../../../shared/utils/index.js";
|
|
5
5
|
import centerTruncate from "../../../shared/utils/centerTruncate.js";
|
|
6
6
|
import { formatTokenAmount } from "../../../shared/utils/number.js";
|
|
@@ -89,14 +89,15 @@ export function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", re
|
|
|
89
89
|
const [activeTab, setActiveTab] = useState("crypto");
|
|
90
90
|
// Get current user's wallet
|
|
91
91
|
const currentWallet = useAccountWallet();
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
92
|
+
// Add state for recipient modal
|
|
93
|
+
const [isRecipientModalOpen, setIsRecipientModalOpen] = useState(false);
|
|
94
|
+
// Add state for custom recipient
|
|
95
|
+
const [customRecipientAddress, setCustomRecipientAddress] = useState(recipientAddressProps);
|
|
96
|
+
// Update recipient logic to use custom recipient
|
|
97
|
+
const recipientAddress = customRecipientAddress || currentWallet.address;
|
|
98
|
+
const recipientPropsProfile = useBsmntProfile({ address: recipientAddress });
|
|
99
|
+
const recipientEnsName = recipientPropsProfile.data?.username?.replaceAll(".b3.fun", "");
|
|
100
|
+
const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
|
|
100
101
|
const [orderId, setOrderId] = useState(loadOrder);
|
|
101
102
|
const [srcChainId, setSrcChainId] = useState(isMainnet ? base.id : baseSepolia.id);
|
|
102
103
|
// Get token list for token balance check
|
|
@@ -344,7 +345,7 @@ export function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", re
|
|
|
344
345
|
? "Receive NFT at"
|
|
345
346
|
: orderType === OrderType.JoinTournament
|
|
346
347
|
? "Join for"
|
|
347
|
-
: "Recipient" }), _jsx("div", { children: _jsxs(Button, { variant: "outline", className: "w-full justify-between border-none p-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [recipientImageUrl && (_jsx("img", { src: recipientImageUrl, alt: recipientImageUrl, className: "bg-b3-react-foreground size-7 rounded-full object-cover opacity-100" })), _jsxs("div", { className: "flex flex-col items-start gap-1", children: [recipientEnsName && _jsxs("span", { children: ["@", recipientEnsName] }), _jsx("span", { children: centerTruncate(recipientAddress) })] })] }), _jsx(ChevronRightCircle, { className: "ml-2 size-4 shrink-0 opacity-50" })] }) })] })) : null;
|
|
348
|
+
: "Recipient" }), _jsx("div", { children: _jsxs(Button, { variant: "outline", className: "w-full justify-between border-none p-0", onClick: () => setIsRecipientModalOpen(true), children: [_jsxs("div", { className: "flex items-center gap-2", children: [recipientImageUrl && (_jsx("img", { src: recipientImageUrl, alt: recipientImageUrl, className: "bg-b3-react-foreground size-7 rounded-full object-cover opacity-100" })), _jsxs("div", { className: "flex flex-col items-start gap-1", children: [recipientEnsName && _jsxs("span", { children: ["@", recipientEnsName] }), _jsx("span", { children: centerTruncate(recipientAddress) })] })] }), _jsx(ChevronRightCircle, { className: "ml-2 size-4 shrink-0 opacity-50" })] }) })] })) : null;
|
|
348
349
|
const historyView = (_jsx("div", { className: cn("mx-auto flex w-full max-w-2xl flex-col items-center p-5", mode === "modal" && "bg-b3-react-background"), children: _jsx(OrderHistory, { mode: mode, onBack: () => {
|
|
349
350
|
setActivePanel(PanelView.HISTORY);
|
|
350
351
|
}, onSelectOrder: onSelectOrder }) }));
|
|
@@ -402,20 +403,22 @@ export function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", re
|
|
|
402
403
|
}
|
|
403
404
|
: undefined, recipientEnsName: recipientEnsName, recipientImageUrl: recipientImageUrl }) }) })] })] }));
|
|
404
405
|
// Return the TransitionPanel with all views
|
|
405
|
-
return (
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
406
|
+
return (_jsxs(StyleRoot, { children: [_jsx(TransitionPanel, { activeIndex: orderId
|
|
407
|
+
? oat
|
|
408
|
+
? PanelView.ORDER_DETAILS
|
|
409
|
+
: PanelView.LOADING
|
|
410
|
+
: activePanel === PanelView.ORDER_DETAILS
|
|
411
|
+
? PanelView.CONFIRM_ORDER
|
|
412
|
+
: activePanel, className: cn("w-full"), variants: {
|
|
413
|
+
enter: { x: 300, opacity: 0 },
|
|
414
|
+
center: { x: 0, opacity: 1 },
|
|
415
|
+
exit: { x: -300, opacity: 0 },
|
|
416
|
+
}, transition: { type: "spring", stiffness: 300, damping: 30 }, children: [
|
|
417
|
+
_jsx("div", { className: "w-full", children: confirmOrderView }, "edit-recipient-view"),
|
|
418
|
+
_jsx("div", { className: "w-full", children: historyView }, "history-view"),
|
|
419
|
+
_jsx("div", { className: "w-full", children: orderDetailsView }, "order-details-view"),
|
|
420
|
+
_jsx("div", { className: "w-full", children: loadingView }, "loading-view"),
|
|
421
|
+
] }), _jsx(Dialog, { open: isRecipientModalOpen, onOpenChange: setIsRecipientModalOpen, children: _jsx(DialogContent, { className: "w-[420px] max-w-[calc(100vw-32px)] rounded-2xl p-3.5", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("div", { className: "text-as-primary font-semibold", children: "To address" }), _jsx(Input, { value: customRecipientAddress || "", onChange: e => setCustomRecipientAddress(e.target.value), placeholder: "Enter address", className: "h-12 rounded-lg", spellCheck: false }), _jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "w-full rounded-lg", onClick: () => {
|
|
422
|
+
setIsRecipientModalOpen(false);
|
|
423
|
+
}, children: "Save" })] }) }) })] }));
|
|
421
424
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
2
|
import { Dialog, DialogContent, Input, ShinyButton } from "../../../../global-account/react/index.js";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
4
|
export function EnterRecipientModal({ isOpenPasteRecipientAddress, setIsOpenPasteRecipientAddress, recipientAddress, setRecipientAddress, }) {
|
|
5
5
|
const [modalRecipientAddress, setModalRecipientAddress] = useState(recipientAddress || "");
|
|
6
6
|
useEffect(() => {
|
package/package.json
CHANGED
|
@@ -43,6 +43,9 @@ import {
|
|
|
43
43
|
useRouter,
|
|
44
44
|
useSearchParamsSSR,
|
|
45
45
|
useTokenBalancesByChain,
|
|
46
|
+
Dialog,
|
|
47
|
+
DialogContent,
|
|
48
|
+
Input,
|
|
46
49
|
} from "@b3dotfun/sdk/global-account/react";
|
|
47
50
|
import { cn } from "@b3dotfun/sdk/shared/utils";
|
|
48
51
|
import centerTruncate from "@b3dotfun/sdk/shared/utils/centerTruncate";
|
|
@@ -203,15 +206,17 @@ export function AnySpendCustom({
|
|
|
203
206
|
// Get current user's wallet
|
|
204
207
|
const currentWallet = useAccountWallet();
|
|
205
208
|
|
|
206
|
-
|
|
209
|
+
// Add state for recipient modal
|
|
210
|
+
const [isRecipientModalOpen, setIsRecipientModalOpen] = useState(false);
|
|
207
211
|
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
212
|
+
// Add state for custom recipient
|
|
213
|
+
const [customRecipientAddress, setCustomRecipientAddress] = useState<string | undefined>(recipientAddressProps);
|
|
214
|
+
|
|
215
|
+
// Update recipient logic to use custom recipient
|
|
216
|
+
const recipientAddress = customRecipientAddress || currentWallet.address;
|
|
217
|
+
const recipientPropsProfile = useBsmntProfile({ address: recipientAddress });
|
|
218
|
+
const recipientEnsName = recipientPropsProfile.data?.username?.replaceAll(".b3.fun", "");
|
|
219
|
+
const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
|
|
215
220
|
|
|
216
221
|
const [orderId, setOrderId] = useState<string | undefined>(loadOrder);
|
|
217
222
|
|
|
@@ -505,7 +510,11 @@ export function AnySpendCustom({
|
|
|
505
510
|
: "Recipient"}
|
|
506
511
|
</div>
|
|
507
512
|
<div>
|
|
508
|
-
<Button
|
|
513
|
+
<Button
|
|
514
|
+
variant="outline"
|
|
515
|
+
className="w-full justify-between border-none p-0"
|
|
516
|
+
onClick={() => setIsRecipientModalOpen(true)}
|
|
517
|
+
>
|
|
509
518
|
<div className="flex items-center gap-2">
|
|
510
519
|
{recipientImageUrl && (
|
|
511
520
|
<img
|
|
@@ -864,6 +873,32 @@ export function AnySpendCustom({
|
|
|
864
873
|
</div>,
|
|
865
874
|
]}
|
|
866
875
|
</TransitionPanel>
|
|
876
|
+
|
|
877
|
+
{/* Add EnterRecipientModal */}
|
|
878
|
+
<Dialog open={isRecipientModalOpen} onOpenChange={setIsRecipientModalOpen}>
|
|
879
|
+
<DialogContent className="w-[420px] max-w-[calc(100vw-32px)] rounded-2xl p-3.5">
|
|
880
|
+
<div className="flex flex-col gap-3">
|
|
881
|
+
<div className="text-as-primary font-semibold">To address</div>
|
|
882
|
+
<Input
|
|
883
|
+
value={customRecipientAddress || ""}
|
|
884
|
+
onChange={e => setCustomRecipientAddress(e.target.value)}
|
|
885
|
+
placeholder="Enter address"
|
|
886
|
+
className="h-12 rounded-lg"
|
|
887
|
+
spellCheck={false}
|
|
888
|
+
/>
|
|
889
|
+
<ShinyButton
|
|
890
|
+
accentColor={"hsl(var(--as-brand))"}
|
|
891
|
+
textColor="text-white"
|
|
892
|
+
className="w-full rounded-lg"
|
|
893
|
+
onClick={() => {
|
|
894
|
+
setIsRecipientModalOpen(false);
|
|
895
|
+
}}
|
|
896
|
+
>
|
|
897
|
+
Save
|
|
898
|
+
</ShinyButton>
|
|
899
|
+
</div>
|
|
900
|
+
</DialogContent>
|
|
901
|
+
</Dialog>
|
|
867
902
|
</StyleRoot>
|
|
868
903
|
);
|
|
869
904
|
}
|