@quantabit/notification-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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/NotificationItem.jsx","../src/components/NotificationCenter.jsx","../src/components/NotificationBell.jsx","../src/services/notificationApi.js","../src/i18n/index.js","../src/context/NotificationContext.jsx","../src/icons/index.jsx","../src/components/NotificationList.jsx","../src/types/index.js","../src/components/NotificationSettings.jsx","../src/components/NotificationToast.jsx","../src/components/NotificationBadge.jsx","../src/components/AnnouncementBanner.jsx","../src/hooks/useNotifications.js"],"sourcesContent":["import React from'react';\nexport function NotificationItem({title,message,time,avatar,read=false,type='info',onRead,onClick,className=''}){\n const typeColors={info:'#3b82f6',success:'#22c55e',warning:'#f59e0b',error:'#ef4444'};\n return(<div className={`qn-item ${className}`} onClick={()=>{onClick?.();onRead?.();}}\n style={{display:'flex',gap:12,padding:'12px 20px',cursor:'pointer',transition:'all 0.15s',\n background:read?'transparent':'rgba(59,130,246,0.02)',borderBottom:'1px solid #f4f4f5'}}>\n {avatar?<img src={avatar} style={{width:36,height:36,borderRadius:'50%',objectFit:'cover',flexShrink:0}} alt=\"\"/>\n :<div style={{width:36,height:36,borderRadius:'50%',background:typeColors[type]+'18',display:'flex',\n alignItems:'center',justifyContent:'center',flexShrink:0}}>\n <div style={{width:8,height:8,borderRadius:'50%',background:typeColors[type]}}/>\n </div>}\n <div style={{flex:1,overflow:'hidden'}}>\n <div style={{fontSize:13,fontWeight:read?400:600,color:'#18181b',overflow:'hidden',textOverflow:'ellipsis',whiteSpace:'nowrap'}}>{title}</div>\n {message&&<div style={{fontSize:12,color:'#71717a',marginTop:2,lineHeight:1.4,display:'-webkit-box',WebkitLineClamp:2,WebkitBoxOrient:'vertical',overflow:'hidden'}}>{message}</div>}\n {time&&<div style={{fontSize:11,color:'#a1a1aa',marginTop:4}}>{time}</div>}\n </div>\n {!read&&<div style={{width:6,height:6,borderRadius:'50%',background:'#3b82f6',flexShrink:0,marginTop:4}}/>}\n </div>);\n}\n\n// 默认导出\nexport default NotificationItem;\n","import React from'react';\nimport{NotificationItem}from'./NotificationItem';\nexport function NotificationCenter({notifications=[],onRead,onReadAll,onClear,title='Notifications',emptyText='No notifications',className=''}){\n const unread=notifications.filter(n=>!n.read).length;\n return(<div className={`qn-center ${className}`} style={{width:360,background:'#fff',borderRadius:16,\n boxShadow:'0 12px 48px rgba(0,0,0,0.12)',border:'1px solid #e4e4e7',overflow:'hidden',fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif\"}}>\n <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',padding:'16px 20px',borderBottom:'1px solid #f4f4f5'}}>\n <div style={{display:'flex',alignItems:'center',gap:8}}>\n <span style={{fontSize:16,fontWeight:700}}>{title}</span>\n {unread>0&&<span style={{fontSize:11,fontWeight:700,background:'#ef4444',color:'#fff',borderRadius:10,padding:'1px 7px'}}>{unread}</span>}\n </div>\n <div style={{display:'flex',gap:8}}>\n {onReadAll&&<button onClick={onReadAll} style={{border:'none',background:'none',cursor:'pointer',fontSize:12,color:'#3b82f6',fontWeight:500}}>Mark all read</button>}\n {onClear&&<button onClick={onClear} style={{border:'none',background:'none',cursor:'pointer',fontSize:12,color:'#a1a1aa'}}>Clear</button>}\n </div>\n </div>\n <div style={{maxHeight:400,overflowY:'auto'}}>\n {notifications.length===0?<div style={{padding:40,textAlign:'center',color:'#a1a1aa',fontSize:13}}>{emptyText}</div>\n :notifications.map((n,i)=><NotificationItem key={n.id||i} {...n} onRead={()=>onRead?.(n.id||i)}/>)}\n </div>\n </div>);\n}\n","import React,{useState}from'react';\nimport{NotificationCenter}from'./NotificationCenter';\nexport function NotificationBell({notifications=[],onRead,onReadAll,onClear,size=20,className=''}){\n const[open,setOpen]=useState(false);const unread=notifications.filter(n=>!n.read).length;\n return(<div style={{position:'relative',display:'inline-flex'}}>\n <button onClick={()=>setOpen(!open)} className={`qn-bell ${className}`}\n style={{position:'relative',border:'none',background:'transparent',cursor:'pointer',padding:8,borderRadius:8,transition:'all 0.2s'}}>\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 01-3.46 0\"/></svg>\n {unread>0&&<span style={{position:'absolute',top:2,right:2,width:16,height:16,borderRadius:'50%',\n background:'#ef4444',color:'#fff',fontSize:10,fontWeight:700,display:'flex',alignItems:'center',\n justifyContent:'center',border:'2px solid #fff'}}>{unread>9?'9+':unread}</span>}\n </button>\n {open&&<div style={{position:'absolute',top:'100%',right:0,marginTop:8,zIndex:9999}}>\n <NotificationCenter notifications={notifications} onRead={onRead} onReadAll={onReadAll} onClear={onClear}/>\n </div>}\n </div>);\n}\n","/**\n * Notification SDK - API 客户端\n * 通知系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 通知 API 客户端\n */\nexport class NotificationApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/notification', config);\n }\n\n // ============ 通知查询 ============\n\n /**\n * 获取通知列表\n * @param {Object} params - 查询参数\n */\n async getNotifications(params = {}) {\n return this.get('/list', params);\n }\n\n /**\n * 获取通知详情\n * @param {string} notificationId - 通知 ID\n */\n async getNotification(notificationId) {\n return this.get(`/${notificationId}`);\n }\n\n /**\n * 获取未读通知数\n */\n async getUnreadCount() {\n return this.get('/unread-count');\n }\n\n /**\n * 按类型获取通知\n * @param {string} type - 通知类型\n * @param {Object} params - 查询参数\n */\n async getNotificationsByType(type, params = {}) {\n return this.get('/list', { type, ...params });\n }\n\n // ============ 通知操作 ============\n\n /**\n * 标记为已读\n * @param {string} notificationId - 通知 ID\n */\n async markAsRead(notificationId) {\n return this.post(`/${notificationId}/read`);\n }\n\n /**\n * 批量标记已读\n * @param {string[]} notificationIds - 通知 ID 列表\n */\n async batchMarkAsRead(notificationIds) {\n return this.post('/batch-read', { ids: notificationIds });\n }\n\n /**\n * 全部标记已读\n */\n async markAllAsRead() {\n return this.post('/read-all');\n }\n\n /**\n * 删除通知\n * @param {string} notificationId - 通知 ID\n */\n async deleteNotification(notificationId) {\n return this.delete(`/${notificationId}`);\n }\n\n /**\n * 批量删除通知\n * @param {string[]} notificationIds - 通知 ID 列表\n */\n async batchDelete(notificationIds) {\n return this.post('/batch-delete', { ids: notificationIds });\n }\n\n /**\n * 清空所有通知\n */\n async clearAll() {\n return this.delete('/all');\n }\n\n // ============ 通知设置 ============\n\n /**\n * 获取通知设置\n */\n async getSettings() {\n return this.get('/settings');\n }\n\n /**\n * 更新通知设置\n * @param {Object} settings - 设置数据\n */\n async updateSettings(settings) {\n return this.put('/settings', settings);\n }\n\n /**\n * 获取各类型通知设置\n */\n async getTypeSettings() {\n return this.get('/settings/types');\n }\n\n /**\n * 更新类型通知设置\n * @param {string} type - 通知类型\n * @param {Object} settings - 设置数据\n */\n async updateTypeSettings(type, settings) {\n return this.put(`/settings/types/${type}`, settings);\n }\n\n // ============ 设备管理 ============\n\n /**\n * 注册设备\n * @param {Object} device - 设备信息\n */\n async registerDevice(device) {\n return this.post('/devices', device);\n }\n\n /**\n * 更新设备 Token\n * @param {string} deviceId - 设备 ID\n * @param {string} token - 推送 Token\n */\n async updateDeviceToken(deviceId, token) {\n return this.put(`/devices/${deviceId}/token`, { token });\n }\n\n /**\n * 删除设备\n * @param {string} deviceId - 设备 ID\n */\n async removeDevice(deviceId) {\n return this.delete(`/devices/${deviceId}`);\n }\n\n /**\n * 获取我的设备列表\n */\n async getMyDevices() {\n return this.get('/devices');\n }\n\n // ============ 推送订阅 ============\n\n /**\n * 订阅主题\n * @param {string} topic - 主题\n */\n async subscribeToTopic(topic) {\n return this.post('/topics/subscribe', { topic });\n }\n\n /**\n * 取消订阅主题\n * @param {string} topic - 主题\n */\n async unsubscribeFromTopic(topic) {\n return this.post('/topics/unsubscribe', { topic });\n }\n\n /**\n * 获取已订阅主题\n */\n async getSubscribedTopics() {\n return this.get('/topics/subscribed');\n }\n\n // ============ 管理员操作 ============\n\n /**\n * 发送通知(管理员)\n * @param {Object} notification - 通知数据\n */\n async sendNotification(notification) {\n return this.post('/admin/send', notification);\n }\n\n /**\n * 批量发送通知(管理员)\n * @param {Object} notification - 通知数据\n * @param {string[]} userIds - 用户 ID 列表\n */\n async batchSendNotification(notification, userIds) {\n return this.post('/admin/batch-send', { ...notification, user_ids: userIds });\n }\n\n /**\n * 发送广播通知(管理员)\n * @param {Object} notification - 通知数据\n */\n async broadcastNotification(notification) {\n return this.post('/admin/broadcast', notification);\n }\n\n // ============ 隐私合规 ============\n\n /**\n * 清除所有通知和设备数据 — GDPR 第17条\n * @returns {Promise<object>} 清除结果\n */\n async clearAllUserData() {\n const results = {};\n try { results.notifications = await this.clearAll(); } catch (e) { results.notifError = e.message; }\n try {\n const devices = await this.getMyDevices();\n for (const d of (devices?.data || [])) {\n await this.removeDevice(d.id).catch(() => {});\n }\n results.devices = 'cleared';\n } catch (e) { results.deviceError = e.message; }\n return { cleared: true, timestamp: new Date().toISOString(), ...results };\n }\n\n /**\n * 获取隐私数据声明\n */\n getDataDisclosure() {\n return {\n sdk: '@quantabit/notification-sdk',\n privacyLevel: 'functional',\n consentRequired: false,\n collected: [\n { type: 'device_info', description: 'Device ID, push token, platform', retention: 'Until device unregistered' },\n { type: 'notification_history', description: 'Sent notification records', retention: '90 days' },\n { type: 'notification_preferences', description: 'User notification settings', retention: 'Until account deletion' },\n { type: 'topic_subscriptions', description: 'Subscribed notification topics', retention: 'Until unsubscribed' },\n ],\n gdprCapabilities: ['delete'],\n note: 'Notification delivery requires device registration. Users can unregister devices anytime.',\n };\n }\n}\n\n// 创建默认实例\nexport const notificationApi = new NotificationApiClient();\n\n\n\nexport default notificationApi;\n","export const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n en: {\n 'notif.title': 'Notifications',\n 'notif.empty': 'No notifications',\n 'notif.markAll': 'Mark all read',\n 'notif.clear': 'Clear',\n },\n zh: {\n 'notif.title': '通知',\n 'notif.empty': '暂无通知',\n 'notif.markAll': '全部已读',\n 'notif.clear': '清空',\n },\n ja: {\n 'notif.title': '通知',\n 'notif.empty': '通知はありません',\n 'notif.markAll': 'すべて既読にする',\n 'notif.clear': 'クリア',\n },\n ko: {\n 'notif.title': '알림',\n 'notif.empty': '알림이 없습니다',\n 'notif.markAll': '모두 읽음으로 표시',\n 'notif.clear': '지우기',\n },\n};\n\nlet currentLang = 'en';\n\nexport function initLanguage() {\n // 从 localStorage 或浏览器检测初始化语言\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_notification_lang');\n if (saved && SUPPORTED_LANGUAGES.includes(saved)) {\n currentLang = saved;\n }\n }\n return currentLang;\n}\n\nexport function setLanguage(l) {\n if (SUPPORTED_LANGUAGES.includes(l)) currentLang = l;\n}\n\nexport function getLanguage() {\n return currentLang;\n}\n\nexport function t(k, params = {}) {\n let text = messages[currentLang]?.[k] || messages.en?.[k] || k;\n Object.entries(params).forEach(([key, val]) => {\n text = text.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), val);\n });\n return text;\n}\n","/**\n * Notification SDK - React Context\n * 通知状态管理\n */\n\nimport React, { createContext, useContext, useState, useEffect, useCallback, useRef } from 'react';\nimport { notificationApi } from '../services/notificationApi';\nimport { initLanguage, setLanguage as setI18nLanguage, getLanguage } from '../i18n';\n\nconst NotificationContext = createContext(null);\n\n/**\n * 通知Provider组件\n */\nexport function NotificationProvider({ \n children, \n apiBaseUrl,\n getToken,\n language,\n enableWebSocket = true,\n wsUrl,\n onError,\n onNewNotification,\n}) {\n // 状态\n const [notifications, setNotifications] = useState([]);\n const [unreadCount, setUnreadCount] = useState(0);\n const [unreadByType, setUnreadByType] = useState({});\n const [announcements, setAnnouncements] = useState([]);\n const [preferences, setPreferences] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [connectionStatus, setConnectionStatus] = useState('disconnected');\n const [currentFilter, setCurrentFilter] = useState({ status: 'unread', type: null });\n const [pagination, setPagination] = useState({ page: 1, pageSize: 20, total: 0, hasMore: true });\n \n const initialized = useRef(false);\n\n // 初始化\n useEffect(() => {\n if (initialized.current) return;\n initialized.current = true;\n\n // 配置API\n notificationApi.configure({\n apiBaseUrl: apiBaseUrl || '/api/v1/notifications',\n getToken: getToken || (() => {\n if (typeof localStorage !== 'undefined') {\n return localStorage.getItem('access_token');\n }\n return null;\n }),\n getLanguage: () => getLanguage(),\n onError: (err) => {\n setError(err.message);\n onError?.(err);\n },\n });\n\n // 初始化语言\n if (language) {\n setI18nLanguage(language);\n } else {\n initLanguage();\n }\n\n // WebSocket连接状态回调\n notificationApi.setConnectionChangeHandler(setConnectionStatus);\n \n // 新通知回调\n notificationApi.setNewNotificationHandler((notification) => {\n setNotifications(prev => [notification, ...prev]);\n setUnreadCount(prev => prev + 1);\n onNewNotification?.(notification);\n });\n\n }, [apiBaseUrl, getToken, language, onError, onNewNotification]);\n\n // WebSocket连接管理\n useEffect(() => {\n if (enableWebSocket && getToken?.()) {\n notificationApi.connectWebSocket(wsUrl);\n }\n return () => {\n notificationApi.disconnectWebSocket();\n };\n }, [enableWebSocket, wsUrl, getToken]);\n\n // 获取通知列表\n const fetchNotifications = useCallback(async (options = {}) => {\n setLoading(true);\n setError(null);\n try {\n const result = await notificationApi.getNotifications({\n ...currentFilter,\n ...options,\n page: options.page || 1,\n pageSize: pagination.pageSize,\n });\n \n if (options.page === 1 || !options.page) {\n setNotifications(result.items || result.data || []);\n } else {\n setNotifications(prev => [...prev, ...(result.items || result.data || [])]);\n }\n \n setPagination({\n page: result.page || options.page || 1,\n pageSize: result.page_size || pagination.pageSize,\n total: result.total || 0,\n hasMore: (result.items || result.data || []).length >= pagination.pageSize,\n });\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n }, [currentFilter, pagination.pageSize]);\n\n // 加载更多\n const loadMore = useCallback(async () => {\n if (!pagination.hasMore || loading) return;\n await fetchNotifications({ page: pagination.page + 1 });\n }, [pagination, loading, fetchNotifications]);\n\n // 获取未读数量\n const fetchUnreadCount = useCallback(async () => {\n try {\n const result = await notificationApi.getUnreadCount();\n setUnreadCount(result.count || result.total || 0);\n } catch (err) {\n console.error('Failed to fetch unread count:', err);\n }\n }, []);\n\n // 获取分类未读数量\n const fetchUnreadByType = useCallback(async () => {\n try {\n const result = await notificationApi.getUnreadCountByType();\n setUnreadByType(result);\n } catch (err) {\n console.error('Failed to fetch unread by type:', err);\n }\n }, []);\n\n // 标记已读\n const markAsRead = useCallback(async (notificationId) => {\n try {\n await notificationApi.markAsRead(notificationId);\n setNotifications(prev => \n prev.map(n => n.id === notificationId ? { ...n, status: 'read' } : n)\n );\n setUnreadCount(prev => Math.max(0, prev - 1));\n } catch (err) {\n setError(err.message);\n throw err;\n }\n }, []);\n\n // 全部标记已读\n const markAllAsRead = useCallback(async (type = null) => {\n try {\n await notificationApi.markAllAsRead(type);\n setNotifications(prev => \n prev.map(n => (!type || n.type === type) ? { ...n, status: 'read' } : n)\n );\n if (type) {\n setUnreadByType(prev => ({ ...prev, [type]: 0 }));\n } else {\n setUnreadCount(0);\n setUnreadByType({});\n }\n } catch (err) {\n setError(err.message);\n throw err;\n }\n }, []);\n\n // 删除通知\n const deleteNotification = useCallback(async (notificationId) => {\n try {\n const notification = notifications.find(n => n.id === notificationId);\n await notificationApi.deleteNotification(notificationId);\n setNotifications(prev => prev.filter(n => n.id !== notificationId));\n if (notification?.status === 'unread') {\n setUnreadCount(prev => Math.max(0, prev - 1));\n }\n } catch (err) {\n setError(err.message);\n throw err;\n }\n }, [notifications]);\n\n // 归档通知\n const archiveNotification = useCallback(async (notificationId) => {\n try {\n await notificationApi.archiveNotification(notificationId);\n setNotifications(prev => \n prev.map(n => n.id === notificationId ? { ...n, status: 'archived' } : n)\n );\n } catch (err) {\n setError(err.message);\n throw err;\n }\n }, []);\n\n // 获取公告\n const fetchAnnouncements = useCallback(async (options = {}) => {\n try {\n const result = await notificationApi.getAnnouncements(options);\n setAnnouncements(result.items || result.data || []);\n } catch (err) {\n console.error('Failed to fetch announcements:', err);\n }\n }, []);\n\n // 获取偏好设置\n const fetchPreferences = useCallback(async () => {\n try {\n const result = await notificationApi.getPreferences();\n setPreferences(result);\n } catch (err) {\n console.error('Failed to fetch preferences:', err);\n }\n }, []);\n\n // 更新偏好设置\n const updatePreferences = useCallback(async (newPreferences) => {\n try {\n await notificationApi.updatePreferences(newPreferences);\n setPreferences(prev => ({ ...prev, ...newPreferences }));\n } catch (err) {\n setError(err.message);\n throw err;\n }\n }, []);\n\n // 设置筛选条件\n const setFilter = useCallback((filter) => {\n setCurrentFilter(prev => ({ ...prev, ...filter }));\n setPagination(prev => ({ ...prev, page: 1, hasMore: true }));\n }, []);\n\n // 刷新\n const refresh = useCallback(async () => {\n await Promise.all([\n fetchNotifications({ page: 1 }),\n fetchUnreadCount(),\n ]);\n }, [fetchNotifications, fetchUnreadCount]);\n\n // Context值\n const value = {\n // 状态\n notifications,\n unreadCount,\n unreadByType,\n announcements,\n preferences,\n loading,\n error,\n connectionStatus,\n currentFilter,\n pagination,\n \n // 方法\n fetchNotifications,\n loadMore,\n fetchUnreadCount,\n fetchUnreadByType,\n markAsRead,\n markAllAsRead,\n deleteNotification,\n archiveNotification,\n fetchAnnouncements,\n fetchPreferences,\n updatePreferences,\n setFilter,\n refresh,\n \n // API\n api: notificationApi,\n };\n\n return (\n <NotificationContext.Provider value={value}>\n {children}\n </NotificationContext.Provider>\n );\n}\n\n/**\n * 使用通知Context的Hook\n */\nexport function useNotification() {\n const context = useContext(NotificationContext);\n if (!context) {\n throw new Error('useNotification must be used within a NotificationProvider');\n }\n return context;\n}\n\nexport default NotificationContext;\n","/**\n * Notification SDK - 图标组件\n */\n\nimport React from 'react';\n\n// 通用图标样式\nconst iconStyle = { width: '1em', height: '1em', fill: 'currentColor' };\n\n// 铃铛图标\nexport function BellIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z\"/>\n </svg>\n );\n}\n\n// 铃铛带数字图标\nexport function BellDotIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z\"/>\n <circle cx=\"18\" cy=\"5\" r=\"4\" fill=\"currentColor\"/>\n </svg>\n );\n}\n\n// 邮件图标\nexport function MailIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"/>\n </svg>\n );\n}\n\n// 打开的邮件图标\nexport function MailOpenIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65 2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26 4.84L12 13z\"/>\n </svg>\n );\n}\n\n// 公告/喇叭图标\nexport function MegaphoneIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M18 11v2h4v-2h-4zm-2 6.61c.96.71 2.21 1.65 3.2 2.39.4-.53.8-1.07 1.2-1.6-.99-.74-2.24-1.68-3.2-2.4-.4.54-.8 1.08-1.2 1.61zM20.4 5.6c-.4-.53-.8-1.07-1.2-1.6-.99.74-2.24 1.68-3.2 2.4.4.53.8 1.07 1.2 1.6.96-.72 2.21-1.65 3.2-2.4zM4 9c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1v4h2v-4h1l5 3V6L8 9H4zm11.5 3c0-1.33-.58-2.53-1.5-3.35v6.69c.92-.81 1.5-2.01 1.5-3.34z\"/>\n </svg>\n );\n}\n\n// 系统/齿轮图标\nexport function SettingsIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"/>\n </svg>\n );\n}\n\n// 交易/信用卡图标\nexport function CreditCardIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z\"/>\n </svg>\n );\n}\n\n// 日历图标\nexport function CalendarIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM9 10H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2z\"/>\n </svg>\n );\n}\n\n// 告警图标\nexport function AlertIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"/>\n </svg>\n );\n}\n\n// 礼物图标\nexport function GiftIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z\"/>\n </svg>\n );\n}\n\n// 已读/勾选图标\nexport function CheckIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n );\n}\n\n// 双勾选图标\nexport function CheckDoubleIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z\"/>\n </svg>\n );\n}\n\n// 删除图标\nexport function TrashIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/>\n </svg>\n );\n}\n\n// 归档图标\nexport function ArchiveIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z\"/>\n </svg>\n );\n}\n\n// 刷新图标\nexport function RefreshIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"/>\n </svg>\n );\n}\n\n// 关闭图标\nexport function CloseIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n );\n}\n\n// 更多/三个点图标\nexport function MoreIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>\n </svg>\n );\n}\n\n// 连接状态图标\nexport function ConnectionIcon({ status, ...props }) {\n const color = {\n connected: '#22c55e',\n disconnected: '#ef4444',\n connecting: '#f59e0b',\n reconnecting: '#f59e0b',\n }[status] || '#6b7280';\n\n return (\n <svg viewBox=\"0 0 24 24\" style={{ ...iconStyle, color }} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"8\" fill=\"currentColor\"/>\n </svg>\n );\n}\n\n// 筛选图标\nexport function FilterIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"/>\n </svg>\n );\n}\n\n// 搜索图标\nexport function SearchIcon(props) {\n return (\n <svg viewBox=\"0 0 24 24\" style={iconStyle} {...props}>\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\n </svg>\n );\n}\n\nexport default {\n BellIcon,\n BellDotIcon,\n MailIcon,\n MailOpenIcon,\n MegaphoneIcon,\n SettingsIcon,\n CreditCardIcon,\n CalendarIcon,\n AlertIcon,\n GiftIcon,\n CheckIcon,\n CheckDoubleIcon,\n TrashIcon,\n ArchiveIcon,\n RefreshIcon,\n CloseIcon,\n MoreIcon,\n ConnectionIcon,\n FilterIcon,\n SearchIcon,\n};\n","/**\n * Notification SDK - 通知列表组件\n * 显示通知消息列表\n */\n\nimport React, { useEffect, useCallback } from 'react';\nimport { useNotification } from '../context/NotificationContext';\nimport NotificationItem from './NotificationItem';\nimport { RefreshIcon, FilterIcon, CheckDoubleIcon } from '../icons';\nimport { t } from '../i18n';\n\nexport function NotificationList({\n showHeader = true,\n showFilters = true,\n showMarkAllRead = true,\n emptyComponent,\n className = '',\n onItemClick,\n maxHeight,\n}) {\n const {\n notifications,\n loading,\n error,\n currentFilter,\n pagination,\n fetchNotifications,\n loadMore,\n markAsRead,\n markAllAsRead,\n deleteNotification,\n archiveNotification,\n setFilter,\n refresh,\n } = useNotification();\n\n useEffect(() => {\n fetchNotifications();\n }, [currentFilter]);\n\n const handleScroll = useCallback((e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n if (scrollHeight - scrollTop <= clientHeight + 100 && pagination.hasMore && !loading) {\n loadMore();\n }\n }, [pagination.hasMore, loading, loadMore]);\n\n const filters = [\n { value: 'unread', label: t('unread') },\n { value: 'all', label: t('all') },\n { value: 'read', label: t('read') },\n { value: 'archived', label: t('archived') },\n ];\n\n const typeFilters = [\n { value: null, label: t('all') },\n { value: 'system', label: t('system') },\n { value: 'announcement', label: t('announcement') },\n { value: 'transaction', label: t('transaction') },\n { value: 'activity', label: t('activity') },\n ];\n\n const isEmpty = !loading && notifications.length === 0;\n\n return (\n <div className={`eco-notification-list ${className}`}>\n {showHeader && (\n <div className=\"eco-notification-list__header\">\n <h3 className=\"eco-notification-list__title\">{t('notifications')}</h3>\n <div className=\"eco-notification-list__actions\">\n {showMarkAllRead && (\n <button\n className=\"eco-notification-list__action-btn\"\n onClick={() => markAllAsRead()}\n title={t('markAllAsRead')}\n >\n <CheckDoubleIcon />\n </button>\n )}\n <button\n className=\"eco-notification-list__action-btn\"\n onClick={refresh}\n title={t('refresh')}\n >\n <RefreshIcon className={loading ? 'eco-spin' : ''} />\n </button>\n </div>\n </div>\n )}\n\n {showFilters && (\n <div className=\"eco-notification-list__filters\">\n <div className=\"eco-notification-list__filter-group\">\n {filters.map(filter => (\n <button\n key={filter.value}\n className={`eco-notification-list__filter-btn ${\n currentFilter.status === filter.value ? 'active' : ''\n }`}\n onClick={() => setFilter({ status: filter.value })}\n >\n {filter.label}\n </button>\n ))}\n </div>\n <div className=\"eco-notification-list__type-filter\">\n <FilterIcon />\n <select\n value={currentFilter.type || ''}\n onChange={(e) => setFilter({ type: e.target.value || null })}\n >\n {typeFilters.map(filter => (\n <option key={filter.value || 'all'} value={filter.value || ''}>\n {filter.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n )}\n\n <div \n className=\"eco-notification-list__content\"\n onScroll={handleScroll}\n style={maxHeight ? { maxHeight, overflowY: 'auto' } : undefined}\n >\n {error && (\n <div className=\"eco-notification-list__error\">\n <span>{error}</span>\n <button onClick={refresh}>{t('tryAgain')}</button>\n </div>\n )}\n\n {isEmpty ? (\n emptyComponent || (\n <div className=\"eco-notification-list__empty\">\n <p>{currentFilter.status === 'unread' ? t('noUnreadMessages') : t('noNotifications')}</p>\n </div>\n )\n ) : (\n <>\n {notifications.map(notification => (\n <NotificationItem\n key={notification.id}\n notification={notification}\n onClick={() => {\n if (notification.status === 'unread') {\n markAsRead(notification.id);\n }\n onItemClick?.(notification);\n }}\n onDelete={() => deleteNotification(notification.id)}\n onArchive={() => archiveNotification(notification.id)}\n />\n ))}\n {loading && (\n <div className=\"eco-notification-list__loading\">\n <span className=\"eco-loading-spinner\" />\n </div>\n )}\n {!pagination.hasMore && notifications.length > 0 && (\n <div className=\"eco-notification-list__end\">\n {t('noMoreMessages')}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default NotificationList;\n","/**\n * Notification SDK - 类型定义\n * 通知消息中心类型常量\n */\n\n// 消息类型\nexport const MessageType = {\n SYSTEM: 'system', // 系统通知\n ANNOUNCEMENT: 'announcement', // 公告\n PERSONAL: 'personal', // 私信\n TRANSACTION: 'transaction', // 交易通知\n ACTIVITY: 'activity', // 活动通知\n REMINDER: 'reminder', // 提醒\n ALERT: 'alert', // 告警\n MARKETING: 'marketing', // 营销消息\n};\n\n// 消息状态\nexport const MessageStatus = {\n UNREAD: 'unread',\n READ: 'read',\n ARCHIVED: 'archived',\n DELETED: 'deleted',\n};\n\n// 消息优先级\nexport const MessagePriority = {\n LOW: 'low',\n NORMAL: 'normal',\n HIGH: 'high',\n URGENT: 'urgent',\n};\n\n// 通知渠道\nexport const NotificationChannel = {\n IN_APP: 'in_app', // 站内信\n PUSH: 'push', // APP推送\n EMAIL: 'email', // 邮件\n SMS: 'sms', // 短信\n WEBSOCKET: 'websocket', // WebSocket实时\n WEBHOOK: 'webhook', // Webhook\n};\n\n// 公告范围\nexport const AnnouncementScope = {\n ALL: 'all', // 全体用户\n SEGMENT: 'segment', // 用户分群\n VIP: 'vip', // VIP用户\n NEW_USER: 'new_user', // 新用户\n ACTIVE: 'active', // 活跃用户\n};\n\n// 消息模板类型\nexport const TemplateType = {\n WELCOME: 'welcome', // 欢迎消息\n VERIFICATION: 'verification', // 验证码\n PASSWORD_RESET: 'password_reset', // 密码重置\n ORDER_UPDATE: 'order_update', // 订单更新\n PAYMENT: 'payment', // 支付通知\n PROMOTION: 'promotion', // 促销活动\n CUSTOM: 'custom', // 自定义\n};\n\n// 投递状态\nexport const DeliveryStatus = {\n PENDING: 'pending', // 待发送\n SENDING: 'sending', // 发送中\n DELIVERED: 'delivered', // 已送达\n FAILED: 'failed', // 发送失败\n BOUNCED: 'bounced', // 被退回\n};\n\nexport default {\n MessageType,\n MessageStatus,\n MessagePriority,\n NotificationChannel,\n AnnouncementScope,\n TemplateType,\n DeliveryStatus,\n};\n\nexport const NotificationType = MessageType;\n\nexport const NotificationStatus = MessageStatus;\n\nexport const NotificationPriority = MessagePriority;\n","/**\n * Notification SDK - 通知设置面板\n * 用户通知偏好设置\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useNotification } from '../context/NotificationContext';\nimport { t } from '../i18n';\nimport { MessageType, NotificationChannel } from '../types';\n\nexport function NotificationSettings({\n showChannels = true,\n showTypes = true,\n showQuietHours = true,\n onSave,\n className = '',\n}) {\n const { preferences, fetchPreferences, updatePreferences, loading } = useNotification();\n const [localPreferences, setLocalPreferences] = useState(null);\n const [saving, setSaving] = useState(false);\n const [quietHoursEnabled, setQuietHoursEnabled] = useState(false);\n const [quietHoursStart, setQuietHoursStart] = useState('22:00');\n const [quietHoursEnd, setQuietHoursEnd] = useState('08:00');\n\n useEffect(() => {\n fetchPreferences();\n }, [fetchPreferences]);\n\n useEffect(() => {\n if (preferences) {\n setLocalPreferences(preferences);\n if (preferences.quiet_hours) {\n setQuietHoursEnabled(preferences.quiet_hours.enabled);\n setQuietHoursStart(preferences.quiet_hours.start || '22:00');\n setQuietHoursEnd(preferences.quiet_hours.end || '08:00');\n }\n }\n }, [preferences]);\n\n const handleChannelToggle = (channel) => {\n setLocalPreferences((prev) => ({\n ...prev,\n channels: {\n ...prev?.channels,\n [channel]: !prev?.channels?.[channel],\n },\n }));\n };\n\n const handleTypeToggle = (type) => {\n setLocalPreferences((prev) => ({\n ...prev,\n types: {\n ...prev?.types,\n [type]: !prev?.types?.[type],\n },\n }));\n };\n\n const handleSave = async () => {\n setSaving(true);\n try {\n const updatedPreferences = {\n ...localPreferences,\n quiet_hours: {\n enabled: quietHoursEnabled,\n start: quietHoursStart,\n end: quietHoursEnd,\n },\n };\n await updatePreferences(updatedPreferences);\n onSave?.(updatedPreferences);\n } catch (err) {\n console.error('Failed to save preferences:', err);\n } finally {\n setSaving(false);\n }\n };\n\n if (loading && !localPreferences) {\n return (\n <div className={`eco-notification-settings ${className}`}>\n <div className=\"eco-notification-settings__loading\">\n <span className=\"eco-loading-spinner\" />\n </div>\n </div>\n );\n }\n\n const channels = [\n { key: NotificationChannel.IN_APP, label: t('inApp') },\n { key: NotificationChannel.PUSH, label: t('push') },\n { key: NotificationChannel.EMAIL, label: t('email') },\n { key: NotificationChannel.SMS, label: t('sms') },\n ];\n\n const types = [\n { key: MessageType.SYSTEM, label: t('notifyOnSystem') },\n { key: MessageType.TRANSACTION, label: t('notifyOnTransaction') },\n { key: MessageType.ACTIVITY, label: t('notifyOnActivity') },\n { key: MessageType.MARKETING, label: t('notifyOnMarketing') },\n ];\n\n return (\n <div className={`eco-notification-settings ${className}`}>\n <h3 className=\"eco-notification-settings__title\">{t('notificationSettings')}</h3>\n\n {showChannels && (\n <section className=\"eco-notification-settings__section\">\n <h4>{t('pushNotifications')}</h4>\n <div className=\"eco-notification-settings__options\">\n {channels.map(({ key, label }) => (\n <label key={key} className=\"eco-notification-settings__option\">\n <input\n type=\"checkbox\"\n checked={localPreferences?.channels?.[key] ?? true}\n onChange={() => handleChannelToggle(key)}\n />\n <span className=\"eco-notification-settings__checkbox\" />\n <span>{label}</span>\n </label>\n ))}\n </div>\n </section>\n )}\n\n {showTypes && (\n <section className=\"eco-notification-settings__section\">\n <h4>{t('preferences')}</h4>\n <div className=\"eco-notification-settings__options\">\n {types.map(({ key, label }) => (\n <label key={key} className=\"eco-notification-settings__option\">\n <input\n type=\"checkbox\"\n checked={localPreferences?.types?.[key] ?? true}\n onChange={() => handleTypeToggle(key)}\n />\n <span className=\"eco-notification-settings__checkbox\" />\n <span>{label}</span>\n </label>\n ))}\n </div>\n </section>\n )}\n\n {showQuietHours && (\n <section className=\"eco-notification-settings__section\">\n <h4>{t('doNotDisturb')}</h4>\n <p className=\"eco-notification-settings__desc\">{t('doNotDisturbDesc')}</p>\n \n <label className=\"eco-notification-settings__option\">\n <input\n type=\"checkbox\"\n checked={quietHoursEnabled}\n onChange={(e) => setQuietHoursEnabled(e.target.checked)}\n />\n <span className=\"eco-notification-settings__checkbox\" />\n <span>{t('quietHours')}</span>\n </label>\n\n {quietHoursEnabled && (\n <div className=\"eco-notification-settings__time-range\">\n <input\n type=\"time\"\n value={quietHoursStart}\n onChange={(e) => setQuietHoursStart(e.target.value)}\n />\n <span>-</span>\n <input\n type=\"time\"\n value={quietHoursEnd}\n onChange={(e) => setQuietHoursEnd(e.target.value)}\n />\n </div>\n )}\n </section>\n )}\n\n <div className=\"eco-notification-settings__actions\">\n <button\n className=\"eco-notification-settings__save-btn\"\n onClick={handleSave}\n disabled={saving}\n >\n {saving ? <span className=\"eco-loading-spinner\" /> : t('settingsSaved').replace('已', '')}\n </button>\n </div>\n </div>\n );\n}\n\nexport default NotificationSettings;\n","/**\n * Notification SDK - Toast 通知组件\n * 实时推送的弹窗通知\n */\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { t } from '../i18n';\nimport { CloseIcon, CheckIcon } from '../icons';\n\n// Toast 管理器\nconst toastQueue = [];\nlet toastId = 0;\nlet updateCallback = null;\n\nexport function showToast(notification, options = {}) {\n const id = ++toastId;\n const toast = {\n id,\n notification,\n duration: options.duration || 5000,\n position: options.position || 'top-right',\n onClick: options.onClick,\n };\n toastQueue.push(toast);\n updateCallback?.([...toastQueue]);\n \n // 自动移除\n if (toast.duration > 0) {\n setTimeout(() => {\n removeToast(id);\n }, toast.duration);\n }\n \n return id;\n}\n\nexport function removeToast(id) {\n const index = toastQueue.findIndex(t => t.id === id);\n if (index > -1) {\n toastQueue.splice(index, 1);\n updateCallback?.([...toastQueue]);\n }\n}\n\n// 单个 Toast 组件\nfunction ToastItem({ toast, onRemove }) {\n const [exiting, setExiting] = useState(false);\n const { notification, onClick } = toast;\n\n const handleRemove = useCallback(() => {\n setExiting(true);\n setTimeout(() => {\n onRemove(toast.id);\n }, 200);\n }, [toast.id, onRemove]);\n\n const handleClick = () => {\n onClick?.(notification);\n handleRemove();\n };\n\n return (\n <div \n className={`eco-toast ${exiting ? 'eco-toast--exiting' : ''}`}\n onClick={handleClick}\n >\n <div className=\"eco-toast__icon\">\n <CheckIcon />\n </div>\n <div className=\"eco-toast__content\">\n <div className=\"eco-toast__title\">\n {notification.title || t('newNotification')}\n </div>\n {notification.content && (\n <div className=\"eco-toast__body\">\n {notification.content.substring(0, 100)}\n </div>\n )}\n </div>\n <button \n className=\"eco-toast__close\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove();\n }}\n >\n <CloseIcon />\n </button>\n </div>\n );\n}\n\n// Toast 容器\nexport function NotificationToast({ \n position = 'top-right',\n maxToasts = 5,\n}) {\n const [toasts, setToasts] = useState([]);\n\n useEffect(() => {\n updateCallback = setToasts;\n return () => {\n updateCallback = null;\n };\n }, []);\n\n const visibleToasts = toasts\n .filter(t => t.position === position)\n .slice(0, maxToasts);\n\n if (visibleToasts.length === 0) return null;\n\n return (\n <div className={`eco-toast-container eco-toast-container--${position}`}>\n {visibleToasts.map(toast => (\n <ToastItem \n key={toast.id} \n toast={toast} \n onRemove={removeToast}\n />\n ))}\n </div>\n );\n}\n\nexport default NotificationToast;\n","/**\n * Notification SDK - 通知徽章按钮\n * 导航栏中的通知图标,带未读数量\n */\n\nimport React, { useEffect } from 'react';\nimport { useNotification } from '../context/NotificationContext';\nimport { BellIcon, BellDotIcon } from '../icons';\nimport { t } from '../i18n';\n\nexport function NotificationBadge({\n onClick,\n showCount = true,\n maxCount = 99,\n className = '',\n size = 'medium',\n color,\n}) {\n const { unreadCount, fetchUnreadCount } = useNotification();\n\n useEffect(() => {\n fetchUnreadCount();\n }, [fetchUnreadCount]);\n\n const sizeClass = {\n small: 'eco-notification-badge--small',\n medium: 'eco-notification-badge--medium',\n large: 'eco-notification-badge--large',\n }[size] || 'eco-notification-badge--medium';\n\n const displayCount = unreadCount > maxCount ? `${maxCount}+` : unreadCount;\n const hasUnread = unreadCount > 0;\n\n return (\n <button\n className={`eco-notification-badge ${sizeClass} ${className}`}\n onClick={onClick}\n title={hasUnread ? t('unreadCount', { n: unreadCount }) : t('notifications')}\n aria-label={t('notifications')}\n style={color ? { color } : undefined}\n >\n {hasUnread ? <BellDotIcon /> : <BellIcon />}\n {showCount && hasUnread && (\n <span className=\"eco-notification-badge__count\">\n {displayCount}\n </span>\n )}\n </button>\n );\n}\n\nexport default NotificationBadge;\n","/**\n * Notification SDK - 公告横幅组件\n * 页面顶部的公告条\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { useNotification } from '../context/NotificationContext';\nimport { t } from '../i18n';\nimport { CloseIcon, MegaphoneIcon } from '../icons';\n\nexport function AnnouncementBanner({\n autoFetch = true,\n autoHideDelay = 0,\n showClose = true,\n position = 'top',\n onAnnouncementClick,\n className = '',\n}) {\n const { announcements, fetchAnnouncements } = useNotification();\n const [currentIndex, setCurrentIndex] = useState(0);\n const [visible, setVisible] = useState(true);\n const [dismissed, setDismissed] = useState([]);\n\n useEffect(() => {\n if (autoFetch) {\n fetchAnnouncements({ pinned: true });\n }\n }, [autoFetch, fetchAnnouncements]);\n\n // 自动切换公告\n useEffect(() => {\n if (announcements.length > 1) {\n const timer = setInterval(() => {\n setCurrentIndex((prev) => (prev + 1) % announcements.length);\n }, 5000);\n return () => clearInterval(timer);\n }\n }, [announcements.length]);\n\n // 自动隐藏\n useEffect(() => {\n if (autoHideDelay > 0) {\n const timer = setTimeout(() => {\n setVisible(false);\n }, autoHideDelay);\n return () => clearTimeout(timer);\n }\n }, [autoHideDelay]);\n\n // 过滤已关闭的公告\n const visibleAnnouncements = announcements.filter(\n (a) => !dismissed.includes(a.id)\n );\n\n if (!visible || visibleAnnouncements.length === 0) {\n return null;\n }\n\n const current = visibleAnnouncements[currentIndex % visibleAnnouncements.length];\n\n const handleDismiss = (id) => {\n setDismissed((prev) => [...prev, id]);\n // 保存到localStorage\n if (typeof localStorage !== 'undefined') {\n const key = 'eco-dismissed-announcements';\n const stored = JSON.parse(localStorage.getItem(key) || '[]');\n stored.push(id);\n localStorage.setItem(key, JSON.stringify(stored));\n }\n };\n\n const getPriorityClass = (priority) => {\n return {\n high: 'eco-announcement-banner--high',\n urgent: 'eco-announcement-banner--urgent',\n }[priority] || '';\n };\n\n return (\n <div\n className={`eco-announcement-banner eco-announcement-banner--${position} ${\n getPriorityClass(current.priority)\n } ${className}`}\n >\n <div className=\"eco-announcement-banner__content\">\n <MegaphoneIcon className=\"eco-announcement-banner__icon\" />\n <div\n className=\"eco-announcement-banner__text\"\n onClick={() => onAnnouncementClick?.(current)}\n >\n <span className=\"eco-announcement-banner__title\">{current.title}</span>\n {current.content && (\n <span className=\"eco-announcement-banner__desc\">\n {current.content.substring(0, 100)}\n {current.content.length > 100 ? '...' : ''}\n </span>\n )}\n </div>\n </div>\n\n {visibleAnnouncements.length > 1 && (\n <div className=\"eco-announcement-banner__indicators\">\n {visibleAnnouncements.map((_, index) => (\n <span\n key={index}\n className={`eco-announcement-banner__indicator ${\n index === currentIndex % visibleAnnouncements.length ? 'active' : ''\n }`}\n onClick={() => setCurrentIndex(index)}\n />\n ))}\n </div>\n )}\n\n {showClose && (\n <button\n className=\"eco-announcement-banner__close\"\n onClick={() => handleDismiss(current.id)}\n title={t('close')}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n );\n}\n\nexport default AnnouncementBanner;\n","import{useState,useCallback,useMemo}from'react';\nexport function useNotifications(initial=[]){\n const[notifications,setNotifications]=useState(initial);\n const add=useCallback(n=>setNotifications(prev=>[{...n,id:n.id||Date.now(),read:false,time:n.time||'Just now'},...prev]),[]);\n const read=useCallback(id=>setNotifications(prev=>prev.map(n=>n.id===id?{...n,read:true}:n)),[]);\n const readAll=useCallback(()=>setNotifications(prev=>prev.map(n=>({...n,read:true}))),[]);\n const remove=useCallback(id=>setNotifications(prev=>prev.filter(n=>n.id!==id)),[]);\n const clear=useCallback(()=>setNotifications([]),[]);\n const unreadCount=useMemo(()=>notifications.filter(n=>!n.read).length,[notifications]);\n return{notifications,add,read,readAll,remove,clear,unreadCount};\n}\n"],"names":["NotificationItem","title","message","time","avatar","read","type","onRead","onClick","className","typeColors","info","success","warning","error","React","createElement","style","display","gap","padding","cursor","transition","background","borderBottom","src","width","height","borderRadius","objectFit","flexShrink","alt","alignItems","justifyContent","flex","overflow","fontSize","fontWeight","color","textOverflow","whiteSpace","marginTop","lineHeight","WebkitLineClamp","WebkitBoxOrient","NotificationCenter","notifications","onReadAll","onClear","emptyText","unread","filter","n","length","boxShadow","border","fontFamily","maxHeight","overflowY","textAlign","map","i","_extends","key","id","NotificationBell","size","open","setOpen","useState","position","viewBox","fill","stroke","strokeWidth","d","top","right","zIndex","NotificationApiClient","BaseApiClient","constructor","config","getNotifications","params","get","getNotification","notificationId","getUnreadCount","getNotificationsByType","markAsRead","post","batchMarkAsRead","notificationIds","ids","markAllAsRead","deleteNotification","delete","batchDelete","clearAll","getSettings","updateSettings","settings","put","getTypeSettings","updateTypeSettings","registerDevice","device","updateDeviceToken","deviceId","token","removeDevice","getMyDevices","subscribeToTopic","topic","unsubscribeFromTopic","getSubscribedTopics","sendNotification","notification","batchSendNotification","userIds","user_ids","broadcastNotification","clearAllUserData","results","e","notifError","devices","data","catch","deviceError","cleared","timestamp","Date","toISOString","getDataDisclosure","sdk","privacyLevel","consentRequired","collected","description","retention","gdprCapabilities","note","notificationApi","SUPPORTED_LANGUAGES","messages","en","zh","ja","ko","currentLang","initLanguage","window","saved","localStorage","getItem","includes","setLanguage","l","getLanguage","t","k","text","Object","entries","forEach","val","replace","RegExp","NotificationContext","createContext","NotificationProvider","children","apiBaseUrl","getToken","language","enableWebSocket","wsUrl","onError","onNewNotification","setNotifications","unreadCount","setUnreadCount","unreadByType","setUnreadByType","announcements","setAnnouncements","preferences","setPreferences","loading","setLoading","setError","connectionStatus","setConnectionStatus","currentFilter","setCurrentFilter","status","pagination","setPagination","page","pageSize","total","hasMore","initialized","useRef","useEffect","current","configure","err","setI18nLanguage","setConnectionChangeHandler","setNewNotificationHandler","prev","connectWebSocket","disconnectWebSocket","fetchNotifications","useCallback","options","result","items","page_size","loadMore","fetchUnreadCount","count","console","fetchUnreadByType","getUnreadCountByType","Math","max","find","archiveNotification","fetchAnnouncements","getAnnouncements","fetchPreferences","getPreferences","updatePreferences","newPreferences","setFilter","refresh","Promise","all","value","api","Provider","useNotification","context","useContext","Error","iconStyle","BellIcon","props","BellDotIcon","cx","cy","r","MegaphoneIcon","CheckIcon","CheckDoubleIcon","RefreshIcon","CloseIcon","FilterIcon","NotificationList","showHeader","showFilters","showMarkAllRead","emptyComponent","onItemClick","handleScroll","scrollTop","scrollHeight","clientHeight","target","filters","label","typeFilters","isEmpty","onChange","onScroll","undefined","Fragment","onDelete","onArchive","MessageType","SYSTEM","ANNOUNCEMENT","PERSONAL","TRANSACTION","ACTIVITY","REMINDER","ALERT","MARKETING","MessageStatus","UNREAD","READ","ARCHIVED","DELETED","MessagePriority","LOW","NORMAL","HIGH","URGENT","NotificationChannel","IN_APP","PUSH","EMAIL","SMS","WEBSOCKET","WEBHOOK","AnnouncementScope","ALL","SEGMENT","VIP","NEW_USER","ACTIVE","TemplateType","WELCOME","VERIFICATION","PASSWORD_RESET","ORDER_UPDATE","PAYMENT","PROMOTION","CUSTOM","DeliveryStatus","PENDING","SENDING","DELIVERED","FAILED","BOUNCED","NotificationType","NotificationStatus","NotificationPriority","NotificationSettings","showChannels","showTypes","showQuietHours","onSave","localPreferences","setLocalPreferences","saving","setSaving","quietHoursEnabled","setQuietHoursEnabled","quietHoursStart","setQuietHoursStart","quietHoursEnd","setQuietHoursEnd","quiet_hours","enabled","start","end","handleChannelToggle","channel","channels","handleTypeToggle","types","handleSave","updatedPreferences","checked","disabled","toastQueue","updateCallback","removeToast","index","findIndex","splice","ToastItem","toast","onRemove","exiting","setExiting","handleRemove","setTimeout","handleClick","content","substring","stopPropagation","NotificationToast","maxToasts","toasts","setToasts","visibleToasts","slice","NotificationBadge","showCount","maxCount","sizeClass","small","medium","large","displayCount","hasUnread","AnnouncementBanner","autoFetch","autoHideDelay","showClose","onAnnouncementClick","currentIndex","setCurrentIndex","visible","setVisible","dismissed","setDismissed","pinned","timer","setInterval","clearInterval","clearTimeout","visibleAnnouncements","a","handleDismiss","stored","JSON","parse","push","setItem","stringify","getPriorityClass","priority","high","urgent","_","useNotifications","initial","add","now","readAll","remove","clear","useMemo"],"mappings":";;;;;;;;;;;;;AACO,SAASA,gBAAgBA,CAAC;EAACC,KAAK;EAACC,OAAO;EAACC,IAAI;EAACC,MAAM;AAACC,EAAAA,IAAI,GAAC,KAAK;AAACC,EAAAA,IAAI,GAAC,MAAM;EAACC,MAAM;EAACC,OAAO;AAACC,EAAAA,SAAS,GAAC;AAAE,CAAC,EAAC;AAC9G,EAAA,MAAMC,UAAU,GAAC;AAACC,IAAAA,IAAI,EAAC,SAAS;AAACC,IAAAA,OAAO,EAAC,SAAS;AAACC,IAAAA,OAAO,EAAC,SAAS;AAACC,IAAAA,KAAK,EAAC;GAAU;EACrF,oBAAOC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKP,SAAS,EAAE,CAAA,QAAA,EAAWA,SAAS,CAAA,CAAG;IAACD,OAAO,EAAEA,MAAI;AAACA,MAAAA,OAAO,IAAI;AAACD,MAAAA,MAAM,IAAI;IAAC,CAAE;AACpFU,IAAAA,KAAK,EAAE;AAACC,MAAAA,OAAO,EAAC,MAAM;AAACC,MAAAA,GAAG,EAAC,EAAE;AAACC,MAAAA,OAAO,EAAC,WAAW;AAACC,MAAAA,MAAM,EAAC,SAAS;AAACC,MAAAA,UAAU,EAAC,WAAW;AACvFC,MAAAA,UAAU,EAAClB,IAAI,GAAC,aAAa,GAAC,uBAAuB;AAACmB,MAAAA,YAAY,EAAC;AAAmB;AAAE,GAAA,EACzFpB,MAAM,gBAACW,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKS,IAAAA,GAAG,EAAErB,MAAO;AAACa,IAAAA,KAAK,EAAE;AAACS,MAAAA,KAAK,EAAC,EAAE;AAACC,MAAAA,MAAM,EAAC,EAAE;AAACC,MAAAA,YAAY,EAAC,KAAK;AAACC,MAAAA,SAAS,EAAC,OAAO;AAACC,MAAAA,UAAU,EAAC;KAAG;AAACC,IAAAA,GAAG,EAAC;AAAE,GAAC,CAAC,gBAChHhB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACS,MAAAA,KAAK,EAAC,EAAE;AAACC,MAAAA,MAAM,EAAC,EAAE;AAACC,MAAAA,YAAY,EAAC,KAAK;AAACL,MAAAA,UAAU,EAACb,UAAU,CAACJ,IAAI,CAAC,GAAC,IAAI;AAACY,MAAAA,OAAO,EAAC,MAAM;AACjGc,MAAAA,UAAU,EAAC,QAAQ;AAACC,MAAAA,cAAc,EAAC,QAAQ;AAACH,MAAAA,UAAU,EAAC;AAAC;GAAE,eAC1Df,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACS,MAAAA,KAAK,EAAC,CAAC;AAACC,MAAAA,MAAM,EAAC,CAAC;AAACC,MAAAA,YAAY,EAAC,KAAK;MAACL,UAAU,EAACb,UAAU,CAACJ,IAAI;AAAC;AAAE,GAAC,CAC5E,CAAC,eACNS,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACiB,MAAAA,IAAI,EAAC,CAAC;AAACC,MAAAA,QAAQ,EAAC;AAAQ;GAAE,eACrCpB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACmB,MAAAA,QAAQ,EAAC,EAAE;AAACC,MAAAA,UAAU,EAAChC,IAAI,GAAC,GAAG,GAAC,GAAG;AAACiC,MAAAA,KAAK,EAAC,SAAS;AAACH,MAAAA,QAAQ,EAAC,QAAQ;AAACI,MAAAA,YAAY,EAAC,UAAU;AAACC,MAAAA,UAAU,EAAC;AAAQ;AAAE,GAAA,EAAEvC,KAAW,CAAC,EAC7IC,OAAO,iBAAEa,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACmB,MAAAA,QAAQ,EAAC,EAAE;AAACE,MAAAA,KAAK,EAAC,SAAS;AAACG,MAAAA,SAAS,EAAC,CAAC;AAACC,MAAAA,UAAU,EAAC,GAAG;AAACxB,MAAAA,OAAO,EAAC,aAAa;AAACyB,MAAAA,eAAe,EAAC,CAAC;AAACC,MAAAA,eAAe,EAAC,UAAU;AAACT,MAAAA,QAAQ,EAAC;AAAQ;AAAE,GAAA,EAAEjC,OAAa,CAAC,EACnLC,IAAI,iBAAEY,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACmB,MAAAA,QAAQ,EAAC,EAAE;AAACE,MAAAA,KAAK,EAAC,SAAS;AAACG,MAAAA,SAAS,EAAC;AAAC;GAAE,EAAEtC,IAAU,CACtE,CAAC,EACL,CAACE,IAAI,iBAAEU,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACS,MAAAA,KAAK,EAAC,CAAC;AAACC,MAAAA,MAAM,EAAC,CAAC;AAACC,MAAAA,YAAY,EAAC,KAAK;AAACL,MAAAA,UAAU,EAAC,SAAS;AAACO,MAAAA,UAAU,EAAC,CAAC;AAACW,MAAAA,SAAS,EAAC;AAAC;AAAE,GAAC,CACtG,CAAC;AACR;;AChBO,SAASI,kBAAkBA,CAAC;AAACC,EAAAA,aAAa,GAAC,EAAE;EAACvC,MAAM;EAACwC,SAAS;EAACC,OAAO;AAAC/C,EAAAA,KAAK,GAAC,eAAe;AAACgD,EAAAA,SAAS,GAAC,kBAAkB;AAACxC,EAAAA,SAAS,GAAC;AAAE,CAAC,EAAC;AAC7I,EAAA,MAAMyC,MAAM,GAACJ,aAAa,CAACK,MAAM,CAACC,CAAC,IAAE,CAACA,CAAC,CAAC/C,IAAI,CAAC,CAACgD,MAAM;EACpD,oBAAOtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKP,SAAS,EAAE,CAAA,UAAA,EAAaA,SAAS,CAAA,CAAG;AAACQ,IAAAA,KAAK,EAAE;AAACS,MAAAA,KAAK,EAAC,GAAG;AAACH,MAAAA,UAAU,EAAC,MAAM;AAACK,MAAAA,YAAY,EAAC,EAAE;AAClG0B,MAAAA,SAAS,EAAC,8BAA8B;AAACC,MAAAA,MAAM,EAAC,mBAAmB;AAACpB,MAAAA,QAAQ,EAAC,QAAQ;AAACqB,MAAAA,UAAU,EAAC;AAA+D;GAAE,eAClKzC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACC,MAAAA,OAAO,EAAC,MAAM;AAACe,MAAAA,cAAc,EAAC,eAAe;AAACD,MAAAA,UAAU,EAAC,QAAQ;AAACZ,MAAAA,OAAO,EAAC,WAAW;AAACI,MAAAA,YAAY,EAAC;AAAmB;GAAE,eACnIT,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACC,MAAAA,OAAO,EAAC,MAAM;AAACc,MAAAA,UAAU,EAAC,QAAQ;AAACb,MAAAA,GAAG,EAAC;AAAC;GAAE,eACrDJ,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,KAAK,EAAE;AAACmB,MAAAA,QAAQ,EAAC,EAAE;AAACC,MAAAA,UAAU,EAAC;AAAG;GAAE,EAAEpC,KAAY,CAAC,EACxDiD,MAAM,GAAC,CAAC,iBAAEnC,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,KAAK,EAAE;AAACmB,MAAAA,QAAQ,EAAC,EAAE;AAACC,MAAAA,UAAU,EAAC,GAAG;AAACd,MAAAA,UAAU,EAAC,SAAS;AAACe,MAAAA,KAAK,EAAC,MAAM;AAACV,MAAAA,YAAY,EAAC,EAAE;AAACR,MAAAA,OAAO,EAAC;AAAS;AAAE,GAAA,EAAE8B,MAAa,CACrI,CAAC,eACNnC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACC,MAAAA,OAAO,EAAC,MAAM;AAACC,MAAAA,GAAG,EAAC;AAAC;AAAE,GAAA,EAChC4B,SAAS,iBAAEhC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQR,IAAAA,OAAO,EAAEuC,SAAU;AAAC9B,IAAAA,KAAK,EAAE;AAACsC,MAAAA,MAAM,EAAC,MAAM;AAAChC,MAAAA,UAAU,EAAC,MAAM;AAACF,MAAAA,MAAM,EAAC,SAAS;AAACe,MAAAA,QAAQ,EAAC,EAAE;AAACE,MAAAA,KAAK,EAAC,SAAS;AAACD,MAAAA,UAAU,EAAC;AAAG;AAAE,GAAA,EAAC,eAAqB,CAAC,EACnKW,OAAO,iBAAEjC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQR,IAAAA,OAAO,EAAEwC,OAAQ;AAAC/B,IAAAA,KAAK,EAAE;AAACsC,MAAAA,MAAM,EAAC,MAAM;AAAChC,MAAAA,UAAU,EAAC,MAAM;AAACF,MAAAA,MAAM,EAAC,SAAS;AAACe,MAAAA,QAAQ,EAAC,EAAE;AAACE,MAAAA,KAAK,EAAC;AAAS;AAAE,GAAA,EAAC,OAAa,CACrI,CACF,CAAC,eACNvB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACwC,MAAAA,SAAS,EAAC,GAAG;AAACC,MAAAA,SAAS,EAAC;AAAM;GAAE,EAC1CZ,aAAa,CAACO,MAAM,KAAG,CAAC,gBAACtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACG,MAAAA,OAAO,EAAC,EAAE;AAACuC,MAAAA,SAAS,EAAC,QAAQ;AAACrB,MAAAA,KAAK,EAAC,SAAS;AAACF,MAAAA,QAAQ,EAAC;AAAE;AAAE,GAAA,EAAEa,SAAe,CAAC,GACnHH,aAAa,CAACc,GAAG,CAAC,CAACR,CAAC,EAACS,CAAC,kBAAG9C,KAAA,CAAAC,aAAA,CAAChB,gBAAgB,EAAA8D,QAAA,CAAA;AAACC,IAAAA,GAAG,EAAEX,CAAC,CAACY,EAAE,IAAEH;AAAE,GAAA,EAAKT,CAAC,EAAA;IAAE7C,MAAM,EAAEA,MAAIA,MAAM,GAAG6C,CAAC,CAACY,EAAE,IAAEH,CAAC;GAAE,CAAC,CAAC,CAC9F,CACF,CAAC;AACR;;ACnBO,SAASI,gBAAgBA,CAAC;AAACnB,EAAAA,aAAa,GAAC,EAAE;EAACvC,MAAM;EAACwC,SAAS;EAACC,OAAO;AAACkB,EAAAA,IAAI,GAAC,EAAE;AAACzD,EAAAA,SAAS,GAAC;AAAE,CAAC,EAAC;EAChG,MAAK,CAAC0D,IAAI,EAACC,OAAO,CAAC,GAACC,QAAQ,CAAC,KAAK,CAAC;AAAC,EAAA,MAAMnB,MAAM,GAACJ,aAAa,CAACK,MAAM,CAACC,CAAC,IAAE,CAACA,CAAC,CAAC/C,IAAI,CAAC,CAACgD,MAAM;EACxF,oBAAOtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACqD,MAAAA,QAAQ,EAAC,UAAU;AAACpD,MAAAA,OAAO,EAAC;AAAa;GAAE,eAC7DH,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQR,IAAAA,OAAO,EAAEA,MAAI4D,OAAO,CAAC,CAACD,IAAI,CAAE;IAAC1D,SAAS,EAAE,CAAA,QAAA,EAAWA,SAAS,CAAA,CAAG;AACrEQ,IAAAA,KAAK,EAAE;AAACqD,MAAAA,QAAQ,EAAC,UAAU;AAACf,MAAAA,MAAM,EAAC,MAAM;AAAChC,MAAAA,UAAU,EAAC,aAAa;AAACF,MAAAA,MAAM,EAAC,SAAS;AAACD,MAAAA,OAAO,EAAC,CAAC;AAACQ,MAAAA,YAAY,EAAC,CAAC;AAACN,MAAAA,UAAU,EAAC;AAAU;GAAE,eACpIP,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKU,IAAAA,KAAK,EAAEwC,IAAK;AAACvC,IAAAA,MAAM,EAAEuC,IAAK;AAACK,IAAAA,OAAO,EAAC,WAAW;AAACC,IAAAA,IAAI,EAAC,MAAM;AAACC,IAAAA,MAAM,EAAC,cAAc;AAACC,IAAAA,WAAW,EAAC;GAAG,eACnG3D,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;GAAqE,CAAM,CAAC,EACrFzB,MAAM,GAAC,CAAC,iBAAEnC,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,KAAK,EAAE;AAACqD,MAAAA,QAAQ,EAAC,UAAU;AAACM,MAAAA,GAAG,EAAC,CAAC;AAACC,MAAAA,KAAK,EAAC,CAAC;AAACnD,MAAAA,KAAK,EAAC,EAAE;AAACC,MAAAA,MAAM,EAAC,EAAE;AAACC,MAAAA,YAAY,EAAC,KAAK;AAC9FL,MAAAA,UAAU,EAAC,SAAS;AAACe,MAAAA,KAAK,EAAC,MAAM;AAACF,MAAAA,QAAQ,EAAC,EAAE;AAACC,MAAAA,UAAU,EAAC,GAAG;AAACnB,MAAAA,OAAO,EAAC,MAAM;AAACc,MAAAA,UAAU,EAAC,QAAQ;AAC/FC,MAAAA,cAAc,EAAC,QAAQ;AAACsB,MAAAA,MAAM,EAAC;AAAgB;AAAE,GAAA,EAAEL,MAAM,GAAC,CAAC,GAAC,IAAI,GAACA,MAAa,CAC1E,CAAC,EACRiB,IAAI,iBAAEpD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAE;AAACqD,MAAAA,QAAQ,EAAC,UAAU;AAACM,MAAAA,GAAG,EAAC,MAAM;AAACC,MAAAA,KAAK,EAAC,CAAC;AAACpC,MAAAA,SAAS,EAAC,CAAC;AAACqC,MAAAA,MAAM,EAAC;AAAI;AAAE,GAAA,eAClF/D,KAAA,CAAAC,aAAA,CAAC6B,kBAAkB,EAAA;AAACC,IAAAA,aAAa,EAAEA,aAAc;AAACvC,IAAAA,MAAM,EAAEA,MAAO;AAACwC,IAAAA,SAAS,EAAEA,SAAU;AAACC,IAAAA,OAAO,EAAEA;GAAS,CACvG,CACF,CAAC;AACR;;ACjBA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AACO,MAAM+B,qBAAqB,SAASC,aAAa,CAAC;AACvDC,EAAAA,WAAWA,CAACC,MAAM,GAAG,EAAE,EAAE;AACvB,IAAA,KAAK,CAAC,eAAe,EAAEA,MAAM,CAAC;AAChC,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;AACE,EAAA,MAAMC,gBAAgBA,CAACC,MAAM,GAAG,EAAE,EAAE;AAClC,IAAA,OAAO,IAAI,CAACC,GAAG,CAAC,OAAO,EAAED,MAAM,CAAC;AAClC,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAME,eAAeA,CAACC,cAAc,EAAE;AACpC,IAAA,OAAO,IAAI,CAACF,GAAG,CAAC,CAAA,CAAA,EAAIE,cAAc,EAAE,CAAC;AACvC,EAAA;;AAEA;AACF;AACA;EACE,MAAMC,cAAcA,GAAG;AACrB,IAAA,OAAO,IAAI,CAACH,GAAG,CAAC,eAAe,CAAC;AAClC,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,MAAMI,sBAAsBA,CAACnF,IAAI,EAAE8E,MAAM,GAAG,EAAE,EAAE;AAC9C,IAAA,OAAO,IAAI,CAACC,GAAG,CAAC,OAAO,EAAE;MAAE/E,IAAI;MAAE,GAAG8E;AAAO,KAAC,CAAC;AAC/C,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMM,UAAUA,CAACH,cAAc,EAAE;AAC/B,IAAA,OAAO,IAAI,CAACI,IAAI,CAAC,CAAA,CAAA,EAAIJ,cAAc,OAAO,CAAC;AAC7C,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMK,eAAeA,CAACC,eAAe,EAAE;AACrC,IAAA,OAAO,IAAI,CAACF,IAAI,CAAC,aAAa,EAAE;AAAEG,MAAAA,GAAG,EAAED;AAAgB,KAAC,CAAC;AAC3D,EAAA;;AAEA;AACF;AACA;EACE,MAAME,aAAaA,GAAG;AACpB,IAAA,OAAO,IAAI,CAACJ,IAAI,CAAC,WAAW,CAAC;AAC/B,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMK,kBAAkBA,CAACT,cAAc,EAAE;AACvC,IAAA,OAAO,IAAI,CAACU,MAAM,CAAC,CAAA,CAAA,EAAIV,cAAc,EAAE,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMW,WAAWA,CAACL,eAAe,EAAE;AACjC,IAAA,OAAO,IAAI,CAACF,IAAI,CAAC,eAAe,EAAE;AAAEG,MAAAA,GAAG,EAAED;AAAgB,KAAC,CAAC;AAC7D,EAAA;;AAEA;AACF;AACA;EACE,MAAMM,QAAQA,GAAG;AACf,IAAA,OAAO,IAAI,CAACF,MAAM,CAAC,MAAM,CAAC;AAC5B,EAAA;;AAEA;;AAEA;AACF;AACA;EACE,MAAMG,WAAWA,GAAG;AAClB,IAAA,OAAO,IAAI,CAACf,GAAG,CAAC,WAAW,CAAC;AAC9B,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMgB,cAAcA,CAACC,QAAQ,EAAE;AAC7B,IAAA,OAAO,IAAI,CAACC,GAAG,CAAC,WAAW,EAAED,QAAQ,CAAC;AACxC,EAAA;;AAEA;AACF;AACA;EACE,MAAME,eAAeA,GAAG;AACtB,IAAA,OAAO,IAAI,CAACnB,GAAG,CAAC,iBAAiB,CAAC;AACpC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMoB,kBAAkBA,CAACnG,IAAI,EAAEgG,QAAQ,EAAE;IACvC,OAAO,IAAI,CAACC,GAAG,CAAC,mBAAmBjG,IAAI,CAAA,CAAE,EAAEgG,QAAQ,CAAC;AACtD,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMI,cAAcA,CAACC,MAAM,EAAE;AAC3B,IAAA,OAAO,IAAI,CAAChB,IAAI,CAAC,UAAU,EAAEgB,MAAM,CAAC;AACtC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMC,iBAAiBA,CAACC,QAAQ,EAAEC,KAAK,EAAE;AACvC,IAAA,OAAO,IAAI,CAACP,GAAG,CAAC,CAAA,SAAA,EAAYM,QAAQ,QAAQ,EAAE;AAAEC,MAAAA;AAAM,KAAC,CAAC;AAC1D,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMC,YAAYA,CAACF,QAAQ,EAAE;AAC3B,IAAA,OAAO,IAAI,CAACZ,MAAM,CAAC,CAAA,SAAA,EAAYY,QAAQ,EAAE,CAAC;AAC5C,EAAA;;AAEA;AACF;AACA;EACE,MAAMG,YAAYA,GAAG;AACnB,IAAA,OAAO,IAAI,CAAC3B,GAAG,CAAC,UAAU,CAAC;AAC7B,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAM4B,gBAAgBA,CAACC,KAAK,EAAE;AAC5B,IAAA,OAAO,IAAI,CAACvB,IAAI,CAAC,mBAAmB,EAAE;AAAEuB,MAAAA;AAAM,KAAC,CAAC;AAClD,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMC,oBAAoBA,CAACD,KAAK,EAAE;AAChC,IAAA,OAAO,IAAI,CAACvB,IAAI,CAAC,qBAAqB,EAAE;AAAEuB,MAAAA;AAAM,KAAC,CAAC;AACpD,EAAA;;AAEA;AACF;AACA;EACE,MAAME,mBAAmBA,GAAG;AAC1B,IAAA,OAAO,IAAI,CAAC/B,GAAG,CAAC,oBAAoB,CAAC;AACvC,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMgC,gBAAgBA,CAACC,YAAY,EAAE;AACnC,IAAA,OAAO,IAAI,CAAC3B,IAAI,CAAC,aAAa,EAAE2B,YAAY,CAAC;AAC/C,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMC,qBAAqBA,CAACD,YAAY,EAAEE,OAAO,EAAE;AACjD,IAAA,OAAO,IAAI,CAAC7B,IAAI,CAAC,mBAAmB,EAAE;AAAE,MAAA,GAAG2B,YAAY;AAAEG,MAAAA,QAAQ,EAAED;AAAQ,KAAC,CAAC;AAC/E,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAME,qBAAqBA,CAACJ,YAAY,EAAE;AACxC,IAAA,OAAO,IAAI,CAAC3B,IAAI,CAAC,kBAAkB,EAAE2B,YAAY,CAAC;AACpD,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMK,gBAAgBA,GAAG;IACvB,MAAMC,OAAO,GAAG,EAAE;IAClB,IAAI;MAAEA,OAAO,CAAC9E,aAAa,GAAG,MAAM,IAAI,CAACqD,QAAQ,EAAE;IAAE,CAAC,CAAC,OAAO0B,CAAC,EAAE;AAAED,MAAAA,OAAO,CAACE,UAAU,GAAGD,CAAC,CAAC3H,OAAO;AAAE,IAAA;IACnG,IAAI;AACF,MAAA,MAAM6H,OAAO,GAAG,MAAM,IAAI,CAACf,YAAY,EAAE;MACzC,KAAK,MAAMrC,CAAC,IAAKoD,OAAO,EAAEC,IAAI,IAAI,EAAE,EAAG;AACrC,QAAA,MAAM,IAAI,CAACjB,YAAY,CAACpC,CAAC,CAACX,EAAE,CAAC,CAACiE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,MAAA;MACAL,OAAO,CAACG,OAAO,GAAG,SAAS;IAC7B,CAAC,CAAC,OAAOF,CAAC,EAAE;AAAED,MAAAA,OAAO,CAACM,WAAW,GAAGL,CAAC,CAAC3H,OAAO;AAAE,IAAA;IAC/C,OAAO;AAAEiI,MAAAA,OAAO,EAAE,IAAI;MAAEC,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;MAAE,GAAGV;KAAS;AAC3E,EAAA;;AAEA;AACF;AACA;AACEW,EAAAA,iBAAiBA,GAAG;IAClB,OAAO;AACLC,MAAAA,GAAG,EAAE,6BAA6B;AAClCC,MAAAA,YAAY,EAAE,YAAY;AAC1BC,MAAAA,eAAe,EAAE,KAAK;AACtBC,MAAAA,SAAS,EAAE,CACT;AAAErI,QAAAA,IAAI,EAAE,aAAa;AAAEsI,QAAAA,WAAW,EAAE,iCAAiC;AAAEC,QAAAA,SAAS,EAAE;AAA4B,OAAC,EAC/G;AAAEvI,QAAAA,IAAI,EAAE,sBAAsB;AAAEsI,QAAAA,WAAW,EAAE,2BAA2B;AAAEC,QAAAA,SAAS,EAAE;AAAU,OAAC,EAChG;AAAEvI,QAAAA,IAAI,EAAE,0BAA0B;AAAEsI,QAAAA,WAAW,EAAE,4BAA4B;AAAEC,QAAAA,SAAS,EAAE;AAAyB,OAAC,EACpH;AAAEvI,QAAAA,IAAI,EAAE,qBAAqB;AAAEsI,QAAAA,WAAW,EAAE,gCAAgC;AAAEC,QAAAA,SAAS,EAAE;AAAqB,OAAC,CAChH;MACDC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;AAC5BC,MAAAA,IAAI,EAAE;KACP;AACH,EAAA;AACF;;AAEA;MACaC,eAAe,GAAG,IAAIjE,qBAAqB;;AClQjD,MAAMkE,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAEnD,MAAMC,QAAQ,GAAG;AACpBC,EAAAA,EAAE,EAAE;AACA,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,aAAa,EAAE,kBAAkB;AACjC,IAAA,eAAe,EAAE,eAAe;AAChC,IAAA,aAAa,EAAE;GAClB;AACDC,EAAAA,EAAE,EAAE;AACA,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,eAAe,EAAE,MAAM;AACvB,IAAA,aAAa,EAAE;GAClB;AACDC,EAAAA,EAAE,EAAE;AACA,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,aAAa,EAAE,UAAU;AACzB,IAAA,eAAe,EAAE,UAAU;AAC3B,IAAA,aAAa,EAAE;GAClB;AACDC,EAAAA,EAAE,EAAE;AACA,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,aAAa,EAAE,UAAU;AACzB,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,aAAa,EAAE;AACnB;AACJ;AAEA,IAAIC,WAAW,GAAG,IAAI;AAEf,SAASC,YAAYA,GAAG;AAC3B;AACA,EAAA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;AAC/B,IAAA,MAAMC,KAAK,GAAGC,YAAY,CAACC,OAAO,CAAC,wBAAwB,CAAC;IAC5D,IAAIF,KAAK,IAAIT,mBAAmB,CAACY,QAAQ,CAACH,KAAK,CAAC,EAAE;AAC9CH,MAAAA,WAAW,GAAGG,KAAK;AACvB,IAAA;AACJ,EAAA;AACA,EAAA,OAAOH,WAAW;AACtB;AAEO,SAASO,WAAWA,CAACC,CAAC,EAAE;EAC3B,IAAId,mBAAmB,CAACY,QAAQ,CAACE,CAAC,CAAC,EAAER,WAAW,GAAGQ,CAAC;AACxD;AAEO,SAASC,WAAWA,GAAG;AAC1B,EAAA,OAAOT,WAAW;AACtB;AAEO,SAASU,CAACA,CAACC,CAAC,EAAE9E,MAAM,GAAG,EAAE,EAAE;AAC9B,EAAA,IAAI+E,IAAI,GAAGjB,QAAQ,CAACK,WAAW,CAAC,GAAGW,CAAC,CAAC,IAAIhB,QAAQ,CAACC,EAAE,GAAGe,CAAC,CAAC,IAAIA,CAAC;AAC9DE,EAAAA,MAAM,CAACC,OAAO,CAACjF,MAAM,CAAC,CAACkF,OAAO,CAAC,CAAC,CAACvG,GAAG,EAAEwG,GAAG,CAAC,KAAK;AAC3CJ,IAAAA,IAAI,GAAGA,IAAI,CAACK,OAAO,CAAC,IAAIC,MAAM,CAAC,CAAA,GAAA,EAAM1G,GAAG,KAAK,EAAE,GAAG,CAAC,EAAEwG,GAAG,CAAC;AAC7D,EAAA,CAAC,CAAC;AACF,EAAA,OAAOJ,IAAI;AACf;;ACxDA;AACA;AACA;AACA;;AAMA,MAAMO,mBAAmB,gBAAGC,aAAa,CAAC,IAAI,CAAC;;AAE/C;AACA;AACA;AACO,SAASC,oBAAoBA,CAAC;EACnCC,QAAQ;EACRC,UAAU;EACVC,QAAQ;EACRC,QAAQ;AACRC,EAAAA,eAAe,GAAG,IAAI;EACtBC,KAAK;EACLC,OAAO;AACPC,EAAAA;AACF,CAAC,EAAE;AACD;EACA,MAAM,CAACtI,aAAa,EAAEuI,gBAAgB,CAAC,GAAGhH,QAAQ,CAAC,EAAE,CAAC;EACtD,MAAM,CAACiH,WAAW,EAAEC,cAAc,CAAC,GAAGlH,QAAQ,CAAC,CAAC,CAAC;EACjD,MAAM,CAACmH,YAAY,EAAEC,eAAe,CAAC,GAAGpH,QAAQ,CAAC,EAAE,CAAC;EACpD,MAAM,CAACqH,aAAa,EAAEC,gBAAgB,CAAC,GAAGtH,QAAQ,CAAC,EAAE,CAAC;EACtD,MAAM,CAACuH,WAAW,EAAEC,cAAc,CAAC,GAAGxH,QAAQ,CAAC,IAAI,CAAC;EACpD,MAAM,CAACyH,OAAO,EAAEC,UAAU,CAAC,GAAG1H,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM,CAACvD,KAAK,EAAEkL,QAAQ,CAAC,GAAG3H,QAAQ,CAAC,IAAI,CAAC;EACxC,MAAM,CAAC4H,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG7H,QAAQ,CAAC,cAAc,CAAC;AACxE,EAAA,MAAM,CAAC8H,aAAa,EAAEC,gBAAgB,CAAC,GAAG/H,QAAQ,CAAC;AAAEgI,IAAAA,MAAM,EAAE,QAAQ;AAAE/L,IAAAA,IAAI,EAAE;AAAK,GAAC,CAAC;AACpF,EAAA,MAAM,CAACgM,UAAU,EAAEC,aAAa,CAAC,GAAGlI,QAAQ,CAAC;AAAEmI,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,QAAQ,EAAE,EAAE;AAAEC,IAAAA,KAAK,EAAE,CAAC;AAAEC,IAAAA,OAAO,EAAE;AAAK,GAAC,CAAC;AAEhG,EAAA,MAAMC,WAAW,GAAGC,MAAM,CAAC,KAAK,CAAC;;AAEjC;AACAC,EAAAA,SAAS,CAAC,MAAM;IACd,IAAIF,WAAW,CAACG,OAAO,EAAE;IACzBH,WAAW,CAACG,OAAO,GAAG,IAAI;;AAE1B;IACA/D,eAAe,CAACgE,SAAS,CAAC;MACxBlC,UAAU,EAAEA,UAAU,IAAI,uBAAuB;MACjDC,QAAQ,EAAEA,QAAQ,KAAK,MAAM;AAC3B,QAAA,IAAI,OAAOpB,YAAY,KAAK,WAAW,EAAE;AACvC,UAAA,OAAOA,YAAY,CAACC,OAAO,CAAC,cAAc,CAAC;AAC7C,QAAA;AACA,QAAA,OAAO,IAAI;AACb,MAAA,CAAC,CAAC;AACFI,MAAAA,WAAW,EAAEA,MAAMA,WAAW,EAAE;MAChCmB,OAAO,EAAG8B,GAAG,IAAK;AAChBjB,QAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;QACrBiL,OAAO,GAAG8B,GAAG,CAAC;AAChB,MAAA;AACF,KAAC,CAAC;;AAEF;AACA,IAAA,IAAIjC,QAAQ,EAAE;MACZkC,WAAe,CAAClC,QAAQ,CAAC;AAC3B,IAAA,CAAC,MAAM;AACLxB,MAAAA,YAAY,EAAE;AAChB,IAAA;;AAEA;AACAR,IAAAA,eAAe,CAACmE,0BAA0B,CAACjB,mBAAmB,CAAC;;AAE/D;AACAlD,IAAAA,eAAe,CAACoE,yBAAyB,CAAE9F,YAAY,IAAK;MAC1D+D,gBAAgB,CAACgC,IAAI,IAAI,CAAC/F,YAAY,EAAE,GAAG+F,IAAI,CAAC,CAAC;AACjD9B,MAAAA,cAAc,CAAC8B,IAAI,IAAIA,IAAI,GAAG,CAAC,CAAC;MAChCjC,iBAAiB,GAAG9D,YAAY,CAAC;AACnC,IAAA,CAAC,CAAC;AAEJ,EAAA,CAAC,EAAE,CAACwD,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,EAAEG,OAAO,EAAEC,iBAAiB,CAAC,CAAC;;AAEhE;AACA0B,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI7B,eAAe,IAAIF,QAAQ,IAAI,EAAE;AACnC/B,MAAAA,eAAe,CAACsE,gBAAgB,CAACpC,KAAK,CAAC;AACzC,IAAA;AACA,IAAA,OAAO,MAAM;MACXlC,eAAe,CAACuE,mBAAmB,EAAE;IACvC,CAAC;EACH,CAAC,EAAE,CAACtC,eAAe,EAAEC,KAAK,EAAEH,QAAQ,CAAC,CAAC;;AAEtC;EACA,MAAMyC,kBAAkB,GAAGC,WAAW,CAAC,OAAOC,OAAO,GAAG,EAAE,KAAK;IAC7D3B,UAAU,CAAC,IAAI,CAAC;IAChBC,QAAQ,CAAC,IAAI,CAAC;IACd,IAAI;AACF,MAAA,MAAM2B,MAAM,GAAG,MAAM3E,eAAe,CAAC7D,gBAAgB,CAAC;AACpD,QAAA,GAAGgH,aAAa;AAChB,QAAA,GAAGuB,OAAO;AACVlB,QAAAA,IAAI,EAAEkB,OAAO,CAAClB,IAAI,IAAI,CAAC;QACvBC,QAAQ,EAAEH,UAAU,CAACG;AACvB,OAAC,CAAC;MAEF,IAAIiB,OAAO,CAAClB,IAAI,KAAK,CAAC,IAAI,CAACkB,OAAO,CAAClB,IAAI,EAAE;QACvCnB,gBAAgB,CAACsC,MAAM,CAACC,KAAK,IAAID,MAAM,CAAC3F,IAAI,IAAI,EAAE,CAAC;AACrD,MAAA,CAAC,MAAM;AACLqD,QAAAA,gBAAgB,CAACgC,IAAI,IAAI,CAAC,GAAGA,IAAI,EAAE,IAAIM,MAAM,CAACC,KAAK,IAAID,MAAM,CAAC3F,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7E,MAAA;AAEAuE,MAAAA,aAAa,CAAC;QACZC,IAAI,EAAEmB,MAAM,CAACnB,IAAI,IAAIkB,OAAO,CAAClB,IAAI,IAAI,CAAC;AACtCC,QAAAA,QAAQ,EAAEkB,MAAM,CAACE,SAAS,IAAIvB,UAAU,CAACG,QAAQ;AACjDC,QAAAA,KAAK,EAAEiB,MAAM,CAACjB,KAAK,IAAI,CAAC;AACxBC,QAAAA,OAAO,EAAE,CAACgB,MAAM,CAACC,KAAK,IAAID,MAAM,CAAC3F,IAAI,IAAI,EAAE,EAAE3E,MAAM,IAAIiJ,UAAU,CAACG;AACpE,OAAC,CAAC;IACJ,CAAC,CAAC,OAAOQ,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACvB,IAAA,CAAC,SAAS;MACR6L,UAAU,CAAC,KAAK,CAAC;AACnB,IAAA;EACF,CAAC,EAAE,CAACI,aAAa,EAAEG,UAAU,CAACG,QAAQ,CAAC,CAAC;;AAExC;AACA,EAAA,MAAMqB,QAAQ,GAAGL,WAAW,CAAC,YAAY;AACvC,IAAA,IAAI,CAACnB,UAAU,CAACK,OAAO,IAAIb,OAAO,EAAE;AACpC,IAAA,MAAM0B,kBAAkB,CAAC;AAAEhB,MAAAA,IAAI,EAAEF,UAAU,CAACE,IAAI,GAAG;AAAE,KAAC,CAAC;EACzD,CAAC,EAAE,CAACF,UAAU,EAAER,OAAO,EAAE0B,kBAAkB,CAAC,CAAC;;AAE7C;AACA,EAAA,MAAMO,gBAAgB,GAAGN,WAAW,CAAC,YAAY;IAC/C,IAAI;AACF,MAAA,MAAME,MAAM,GAAG,MAAM3E,eAAe,CAACxD,cAAc,EAAE;MACrD+F,cAAc,CAACoC,MAAM,CAACK,KAAK,IAAIL,MAAM,CAACjB,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,OAAOO,GAAG,EAAE;AACZgB,MAAAA,OAAO,CAACnN,KAAK,CAAC,+BAA+B,EAAEmM,GAAG,CAAC;AACrD,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAMiB,iBAAiB,GAAGT,WAAW,CAAC,YAAY;IAChD,IAAI;AACF,MAAA,MAAME,MAAM,GAAG,MAAM3E,eAAe,CAACmF,oBAAoB,EAAE;MAC3D1C,eAAe,CAACkC,MAAM,CAAC;IACzB,CAAC,CAAC,OAAOV,GAAG,EAAE;AACZgB,MAAAA,OAAO,CAACnN,KAAK,CAAC,iCAAiC,EAAEmM,GAAG,CAAC;AACvD,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAMvH,UAAU,GAAG+H,WAAW,CAAC,MAAOlI,cAAc,IAAK;IACvD,IAAI;AACF,MAAA,MAAMyD,eAAe,CAACtD,UAAU,CAACH,cAAc,CAAC;AAChD8F,MAAAA,gBAAgB,CAACgC,IAAI,IACnBA,IAAI,CAACzJ,GAAG,CAACR,CAAC,IAAIA,CAAC,CAACY,EAAE,KAAKuB,cAAc,GAAG;AAAE,QAAA,GAAGnC,CAAC;AAAEiJ,QAAAA,MAAM,EAAE;OAAQ,GAAGjJ,CAAC,CACtE,CAAC;AACDmI,MAAAA,cAAc,CAAC8B,IAAI,IAAIe,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhB,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,OAAOJ,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACrB,MAAA,MAAM+M,GAAG;AACX,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;EACA,MAAMlH,aAAa,GAAG0H,WAAW,CAAC,OAAOnN,IAAI,GAAG,IAAI,KAAK;IACvD,IAAI;AACF,MAAA,MAAM0I,eAAe,CAACjD,aAAa,CAACzF,IAAI,CAAC;AACzC+K,MAAAA,gBAAgB,CAACgC,IAAI,IACnBA,IAAI,CAACzJ,GAAG,CAACR,CAAC,IAAK,CAAC9C,IAAI,IAAI8C,CAAC,CAAC9C,IAAI,KAAKA,IAAI,GAAI;AAAE,QAAA,GAAG8C,CAAC;AAAEiJ,QAAAA,MAAM,EAAE;OAAQ,GAAGjJ,CAAC,CACzE,CAAC;AACD,MAAA,IAAI9C,IAAI,EAAE;QACRmL,eAAe,CAAC4B,IAAI,KAAK;AAAE,UAAA,GAAGA,IAAI;AAAE,UAAA,CAAC/M,IAAI,GAAG;AAAE,SAAC,CAAC,CAAC;AACnD,MAAA,CAAC,MAAM;QACLiL,cAAc,CAAC,CAAC,CAAC;QACjBE,eAAe,CAAC,EAAE,CAAC;AACrB,MAAA;IACF,CAAC,CAAC,OAAOwB,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACrB,MAAA,MAAM+M,GAAG;AACX,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAMjH,kBAAkB,GAAGyH,WAAW,CAAC,MAAOlI,cAAc,IAAK;IAC/D,IAAI;AACF,MAAA,MAAM+B,YAAY,GAAGxE,aAAa,CAACwL,IAAI,CAAClL,CAAC,IAAIA,CAAC,CAACY,EAAE,KAAKuB,cAAc,CAAC;AACrE,MAAA,MAAMyD,eAAe,CAAChD,kBAAkB,CAACT,cAAc,CAAC;AACxD8F,MAAAA,gBAAgB,CAACgC,IAAI,IAAIA,IAAI,CAAClK,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACY,EAAE,KAAKuB,cAAc,CAAC,CAAC;AACnE,MAAA,IAAI+B,YAAY,EAAE+E,MAAM,KAAK,QAAQ,EAAE;AACrCd,QAAAA,cAAc,CAAC8B,IAAI,IAAIe,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEhB,IAAI,GAAG,CAAC,CAAC,CAAC;AAC/C,MAAA;IACF,CAAC,CAAC,OAAOJ,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACrB,MAAA,MAAM+M,GAAG;AACX,IAAA;AACF,EAAA,CAAC,EAAE,CAACnK,aAAa,CAAC,CAAC;;AAEnB;AACA,EAAA,MAAMyL,mBAAmB,GAAGd,WAAW,CAAC,MAAOlI,cAAc,IAAK;IAChE,IAAI;AACF,MAAA,MAAMyD,eAAe,CAACuF,mBAAmB,CAAChJ,cAAc,CAAC;AACzD8F,MAAAA,gBAAgB,CAACgC,IAAI,IACnBA,IAAI,CAACzJ,GAAG,CAACR,CAAC,IAAIA,CAAC,CAACY,EAAE,KAAKuB,cAAc,GAAG;AAAE,QAAA,GAAGnC,CAAC;AAAEiJ,QAAAA,MAAM,EAAE;OAAY,GAAGjJ,CAAC,CAC1E,CAAC;IACH,CAAC,CAAC,OAAO6J,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACrB,MAAA,MAAM+M,GAAG;AACX,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;EACA,MAAMuB,kBAAkB,GAAGf,WAAW,CAAC,OAAOC,OAAO,GAAG,EAAE,KAAK;IAC7D,IAAI;MACF,MAAMC,MAAM,GAAG,MAAM3E,eAAe,CAACyF,gBAAgB,CAACf,OAAO,CAAC;MAC9D/B,gBAAgB,CAACgC,MAAM,CAACC,KAAK,IAAID,MAAM,CAAC3F,IAAI,IAAI,EAAE,CAAC;IACrD,CAAC,CAAC,OAAOiF,GAAG,EAAE;AACZgB,MAAAA,OAAO,CAACnN,KAAK,CAAC,gCAAgC,EAAEmM,GAAG,CAAC;AACtD,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAMyB,gBAAgB,GAAGjB,WAAW,CAAC,YAAY;IAC/C,IAAI;AACF,MAAA,MAAME,MAAM,GAAG,MAAM3E,eAAe,CAAC2F,cAAc,EAAE;MACrD9C,cAAc,CAAC8B,MAAM,CAAC;IACxB,CAAC,CAAC,OAAOV,GAAG,EAAE;AACZgB,MAAAA,OAAO,CAACnN,KAAK,CAAC,8BAA8B,EAAEmM,GAAG,CAAC;AACpD,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAM2B,iBAAiB,GAAGnB,WAAW,CAAC,MAAOoB,cAAc,IAAK;IAC9D,IAAI;AACF,MAAA,MAAM7F,eAAe,CAAC4F,iBAAiB,CAACC,cAAc,CAAC;MACvDhD,cAAc,CAACwB,IAAI,KAAK;AAAE,QAAA,GAAGA,IAAI;QAAE,GAAGwB;AAAe,OAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,OAAO5B,GAAG,EAAE;AACZjB,MAAAA,QAAQ,CAACiB,GAAG,CAAC/M,OAAO,CAAC;AACrB,MAAA,MAAM+M,GAAG;AACX,IAAA;EACF,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAM6B,SAAS,GAAGrB,WAAW,CAAEtK,MAAM,IAAK;IACxCiJ,gBAAgB,CAACiB,IAAI,KAAK;AAAE,MAAA,GAAGA,IAAI;MAAE,GAAGlK;AAAO,KAAC,CAAC,CAAC;IAClDoJ,aAAa,CAACc,IAAI,KAAK;AAAE,MAAA,GAAGA,IAAI;AAAEb,MAAAA,IAAI,EAAE,CAAC;AAAEG,MAAAA,OAAO,EAAE;AAAK,KAAC,CAAC,CAAC;EAC9D,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA,EAAA,MAAMoC,OAAO,GAAGtB,WAAW,CAAC,YAAY;AACtC,IAAA,MAAMuB,OAAO,CAACC,GAAG,CAAC,CAChBzB,kBAAkB,CAAC;AAAEhB,MAAAA,IAAI,EAAE;AAAE,KAAC,CAAC,EAC/BuB,gBAAgB,EAAE,CACnB,CAAC;AACJ,EAAA,CAAC,EAAE,CAACP,kBAAkB,EAAEO,gBAAgB,CAAC,CAAC;;AAE1C;AACA,EAAA,MAAMmB,KAAK,GAAG;AACZ;IACApM,aAAa;IACbwI,WAAW;IACXE,YAAY;IACZE,aAAa;IACbE,WAAW;IACXE,OAAO;IACPhL,KAAK;IACLmL,gBAAgB;IAChBE,aAAa;IACbG,UAAU;AAEV;IACAkB,kBAAkB;IAClBM,QAAQ;IACRC,gBAAgB;IAChBG,iBAAiB;IACjBxI,UAAU;IACVK,aAAa;IACbC,kBAAkB;IAClBuI,mBAAmB;IACnBC,kBAAkB;IAClBE,gBAAgB;IAChBE,iBAAiB;IACjBE,SAAS;IACTC,OAAO;AAEP;AACAI,IAAAA,GAAG,EAAEnG;GACN;AAED,EAAA,oBACEjI,KAAA,CAAAC,aAAA,CAAC0J,mBAAmB,CAAC0E,QAAQ,EAAA;AAACF,IAAAA,KAAK,EAAEA;AAAM,GAAA,EACxCrE,QAC2B,CAAC;AAEnC;;AAEA;AACA;AACA;AACO,SAASwE,eAAeA,GAAG;AAChC,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAAC7E,mBAAmB,CAAC;EAC/C,IAAI,CAAC4E,OAAO,EAAE;AACZ,IAAA,MAAM,IAAIE,KAAK,CAAC,4DAA4D,CAAC;AAC/E,EAAA;AACA,EAAA,OAAOF,OAAO;AAChB;;ACtSA;AACA,MAAMG,SAAS,GAAG;AAAE/N,EAAAA,KAAK,EAAE,KAAK;AAAEC,EAAAA,MAAM,EAAE,KAAK;AAAE6C,EAAAA,IAAI,EAAE;AAAe,CAAC;;AAEvE;AACO,SAASkL,QAAQA,CAACC,KAAK,EAAE;AAC9B,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAkK,GAAC,CACxK,CAAC;AAEV;;AAEA;AACO,SAASiL,WAAWA,CAACD,KAAK,EAAE;AACjC,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAkK,GAAC,CAAC,eAC5K5D,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQ6O,IAAAA,EAAE,EAAC,IAAI;AAACC,IAAAA,EAAE,EAAC,GAAG;AAACC,IAAAA,CAAC,EAAC,GAAG;AAACvL,IAAAA,IAAI,EAAC;AAAc,GAAC,CAC9C,CAAC;AAEV;;AAoBA;AACO,SAASwL,aAAaA,CAACL,KAAK,EAAE;AACnC,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAgW,GAAC,CACtW,CAAC;AAEV;;AA+CA;AACO,SAASsL,SAASA,CAACN,KAAK,EAAE;AAC/B,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAmD,GAAC,CACzD,CAAC;AAEV;;AAEA;AACO,SAASuL,eAAeA,CAACP,KAAK,EAAE;AACrC,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAA2J,GAAC,CACjK,CAAC;AAEV;;AAoBA;AACO,SAASwL,WAAWA,CAACR,KAAK,EAAE;AACjC,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAA4M,GAAC,CAClN,CAAC;AAEV;;AAEA;AACO,SAASyL,SAASA,CAACT,KAAK,EAAE;AAC/B,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAuG,GAAC,CAC7G,CAAC;AAEV;;AA2BA;AACO,SAAS0L,UAAUA,CAACV,KAAK,EAAE;AAChC,EAAA,oBACE5O,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA8C,QAAA,CAAA;AAAKS,IAAAA,OAAO,EAAC,WAAW;AAACtD,IAAAA,KAAK,EAAEwO;AAAU,GAAA,EAAKE,KAAK,CAAA,eAClD5O,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAM2D,IAAAA,CAAC,EAAC;AAAgD,GAAC,CACtD,CAAC;AAEV;;AC1LA;AACA;AACA;AACA;;AAQO,SAAS2L,gBAAgBA,CAAC;AAC/BC,EAAAA,UAAU,GAAG,IAAI;AACjBC,EAAAA,WAAW,GAAG,IAAI;AAClBC,EAAAA,eAAe,GAAG,IAAI;EACtBC,cAAc;AACdjQ,EAAAA,SAAS,GAAG,EAAE;EACdkQ,WAAW;AACXlN,EAAAA;AACF,CAAC,EAAE;EACD,MAAM;IACJX,aAAa;IACbgJ,OAAO;IACPhL,KAAK;IACLqL,aAAa;IACbG,UAAU;IACVkB,kBAAkB;IAClBM,QAAQ;IACRpI,UAAU;IACVK,aAAa;IACbC,kBAAkB;IAClBuI,mBAAmB;IACnBO,SAAS;AACTC,IAAAA;GACD,GAAGM,eAAe,EAAE;AAErBvC,EAAAA,SAAS,CAAC,MAAM;AACdU,IAAAA,kBAAkB,EAAE;AACtB,EAAA,CAAC,EAAE,CAACrB,aAAa,CAAC,CAAC;AAEnB,EAAA,MAAMyE,YAAY,GAAGnD,WAAW,CAAE5F,CAAC,IAAK;IACtC,MAAM;MAAEgJ,SAAS;MAAEC,YAAY;AAAEC,MAAAA;KAAc,GAAGlJ,CAAC,CAACmJ,MAAM;AAC1D,IAAA,IAAIF,YAAY,GAAGD,SAAS,IAAIE,YAAY,GAAG,GAAG,IAAIzE,UAAU,CAACK,OAAO,IAAI,CAACb,OAAO,EAAE;AACpFgC,MAAAA,QAAQ,EAAE;AACZ,IAAA;EACF,CAAC,EAAE,CAACxB,UAAU,CAACK,OAAO,EAAEb,OAAO,EAAEgC,QAAQ,CAAC,CAAC;EAE3C,MAAMmD,OAAO,GAAG,CACd;AAAE/B,IAAAA,KAAK,EAAE,QAAQ;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,QAAQ;AAAE,GAAC,EACvC;AAAEiF,IAAAA,KAAK,EAAE,KAAK;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,KAAK;AAAE,GAAC,EACjC;AAAEiF,IAAAA,KAAK,EAAE,MAAM;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,MAAM;AAAE,GAAC,EACnC;AAAEiF,IAAAA,KAAK,EAAE,UAAU;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,UAAU;AAAE,GAAC,CAC5C;EAED,MAAMkH,WAAW,GAAG,CAClB;AAAEjC,IAAAA,KAAK,EAAE,IAAI;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,KAAK;AAAE,GAAC,EAChC;AAAEiF,IAAAA,KAAK,EAAE,QAAQ;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,QAAQ;AAAE,GAAC,EACvC;AAAEiF,IAAAA,KAAK,EAAE,cAAc;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,cAAc;AAAE,GAAC,EACnD;AAAEiF,IAAAA,KAAK,EAAE,aAAa;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,aAAa;AAAE,GAAC,EACjD;AAAEiF,IAAAA,KAAK,EAAE,UAAU;IAAEgC,KAAK,EAAEjH,CAAC,CAAC,UAAU;AAAE,GAAC,CAC5C;EAED,MAAMmH,OAAO,GAAG,CAACtF,OAAO,IAAIhJ,aAAa,CAACO,MAAM,KAAK,CAAC;EAEtD,oBACEtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKP,SAAS,EAAE,yBAAyBA,SAAS,CAAA;AAAG,GAAA,EAClD8P,UAAU,iBACTxP,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAA+B,eAC5CM,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIP,IAAAA,SAAS,EAAC;GAA8B,EAAEwJ,CAAC,CAAC,eAAe,CAAM,CAAC,eACtElJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAgC,GAAA,EAC5CgQ,eAAe,iBACd1P,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,mCAAmC;AAC7CD,IAAAA,OAAO,EAAEA,MAAMuF,aAAa,EAAG;IAC/B9F,KAAK,EAAEgK,CAAC,CAAC,eAAe;GAAE,eAE1BlJ,KAAA,CAAAC,aAAA,CAACkP,eAAe,EAAA,IAAE,CACZ,CACT,eACDnP,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,mCAAmC;AAC7CD,IAAAA,OAAO,EAAEuO,OAAQ;IACjB9O,KAAK,EAAEgK,CAAC,CAAC,SAAS;AAAE,GAAA,eAEpBlJ,KAAA,CAAAC,aAAA,CAACmP,WAAW,EAAA;AAAC1P,IAAAA,SAAS,EAAEqL,OAAO,GAAG,UAAU,GAAG;GAAK,CAC9C,CACL,CACF,CACN,EAEA0E,WAAW,iBACVzP,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAgC,eAC7CM,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAqC,EACjDwQ,OAAO,CAACrN,GAAG,CAACT,MAAM,iBACjBpC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;IACE+C,GAAG,EAAEZ,MAAM,CAAC+L,KAAM;AAClBzO,IAAAA,SAAS,EAAE,CAAA,kCAAA,EACT0L,aAAa,CAACE,MAAM,KAAKlJ,MAAM,CAAC+L,KAAK,GAAG,QAAQ,GAAG,EAAE,CAAA,CACpD;AACH1O,IAAAA,OAAO,EAAEA,MAAMsO,SAAS,CAAC;MAAEzC,MAAM,EAAElJ,MAAM,CAAC+L;KAAO;GAAE,EAElD/L,MAAM,CAAC+N,KACF,CACT,CACE,CAAC,eACNnQ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAoC,eACjDM,KAAA,CAAAC,aAAA,CAACqP,UAAU,MAAE,CAAC,eACdtP,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEkO,IAAAA,KAAK,EAAE/C,aAAa,CAAC7L,IAAI,IAAI,EAAG;AAChC+Q,IAAAA,QAAQ,EAAGxJ,CAAC,IAAKiH,SAAS,CAAC;AAAExO,MAAAA,IAAI,EAAEuH,CAAC,CAACmJ,MAAM,CAAC9B,KAAK,IAAI;KAAM;GAAE,EAE5DiC,WAAW,CAACvN,GAAG,CAACT,MAAM,iBACrBpC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQ+C,IAAAA,GAAG,EAAEZ,MAAM,CAAC+L,KAAK,IAAI,KAAM;AAACA,IAAAA,KAAK,EAAE/L,MAAM,CAAC+L,KAAK,IAAI;GAAG,EAC3D/L,MAAM,CAAC+N,KACF,CACT,CACK,CACL,CACF,CACN,eAEDnQ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,gCAAgC;AAC1C6Q,IAAAA,QAAQ,EAAEV,YAAa;IACvB3P,KAAK,EAAEwC,SAAS,GAAG;MAAEA,SAAS;AAAEC,MAAAA,SAAS,EAAE;AAAO,KAAC,GAAG6N;AAAU,GAAA,EAE/DzQ,KAAK,iBACJC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAA8B,eAC3CM,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA,IAAA,EAAOF,KAAY,CAAC,eACpBC,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQR,IAAAA,OAAO,EAAEuO;AAAQ,GAAA,EAAE9E,CAAC,CAAC,UAAU,CAAU,CAC9C,CACN,EAEAmH,OAAO,GACNV,cAAc,iBACZ3P,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAA8B,GAAA,eAC3CM,KAAA,CAAAC,aAAA,YAAImL,aAAa,CAACE,MAAM,KAAK,QAAQ,GAAGpC,CAAC,CAAC,kBAAkB,CAAC,GAAGA,CAAC,CAAC,iBAAiB,CAAK,CACrF,CACN,gBAEDlJ,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAyQ,QAAA,EAAA,IAAA,EACG1O,aAAa,CAACc,GAAG,CAAC0D,YAAY,iBAC7BvG,KAAA,CAAAC,aAAA,CAAChB,gBAAgB,EAAA;IACf+D,GAAG,EAAEuD,YAAY,CAACtD,EAAG;AACrBsD,IAAAA,YAAY,EAAEA,YAAa;IAC3B9G,OAAO,EAAEA,MAAM;AACb,MAAA,IAAI8G,YAAY,CAAC+E,MAAM,KAAK,QAAQ,EAAE;AACpC3G,QAAAA,UAAU,CAAC4B,YAAY,CAACtD,EAAE,CAAC;AAC7B,MAAA;MACA2M,WAAW,GAAGrJ,YAAY,CAAC;IAC7B,CAAE;IACFmK,QAAQ,EAAEA,MAAMzL,kBAAkB,CAACsB,YAAY,CAACtD,EAAE,CAAE;AACpD0N,IAAAA,SAAS,EAAEA,MAAMnD,mBAAmB,CAACjH,YAAY,CAACtD,EAAE;AAAE,GACvD,CACF,CAAC,EACD8H,OAAO,iBACN/K,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAgC,eAC7CM,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAAqB,GAAE,CACpC,CACN,EACA,CAAC6L,UAAU,CAACK,OAAO,IAAI7J,aAAa,CAACO,MAAM,GAAG,CAAC,iBAC9CtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAA4B,GAAA,EACxCwJ,CAAC,CAAC,gBAAgB,CAChB,CAEP,CAED,CACF,CAAC;AAEV;;AC1KA;AACA;AACA;AACA;;AAEA;AACO,MAAM0H,WAAW,GAAG;AACzBC,EAAAA,MAAM,EAAE,QAAQ;AAAY;AAC5BC,EAAAA,YAAY,EAAE,cAAc;AAAE;AAC9BC,EAAAA,QAAQ,EAAE,UAAU;AAAQ;AAC5BC,EAAAA,WAAW,EAAE,aAAa;AAAE;AAC5BC,EAAAA,QAAQ,EAAE,UAAU;AAAQ;AAC5BC,EAAAA,QAAQ,EAAE,UAAU;AAAQ;AAC5BC,EAAAA,KAAK,EAAE,OAAO;AAAc;EAC5BC,SAAS,EAAE,WAAW;AACxB;;AAEA;AACO,MAAMC,aAAa,GAAG;AAC3BC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,OAAO,EAAE;AACX;;AAEA;AACO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KAAK;AACVC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,MAAM,EAAE;AACV;;AAEA;AACO,MAAMC,mBAAmB,GAAG;AACjCC,EAAAA,MAAM,EAAE,QAAQ;AAAY;AAC5BC,EAAAA,IAAI,EAAE,MAAM;AAAgB;AAC5BC,EAAAA,KAAK,EAAE,OAAO;AAAc;AAC5BC,EAAAA,GAAG,EAAE,KAAK;AAAkB;AAC5BC,EAAAA,SAAS,EAAE,WAAW;AAAM;EAC5BC,OAAO,EAAE,SAAS;AACpB;;AAEA;AACO,MAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,GAAG,EAAE,KAAK;AAAkB;AAC5BC,EAAAA,OAAO,EAAE,SAAS;AAAU;AAC5BC,EAAAA,GAAG,EAAE,KAAK;AAAkB;AAC5BC,EAAAA,QAAQ,EAAE,UAAU;AAAQ;EAC5BC,MAAM,EAAE,QAAQ;AAClB;;AAEA;AACO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,OAAO,EAAE,SAAS;AAAU;AAC5BC,EAAAA,YAAY,EAAE,cAAc;AAAE;AAC9BC,EAAAA,cAAc,EAAE,gBAAgB;AAAE;AAClCC,EAAAA,YAAY,EAAE,cAAc;AAAE;AAC9BC,EAAAA,OAAO,EAAE,SAAS;AAAU;AAC5BC,EAAAA,SAAS,EAAE,WAAW;AAAM;EAC5BC,MAAM,EAAE,QAAQ;AAClB;;AAEA;AACO,MAAMC,cAAc,GAAG;AAC5BC,EAAAA,OAAO,EAAE,SAAS;AAAU;AAC5BC,EAAAA,OAAO,EAAE,SAAS;AAAU;AAC5BC,EAAAA,SAAS,EAAE,WAAW;AAAM;AAC5BC,EAAAA,MAAM,EAAE,QAAQ;AAAY;EAC5BC,OAAO,EAAE,SAAS;AACpB;AAYO,MAAMC,gBAAgB,GAAG9C;AAEzB,MAAM+C,kBAAkB,GAAGtC;AAE3B,MAAMuC,oBAAoB,GAAGlC;;ACtFpC;AACA;AACA;AACA;;AAOO,SAASmC,oBAAoBA,CAAC;AACnCC,EAAAA,YAAY,GAAG,IAAI;AACnBC,EAAAA,SAAS,GAAG,IAAI;AAChBC,EAAAA,cAAc,GAAG,IAAI;EACrBC,MAAM;AACNvU,EAAAA,SAAS,GAAG;AACd,CAAC,EAAE;EACD,MAAM;IAAEmL,WAAW;IAAE8C,gBAAgB;IAAEE,iBAAiB;AAAE9C,IAAAA;GAAS,GAAGuD,eAAe,EAAE;EACvF,MAAM,CAAC4F,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG7Q,QAAQ,CAAC,IAAI,CAAC;EAC9D,MAAM,CAAC8Q,MAAM,EAAEC,SAAS,CAAC,GAAG/Q,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAM,CAACgR,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGjR,QAAQ,CAAC,KAAK,CAAC;EACjE,MAAM,CAACkR,eAAe,EAAEC,kBAAkB,CAAC,GAAGnR,QAAQ,CAAC,OAAO,CAAC;EAC/D,MAAM,CAACoR,aAAa,EAAEC,gBAAgB,CAAC,GAAGrR,QAAQ,CAAC,OAAO,CAAC;AAE3DyI,EAAAA,SAAS,CAAC,MAAM;AACd4B,IAAAA,gBAAgB,EAAE;AACpB,EAAA,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;AAEtB5B,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIlB,WAAW,EAAE;MACfsJ,mBAAmB,CAACtJ,WAAW,CAAC;MAChC,IAAIA,WAAW,CAAC+J,WAAW,EAAE;AAC3BL,QAAAA,oBAAoB,CAAC1J,WAAW,CAAC+J,WAAW,CAACC,OAAO,CAAC;QACrDJ,kBAAkB,CAAC5J,WAAW,CAAC+J,WAAW,CAACE,KAAK,IAAI,OAAO,CAAC;QAC5DH,gBAAgB,CAAC9J,WAAW,CAAC+J,WAAW,CAACG,GAAG,IAAI,OAAO,CAAC;AAC1D,MAAA;AACF,IAAA;AACF,EAAA,CAAC,EAAE,CAAClK,WAAW,CAAC,CAAC;EAEjB,MAAMmK,mBAAmB,GAAIC,OAAO,IAAK;IACvCd,mBAAmB,CAAE7H,IAAI,KAAM;AAC7B,MAAA,GAAGA,IAAI;AACP4I,MAAAA,QAAQ,EAAE;QACR,GAAG5I,IAAI,EAAE4I,QAAQ;AACjB,QAAA,CAACD,OAAO,GAAG,CAAC3I,IAAI,EAAE4I,QAAQ,GAAGD,OAAO;AACtC;AACF,KAAC,CAAC,CAAC;EACL,CAAC;EAED,MAAME,gBAAgB,GAAI5V,IAAI,IAAK;IACjC4U,mBAAmB,CAAE7H,IAAI,KAAM;AAC7B,MAAA,GAAGA,IAAI;AACP8I,MAAAA,KAAK,EAAE;QACL,GAAG9I,IAAI,EAAE8I,KAAK;AACd,QAAA,CAAC7V,IAAI,GAAG,CAAC+M,IAAI,EAAE8I,KAAK,GAAG7V,IAAI;AAC7B;AACF,KAAC,CAAC,CAAC;EACL,CAAC;AAED,EAAA,MAAM8V,UAAU,GAAG,YAAY;IAC7BhB,SAAS,CAAC,IAAI,CAAC;IACf,IAAI;AACF,MAAA,MAAMiB,kBAAkB,GAAG;AACzB,QAAA,GAAGpB,gBAAgB;AACnBU,QAAAA,WAAW,EAAE;AACXC,UAAAA,OAAO,EAAEP,iBAAiB;AAC1BQ,UAAAA,KAAK,EAAEN,eAAe;AACtBO,UAAAA,GAAG,EAAEL;AACP;OACD;MACD,MAAM7G,iBAAiB,CAACyH,kBAAkB,CAAC;MAC3CrB,MAAM,GAAGqB,kBAAkB,CAAC;IAC9B,CAAC,CAAC,OAAOpJ,GAAG,EAAE;AACZgB,MAAAA,OAAO,CAACnN,KAAK,CAAC,6BAA6B,EAAEmM,GAAG,CAAC;AACnD,IAAA,CAAC,SAAS;MACRmI,SAAS,CAAC,KAAK,CAAC;AAClB,IAAA;EACF,CAAC;AAED,EAAA,IAAItJ,OAAO,IAAI,CAACmJ,gBAAgB,EAAE;IAChC,oBACElU,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;MAAKP,SAAS,EAAE,6BAA6BA,SAAS,CAAA;KAAG,eACvDM,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,MAAAA,SAAS,EAAC;KAAoC,eACjDM,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,MAAAA,SAAS,EAAC;KAAuB,CACpC,CACF,CAAC;AAEV,EAAA;EAEA,MAAMwV,QAAQ,GAAG,CACf;IAAElS,GAAG,EAAE+O,mBAAmB,CAACC,MAAM;IAAE7B,KAAK,EAAEjH,CAAC,CAAC,OAAO;AAAE,GAAC,EACtD;IAAElG,GAAG,EAAE+O,mBAAmB,CAACE,IAAI;IAAE9B,KAAK,EAAEjH,CAAC,CAAC,MAAM;AAAE,GAAC,EACnD;IAAElG,GAAG,EAAE+O,mBAAmB,CAACG,KAAK;IAAE/B,KAAK,EAAEjH,CAAC,CAAC,OAAO;AAAE,GAAC,EACrD;IAAElG,GAAG,EAAE+O,mBAAmB,CAACI,GAAG;IAAEhC,KAAK,EAAEjH,CAAC,CAAC,KAAK;AAAE,GAAC,CAClD;EAED,MAAMkM,KAAK,GAAG,CACZ;IAAEpS,GAAG,EAAE4N,WAAW,CAACC,MAAM;IAAEV,KAAK,EAAEjH,CAAC,CAAC,gBAAgB;AAAE,GAAC,EACvD;IAAElG,GAAG,EAAE4N,WAAW,CAACI,WAAW;IAAEb,KAAK,EAAEjH,CAAC,CAAC,qBAAqB;AAAE,GAAC,EACjE;IAAElG,GAAG,EAAE4N,WAAW,CAACK,QAAQ;IAAEd,KAAK,EAAEjH,CAAC,CAAC,kBAAkB;AAAE,GAAC,EAC3D;IAAElG,GAAG,EAAE4N,WAAW,CAACQ,SAAS;IAAEjB,KAAK,EAAEjH,CAAC,CAAC,mBAAmB;AAAE,GAAC,CAC9D;EAED,oBACElJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKP,SAAS,EAAE,6BAA6BA,SAAS,CAAA;GAAG,eACvDM,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIP,IAAAA,SAAS,EAAC;GAAkC,EAAEwJ,CAAC,CAAC,sBAAsB,CAAM,CAAC,EAEhF4K,YAAY,iBACX9T,KAAA,CAAAC,aAAA,CAAA,SAAA,EAAA;AAASP,IAAAA,SAAS,EAAC;AAAoC,GAAA,eACrDM,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAKiJ,CAAC,CAAC,mBAAmB,CAAM,CAAC,eACjClJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAoC,GAAA,EAChDwV,QAAQ,CAACrS,GAAG,CAAC,CAAC;IAAEG,GAAG;AAAEmN,IAAAA;GAAO,kBAC3BnQ,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAO+C,IAAAA,GAAG,EAAEA,GAAI;AAACtD,IAAAA,SAAS,EAAC;GAAmC,eAC5DM,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEV,IAAAA,IAAI,EAAC,UAAU;IACfgW,OAAO,EAAErB,gBAAgB,EAAEgB,QAAQ,GAAGlS,GAAG,CAAC,IAAI,IAAK;AACnDsN,IAAAA,QAAQ,EAAEA,MAAM0E,mBAAmB,CAAChS,GAAG;AAAE,GAC1C,CAAC,eACFhD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAAqC,GAAE,CAAC,eACxDM,KAAA,CAAAC,aAAA,eAAOkQ,KAAY,CACd,CACR,CACE,CACE,CACV,EAEA4D,SAAS,iBACR/T,KAAA,CAAAC,aAAA,CAAA,SAAA,EAAA;AAASP,IAAAA,SAAS,EAAC;AAAoC,GAAA,eACrDM,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAKiJ,CAAC,CAAC,aAAa,CAAM,CAAC,eAC3BlJ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAoC,GAAA,EAChD0V,KAAK,CAACvS,GAAG,CAAC,CAAC;IAAEG,GAAG;AAAEmN,IAAAA;GAAO,kBACxBnQ,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAO+C,IAAAA,GAAG,EAAEA,GAAI;AAACtD,IAAAA,SAAS,EAAC;GAAmC,eAC5DM,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEV,IAAAA,IAAI,EAAC,UAAU;IACfgW,OAAO,EAAErB,gBAAgB,EAAEkB,KAAK,GAAGpS,GAAG,CAAC,IAAI,IAAK;AAChDsN,IAAAA,QAAQ,EAAEA,MAAM6E,gBAAgB,CAACnS,GAAG;AAAE,GACvC,CAAC,eACFhD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAAqC,GAAE,CAAC,eACxDM,KAAA,CAAAC,aAAA,eAAOkQ,KAAY,CACd,CACR,CACE,CACE,CACV,EAEA6D,cAAc,iBACbhU,KAAA,CAAAC,aAAA,CAAA,SAAA,EAAA;AAASP,IAAAA,SAAS,EAAC;AAAoC,GAAA,eACrDM,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAKiJ,CAAC,CAAC,cAAc,CAAM,CAAC,eAC5BlJ,KAAA,CAAAC,aAAA,CAAA,GAAA,EAAA;AAAGP,IAAAA,SAAS,EAAC;GAAiC,EAAEwJ,CAAC,CAAC,kBAAkB,CAAK,CAAC,eAE1ElJ,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOP,IAAAA,SAAS,EAAC;GAAmC,eAClDM,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEV,IAAAA,IAAI,EAAC,UAAU;AACfgW,IAAAA,OAAO,EAAEjB,iBAAkB;IAC3BhE,QAAQ,EAAGxJ,CAAC,IAAKyN,oBAAoB,CAACzN,CAAC,CAACmJ,MAAM,CAACsF,OAAO;AAAE,GACzD,CAAC,eACFvV,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAAqC,GAAE,CAAC,eACxDM,KAAA,CAAAC,aAAA,eAAOiJ,CAAC,CAAC,YAAY,CAAQ,CACxB,CAAC,EAEPoL,iBAAiB,iBAChBtU,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAuC,eACpDM,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEV,IAAAA,IAAI,EAAC,MAAM;AACX4O,IAAAA,KAAK,EAAEqG,eAAgB;IACvBlE,QAAQ,EAAGxJ,CAAC,IAAK2N,kBAAkB,CAAC3N,CAAC,CAACmJ,MAAM,CAAC9B,KAAK;GACnD,CAAC,eACFnO,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA,IAAA,EAAM,GAAO,CAAC,eACdD,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACEV,IAAAA,IAAI,EAAC,MAAM;AACX4O,IAAAA,KAAK,EAAEuG,aAAc;IACrBpE,QAAQ,EAAGxJ,CAAC,IAAK6N,gBAAgB,CAAC7N,CAAC,CAACmJ,MAAM,CAAC9B,KAAK;AAAE,GACnD,CACE,CAEA,CACV,eAEDnO,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAoC,eACjDM,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,qCAAqC;AAC/CD,IAAAA,OAAO,EAAE4V,UAAW;AACpBG,IAAAA,QAAQ,EAAEpB;AAAO,GAAA,EAEhBA,MAAM,gBAAGpU,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAAqB,GAAE,CAAC,GAAGwJ,CAAC,CAAC,eAAe,CAAC,CAACO,OAAO,CAAC,GAAG,EAAE,EAAE,CACjF,CACL,CACF,CAAC;AAEV;;AC7LA;AACA;AACA;AACA;;;AAMA;AACA,MAAMgM,UAAU,GAAG,EAAE;AAErB,IAAIC,cAAc,GAAG,IAAI;AAwBlB,SAASC,WAAWA,CAAC1S,EAAE,EAAE;AAC9B,EAAA,MAAM2S,KAAK,GAAGH,UAAU,CAACI,SAAS,CAAC3M,CAAC,IAAIA,CAAC,CAACjG,EAAE,KAAKA,EAAE,CAAC;AACpD,EAAA,IAAI2S,KAAK,GAAG,EAAE,EAAE;AACdH,IAAAA,UAAU,CAACK,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;AAC3BF,IAAAA,cAAc,GAAG,CAAC,GAAGD,UAAU,CAAC,CAAC;AACnC,EAAA;AACF;;AAEA;AACA,SAASM,SAASA,CAAC;EAAEC,KAAK;AAAEC,EAAAA;AAAS,CAAC,EAAE;EACtC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG7S,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM;IAAEiD,YAAY;AAAE9G,IAAAA;AAAQ,GAAC,GAAGuW,KAAK;AAEvC,EAAA,MAAMI,YAAY,GAAG1J,WAAW,CAAC,MAAM;IACrCyJ,UAAU,CAAC,IAAI,CAAC;AAChBE,IAAAA,UAAU,CAAC,MAAM;AACfJ,MAAAA,QAAQ,CAACD,KAAK,CAAC/S,EAAE,CAAC;IACpB,CAAC,EAAE,GAAG,CAAC;EACT,CAAC,EAAE,CAAC+S,KAAK,CAAC/S,EAAE,EAAEgT,QAAQ,CAAC,CAAC;EAExB,MAAMK,WAAW,GAAGA,MAAM;IACxB7W,OAAO,GAAG8G,YAAY,CAAC;AACvB6P,IAAAA,YAAY,EAAE;EAChB,CAAC;EAED,oBACEpW,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEP,IAAAA,SAAS,EAAE,CAAA,UAAA,EAAawW,OAAO,GAAG,oBAAoB,GAAG,EAAE,CAAA,CAAG;AAC9DzW,IAAAA,OAAO,EAAE6W;GAAY,eAErBtW,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAiB,eAC9BM,KAAA,CAAAC,aAAA,CAACiP,SAAS,EAAA,IAAE,CACT,CAAC,eACNlP,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAoB,eACjCM,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAkB,GAAA,EAC9B6G,YAAY,CAACrH,KAAK,IAAIgK,CAAC,CAAC,iBAAiB,CACvC,CAAC,EACL3C,YAAY,CAACgQ,OAAO,iBACnBvW,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAiB,GAAA,EAC7B6G,YAAY,CAACgQ,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE,GAAG,CACnC,CAEJ,CAAC,eACNxW,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,kBAAkB;IAC5BD,OAAO,EAAGqH,CAAC,IAAK;MACdA,CAAC,CAAC2P,eAAe,EAAE;AACnBL,MAAAA,YAAY,EAAE;AAChB,IAAA;GAAE,eAEFpW,KAAA,CAAAC,aAAA,CAACoP,SAAS,EAAA,IAAE,CACN,CACL,CAAC;AAEV;;AAEA;AACO,SAASqH,iBAAiBA,CAAC;AAChCnT,EAAAA,QAAQ,GAAG,WAAW;AACtBoT,EAAAA,SAAS,GAAG;AACd,CAAC,EAAE;EACD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGvT,QAAQ,CAAC,EAAE,CAAC;AAExCyI,EAAAA,SAAS,CAAC,MAAM;AACd2J,IAAAA,cAAc,GAAGmB,SAAS;AAC1B,IAAA,OAAO,MAAM;AACXnB,MAAAA,cAAc,GAAG,IAAI;IACvB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMoB,aAAa,GAAGF,MAAM,CACzBxU,MAAM,CAAC8G,CAAC,IAAIA,CAAC,CAAC3F,QAAQ,KAAKA,QAAQ,CAAC,CACpCwT,KAAK,CAAC,CAAC,EAAEJ,SAAS,CAAC;AAEtB,EAAA,IAAIG,aAAa,CAACxU,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EAE3C,oBACEtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKP,SAAS,EAAE,4CAA4C6D,QAAQ,CAAA;GAAG,EACpEuT,aAAa,CAACjU,GAAG,CAACmT,KAAK,iBACtBhW,KAAA,CAAAC,aAAA,CAAC8V,SAAS,EAAA;IACR/S,GAAG,EAAEgT,KAAK,CAAC/S,EAAG;AACd+S,IAAAA,KAAK,EAAEA,KAAM;AACbC,IAAAA,QAAQ,EAAEN;GACX,CACF,CACE,CAAC;AAEV;;AC3HA;AACA;AACA;AACA;;AAOO,SAASqB,iBAAiBA,CAAC;EAChCvX,OAAO;AACPwX,EAAAA,SAAS,GAAG,IAAI;AAChBC,EAAAA,QAAQ,GAAG,EAAE;AACbxX,EAAAA,SAAS,GAAG,EAAE;AACdyD,EAAAA,IAAI,GAAG,QAAQ;AACf5B,EAAAA;AACF,CAAC,EAAE;EACD,MAAM;IAAEgJ,WAAW;AAAEyC,IAAAA;GAAkB,GAAGsB,eAAe,EAAE;AAE3DvC,EAAAA,SAAS,CAAC,MAAM;AACdiB,IAAAA,gBAAgB,EAAE;AACpB,EAAA,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;AAEtB,EAAA,MAAMmK,SAAS,GAAG;AAChBC,IAAAA,KAAK,EAAE,+BAA+B;AACtCC,IAAAA,MAAM,EAAE,gCAAgC;AACxCC,IAAAA,KAAK,EAAE;AACT,GAAC,CAACnU,IAAI,CAAC,IAAI,gCAAgC;EAE3C,MAAMoU,YAAY,GAAGhN,WAAW,GAAG2M,QAAQ,GAAG,CAAA,EAAGA,QAAQ,CAAA,CAAA,CAAG,GAAG3M,WAAW;AAC1E,EAAA,MAAMiN,SAAS,GAAGjN,WAAW,GAAG,CAAC;EAEjC,oBACEvK,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAE,CAAA,uBAAA,EAA0ByX,SAAS,CAAA,CAAA,EAAIzX,SAAS,CAAA,CAAG;AAC9DD,IAAAA,OAAO,EAAEA,OAAQ;AACjBP,IAAAA,KAAK,EAAEsY,SAAS,GAAGtO,CAAC,CAAC,aAAa,EAAE;AAAE7G,MAAAA,CAAC,EAAEkI;AAAY,KAAC,CAAC,GAAGrB,CAAC,CAAC,eAAe,CAAE;IAC7E,YAAA,EAAYA,CAAC,CAAC,eAAe,CAAE;IAC/BhJ,KAAK,EAAEqB,KAAK,GAAG;AAAEA,MAAAA;AAAM,KAAC,GAAGiP;GAAU,EAEpCgH,SAAS,gBAAGxX,KAAA,CAAAC,aAAA,CAAC4O,WAAW,EAAA,IAAE,CAAC,gBAAG7O,KAAA,CAAAC,aAAA,CAAC0O,QAAQ,EAAA,IAAE,CAAC,EAC1CsI,SAAS,IAAIO,SAAS,iBACrBxX,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;GAA+B,EAC5C6X,YACG,CAEF,CAAC;AAEb;;ACjDA;AACA;AACA;AACA;;AAOO,SAASE,kBAAkBA,CAAC;AACjCC,EAAAA,SAAS,GAAG,IAAI;AAChBC,EAAAA,aAAa,GAAG,CAAC;AACjBC,EAAAA,SAAS,GAAG,IAAI;AAChBrU,EAAAA,QAAQ,GAAG,KAAK;EAChBsU,mBAAmB;AACnBnY,EAAAA,SAAS,GAAG;AACd,CAAC,EAAE;EACD,MAAM;IAAEiL,aAAa;AAAE8C,IAAAA;GAAoB,GAAGa,eAAe,EAAE;EAC/D,MAAM,CAACwJ,YAAY,EAAEC,eAAe,CAAC,GAAGzU,QAAQ,CAAC,CAAC,CAAC;EACnD,MAAM,CAAC0U,OAAO,EAAEC,UAAU,CAAC,GAAG3U,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAAC4U,SAAS,EAAEC,YAAY,CAAC,GAAG7U,QAAQ,CAAC,EAAE,CAAC;AAE9CyI,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI2L,SAAS,EAAE;AACbjK,MAAAA,kBAAkB,CAAC;AAAE2K,QAAAA,MAAM,EAAE;AAAK,OAAC,CAAC;AACtC,IAAA;AACF,EAAA,CAAC,EAAE,CAACV,SAAS,EAAEjK,kBAAkB,CAAC,CAAC;;AAEnC;AACA1B,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIpB,aAAa,CAACrI,MAAM,GAAG,CAAC,EAAE;AAC5B,MAAA,MAAM+V,KAAK,GAAGC,WAAW,CAAC,MAAM;QAC9BP,eAAe,CAAEzL,IAAI,IAAK,CAACA,IAAI,GAAG,CAAC,IAAI3B,aAAa,CAACrI,MAAM,CAAC;MAC9D,CAAC,EAAE,IAAI,CAAC;AACR,MAAA,OAAO,MAAMiW,aAAa,CAACF,KAAK,CAAC;AACnC,IAAA;AACF,EAAA,CAAC,EAAE,CAAC1N,aAAa,CAACrI,MAAM,CAAC,CAAC;;AAE1B;AACAyJ,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI4L,aAAa,GAAG,CAAC,EAAE;AACrB,MAAA,MAAMU,KAAK,GAAGhC,UAAU,CAAC,MAAM;QAC7B4B,UAAU,CAAC,KAAK,CAAC;MACnB,CAAC,EAAEN,aAAa,CAAC;AACjB,MAAA,OAAO,MAAMa,YAAY,CAACH,KAAK,CAAC;AAClC,IAAA;AACF,EAAA,CAAC,EAAE,CAACV,aAAa,CAAC,CAAC;;AAEnB;AACA,EAAA,MAAMc,oBAAoB,GAAG9N,aAAa,CAACvI,MAAM,CAC9CsW,CAAC,IAAK,CAACR,SAAS,CAACpP,QAAQ,CAAC4P,CAAC,CAACzV,EAAE,CACjC,CAAC;EAED,IAAI,CAAC+U,OAAO,IAAIS,oBAAoB,CAACnW,MAAM,KAAK,CAAC,EAAE;AACjD,IAAA,OAAO,IAAI;AACb,EAAA;EAEA,MAAM0J,OAAO,GAAGyM,oBAAoB,CAACX,YAAY,GAAGW,oBAAoB,CAACnW,MAAM,CAAC;EAEhF,MAAMqW,aAAa,GAAI1V,EAAE,IAAK;IAC5BkV,YAAY,CAAE7L,IAAI,IAAK,CAAC,GAAGA,IAAI,EAAErJ,EAAE,CAAC,CAAC;AACrC;AACA,IAAA,IAAI,OAAO2F,YAAY,KAAK,WAAW,EAAE;MACvC,MAAM5F,GAAG,GAAG,6BAA6B;AACzC,MAAA,MAAM4V,MAAM,GAAGC,IAAI,CAACC,KAAK,CAAClQ,YAAY,CAACC,OAAO,CAAC7F,GAAG,CAAC,IAAI,IAAI,CAAC;AAC5D4V,MAAAA,MAAM,CAACG,IAAI,CAAC9V,EAAE,CAAC;MACf2F,YAAY,CAACoQ,OAAO,CAAChW,GAAG,EAAE6V,IAAI,CAACI,SAAS,CAACL,MAAM,CAAC,CAAC;AACnD,IAAA;EACF,CAAC;EAED,MAAMM,gBAAgB,GAAIC,QAAQ,IAAK;IACrC,OAAO;AACLC,MAAAA,IAAI,EAAE,+BAA+B;AACrCC,MAAAA,MAAM,EAAE;AACV,KAAC,CAACF,QAAQ,CAAC,IAAI,EAAE;EACnB,CAAC;EAED,oBACEnZ,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IACEP,SAAS,EAAE,CAAA,iDAAA,EAAoD6D,QAAQ,CAAA,CAAA,EACrE2V,gBAAgB,CAAClN,OAAO,CAACmN,QAAQ,CAAC,CAAA,CAAA,EAChCzZ,SAAS,CAAA;GAAG,eAEhBM,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;AAAkC,GAAA,eAC/CM,KAAA,CAAAC,aAAA,CAACgP,aAAa,EAAA;AAACvP,IAAAA,SAAS,EAAC;AAA+B,GAAE,CAAC,eAC3DM,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,+BAA+B;AACzCD,IAAAA,OAAO,EAAEA,MAAMoY,mBAAmB,GAAG7L,OAAO;GAAE,eAE9ChM,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;GAAgC,EAAEsM,OAAO,CAAC9M,KAAY,CAAC,EACtE8M,OAAO,CAACuK,OAAO,iBACdvW,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMP,IAAAA,SAAS,EAAC;AAA+B,GAAA,EAC5CsM,OAAO,CAACuK,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EACjCxK,OAAO,CAACuK,OAAO,CAACjU,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,EACpC,CAEL,CACF,CAAC,EAELmW,oBAAoB,CAACnW,MAAM,GAAG,CAAC,iBAC9BtC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKP,IAAAA,SAAS,EAAC;GAAqC,EACjD+Y,oBAAoB,CAAC5V,GAAG,CAAC,CAACyW,CAAC,EAAE1D,KAAK,kBACjC5V,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AACE+C,IAAAA,GAAG,EAAE4S,KAAM;AACXlW,IAAAA,SAAS,EAAE,CAAA,mCAAA,EACTkW,KAAK,KAAKkC,YAAY,GAAGW,oBAAoB,CAACnW,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA,CACnE;AACH7C,IAAAA,OAAO,EAAEA,MAAMsY,eAAe,CAACnC,KAAK;GACrC,CACF,CACE,CACN,EAEAgC,SAAS,iBACR5X,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEP,IAAAA,SAAS,EAAC,gCAAgC;IAC1CD,OAAO,EAAEA,MAAMkZ,aAAa,CAAC3M,OAAO,CAAC/I,EAAE,CAAE;IACzC/D,KAAK,EAAEgK,CAAC,CAAC,OAAO;GAAE,eAElBlJ,KAAA,CAAAC,aAAA,CAACoP,SAAS,EAAA,IAAE,CACN,CAEP,CAAC;AAEV;;AC5HO,SAASkK,gBAAgBA,CAACC,OAAO,GAAC,EAAE,EAAC;EAC1C,MAAK,CAACzX,aAAa,EAACuI,gBAAgB,CAAC,GAAChH,QAAQ,CAACkW,OAAO,CAAC;EACvD,MAAMC,GAAG,GAAC/M,WAAW,CAACrK,CAAC,IAAEiI,gBAAgB,CAACgC,IAAI,IAAE,CAAC;AAAC,IAAA,GAAGjK,CAAC;IAACY,EAAE,EAACZ,CAAC,CAACY,EAAE,IAAEqE,IAAI,CAACoS,GAAG,EAAE;AAACpa,IAAAA,IAAI,EAAC,KAAK;AAACF,IAAAA,IAAI,EAACiD,CAAC,CAACjD,IAAI,IAAE;AAAU,GAAC,EAAC,GAAGkN,IAAI,CAAC,CAAC,EAAC,EAAE,CAAC;EAC5H,MAAMhN,IAAI,GAACoN,WAAW,CAACzJ,EAAE,IAAEqH,gBAAgB,CAACgC,IAAI,IAAEA,IAAI,CAACzJ,GAAG,CAACR,CAAC,IAAEA,CAAC,CAACY,EAAE,KAAGA,EAAE,GAAC;AAAC,IAAA,GAAGZ,CAAC;AAAC/C,IAAAA,IAAI,EAAC;AAAI,GAAC,GAAC+C,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC;AAChG,EAAA,MAAMsX,OAAO,GAACjN,WAAW,CAAC,MAAIpC,gBAAgB,CAACgC,IAAI,IAAEA,IAAI,CAACzJ,GAAG,CAACR,CAAC,KAAG;AAAC,IAAA,GAAGA,CAAC;AAAC/C,IAAAA,IAAI,EAAC;AAAI,GAAC,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC;EACzF,MAAMsa,MAAM,GAAClN,WAAW,CAACzJ,EAAE,IAAEqH,gBAAgB,CAACgC,IAAI,IAAEA,IAAI,CAAClK,MAAM,CAACC,CAAC,IAAEA,CAAC,CAACY,EAAE,KAAGA,EAAE,CAAC,CAAC,EAAC,EAAE,CAAC;EAClF,MAAM4W,KAAK,GAACnN,WAAW,CAAC,MAAIpC,gBAAgB,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC;EACpD,MAAMC,WAAW,GAACuP,OAAO,CAAC,MAAI/X,aAAa,CAACK,MAAM,CAACC,CAAC,IAAE,CAACA,CAAC,CAAC/C,IAAI,CAAC,CAACgD,MAAM,EAAC,CAACP,aAAa,CAAC,CAAC;EACtF,OAAM;IAACA,aAAa;IAAC0X,GAAG;IAACna,IAAI;IAACqa,OAAO;IAACC,MAAM;IAACC,KAAK;AAACtP,IAAAA;GAAY;AACjE;;;;"}
@@ -0,0 +1,2 @@
1
+ .qn-item:hover{background:rgba(59,130,246,.04)!important}.qn-bell:hover{background:hsla(0,0%,50%,.08)!important}.qn-center{animation:qn-slide .2s ease-out}@keyframes qn-slide{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
2
+ /*# sourceMappingURL=styles.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["notification.css"],"names":[],"mappings":"AAAA,eAAe,yCAA0C,CAAC,eAAe,uCAA2C,CACpH,WAAW,+BAAgC,CAAC,oBAAoB,GAAK,SAAS,CAAC,0BAA0B,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC","file":"styles.css","sourcesContent":[".qn-item:hover{background:rgba(59,130,246,0.04)!important}.qn-bell:hover{background:rgba(128,128,128,0.08)!important}\n.qn-center{animation:qn-slide 0.2s ease-out}@keyframes qn-slide{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}\n"]}
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@quantabit/notification-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "In-app notification center with bell, items, and hooks",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.esm.js",
8
+ "types": "types/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./types/index.d.ts",
12
+ "import": "./dist/index.esm.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "sideEffects": [
17
+ "*.css"
18
+ ],
19
+ "files": [
20
+ "dist",
21
+ "types",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "rollup -c",
27
+ "dev": "rollup -c -w",
28
+ "test": "jest --passWithNoTests",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/quantabit-chain/qbit-sdk.git",
34
+ "directory": "packages/notification-sdk"
35
+ },
36
+ "homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/notification-sdk",
37
+ "bugs": {
38
+ "url": "https://github.com/quantabit-chain/qbit-sdk/issues"
39
+ },
40
+ "keywords": [
41
+ "notification",
42
+ "bell",
43
+ "react"
44
+ ],
45
+ "author": "QuantaBit Team",
46
+ "license": "MIT",
47
+ "engines": {
48
+ "node": ">=18.0.0"
49
+ },
50
+ "peerDependencies": {
51
+ "react": ">=17.0.0",
52
+ "react-dom": ">=17.0.0"
53
+ },
54
+ "dependencies": {
55
+ "@quantabit/sdk-config": "^1.0.6"
56
+ },
57
+ "devDependencies": {
58
+ "@babel/core": "^7.23.0",
59
+ "@babel/preset-env": "^7.23.0",
60
+ "@babel/preset-react": "^7.23.0",
61
+ "@rollup/plugin-babel": "^6.0.0",
62
+ "@rollup/plugin-commonjs": "^25.0.0",
63
+ "@rollup/plugin-node-resolve": "^15.0.0",
64
+ "babel-jest": "^29.7.0",
65
+ "identity-obj-proxy": "^3.0.0",
66
+ "jest": "^29.7.0",
67
+ "jest-environment-jsdom": "^29.7.0",
68
+ "react": "^18.2.0",
69
+ "react-dom": "^18.2.0",
70
+ "rollup": "^4.0.0",
71
+ "rollup-plugin-postcss": "^4.0.0"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ },
76
+ "qbit": {
77
+ "privacy": {
78
+ "level": "functional",
79
+ "dataCollection": "Feature-related data for personalization. Requires user consent.",
80
+ "gdprCompliant": true,
81
+ "ccpaCompliant": true
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,29 @@
1
+ // Auto-generated type definitions for @quantabit/notification-sdk
2
+ export declare const NotificationBell: any;
3
+ export declare const NotificationCenter: any;
4
+ export declare const NotificationItem: any;
5
+ export declare const NotificationList: any;
6
+ export declare const NotificationSettings: any;
7
+ export declare const NotificationToast: any;
8
+ export declare const NotificationBadge: any;
9
+ export declare const AnnouncementBanner: any;
10
+ export declare const NotificationProvider: any;
11
+ export declare const useNotificationContext: any;
12
+ export declare const notificationApi: any;
13
+ export declare const NotificationApiClient: any;
14
+ export declare const MessageType: any;
15
+ export declare const MessageStatus: any;
16
+ export declare const MessagePriority: any;
17
+ export declare const NotificationType: any;
18
+ export declare const NotificationStatus: any;
19
+ export declare const NotificationPriority: any;
20
+ export declare const NotificationChannel: any;
21
+ export declare const AnnouncementScope: any;
22
+ export declare const TemplateType: any;
23
+ export declare const DeliveryStatus: any;
24
+ export declare const SUPPORTED_LANGUAGES: any;
25
+ export declare const getLanguage: any;
26
+ export declare const messages: any;
27
+ export declare const setLanguage: any;
28
+ export declare const t: any;
29
+ export declare const useNotifications: any;