@quantabit/report-sdk 1.0.0
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/LICENSE +21 -0
- package/README.md +104 -0
- package/dist/index.cjs +813 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +794 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +83 -0
- package/types/index.d.ts +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/services/reportApi.js","../src/i18n/index.js","../src/context/ReportContext.jsx","../src/types/index.js","../src/components/ReportForm.jsx","../src/components/ReportButton.jsx"],"sourcesContent":["/**\n * Report SDK - API 客户端\n * 举报系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 举报 API 客户端\n */\nexport class ReportApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/report', config);\n }\n\n // ============ 举报提交 ============\n\n /**\n * 提交举报\n * @param {Object} data - 举报数据\n */\n async submit(data) {\n return this.post('/', data);\n }\n\n /**\n * 举报用户\n * @param {string} userId - 被举报用户 ID\n * @param {Object} data - 举报信息\n */\n async reportUser(userId, data) {\n return this.post('/user', { target_id: userId, ...data });\n }\n\n /**\n * 举报内容\n * @param {string} contentId - 内容 ID\n * @param {string} contentType - 内容类型\n * @param {Object} data - 举报信息\n */\n async reportContent(contentId, contentType, data) {\n return this.post('/content', {\n content_id: contentId,\n content_type: contentType,\n ...data,\n });\n }\n\n /**\n * 举报评论\n * @param {string} commentId - 评论 ID\n * @param {Object} data - 举报信息\n */\n async reportComment(commentId, data) {\n return this.post('/comment', { comment_id: commentId, ...data });\n }\n\n // ============ 举报查询 ============\n\n /**\n * 获取我的举报列表\n * @param {Object} params - 查询参数\n */\n async getMyReports(params = {}) {\n return this.get('/my', params);\n }\n\n /**\n * 获取举报详情\n * @param {string} reportId - 举报 ID\n */\n async getReport(reportId) {\n return this.get(`/${reportId}`);\n }\n\n /**\n * 获取举报处理进度\n * @param {string} reportId - 举报 ID\n */\n async getReportProgress(reportId) {\n return this.get(`/${reportId}/progress`);\n }\n\n /**\n * 撤回举报\n * @param {string} reportId - 举报 ID\n */\n async withdraw(reportId) {\n return this.post(`/${reportId}/withdraw`);\n }\n\n // ============ 举报类型 ============\n\n /**\n * 获取举报类型列表\n * @param {string} category - 分类\n */\n async getReportTypes(category = null) {\n const params = category ? { category } : {};\n return this.get('/types', params);\n }\n\n /**\n * 获取举报类型分类\n */\n async getReportCategories() {\n return this.get('/categories');\n }\n\n // ============ 管理员操作 ============\n\n /**\n * 获取待处理举报(管理员)\n * @param {Object} params - 查询参数\n */\n async getPendingReports(params = {}) {\n return this.get('/admin/pending', params);\n }\n\n /**\n * 处理举报(管理员)\n * @param {string} reportId - 举报 ID\n * @param {Object} decision - 处理决定\n */\n async handleReport(reportId, decision) {\n return this.post(`/admin/${reportId}/handle`, decision);\n }\n\n /**\n * 批量处理举报(管理员)\n * @param {string[]} reportIds - 举报 ID 列表\n * @param {Object} decision - 处理决定\n */\n async batchHandle(reportIds, decision) {\n return this.post('/admin/batch-handle', {\n report_ids: reportIds,\n ...decision,\n });\n }\n\n /**\n * 分配举报(管理员)\n * @param {string} reportId - 举报 ID\n * @param {string} handlerId - 处理人 ID\n */\n async assignReport(reportId, handlerId) {\n return this.post(`/admin/${reportId}/assign`, { handler_id: handlerId });\n }\n\n // ============ 统计 ============\n\n /**\n * 获取举报统计(管理员)\n * @param {Object} params - 统计参数\n */\n async getStats(params = {}) {\n return this.get('/admin/stats', params);\n }\n\n /**\n * 获取举报趋势(管理员)\n * @param {Object} params - 查询参数\n */\n async getTrend(params = {}) {\n return this.get('/admin/trend', params);\n }\n}\n\n// 创建默认实例\nexport const reportApi = new ReportApiClient();\n\n\n\nexport default reportApi;\n","/**\n * Report SDK - 国际化 i18n\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n loading: '加载中...',\n report: '举报',\n reports: '举报记录',\n \n // 举报类型\n typeContent: '内容违规',\n typeUser: '用户违规',\n typeSpam: '垃圾信息',\n typeFraud: '欺诈诈骗',\n typeHarassment: '骚扰辱骂',\n typeViolence: '暴力内容',\n typePorn: '色情内容',\n typeInfringement: '侵权假冒',\n typeOther: '其他',\n \n // 举报状态\n statusPending: '待处理',\n statusProcessing: '处理中',\n statusApproved: '已通过',\n statusRejected: '已驳回',\n statusClosed: '已关闭',\n \n // 表单\n selectType: '选择举报类型',\n describe: '问题描述',\n describePlaceholder: '请详细描述您遇到的问题...',\n uploadEvidence: '上传证据',\n uploadHint: '支持图片、视频、截图',\n contact: '联系方式(选填)',\n \n // 操作\n submit: '提交举报',\n cancel: '取消',\n viewDetail: '查看详情',\n \n // 结果\n submitSuccess: '举报提交成功',\n submitSuccessHint: '我们会尽快处理您的举报',\n \n // 审核(管理端)\n review: '审核',\n approve: '通过(已处理)',\n reject: '驳回',\n reviewNote: '审核备注',\n \n // 提示\n noReports: '暂无举报记录',\n thanksForReport: '感谢您的反馈',\n },\n \n en: {\n loading: 'Loading...',\n report: 'Report',\n reports: 'Reports',\n \n typeContent: 'Content Violation',\n typeUser: 'User Violation',\n typeSpam: 'Spam',\n typeFraud: 'Fraud',\n typeHarassment: 'Harassment',\n typeViolence: 'Violence',\n typePorn: 'Adult Content',\n typeInfringement: 'Infringement',\n typeOther: 'Other',\n \n statusPending: 'Pending',\n statusProcessing: 'Processing',\n statusApproved: 'Approved',\n statusRejected: 'Rejected',\n statusClosed: 'Closed',\n \n selectType: 'Select Report Type',\n describe: 'Description',\n describePlaceholder: 'Please describe the issue...',\n uploadEvidence: 'Upload Evidence',\n uploadHint: 'Images, videos, or screenshots',\n contact: 'Contact (Optional)',\n \n submit: 'Submit Report',\n cancel: 'Cancel',\n viewDetail: 'View Details',\n \n submitSuccess: 'Report Submitted',\n submitSuccessHint: 'We will review your report shortly',\n \n review: 'Review',\n approve: 'Approve',\n reject: 'Reject',\n reviewNote: 'Review Note',\n \n noReports: 'No reports',\n thanksForReport: 'Thank you for your feedback',\n },\n ja: {\n loading: '読み込み中...',\n report: '通報',\n reports: '通報履歴',\n \n typeContent: 'コンテンツ違反',\n typeUser: 'ユーザー違反',\n typeSpam: 'スパム',\n typeFraud: '詐欺',\n typeHarassment: '嫌がらせ',\n typeViolence: '暴力',\n typePorn: 'アダルトコンテンツ',\n typeInfringement: '権利侵害',\n typeOther: 'その他',\n \n statusPending: '保留中',\n statusProcessing: '処理中',\n statusApproved: '承認済み',\n statusRejected: '拒否されました',\n statusClosed: 'クローズ',\n \n selectType: '通報タイプを選択',\n describe: '説明',\n describePlaceholder: '問題を説明してください...',\n uploadEvidence: '証拠をアップロード',\n uploadHint: '画像、ビデオ、またはスクリーンショット',\n contact: '連絡先(任意)',\n \n submit: '通報を送信',\n cancel: 'キャンセル',\n viewDetail: '詳細を見る',\n \n submitSuccess: '通報を送信しました',\n submitSuccessHint: '通報をすぐに確認します',\n \n review: '審査',\n approve: '承認',\n reject: '拒否',\n reviewNote: '審査メモ',\n \n noReports: '通報はありません',\n thanksForReport: 'フィードバックをありがとうございます',\n },\n ko: {\n loading: '로딩 중...',\n report: '신고',\n reports: '신고 내역',\n \n typeContent: '콘텐츠 위반',\n typeUser: '사용자 위반',\n typeSpam: '스팸',\n typeFraud: '사기',\n typeHarassment: '괴롭힘',\n typeViolence: '폭력',\n typePorn: '음란물',\n typeInfringement: '권리 침해',\n typeOther: '기타',\n \n statusPending: '대기 중',\n statusProcessing: '처리 중',\n statusApproved: '승인됨',\n statusRejected: '거부됨',\n statusClosed: '닫힘',\n \n selectType: '신고 유형 선택',\n describe: '설명',\n describePlaceholder: '문제를 설명해주세요...',\n uploadEvidence: '증거 업로드',\n uploadHint: '이미지, 동영상 또는 스크린샷',\n contact: '연락처 (선택 사항)',\n \n submit: '신고 제출',\n cancel: '취소',\n viewDetail: '자세히 보기',\n \n submitSuccess: '신고가 제출되었습니다',\n submitSuccessHint: '곧 신고 내용을 확인하겠습니다',\n \n review: '검토',\n approve: '승인',\n reject: '거부',\n reviewNote: '검토 메모',\n \n noReports: '신고 내역 없음',\n thanksForReport: '피드백을 보내주셔서 감사합니다',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) {\n currentLanguage = lang;\n if (typeof window !== 'undefined') {\n localStorage.setItem('qbit_did_report_language', lang);\n }\n }\n}\n\nexport function getLanguage() {\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_did_report_language');\n if (saved && SUPPORTED_LANGUAGES.includes(saved)) {\n currentLanguage = saved;\n }\n }\n return currentLanguage;\n}\n\nexport function t(key, params) {\n const msgs = messages[getLanguage()] || messages.zh;\n let text = msgs[key] || key;\n if (params) {\n Object.keys(params).forEach(k => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), params[k]);\n });\n }\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * Report SDK - Context Provider\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { reportApi } from '../services/reportApi';\nimport { setLanguage } from '../i18n';\n\nconst ReportContext = createContext(null);\n\nexport function ReportProvider({ \n children, \n apiUrl, \n token, \n language = 'zh',\n onSubmit,\n onError,\n}) {\n const [myReports, setMyReports] = useState([]);\n const [pendingReports, setPendingReports] = useState([]);\n const [stats, setStats] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n if (apiUrl) reportApi.setBaseUrl(apiUrl);\n if (token) reportApi.setToken(token);\n if (language) setLanguage(language);\n }, [apiUrl, token, language]);\n\n const handleError = useCallback((err) => {\n setError(err.message);\n onError?.(err);\n }, [onError]);\n\n // ============ 用户操作 ============\n\n const submit = useCallback(async (data) => {\n setLoading(true);\n setError(null);\n try {\n const result = await reportApi.submit(data);\n onSubmit?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onSubmit]);\n\n const loadMyReports = useCallback(async (params = {}) => {\n setLoading(true);\n try {\n const result = await reportApi.getMyReports(params);\n const items = result.items || result.data || result || [];\n setMyReports(items);\n return items;\n } catch (err) {\n handleError(err);\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n // ============ 管理操作 ============\n\n const loadPendingReports = useCallback(async (params = {}) => {\n setLoading(true);\n try {\n const result = await reportApi.getPendingList(params);\n const items = result.items || result.data || result || [];\n setPendingReports(items);\n return items;\n } catch (err) {\n handleError(err);\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n const handleReport = useCallback(async (reportId, data) => {\n setLoading(true);\n try {\n const result = await reportApi.handle(reportId, data);\n await loadPendingReports();\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, loadPendingReports]);\n\n const loadStats = useCallback(async () => {\n try {\n const result = await reportApi.getStats();\n setStats(result);\n return result;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n const value = {\n myReports,\n pendingReports,\n stats,\n loading,\n error,\n submit,\n loadMyReports,\n loadPendingReports,\n handleReport,\n loadStats,\n api: reportApi,\n };\n\n return (\n <ReportContext.Provider value={value}>\n {children}\n </ReportContext.Provider>\n );\n}\n\nexport function useReport() {\n const context = useContext(ReportContext);\n if (!context) {\n throw new Error('useReport must be used within a ReportProvider');\n }\n return context;\n}\n\nexport default ReportContext;\n","/**\n * Report SDK - 类型定义\n */\n\n// 举报类型\nexport const ReportType = {\n CONTENT: 'content', // 内容违规\n USER: 'user', // 用户违规\n SPAM: 'spam', // 垃圾信息\n FRAUD: 'fraud', // 欺诈\n HARASSMENT: 'harassment', // 骚扰\n VIOLENCE: 'violence', // 暴力\n PORN: 'porn', // 色情\n INFRINGEMENT: 'infringement', // 侵权\n OTHER: 'other', // 其他\n};\n\n// 举报目标类型\nexport const TargetType = {\n POST: 'post', // 帖子\n COMMENT: 'comment', // 评论\n USER: 'user', // 用户\n MESSAGE: 'message', // 消息\n GROUP: 'group', // 群组\n PRODUCT: 'product', // 商品\n};\n\n// 举报状态\nexport const ReportStatus = {\n PENDING: 'pending', // 待处理\n PROCESSING: 'processing', // 处理中\n APPROVED: 'approved', // 已通过(举报成立)\n REJECTED: 'rejected', // 已驳回\n CLOSED: 'closed', // 已关闭\n};\n\n// 处理结果\nexport const HandleResult = {\n WARNING: 'warning', // 警告\n DELETE: 'delete', // 删除内容\n MUTE: 'mute', // 禁言\n BAN: 'ban', // 封禁\n NONE: 'none', // 无处理\n};\n\n/**\n * 举报类型配置\n */\nexport const ReportTypeConfig = {\n [ReportType.SPAM]: { icon: '🗑️', color: '#faad14' },\n [ReportType.FRAUD]: { icon: '⚠️', color: '#ff4d4f' },\n [ReportType.HARASSMENT]: { icon: '😡', color: '#eb2f96' },\n [ReportType.VIOLENCE]: { icon: '⚔️', color: '#cf1322' },\n [ReportType.PORN]: { icon: '🔞', color: '#722ed1' },\n [ReportType.INFRINGEMENT]: { icon: '©️', color: '#1890ff' },\n [ReportType.CONTENT]: { icon: '📝', color: '#fa8c16' },\n [ReportType.USER]: { icon: '👤', color: '#52c41a' },\n [ReportType.OTHER]: { icon: '❓', color: '#8c8c8c' },\n};\n\n/**\n * 创建默认举报\n */\nexport function createDefaultReport(overrides = {}) {\n return {\n id: null,\n reporter_did: null,\n target_type: TargetType.POST,\n target_id: null,\n report_type: ReportType.OTHER,\n description: '',\n evidence_urls: [], // 证据截图\n contact: '',\n status: ReportStatus.PENDING,\n handler_did: null, // 处理人\n handle_result: null, // 处理结果\n handle_note: '', // 处理备注\n created_at: null,\n handled_at: null,\n ...overrides,\n };\n}\n\n/**\n * 获取举报类型列表\n */\nexport function getReportTypes() {\n return Object.values(ReportType).map(type => ({\n value: type,\n ...ReportTypeConfig[type],\n }));\n}\n","/**\n * Report SDK - ReportForm 组件\n * 举报表单\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { useReport } from '../context/ReportContext';\nimport { ReportType, ReportTypeConfig, getReportTypes } from '../types';\n\nexport function ReportForm({\n targetType,\n targetId,\n onSuccess,\n onCancel,\n className = '',\n}) {\n const { submit, loading } = useReport();\n const [reportType, setReportType] = useState('');\n const [description, setDescription] = useState('');\n const [evidenceUrls, setEvidenceUrls] = useState([]);\n const [contact, setContact] = useState('');\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState(null);\n\n const reportTypes = getReportTypes();\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setError(null);\n\n if (!reportType) {\n setError('请选择举报类型');\n return;\n }\n if (!description.trim()) {\n setError('请填写问题描述');\n return;\n }\n\n try {\n const result = await submit({\n target_type: targetType,\n target_id: targetId,\n report_type: reportType,\n description: description.trim(),\n evidence_urls: evidenceUrls,\n contact,\n });\n setSubmitted(true);\n onSuccess?.(result);\n } catch (err) {\n setError(err.message);\n }\n };\n\n if (submitted) {\n return (\n <div className={`report-form report-success ${className}`}>\n <div className=\"success-icon\">✓</div>\n <h3>{t('submitSuccess')}</h3>\n <p>{t('submitSuccessHint')}</p>\n <button className=\"btn-close\" onClick={onCancel}>\n 关闭\n </button>\n </div>\n );\n }\n\n return (\n <div className={`report-form ${className}`}>\n <h3 className=\"report-form-title\">{t('report')}</h3>\n\n <form onSubmit={handleSubmit}>\n {/* 举报类型 */}\n <div className=\"form-group\">\n <label>{t('selectType')}</label>\n <div className=\"report-type-grid\">\n {reportTypes.map(type => {\n const config = ReportTypeConfig[type.value];\n return (\n <button\n key={type.value}\n type=\"button\"\n className={`report-type-item ${reportType === type.value ? 'selected' : ''}`}\n onClick={() => setReportType(type.value)}\n >\n <span className=\"type-icon\">{config.icon}</span>\n <span className=\"type-label\">{t(`type${type.value.charAt(0).toUpperCase() + type.value.slice(1)}`)}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* 问题描述 */}\n <div className=\"form-group\">\n <label>{t('describe')}</label>\n <textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder={t('describePlaceholder')}\n rows={4}\n maxLength={500}\n />\n <span className=\"char-count\">{description.length}/500</span>\n </div>\n\n {/* 联系方式 */}\n <div className=\"form-group\">\n <label>{t('contact')}</label>\n <input\n type=\"text\"\n value={contact}\n onChange={(e) => setContact(e.target.value)}\n placeholder=\"邮箱或手机号\"\n />\n </div>\n\n {/* 错误提示 */}\n {error && <div className=\"form-error\">{error}</div>}\n\n {/* 按钮 */}\n <div className=\"form-actions\">\n <button type=\"button\" className=\"btn-cancel\" onClick={onCancel}>\n {t('cancel')}\n </button>\n <button type=\"submit\" className=\"btn-submit\" disabled={loading}>\n {loading ? t('loading') : t('submit')}\n </button>\n </div>\n </form>\n </div>\n );\n}\n\nexport default ReportForm;\n","/**\n * Report SDK - ReportButton 组件\n * 举报按钮(点击弹出表单)\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { ReportForm } from './ReportForm';\n\nexport function ReportButton({\n targetType,\n targetId,\n onSuccess,\n iconOnly = false,\n className = '',\n}) {\n const [showForm, setShowForm] = useState(false);\n\n const handleSuccess = (result) => {\n setShowForm(false);\n onSuccess?.(result);\n };\n\n return (\n <>\n <button\n className={`report-button ${iconOnly ? 'icon-only' : ''} ${className}`}\n onClick={() => setShowForm(true)}\n title={t('report')}\n >\n <span className=\"report-icon\">🚨</span>\n {!iconOnly && <span className=\"report-text\">{t('report')}</span>}\n </button>\n\n {/* 举报弹窗 */}\n {showForm && (\n <div className=\"report-modal-overlay\" onClick={() => setShowForm(false)}>\n <div className=\"report-modal\" onClick={(e) => e.stopPropagation()}>\n <button className=\"modal-close\" onClick={() => setShowForm(false)}>✕</button>\n <ReportForm\n targetType={targetType}\n targetId={targetId}\n onSuccess={handleSuccess}\n onCancel={() => setShowForm(false)}\n />\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport default ReportButton;\n"],"names":["ReportApiClient","BaseApiClient","constructor","config","submit","data","post","reportUser","userId","target_id","reportContent","contentId","contentType","content_id","content_type","reportComment","commentId","comment_id","getMyReports","params","get","getReport","reportId","getReportProgress","withdraw","getReportTypes","category","getReportCategories","getPendingReports","handleReport","decision","batchHandle","reportIds","report_ids","assignReport","handlerId","handler_id","getStats","getTrend","reportApi","SUPPORTED_LANGUAGES","messages","zh","loading","report","reports","typeContent","typeUser","typeSpam","typeFraud","typeHarassment","typeViolence","typePorn","typeInfringement","typeOther","statusPending","statusProcessing","statusApproved","statusRejected","statusClosed","selectType","describe","describePlaceholder","uploadEvidence","uploadHint","contact","cancel","viewDetail","submitSuccess","submitSuccessHint","review","approve","reject","reviewNote","noReports","thanksForReport","en","ja","ko","currentLanguage","setLanguage","lang","includes","window","localStorage","setItem","getLanguage","saved","getItem","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","ReportContext","createContext","ReportProvider","children","apiUrl","token","language","onSubmit","onError","myReports","setMyReports","useState","pendingReports","setPendingReports","stats","setStats","setLoading","error","setError","useEffect","setBaseUrl","setToken","handleError","useCallback","err","message","result","loadMyReports","items","loadPendingReports","getPendingList","handle","loadStats","value","api","React","createElement","Provider","useReport","context","useContext","Error","ReportType","CONTENT","USER","SPAM","FRAUD","HARASSMENT","VIOLENCE","PORN","INFRINGEMENT","OTHER","TargetType","POST","COMMENT","MESSAGE","GROUP","PRODUCT","ReportStatus","PENDING","PROCESSING","APPROVED","REJECTED","CLOSED","HandleResult","WARNING","DELETE","MUTE","BAN","NONE","ReportTypeConfig","icon","color","createDefaultReport","overrides","id","reporter_did","target_type","report_type","description","evidence_urls","status","handler_did","handle_result","handle_note","created_at","handled_at","values","map","type","ReportForm","targetType","targetId","onSuccess","onCancel","className","reportType","setReportType","setDescription","evidenceUrls","setEvidenceUrls","setContact","submitted","setSubmitted","reportTypes","handleSubmit","e","preventDefault","trim","onClick","charAt","toUpperCase","slice","onChange","target","placeholder","rows","maxLength","length","disabled","ReportButton","iconOnly","showForm","setShowForm","handleSuccess","Fragment","title","stopPropagation"],"mappings":"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"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--report-primary:#ff4d4f;--report-primary-hover:#ff7875;--report-success:#52c41a;--report-warning:#faad14;--report-bg:#fff;--report-bg-secondary:#f5f5f5;--report-border:#d9d9d9;--report-text:#333;--report-text-secondary:#666;--report-text-muted:#999;--report-radius:8px;--report-shadow:0 4px 20px rgba(0,0,0,.15);--report-transition:all 0.2s ease}.report-button{align-items:center;background:transparent;border:none;border-radius:4px;color:var(--report-text-muted);cursor:pointer;display:inline-flex;font-size:13px;gap:6px;padding:6px 12px;transition:var(--report-transition)}.report-button:hover{background:rgba(255,77,79,.1);color:var(--report-primary)}.report-button.icon-only{padding:6px}.report-icon{font-size:16px}.report-modal-overlay{align-items:center;background:rgba(0,0,0,.5);bottom:0;display:flex;justify-content:center;left:0;padding:20px;position:fixed;right:0;top:0;z-index:10000}.report-modal{background:var(--report-bg);border-radius:var(--report-radius);box-shadow:var(--report-shadow);max-height:90vh;max-width:480px;overflow-y:auto;position:relative;width:100%}.modal-close{align-items:center;background:transparent;border:none;border-radius:50%;color:var(--report-text-muted);cursor:pointer;display:flex;font-size:16px;height:28px;justify-content:center;position:absolute;right:16px;top:16px;width:28px;z-index:1}.modal-close:hover{background:var(--report-bg-secondary);color:var(--report-text)}.report-form{padding:24px}.report-form-title{color:var(--report-text);font-size:18px;font-weight:600;margin:0 0 24px}.form-group{margin-bottom:20px}.form-group label{color:var(--report-text);display:block;font-size:14px;font-weight:500;margin-bottom:8px}.report-type-grid{display:grid;gap:8px;grid-template-columns:repeat(3,1fr)}.report-type-item{align-items:center;background:var(--report-bg-secondary);border:2px solid transparent;border-radius:var(--report-radius);color:var(--report-text-secondary);cursor:pointer;display:flex;flex-direction:column;font-size:12px;gap:6px;padding:12px 8px;transition:var(--report-transition)}.report-type-item:hover{background:#fff;border-color:var(--report-border)}.report-type-item.selected{background:rgba(255,77,79,.1);border-color:var(--report-primary);color:var(--report-primary)}.type-icon{font-size:24px}.type-label{line-height:1.2;text-align:center}.form-group textarea{background:var(--report-bg);border:1px solid var(--report-border);border-radius:var(--report-radius);box-sizing:border-box;color:var(--report-text);font-size:14px;padding:12px;resize:vertical;width:100%}.form-group textarea:focus{border-color:var(--report-primary);outline:none}.char-count{color:var(--report-text-muted);display:block;font-size:12px;margin-top:4px;text-align:right}.form-group input{border:1px solid var(--report-border);border-radius:var(--report-radius);box-sizing:border-box;font-size:14px;padding:10px 12px;width:100%}.form-group input:focus{border-color:var(--report-primary);outline:none}.form-error{background:rgba(255,77,79,.1);border-radius:var(--report-radius);color:var(--report-primary);font-size:13px;margin-bottom:16px;padding:10px}.form-actions{display:flex;gap:12px;margin-top:24px}.btn-cancel,.btn-close,.btn-submit{border:none;border-radius:var(--report-radius);cursor:pointer;flex:1;font-size:15px;font-weight:500;padding:12px;transition:var(--report-transition)}.btn-cancel{background:var(--report-bg-secondary);color:var(--report-text-secondary)}.btn-submit{background:var(--report-primary);color:#fff}.btn-submit:hover:not(:disabled){background:var(--report-primary-hover)}.btn-submit:disabled{cursor:not-allowed;opacity:.6}.btn-close{background:var(--report-primary);color:#fff}.report-success{padding:48px 24px;text-align:center}.success-icon{align-items:center;background:var(--report-success);border-radius:50%;color:#fff;display:flex;font-size:32px;height:64px;justify-content:center;margin:0 auto 20px;width:64px}.report-success h3{color:var(--report-text);font-size:18px;margin:0 0 8px}.report-success p{color:var(--report-text-muted);font-size:14px;margin:0 0 24px}@media (max-width:480px){.report-type-grid{grid-template-columns:repeat(2,1fr)}}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@quantabit/report-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "QuantaBit Report & Review SDK - Content/behavior reporting and review workflow",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.esm.js",
|
|
8
|
+
"types": "types/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"types"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.esm.js",
|
|
18
|
+
"require": "./dist/index.cjs",
|
|
19
|
+
"types": "./dist/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./styles": "./dist/styles.css",
|
|
22
|
+
"./styles.css": "./dist/styles.css"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "rollup -c",
|
|
26
|
+
"dev": "rollup -c -w",
|
|
27
|
+
"clean": "rm -rf dist",
|
|
28
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
29
|
+
"test": "jest --passWithNoTests"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"react": ">=17.0.0",
|
|
33
|
+
"react-dom": ">=17.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@babel/core": "^7.23.0",
|
|
37
|
+
"@babel/preset-react": "^7.23.0",
|
|
38
|
+
"@rollup/plugin-babel": "^6.0.0",
|
|
39
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
40
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
41
|
+
"rollup": "^4.0.0",
|
|
42
|
+
"rollup-plugin-postcss": "^4.0.0"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"report",
|
|
46
|
+
"moderation",
|
|
47
|
+
"review",
|
|
48
|
+
"abuse",
|
|
49
|
+
"quantabit"
|
|
50
|
+
],
|
|
51
|
+
"author": "QuantaBit Team",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public",
|
|
55
|
+
"registry": "https://registry.npmjs.org"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@quantabit/sdk-config": "^1.0.6"
|
|
59
|
+
},
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk.git",
|
|
63
|
+
"directory": "packages/report-sdk"
|
|
64
|
+
},
|
|
65
|
+
"homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/report-sdk#readme",
|
|
66
|
+
"bugs": {
|
|
67
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk/issues"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=18.0.0"
|
|
71
|
+
},
|
|
72
|
+
"sideEffects": [
|
|
73
|
+
"*.css"
|
|
74
|
+
],
|
|
75
|
+
"qbit": {
|
|
76
|
+
"privacy": {
|
|
77
|
+
"level": "functional",
|
|
78
|
+
"dataCollection": "Feature-related data for personalization. Requires user consent.",
|
|
79
|
+
"gdprCompliant": true,
|
|
80
|
+
"ccpaCompliant": true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @quantabit/report-sdk TypeScript Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Auto-generated type stubs. Enhance with specific types as the SDK matures.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { FC, ReactNode } from 'react';
|
|
8
|
+
|
|
9
|
+
// ============ Provider ============
|
|
10
|
+
|
|
11
|
+
export interface ReportProviderProps {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
apiUrl?: string;
|
|
14
|
+
token?: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
onError?: (error: Error) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export declare const ReportProvider: FC<ReportProviderProps>;
|
|
20
|
+
|
|
21
|
+
// ============ Components ============
|
|
22
|
+
|
|
23
|
+
export interface ReportFormProps {
|
|
24
|
+
className?: string;
|
|
25
|
+
style?: React.CSSProperties;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare const ReportForm: FC<ReportFormProps>;
|
|
30
|
+
|
|
31
|
+
export interface ReportButtonProps {
|
|
32
|
+
className?: string;
|
|
33
|
+
style?: React.CSSProperties;
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export declare const ReportButton: FC<ReportButtonProps>;
|
|
38
|
+
|
|
39
|
+
// ============ Hooks ============
|
|
40
|
+
|
|
41
|
+
export interface UseReportReturn {
|
|
42
|
+
data: any;
|
|
43
|
+
loading: boolean;
|
|
44
|
+
error: string | null;
|
|
45
|
+
[key: string]: any;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export declare function useReport(...args: any[]): UseReportReturn;
|
|
49
|
+
|
|
50
|
+
// ============ Services ============
|
|
51
|
+
|
|
52
|
+
export declare const reportApi: any;
|
|
53
|
+
|
|
54
|
+
export declare class ReportApiClient {
|
|
55
|
+
constructor(config?: Record<string, any>);
|
|
56
|
+
setToken(token: string): void;
|
|
57
|
+
setBaseUrl(url: string): void;
|
|
58
|
+
destroy(): void;
|
|
59
|
+
}
|
|
60
|
+
|