@sudobility/heavymath_ui 0.0.9 → 0.0.11
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/components/auth/SiweAuthGate.d.ts +16 -0
- package/dist/components/auth/SiweAuthGate.d.ts.map +1 -0
- package/dist/components/auth/SiweAuthGate.js +108 -0
- package/dist/components/auth/SiweAuthGate.js.map +1 -0
- package/dist/components/discussion/CommentComposer.d.ts +11 -0
- package/dist/components/discussion/CommentComposer.d.ts.map +1 -0
- package/dist/components/discussion/CommentComposer.js +40 -0
- package/dist/components/discussion/CommentComposer.js.map +1 -0
- package/dist/components/discussion/CommentItem.d.ts +12 -0
- package/dist/components/discussion/CommentItem.d.ts.map +1 -0
- package/dist/components/discussion/CommentItem.js +38 -0
- package/dist/components/discussion/CommentItem.js.map +1 -0
- package/dist/components/discussion/CommentThread.d.ts +11 -0
- package/dist/components/discussion/CommentThread.d.ts.map +1 -0
- package/dist/components/discussion/CommentThread.js +6 -0
- package/dist/components/discussion/CommentThread.js.map +1 -0
- package/dist/components/discussion/DiscussionSection.d.ts +9 -0
- package/dist/components/discussion/DiscussionSection.d.ts.map +1 -0
- package/dist/components/discussion/DiscussionSection.js +49 -0
- package/dist/components/discussion/DiscussionSection.js.map +1 -0
- package/dist/components/discussion/index.d.ts +6 -0
- package/dist/components/discussion/index.d.ts.map +1 -0
- package/dist/components/discussion/index.js +5 -0
- package/dist/components/discussion/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +15 -11
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SiweAuthGate - Automatically triggers SIWE authentication when wallet connects.
|
|
3
|
+
* Must be placed below both AuthProvider and IndexerProvider in the component tree.
|
|
4
|
+
*
|
|
5
|
+
* When the wallet connects and no valid JWT exists in the auth store,
|
|
6
|
+
* this component silently initiates the SIWE flow:
|
|
7
|
+
* 1. Fetches nonce from server
|
|
8
|
+
* 2. Constructs SIWE message
|
|
9
|
+
* 3. Prompts user to sign
|
|
10
|
+
* 4. Verifies signature with server
|
|
11
|
+
* 5. Stores JWT in auth store
|
|
12
|
+
*/
|
|
13
|
+
export declare function SiweAuthGate({ children }: {
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=SiweAuthGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiweAuthGate.d.ts","sourceRoot":"","sources":["../../../src/components/auth/SiweAuthGate.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA0GvE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SiweAuthGate - Automatically triggers SIWE authentication when wallet connects.
|
|
4
|
+
* Must be placed below both AuthProvider and IndexerProvider in the component tree.
|
|
5
|
+
*
|
|
6
|
+
* When the wallet connects and no valid JWT exists in the auth store,
|
|
7
|
+
* this component silently initiates the SIWE flow:
|
|
8
|
+
* 1. Fetches nonce from server
|
|
9
|
+
* 2. Constructs SIWE message
|
|
10
|
+
* 3. Prompts user to sign
|
|
11
|
+
* 4. Verifies signature with server
|
|
12
|
+
* 5. Stores JWT in auth store
|
|
13
|
+
*/
|
|
14
|
+
import { useEffect, useRef } from 'react';
|
|
15
|
+
import { useSignMessage } from 'wagmi';
|
|
16
|
+
import { useAuth } from '../../context/WalletAuthContext';
|
|
17
|
+
import { useIndexer } from '../../context/IndexerContext';
|
|
18
|
+
import { useAuthStore } from '@sudobility/heavymath_indexer_client';
|
|
19
|
+
export function SiweAuthGate({ children }) {
|
|
20
|
+
const { address, isConnected } = useAuth();
|
|
21
|
+
const { indexerClient } = useIndexer();
|
|
22
|
+
const { signMessageAsync } = useSignMessage();
|
|
23
|
+
const { isAuthenticated, address: storedAddress, setSession, clearSession, } = useAuthStore();
|
|
24
|
+
const isAuthenticating = useRef(false);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
// Clear session if wallet disconnected
|
|
27
|
+
if (!isConnected) {
|
|
28
|
+
if (storedAddress) {
|
|
29
|
+
clearSession();
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Clear session if address changed
|
|
34
|
+
if (address && storedAddress && address.toLowerCase() !== storedAddress) {
|
|
35
|
+
clearSession();
|
|
36
|
+
}
|
|
37
|
+
// Skip if already authenticated or already in progress
|
|
38
|
+
if (isAuthenticated() || isAuthenticating.current || !address) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const authenticate = async () => {
|
|
42
|
+
isAuthenticating.current = true;
|
|
43
|
+
try {
|
|
44
|
+
// 1. Get nonce
|
|
45
|
+
const nonceResponse = await indexerClient.getNonce();
|
|
46
|
+
const nonce = nonceResponse.data?.nonce;
|
|
47
|
+
if (!nonce)
|
|
48
|
+
return;
|
|
49
|
+
// 2. Construct SIWE message
|
|
50
|
+
const domain = globalThis.location?.hostname || 'heavymath.io';
|
|
51
|
+
const origin = globalThis.location?.origin || 'https://heavymath.io';
|
|
52
|
+
const message = [
|
|
53
|
+
`${domain} wants you to sign in with your Ethereum account:`,
|
|
54
|
+
address,
|
|
55
|
+
'',
|
|
56
|
+
'Sign in to HeavyMath to participate in discussions.',
|
|
57
|
+
'',
|
|
58
|
+
`URI: ${origin}`,
|
|
59
|
+
`Version: 1`,
|
|
60
|
+
`Chain ID: 1`,
|
|
61
|
+
`Nonce: ${nonce}`,
|
|
62
|
+
`Issued At: ${new Date().toISOString()}`,
|
|
63
|
+
].join('\n');
|
|
64
|
+
// 3. Sign message
|
|
65
|
+
const signature = await signMessageAsync({ message });
|
|
66
|
+
// 4. Verify with server
|
|
67
|
+
const verifyResponse = await indexerClient.verifySiwe(message, signature);
|
|
68
|
+
if (verifyResponse.data) {
|
|
69
|
+
setSession(verifyResponse.data.token, verifyResponse.data.address, verifyResponse.data.expiresAt);
|
|
70
|
+
}
|
|
71
|
+
// 5. Auto-drip ETH if balance is low
|
|
72
|
+
try {
|
|
73
|
+
const baseUrl = indexerClient['baseUrl'];
|
|
74
|
+
const resp = await fetch(`${baseUrl}/api/faucet/eth`, {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: { 'Content-Type': 'application/json' },
|
|
77
|
+
body: JSON.stringify({ address: address.toLowerCase() }),
|
|
78
|
+
});
|
|
79
|
+
if (resp.ok) {
|
|
80
|
+
console.debug('[SiweAuthGate] ETH faucet drip sent');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Silently fail — faucet is optional
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// User rejected signature or network error — silently fail
|
|
89
|
+
console.debug('[SiweAuthGate] Authentication skipped:', error);
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
isAuthenticating.current = false;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
authenticate();
|
|
96
|
+
}, [
|
|
97
|
+
address,
|
|
98
|
+
isConnected,
|
|
99
|
+
storedAddress,
|
|
100
|
+
isAuthenticated,
|
|
101
|
+
indexerClient,
|
|
102
|
+
signMessageAsync,
|
|
103
|
+
setSession,
|
|
104
|
+
clearSession,
|
|
105
|
+
]);
|
|
106
|
+
return _jsx(_Fragment, { children: children });
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=SiweAuthGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiweAuthGate.js","sourceRoot":"","sources":["../../../src/components/auth/SiweAuthGate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CommentData } from '@sudobility/heavymath_indexer_client';
|
|
2
|
+
export interface CommentComposerProps {
|
|
3
|
+
onSubmit: (content: string, parentId?: number, mentionedAddress?: string) => Promise<void>;
|
|
4
|
+
isSubmitting?: boolean;
|
|
5
|
+
isAuthenticated: boolean;
|
|
6
|
+
isLocked: boolean;
|
|
7
|
+
replyingTo?: CommentData | null;
|
|
8
|
+
onCancelReply?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function CommentComposer({ onSubmit, isSubmitting, isAuthenticated, isLocked, replyingTo, onCancelReply, }: CommentComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=CommentComposer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentComposer.d.ts","sourceRoot":"","sources":["../../../src/components/discussion/CommentComposer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CACR,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,YAAoB,EACpB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,aAAa,GACd,EAAE,oBAAoB,2CAmItB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import ReactMarkdown from 'react-markdown';
|
|
4
|
+
import rehypeSanitize from 'rehype-sanitize';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { formatAddress } from '../../utils/format';
|
|
7
|
+
export function CommentComposer({ onSubmit, isSubmitting = false, isAuthenticated, isLocked, replyingTo, onCancelReply, }) {
|
|
8
|
+
const { t } = useTranslation();
|
|
9
|
+
const [content, setContent] = useState('');
|
|
10
|
+
const [showPreview, setShowPreview] = useState(false);
|
|
11
|
+
const handleSubmit = useCallback(async () => {
|
|
12
|
+
if (!content.trim() || isSubmitting)
|
|
13
|
+
return;
|
|
14
|
+
await onSubmit(content.trim(), replyingTo?.id, replyingTo?.authorAddress);
|
|
15
|
+
setContent('');
|
|
16
|
+
setShowPreview(false);
|
|
17
|
+
onCancelReply?.();
|
|
18
|
+
}, [content, isSubmitting, onSubmit, replyingTo, onCancelReply]);
|
|
19
|
+
const handleKeyDown = useCallback((e) => {
|
|
20
|
+
if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {
|
|
21
|
+
handleSubmit();
|
|
22
|
+
}
|
|
23
|
+
}, [handleSubmit]);
|
|
24
|
+
if (isLocked) {
|
|
25
|
+
return (_jsx("div", { className: 'p-4 text-center text-sm text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/50 rounded-lg', children: t('discussion.closed', 'This discussion is closed.') }));
|
|
26
|
+
}
|
|
27
|
+
if (!isAuthenticated) {
|
|
28
|
+
return (_jsx("div", { className: 'p-4 text-center text-sm text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/50 rounded-lg', children: t('discussion.sign_in_to_comment', 'Connect and sign in with your wallet to comment.') }));
|
|
29
|
+
}
|
|
30
|
+
return (_jsxs("div", { className: 'space-y-2', children: [replyingTo && (_jsxs("div", { className: 'flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400', children: [_jsxs("span", { children: ["Replying to", ' ', _jsx("span", { className: 'font-medium text-blue-600 dark:text-blue-400', children: formatAddress(replyingTo.authorAddress) })] }), _jsx("button", { onClick: onCancelReply, className: 'text-gray-400 hover:text-gray-600 dark:hover:text-gray-300', children: "x" })] })), _jsxs("div", { className: 'flex border-b border-gray-200 dark:border-gray-700', children: [_jsx("button", { onClick: () => setShowPreview(false), className: `px-3 py-1.5 text-sm font-medium border-b-2 -mb-px ${!showPreview
|
|
31
|
+
? 'border-blue-500 text-blue-600 dark:text-blue-400'
|
|
32
|
+
: 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400'}`, children: "Write" }), _jsx("button", { onClick: () => setShowPreview(true), className: `px-3 py-1.5 text-sm font-medium border-b-2 -mb-px ${showPreview
|
|
33
|
+
? 'border-blue-500 text-blue-600 dark:text-blue-400'
|
|
34
|
+
: 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400'}`, children: "Preview" })] }), showPreview ? (_jsx("div", { className: 'min-h-[80px] p-3 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900', children: content.trim() ? (_jsx("div", { className: 'prose prose-sm dark:prose-invert max-w-none', children: _jsx(ReactMarkdown, { rehypePlugins: [rehypeSanitize], children: content }) })) : (_jsx("span", { className: 'text-gray-400 text-sm', children: "Nothing to preview" })) })) : (_jsx("textarea", { value: content, onChange: e => setContent(e.target.value), onKeyDown: handleKeyDown, placeholder: t('discussion.post_comment', 'Write a comment... (Markdown supported)'), rows: 3, maxLength: 2000, className: 'w-full p-3 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900 text-sm text-gray-900 dark:text-gray-100 placeholder-gray-400 resize-y focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent' })), _jsxs("div", { className: 'flex items-center justify-between', children: [_jsxs("span", { className: 'text-xs text-gray-400', children: [content.length, "/2000"] }), _jsx("button", { onClick: handleSubmit, disabled: !content.trim() || isSubmitting, className: 'px-4 py-1.5 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-colors', children: isSubmitting
|
|
35
|
+
? '...'
|
|
36
|
+
: replyingTo
|
|
37
|
+
? t('discussion.reply', 'Reply')
|
|
38
|
+
: t('discussion.post_comment', 'Comment') })] })] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=CommentComposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentComposer.js","sourceRoot":"","sources":["../../../src/components/discussion/CommentComposer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CommentData } from '@sudobility/heavymath_indexer_client';
|
|
2
|
+
export interface CommentItemProps {
|
|
3
|
+
comment: CommentData;
|
|
4
|
+
currentAddress?: string;
|
|
5
|
+
isAdmin?: boolean;
|
|
6
|
+
onReply?: (comment: CommentData) => void;
|
|
7
|
+
onDelete?: (commentId: number) => void;
|
|
8
|
+
isDeleting?: boolean;
|
|
9
|
+
indented?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function CommentItem({ comment, currentAddress, isAdmin, onReply, onDelete, isDeleting, indented, }: CommentItemProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=CommentItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentItem.d.ts","sourceRoot":"","sources":["../../../src/components/discussion/CommentItem.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAaD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,cAAc,EACd,OAAe,EACf,OAAO,EACP,QAAQ,EACR,UAAkB,EAClB,QAAgB,GACjB,EAAE,gBAAgB,2CAwFlB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import ReactMarkdown from 'react-markdown';
|
|
4
|
+
import rehypeSanitize from 'rehype-sanitize';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { formatAddress } from '../../utils/format';
|
|
7
|
+
function timeAgo(dateStr) {
|
|
8
|
+
const seconds = Math.floor((Date.now() - new Date(dateStr).getTime()) / 1000);
|
|
9
|
+
if (seconds < 60)
|
|
10
|
+
return 'just now';
|
|
11
|
+
const minutes = Math.floor(seconds / 60);
|
|
12
|
+
if (minutes < 60)
|
|
13
|
+
return `${minutes}m ago`;
|
|
14
|
+
const hours = Math.floor(minutes / 60);
|
|
15
|
+
if (hours < 24)
|
|
16
|
+
return `${hours}h ago`;
|
|
17
|
+
const days = Math.floor(hours / 24);
|
|
18
|
+
return `${days}d ago`;
|
|
19
|
+
}
|
|
20
|
+
export function CommentItem({ comment, currentAddress, isAdmin = false, onReply, onDelete, isDeleting = false, indented = false, }) {
|
|
21
|
+
const { t } = useTranslation();
|
|
22
|
+
const canDelete = !comment.isDeleted &&
|
|
23
|
+
(currentAddress?.toLowerCase() === comment.authorAddress || isAdmin);
|
|
24
|
+
const handleDelete = useCallback(() => {
|
|
25
|
+
if (onDelete && canDelete) {
|
|
26
|
+
onDelete(comment.id);
|
|
27
|
+
}
|
|
28
|
+
}, [onDelete, canDelete, comment.id]);
|
|
29
|
+
const handleReply = useCallback(() => {
|
|
30
|
+
if (onReply) {
|
|
31
|
+
onReply(comment);
|
|
32
|
+
}
|
|
33
|
+
}, [onReply, comment]);
|
|
34
|
+
return (_jsx("div", { className: `${indented ? 'ml-8 pl-4 border-l-2 border-gray-200 dark:border-gray-700' : ''}`, children: _jsxs("div", { className: 'flex items-start gap-3 py-3', children: [_jsx("div", { className: 'w-8 h-8 rounded-full flex-shrink-0', style: {
|
|
35
|
+
backgroundColor: `hsl(${parseInt(comment.authorAddress.slice(2, 8), 16) % 360}, 65%, 55%)`,
|
|
36
|
+
} }), _jsxs("div", { className: 'flex-1 min-w-0', children: [_jsxs("div", { className: 'flex items-center gap-2 text-sm', children: [_jsx("span", { className: 'font-medium text-gray-900 dark:text-gray-100', children: formatAddress(comment.authorAddress) }), _jsx("span", { className: 'text-gray-500 dark:text-gray-400', children: timeAgo(comment.createdAt) })] }), _jsxs("div", { className: 'mt-1 text-sm text-gray-800 dark:text-gray-200', children: [comment.mentionedAddress && (_jsxs("span", { className: 'text-blue-600 dark:text-blue-400 font-medium mr-1', children: ["@", formatAddress(comment.mentionedAddress)] })), comment.isDeleted ? (_jsxs("span", { className: 'italic text-gray-500 dark:text-gray-400', children: ["[", t('discussion.comment_deleted', 'deleted'), "]"] })) : (_jsx("div", { className: 'prose prose-sm dark:prose-invert max-w-none [&>p]:my-1', children: _jsx(ReactMarkdown, { rehypePlugins: [rehypeSanitize], children: comment.content }) }))] }), !comment.isDeleted && (_jsxs("div", { className: 'flex items-center gap-3 mt-1', children: [onReply && (_jsx("button", { onClick: handleReply, className: 'text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200', children: t('discussion.reply', 'Reply') })), canDelete && (_jsx("button", { onClick: handleDelete, disabled: isDeleting, className: 'text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 disabled:opacity-50', children: isDeleting ? '...' : t('discussion.delete', 'Delete') }))] }))] })] }) }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=CommentItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentItem.js","sourceRoot":"","sources":["../../../src/components/discussion/CommentItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CommentData } from '@sudobility/heavymath_indexer_client';
|
|
2
|
+
export interface CommentThreadProps {
|
|
3
|
+
comment: CommentData;
|
|
4
|
+
currentAddress?: string;
|
|
5
|
+
isAdmin?: boolean;
|
|
6
|
+
onReply?: (comment: CommentData) => void;
|
|
7
|
+
onDelete?: (commentId: number) => void;
|
|
8
|
+
deletingCommentId?: number | null;
|
|
9
|
+
}
|
|
10
|
+
export declare function CommentThread({ comment, currentAddress, isAdmin, onReply, onDelete, deletingCommentId, }: CommentThreadProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=CommentThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../../src/components/discussion/CommentThread.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,iBAAiB,GAClB,EAAE,kBAAkB,2CAgCpB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CommentItem } from './CommentItem';
|
|
3
|
+
export function CommentThread({ comment, currentAddress, isAdmin, onReply, onDelete, deletingCommentId, }) {
|
|
4
|
+
return (_jsxs("div", { className: 'border-b border-gray-100 dark:border-gray-800 last:border-b-0', children: [_jsx(CommentItem, { comment: comment, currentAddress: currentAddress, isAdmin: isAdmin, onReply: onReply, onDelete: onDelete, isDeleting: deletingCommentId === comment.id }), comment.replies && comment.replies.length > 0 && (_jsx("div", { className: 'mb-2', children: comment.replies.map(reply => (_jsx(CommentItem, { comment: reply, currentAddress: currentAddress, isAdmin: isAdmin, onReply: onReply, onDelete: onDelete, isDeleting: deletingCommentId === reply.id, indented: true }, reply.id))) }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=CommentThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../../src/components/discussion/CommentThread.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,iBAAiB,GACE;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,+DAA+D,aAE5E,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAAC,EAAE,GAC5C,EAGD,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChD,cAAK,SAAS,EAAC,MAAM,YAClB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5B,KAAC,WAAW,IAEV,OAAO,EAAE,KAAK,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,iBAAiB,KAAK,KAAK,CAAC,EAAE,EAC1C,QAAQ,UAPH,KAAK,CAAC,EAAE,CAQb,CACH,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IndexerClient, SubjectType } from '@sudobility/heavymath_indexer_client';
|
|
2
|
+
export interface DiscussionSectionProps {
|
|
3
|
+
client: IndexerClient;
|
|
4
|
+
subjectType: SubjectType;
|
|
5
|
+
sport: string;
|
|
6
|
+
subjectId: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function DiscussionSection({ client, subjectType, sport, subjectId, }: DiscussionSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=DiscussionSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscussionSection.d.ts","sourceRoot":"","sources":["../../../src/components/discussion/DiscussionSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAGb,WAAW,EACZ,MAAM,sCAAsC,CAAC;AAW9C,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,WAAW,EACX,KAAK,EACL,SAAS,GACV,EAAE,sBAAsB,2CAkHxB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { useDiscussionComments, usePostComment, useDeleteComment, useAuthSession, } from '@sudobility/heavymath_indexer_client';
|
|
5
|
+
import { useDiscussionForEntity } from '@sudobility/heavymath_lib';
|
|
6
|
+
import { CommentThread } from './CommentThread';
|
|
7
|
+
import { CommentComposer } from './CommentComposer';
|
|
8
|
+
export function DiscussionSection({ client, subjectType, sport, subjectId, }) {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const [page, setPage] = useState(1);
|
|
11
|
+
const [replyingTo, setReplyingTo] = useState(null);
|
|
12
|
+
const [deletingCommentId, setDeletingCommentId] = useState(null);
|
|
13
|
+
const query = { subjectType, sport, subjectId };
|
|
14
|
+
const { discussion, isLocked } = useDiscussionForEntity(client, query);
|
|
15
|
+
const { comments, pagination, isLoading } = useDiscussionComments(client, discussion?.id, {
|
|
16
|
+
page,
|
|
17
|
+
limit: 20,
|
|
18
|
+
sort: 'oldest',
|
|
19
|
+
});
|
|
20
|
+
const { isAuthenticated: isAuthed, address } = useAuthSession();
|
|
21
|
+
const postComment = usePostComment(client);
|
|
22
|
+
const deleteComment = useDeleteComment(client);
|
|
23
|
+
const canPost = isAuthed && !isLocked;
|
|
24
|
+
const handleSubmit = useCallback(async (content, parentId, mentionedAddress) => {
|
|
25
|
+
await postComment.mutateAsync({
|
|
26
|
+
subjectType,
|
|
27
|
+
sport,
|
|
28
|
+
subjectId,
|
|
29
|
+
content,
|
|
30
|
+
parentId,
|
|
31
|
+
mentionedAddress,
|
|
32
|
+
});
|
|
33
|
+
}, [postComment, subjectType, sport, subjectId]);
|
|
34
|
+
const handleDelete = useCallback(async (commentId) => {
|
|
35
|
+
setDeletingCommentId(commentId);
|
|
36
|
+
try {
|
|
37
|
+
await deleteComment.mutateAsync(commentId);
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
setDeletingCommentId(null);
|
|
41
|
+
}
|
|
42
|
+
}, [deleteComment]);
|
|
43
|
+
const handleReply = useCallback((comment) => {
|
|
44
|
+
setReplyingTo(comment);
|
|
45
|
+
}, []);
|
|
46
|
+
return (_jsxs("div", { className: 'space-y-4', children: [isLoading ? (_jsx("div", { className: 'py-8 text-center text-sm text-gray-500 dark:text-gray-400', children: "Loading..." })) : comments.length === 0 ? (_jsx("div", { className: 'py-8 text-center text-sm text-gray-500 dark:text-gray-400', children: t('discussion.no_comments', 'No comments yet. Be the first to comment!') })) : (_jsxs("div", { children: [comments.map(comment => (_jsx(CommentThread, { comment: comment, currentAddress: address ?? undefined, onReply: canPost ? handleReply : undefined, onDelete: handleDelete, deletingCommentId: deletingCommentId }, comment.id))), pagination && page * pagination.limit < pagination.total && (_jsx("button", { onClick: () => setPage(p => p + 1), className: 'w-full py-2 text-sm text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300', children: t('discussion.load_more', 'Load more comments') }))] })), _jsx(CommentComposer, { onSubmit: handleSubmit, isSubmitting: postComment.isPending, isAuthenticated: isAuthed, isLocked: isLocked, replyingTo: replyingTo, onCancelReply: () => setReplyingTo(null) }), postComment.isError && (_jsx("div", { className: 'text-sm text-red-600 dark:text-red-400', children: postComment.error?.message ||
|
|
47
|
+
t('discussion.moderation_error', 'Failed to post comment.') }))] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=DiscussionSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscussionSection.js","sourceRoot":"","sources":["../../../src/components/discussion/DiscussionSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DiscussionSection } from './DiscussionSection';
|
|
2
|
+
export type { DiscussionSectionProps } from './DiscussionSection';
|
|
3
|
+
export { CommentComposer } from './CommentComposer';
|
|
4
|
+
export { CommentThread } from './CommentThread';
|
|
5
|
+
export { CommentItem } from './CommentItem';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/discussion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/discussion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -49,6 +49,9 @@ export { WalletConnectionModal } from './components/wallet/WalletConnectionModal
|
|
|
49
49
|
export { default as ConnectedWalletMenu } from './components/wallet/ConnectedWalletMenu';
|
|
50
50
|
export { ProtectedRoute } from './components/wallet/ProtectedRoute';
|
|
51
51
|
export { DealerRoute } from './components/wallet/DealerRoute';
|
|
52
|
+
export { SiweAuthGate } from './components/auth/SiweAuthGate';
|
|
53
|
+
export { DiscussionSection } from './components/discussion';
|
|
54
|
+
export type { DiscussionSectionProps } from './components/discussion';
|
|
52
55
|
export * from './components/icons';
|
|
53
56
|
export { DealerNFTList } from './components/dealer/DealerNFTList';
|
|
54
57
|
export { DealerNFTSelector } from './components/dealer/DealerNFTSelector';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -50,6 +50,10 @@ export { WalletConnectionModal } from './components/wallet/WalletConnectionModal
|
|
|
50
50
|
export { default as ConnectedWalletMenu } from './components/wallet/ConnectedWalletMenu';
|
|
51
51
|
export { ProtectedRoute } from './components/wallet/ProtectedRoute';
|
|
52
52
|
export { DealerRoute } from './components/wallet/DealerRoute';
|
|
53
|
+
// Components - Auth
|
|
54
|
+
export { SiweAuthGate } from './components/auth/SiweAuthGate';
|
|
55
|
+
// Components - Discussion
|
|
56
|
+
export { DiscussionSection } from './components/discussion';
|
|
53
57
|
// Components - Icons
|
|
54
58
|
export * from './components/icons';
|
|
55
59
|
// Components - Dealer
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAchF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOpE,YAAY;AACZ,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D,MAAM;AACN,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU;AACV,OAAO,EACL,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEvE,iBAAiB;AACjB,cAAc,SAAS,CAAC;AAExB,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,sBAAsB;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,sBAAsB;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,qBAAqB;AACrB,cAAc,oBAAoB,CAAC;AAEnC,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudobility/heavymath_ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"description": "Shared UI components, hooks, and utilities for Heavymath prediction market apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"verify": "bun run typecheck && bun run lint && bun run test && bun run format:check"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"@sudobility/components": "^5.0.
|
|
29
|
+
"@sudobility/components": "^5.0.67",
|
|
30
30
|
"@sudobility/design": "^1.1.30",
|
|
31
31
|
"@sudobility/di": "^1.5.56",
|
|
32
|
-
"@sudobility/heavymath_contracts": "^0.1.
|
|
33
|
-
"@sudobility/heavymath_indexer_client": "^0.0.
|
|
34
|
-
"@sudobility/heavymath_lib": "^0.0.
|
|
35
|
-
"@sudobility/heavymath_types": "^0.0.
|
|
32
|
+
"@sudobility/heavymath_contracts": "^0.1.66",
|
|
33
|
+
"@sudobility/heavymath_indexer_client": "^0.0.51",
|
|
34
|
+
"@sudobility/heavymath_lib": "^0.0.76",
|
|
35
|
+
"@sudobility/heavymath_types": "^0.0.29",
|
|
36
36
|
"@sudobility/types": "^1.9.62",
|
|
37
37
|
"@sudobility/web3-components": "^2.0.15",
|
|
38
38
|
"@heroicons/react": ">=2.0.0",
|
|
@@ -49,13 +49,13 @@
|
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@heroicons/react": "^2.2.0",
|
|
52
|
-
"@sudobility/components": "^5.0.
|
|
52
|
+
"@sudobility/components": "^5.0.67",
|
|
53
53
|
"@sudobility/design": "^1.1.30",
|
|
54
54
|
"@sudobility/di": "^1.5.56",
|
|
55
|
-
"@sudobility/heavymath_contracts": "^0.1.
|
|
56
|
-
"@sudobility/heavymath_indexer_client": "^0.0.
|
|
57
|
-
"@sudobility/heavymath_lib": "^0.0.
|
|
58
|
-
"@sudobility/heavymath_types": "^0.0.
|
|
55
|
+
"@sudobility/heavymath_contracts": "^0.1.66",
|
|
56
|
+
"@sudobility/heavymath_indexer_client": "^0.0.51",
|
|
57
|
+
"@sudobility/heavymath_lib": "^0.0.76",
|
|
58
|
+
"@sudobility/heavymath_types": "^0.0.29",
|
|
59
59
|
"@sudobility/types": "^1.9.62",
|
|
60
60
|
"@sudobility/web3-components": "^2.0.15",
|
|
61
61
|
"@tanstack/react-query": "^5.90.5",
|
|
@@ -81,5 +81,9 @@
|
|
|
81
81
|
"repository": {
|
|
82
82
|
"type": "git",
|
|
83
83
|
"url": "https://github.com/sudobility-usf/heavymath_ui.git"
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"react-markdown": "^10.1.0",
|
|
87
|
+
"rehype-sanitize": "^6.0.0"
|
|
84
88
|
}
|
|
85
89
|
}
|