@lark-apaas/client-toolkit-lite 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +50 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +50 -15
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AppContainer/index.tsx","../src/runtime/react-devtools-hook.ts","../src/utils/axiosConfig.ts","../src/utils/getCsrfToken.ts","../src/runtime/index.ts","../src/components/AppContainer/safety.tsx","../src/utils/getAppId.ts","../src/utils/apiPath.ts","../src/hooks/useAppInfo.tsx","../src/utils/getInitialInfo.ts","../src/utils/utils.ts","../src/integrations/getAppInfo.ts","../src/hooks/useCurrentUserProfile.tsx","../src/integrations/getCurrentUserProfile.ts","../src/utils/url.ts","../src/integrations/dataloom.ts","../src/hooks/useIsMobile.ts","../src/hooks/useLogout.ts","../src/locales/messages.ts","../src/utils/locale.ts","../src/locales/index.ts","../src/components/QueryProvider/index.tsx","../src/components/AppContainer/utils/tea.ts","../src/utils/deviceType.ts","../src/utils/getEnv.ts","../src/components/AppContainer/utils/getLarkUser.ts","../src/types/tea.ts","../src/components/Welcome/index.tsx","../src/components/PagePlaceholder/index.tsx","../src/route-components/ActiveLink.tsx","../src/route-components/NavLink.tsx","../src/route-components/UniversalLink.tsx","../src/utils/scopedStorage.ts","../src/utils/copyToClipboard.ts","../src/utils/resolveAppUrl.ts","../src/utils/getEnvPath.ts","../src/utils/safeStringify.ts","../src/utils/getAxiosForBackend.ts","../src/constants/img-resources/avatar.ts","../src/constants/img-resources/banner.ts","../src/constants/img-resources/cover.ts"],"sourcesContent":["import React, { useEffect } from 'react';\n\n// 兼容性:确保 runtime 被加载\n// runtime 内部有防重复机制(__FULLSTACK_RUNTIME_INITIALIZED__),不会重复执行\nimport '../../runtime';\n\nimport Safety from './safety';\nimport QueryProvider from '../QueryProvider';\nimport { useAppInfo } from '../../hooks';\nimport { reportTeaEvent } from './utils/tea';\nimport { TrackKey } from '../../types/tea';\nimport { getAppId } from '../../utils/getAppId';\n\ninterface AppContainerProps {\n children: React.ReactNode;\n}\n\nconst AppContainer: React.FC<AppContainerProps> = ({ children }) => {\n useAppInfo();\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n reportTeaEvent({\n trackKey: TrackKey.VIEW,\n trackParams: {\n artifact_uid: getAppId(),\n agent_id: 'agent_miaoda',\n url: window.location.href,\n },\n });\n }\n }, []);\n\n return (\n <>\n <Safety />\n <QueryProvider>\n {children}\n </QueryProvider>\n </>\n );\n};\n\nexport default AppContainer;\n","/* eslint-disable */\n/**\n * Inject minimal __REACT_DEVTOOLS_GLOBAL_HOOK__ before React loads.\n * React checks for this hook during module initialization and registers its\n * renderer via hook.inject(). This gives us access to renderer.overrideProps()\n * for live component prop modification in the inspector.\n *\n * Must execute before React's module-level code runs.\n *\n * When react-refresh-runtime runs first (as an rspack runtime module),\n * it may create __REACT_DEVTOOLS_GLOBAL_HOOK__ with an inject() that\n * doesn't populate the renderers Map. We patch the existing hook to\n * ensure renderers are always tracked.\n */\n\nexport {};\n\ndeclare global {\n interface Window {\n __REACT_DEVTOOLS_GLOBAL_HOOK__?: any;\n }\n}\n\nif (typeof window !== 'undefined' && process.env.NODE_ENV !== 'production') {\n if (!window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n // No hook yet — create a minimal one\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {\n renderers: new Map(),\n supportsFiber: true,\n inject(renderer: any) {\n const id = this.renderers.size + 1;\n this.renderers.set(id, renderer);\n return id;\n },\n onCommitFiberRoot() {},\n onCommitFiberUnmount() {},\n };\n } else {\n // Hook already exists (react-refresh, React DevTools extension, etc.)\n // Ensure renderers Map and inject() both work correctly.\n const hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (!(hook.renderers instanceof Map)) {\n hook.renderers = new Map();\n }\n\n const originalInject =\n typeof hook.inject === 'function' ? hook.inject.bind(hook) : null;\n\n hook.inject = function (renderer: any) {\n const id = originalInject\n ? originalInject(renderer)\n : hook.renderers.size + 1;\n if (id != null && !hook.renderers.has(id)) {\n hook.renderers.set(id, renderer);\n }\n return id;\n };\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { getCsrfToken } from './getCsrfToken';\n\n/**\n * 精简版 Axios 配置\n * 仅注入 CSRF token 和基础拦截器,不包含 observable/slardar/trace\n */\nexport function initAxiosConfig(axiosInstance?: AxiosInstance): void {\n if (!axiosInstance) {\n axiosInstance = axios;\n }\n // 请求拦截器:注入 CSRF token\n axiosInstance.interceptors.request.use(\n (config) => {\n const csrfToken = getCsrfToken();\n if (csrfToken) {\n config.headers['X-Suda-Csrf-Token'] = csrfToken;\n }\n\n // 注入当前页面路由\n if (typeof window !== 'undefined') {\n config.headers['X-Page-Route'] = window.location.pathname;\n }\n\n return config;\n },\n (error) => Promise.reject(error),\n );\n\n // 响应拦截器:开发环境日志\n axiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[axios]', error.config?.method?.toUpperCase(), error.config?.url, error.message);\n }\n return Promise.reject(error);\n },\n );\n}\n","/**\n * 获取cookie中存放的suda-csrf-token值\n * @returns {string | null} - suda-csrf-token的值,如果不存在则返回null\n */\nexport function getCsrfToken() {\n const cookieName = 'suda-csrf-token';\n\n // 从document.cookie中获取所有cookie\n const cookies = document.cookie.split('; ');\n\n // 查找指定name的cookie\n for (const cookie of cookies) {\n const [name, value] = cookie.split('=');\n if (name === cookieName) {\n // 解码cookie值\n return decodeURIComponent(value);\n }\n }\n\n // 如果没有找到,则从window上获取(全栈模式下,window上会有这个值)\n return window.csrfToken ?? null;\n}\n","/**\n * Client Toolkit Lite Runtime\n *\n * 精简版全局初始化逻辑,可通过构建工具自动注入或 AppContainer 导入触发\n *\n * 执行顺序:\n * 1. React DevTools Hook(必须在 React 加载之前)\n * 2. 全局样式\n * 3. Axios 配置(仅 CSRF token 注入)\n *\n * 不包含:Observable、Server Log SSE、Iframe Bridge、Dayjs 插件\n */\n\n// 0. React DevTools Hook(必须在 React 加载之前执行)\nimport './react-devtools-hook';\n\n// 1. Axios 配置(精简版:仅 CSRF + 基础拦截器)\nimport { initAxiosConfig } from '../utils/axiosConfig';\n\n// ============================================\n// 防重复初始化标志位\n// ============================================\n\ndeclare global {\n interface Window {\n __FULLSTACK_RUNTIME_INITIALIZED__?: boolean;\n }\n}\n\nif (!window.__FULLSTACK_RUNTIME_INITIALIZED__) {\n window.__FULLSTACK_RUNTIME_INITIALIZED__ = true;\n\n // ============================================\n // 同步初始化\n // ============================================\n\n initAxiosConfig();\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { getCsrfToken } from '../../utils/getCsrfToken';\nimport { getAppId } from '../../utils/getAppId';\nimport { isNewPathEnabled } from '../../utils/apiPath';\nimport { useIsMobile } from '../../hooks';\nimport { t } from '../../locales';\n\n// ── defensive reset (prevents host page CSS from leaking in) ────\n\nconst resetBase: React.CSSProperties = {\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n border: 'none',\n background: 'none',\n font: 'inherit',\n color: 'inherit',\n textAlign: 'left',\n textDecoration: 'none',\n textTransform: 'none',\n letterSpacing: 'normal',\n wordSpacing: 'normal',\n lineHeight: 'normal',\n verticalAlign: 'baseline',\n listStyle: 'none',\n};\n\n// ── inline style constants ──────────────────────────────────────\n\nconst FONT_FAMILY = \"'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\nconst Z_BADGE = 10000000;\nconst Z_OVERLAY = 10000001;\n\nconst LOGO_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodalogo.svg';\n// Cover URLs 通过 locale 机制获取,支持中英文不同封面\nconst getCoverUrl = () => t('safety.cover.pc');\nconst getCoverMobileUrl = () => t('safety.cover.mobile');\nconst ICON_COMPANY_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_company_outlined.svg';\nconst ICON_AI_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_efficiency-ai_outlined.svg';\nconst LANDING_URL = 'https://miaoda.feishu.cn/landing';\n\nconst badgeBase: React.CSSProperties = {\n ...resetBase,\n position: 'fixed',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n border: '1px solid rgba(255,255,255,0.1)',\n padding: '6px 10px',\n background: '#1f2329',\n boxShadow: '0 6px 12px 0 rgba(65,68,74,0.04), 0 8px 24px 8px rgba(65,68,74,0.04)',\n borderRadius: 6,\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n zIndex: Z_BADGE,\n cursor: 'pointer',\n};\n\nconst badgeDesktop: React.CSSProperties = { ...badgeBase, right: 12, bottom: 12 };\nconst badgeMobile: React.CSSProperties = { ...badgeBase, right: 12, bottom: 80 };\n\nconst logoStyle: React.CSSProperties = { flexShrink: 0, width: 16, height: 16 };\n\nconst badgeTextStyle: React.CSSProperties = {\n flexShrink: 0,\n margin: 0,\n color: '#EBEBEB',\n};\n\n// ── desktop popover styles ──────────────────────────────────────\n\nconst popoverContent: React.CSSProperties = {\n ...resetBase,\n overflow: 'hidden',\n borderRadius: 12,\n width: 286,\n boxShadow: '0 6px 12px 0 rgba(65,68,74,0.04), 0 8px 24px 0 rgba(65,68,74,0.04)',\n zIndex: Z_OVERLAY,\n};\n\nconst popoverInner: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n background: '#1A1A1A',\n};\n\nconst popoverCover: React.CSSProperties = { width: 286, height: 128, cursor: 'pointer', display: 'block' };\n\nconst popoverBody: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'flex-end',\n gap: 12,\n border: '1px solid rgba(255,255,255,0.05)',\n padding: '11px 15px 15px 14px',\n borderRadius: '12px 12px 0 0',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n color: '#a6a6a6',\n background: '#1f2021',\n};\n\nconst infoRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n alignSelf: 'stretch',\n};\n\nconst infoIcon: React.CSSProperties = { flexShrink: 0, width: 12, height: 12 };\nconst infoIconMobile: React.CSSProperties = { flexShrink: 0, width: 14, height: 14 };\n\nconst infoText: React.CSSProperties = { margin: 0, color: '#a6a6a6', flexShrink: 0 };\n\nconst btnRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n width: '100%',\n alignSelf: 'stretch',\n};\n\nconst btnBase: React.CSSProperties = {\n ...resetBase,\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 34,\n borderRadius: 8,\n borderWidth: '0.5px',\n borderStyle: 'solid',\n borderColor: 'rgba(255,255,255,0.11)',\n background: 'rgba(255,255,255,0.03)',\n color: '#ebebeb',\n cursor: 'pointer',\n fontSize: 12,\n fontFamily: FONT_FAMILY,\n transition: 'background 0.15s ease, border-color 0.15s ease',\n};\n\nconst btnHovered: React.CSSProperties = {\n background: 'rgba(255,255,255,0.08)',\n borderColor: 'rgba(255,255,255,0.2)',\n};\n\n// ── mobile sheet styles ─────────────────────────────────────────\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: Z_OVERLAY,\n background: 'rgba(0,0,0,0.5)',\n};\n\nconst sheetContent: React.CSSProperties = {\n position: 'fixed',\n inset: 'auto 0 0 0',\n zIndex: Z_OVERLAY + 1,\n outline: 'none',\n};\n\nconst sheetInner: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n overflow: 'hidden',\n borderRadius: '16px 16px 0 0',\n position: 'relative',\n};\n\nconst sheetCloseBtn: React.CSSProperties = {\n position: 'absolute',\n top: 8,\n left: 16,\n width: 24,\n height: 24,\n color: '#2B2F36',\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n};\n\nconst sheetCover: React.CSSProperties = { width: '100%', display: 'block', cursor: 'pointer' };\n\nconst sheetBody: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'flex-end',\n gap: 16,\n padding: '16px 20px 48px',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n color: '#a6a6a6',\n};\n\nconst sheetInfoText: React.CSSProperties = { margin: 0, color: '#646A73', fontSize: 14, flexShrink: 0 };\n\nconst mobileBtnRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 16,\n alignSelf: 'stretch',\n};\n\nconst mobileBtnBase: React.CSSProperties = {\n ...resetBase,\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 99,\n fontSize: 18,\n fontFamily: FONT_FAMILY,\n padding: '12px 0',\n cursor: 'pointer',\n};\n\nconst mobileBtnOutline: React.CSSProperties = {\n ...mobileBtnBase,\n border: '0.5px solid #D0D3D6',\n background: '#fff',\n color: '#1F2329',\n};\n\nconst mobileBtnFilled: React.CSSProperties = {\n ...mobileBtnBase,\n border: '0.5px solid #000',\n background: '#000',\n color: '#fff',\n};\n\n// ── HoverButton helper ──────────────────────────────────────────\n\nconst HoverButton: React.FC<{\n style: React.CSSProperties;\n onClick: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n 'data-custom-element'?: string;\n}> = ({ style, onClick, children, ...rest }) => {\n const [hovered, setHovered] = useState(false);\n return (\n <div\n style={{\n ...style,\n ...(hovered ? btnHovered : {}),\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={onClick}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\n// ── X icon (inline SVG, replaces lucide-react dependency) ───────\n\nconst XIcon: React.FC<{ style?: React.CSSProperties; onClick?: () => void }> = ({ style, onClick }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={style}\n onClick={onClick}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n);\n\n// ── main component ──────────────────────────────────────────────\n\nconst Safety = () => {\n const HasClosedKey = `miaoda-creatByMiaodo-has-closed-${getAppId()}`;\n const [visible, setVisible] = useState(\n !window.localStorage?.getItem(HasClosedKey),\n );\n const [open, setOpen] = useState(false);\n const isMobile = useIsMobile();\n const [userinfo, setUserinfo] = useState<{ id: number; name: string } | null>(null);\n const [isInternetVisible, setIsInternetVisible] = useState(false);\n const [showBadge, setShowBadge] = useState(true);\n const [badgeLoaded, setBadgeLoaded] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const appId = getAppId();\n const csrfToken = getCsrfToken() ?? '';\n const csrfHeaders: Record<string, string> = { 'X-Suda-Csrf-Token': csrfToken };\n\n const tenantInfoUrl = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/tenant_info`\n : `/spark/b/${appId}/tenant_info`;\n fetch(tenantInfoUrl, { headers: csrfHeaders })\n .then(res => res.json())\n .then(data => {\n setUserinfo(data?.data?.tenant_info);\n setIsInternetVisible(data?.data?.is_internet_visible);\n })\n .catch(() => {});\n\n const getPublishedUrl = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/get_published`\n : `/spark/b/${appId}/get_published`;\n fetch(getPublishedUrl, { headers: csrfHeaders })\n .then(res => res.json())\n .then(data => {\n const badge = data?.data?.app_info?.show_badge;\n setShowBadge(badge !== false);\n })\n .catch(() => {\n setShowBadge(true);\n })\n .finally(() => {\n setBadgeLoaded(true);\n });\n }, []);\n\n useEffect(() => {\n if (isMobile) {\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = getCoverMobileUrl();\n document.head.appendChild(link);\n }\n }, [isMobile]);\n\n if (process.env.NODE_ENV !== 'production') return null;\n if (!badgeLoaded) return null;\n if (!showBadge) return null;\n if (!visible) return null;\n\n // ── mobile: bottom sheet ────────────────────────────────────\n if (isMobile) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={setOpen}>\n <DialogPrimitive.Trigger asChild>\n <div style={badgeMobile} onClick={() => setOpen(true)}>\n <img src={LOGO_URL} style={logoStyle} />\n <p style={{ ...badgeTextStyle, minWidth: 28 }}>{t('safety.badge.label')}</p>\n </div>\n </DialogPrimitive.Trigger>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay style={overlayStyle} />\n <DialogPrimitive.Content style={sheetContent} aria-describedby={undefined}>\n <DialogPrimitive.Title style={{ position: 'absolute', clip: 'rect(0 0 0 0)' }}>\n {t('safety.badge.builtWith')}\n </DialogPrimitive.Title>\n <div style={sheetInner}>\n <XIcon style={sheetCloseBtn} onClick={() => setOpen(false)} />\n <img\n src={getCoverMobileUrl()}\n alt=\"\"\n style={sheetCover}\n onClick={() => window.open(LANDING_URL, '_blank')}\n />\n <div style={sheetBody}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n {isInternetVisible && (\n <div style={infoRow}>\n <img src={ICON_COMPANY_URL} style={infoIconMobile} />\n <p style={sheetInfoText}>{t('safety.tenant.operated', { name: userinfo?.name ?? '' })}</p>\n </div>\n )}\n <div style={infoRow}>\n <img src={ICON_AI_URL} style={infoIconMobile} />\n <p style={sheetInfoText}>{t('safety.ai.disclaimer')}</p>\n </div>\n </div>\n <div style={mobileBtnRow}>\n <div\n style={mobileBtnOutline}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setOpen(false);\n setTimeout(() => setVisible(false), 200);\n window.localStorage?.setItem(HasClosedKey, 'true');\n }}\n >\n {t('safety.button.dontShowAgain')}\n </div>\n <div\n style={mobileBtnFilled}\n onClick={() => window.open(LANDING_URL, '_blank')}\n >\n {t('safety.button.learnMore')}\n </div>\n </div>\n </div>\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n }\n\n // ── desktop: popover on hover ───────────────────────────────\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <div\n style={badgeDesktop}\n onMouseEnter={() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setOpen(true);\n }}\n onMouseLeave={() => {\n timeoutRef.current = setTimeout(() => setOpen(false), 100);\n }}\n >\n <img src={LOGO_URL} style={logoStyle} />\n <p style={{ ...badgeTextStyle, minWidth: 60 }}>{t('safety.badge.builtWith')}</p>\n </div>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n style={popoverContent}\n side=\"top\"\n align=\"end\"\n sideOffset={8}\n onMouseEnter={() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setOpen(true);\n }}\n onMouseLeave={() => {\n timeoutRef.current = setTimeout(() => setOpen(false), 100);\n }}\n >\n <div style={popoverInner}>\n <img\n src={getCoverUrl()}\n alt=\"\"\n style={popoverCover}\n onClick={() => window.open(LANDING_URL, '_blank')}\n />\n <div style={popoverBody}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n {isInternetVisible && (\n <div style={infoRow}>\n <img src={ICON_COMPANY_URL} style={infoIcon} />\n <p style={infoText}>{t('safety.tenant.operated', { name: userinfo?.name ?? '' })}</p>\n </div>\n )}\n <div style={infoRow}>\n <img src={ICON_AI_URL} style={infoIcon} />\n <p style={infoText}>{t('safety.ai.disclaimer')}</p>\n </div>\n </div>\n <div style={btnRow}>\n <HoverButton\n style={btnBase}\n data-custom-element=\"safety-close\"\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setVisible(false);\n window.localStorage?.setItem(HasClosedKey, 'true');\n }}\n >\n {t('safety.button.dontShowAgain')}\n </HoverButton>\n <HoverButton\n style={btnBase}\n data-custom-element=\"safety-more\"\n onClick={() => window.open(LANDING_URL, '_blank')}\n >\n {t('safety.button.learnMore')}\n </HoverButton>\n </div>\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\n\nexport default Safety;\n","/* eslint-disable */\n/**\n * 获取应用 ID\n */\nexport function getAppId(): string | null {\n const windowAppId = (window as any).appId || null;\n return windowAppId;\n}\n","/**\n * 判断当前是否启用新的路径规范\n * 新路径规范:CLIENT_BASE_PATH 以 /app/:appId 格式开头\n */\nexport function isNewPathEnabled(): boolean {\n const basePath = process.env.CLIENT_BASE_PATH || '/';\n return /^\\/app\\/[^/]/.test(basePath);\n}\n","import { useEffect, useState } from 'react';\nimport { AppInfoPayload } from '../types/common';\nimport { getAppInfo } from '../integrations/getAppInfo';\n\nexport const useAppInfo = () => {\n const [appInfo, setAppInfo] = useState<Partial<AppInfoPayload>>({});\n\n useEffect(() => {\n const updateDomInfo = (info: AppInfoPayload) => {\n if (info.name) {\n document.title = info.name;\n const meta = document.querySelector(\"meta[property='og:title']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.name;\n }\n }\n if (info.avatar) {\n let link = document.querySelector(\"link[rel~='icon']\") as HTMLLinkElement;\n if (!link) {\n link = document.createElement('link');\n link.rel = 'icon';\n document.head.appendChild(link);\n }\n link.href = info.avatar;\n const meta = document.querySelector(\"meta[property='og:image']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.avatar;\n }\n }\n if (info.description) {\n const meta = document.querySelector(\"meta[property='og:description']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.description;\n }\n const metaDom = document.querySelector(\"meta[name='description']\") as HTMLMetaElement;\n if (metaDom) {\n metaDom.content = info.description;\n }\n }\n }\n\n const handleMetaInfoChanged = async (info?: AppInfoPayload, refresh = true) => {\n if (!info) {\n info = await getAppInfo(refresh);\n }\n updateDomInfo(info);\n setAppInfo(prev => ({ ...prev, ...info }));\n };\n handleMetaInfoChanged(undefined, false);\n const onUpdate = (e: Event) => {\n const info = (e as CustomEvent<AppInfoPayload>).detail;\n handleMetaInfoChanged(info);\n };\n window.addEventListener('MiaoDaMetaInfoChanged', onUpdate);\n return () => {\n window.removeEventListener('MiaoDaMetaInfoChanged', onUpdate);\n };\n }, []);\n\n return {\n ...appInfo,\n appName: appInfo.name,\n appLogo: appInfo.avatar,\n };\n};\n","import { getAppId } from './getAppId';\nimport { getCsrfToken } from './getCsrfToken';\nimport { isNewPathEnabled } from './apiPath';\n\ninterface AppRuntimeExtra {\n token?: string;\n url?: string;\n bucket?: BucketConfig;\n}\ninterface AppRuntimePublished {\n app_name?: string;\n css_urls?: string[];\n js_urls?: string[];\n app_avatar?: string;\n app_description?: string;\n}\ninterface BucketConfig {\n default_bucket_id?: string;\n}\n\n/**\n * 从API获取已发布的应用信息(仅全栈沙箱模式下使用)\n */\nasync function getAppPublished(): Promise<\n | {\n app_info?: AppRuntimePublished;\n app_runtime_extra?: AppRuntimeExtra;\n }\n | undefined\n> {\n try {\n // 构建请求头\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Kunlun-Token': window.token,\n 'x-miaoda-token': window.MIAODA_BUILTIN_TTT,\n 'X-Suda-Csrf-Token': getCsrfToken(),\n };\n const appId = getAppId();\n const path = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/get_published`\n : `/spark/b/${appId}/get_published`;\n const url = `${window.location.origin}${path}`;\n // 发起fetch请求\n const response = await fetch(url, {\n method: 'GET',\n headers,\n credentials: 'include', // 包含cookies\n });\n\n // 解析响应数据\n const res = await response.json();\n if (res.code === 0 || res.status_code === '0') {\n return res.data;\n }\n console.error('Error fetching published app info:', res);\n } catch (error) {\n console.error('Error fetching published app info:', error);\n }\n return undefined;\n}\n// 存储的公共信息\nlet initialInfo:\n | {\n app_info?: AppRuntimePublished;\n app_runtime_extra?: AppRuntimeExtra;\n }\n | undefined;\n\n// 缓存进行中的 Promise,防止并发调用发起多个重复请求\nlet pendingPromise: Promise<typeof initialInfo> | null = null;\n\n/** 获取应用初始化信息(仅全栈沙箱模式下使用) */\nexport function getInitialInfo(refresh = false): Promise<typeof initialInfo> {\n if (initialInfo && !refresh) {\n return Promise.resolve(initialInfo);\n }\n if (pendingPromise && !refresh) {\n return pendingPromise;\n }\n pendingPromise = getAppPublished()\n .then(info => {\n initialInfo = info;\n if (initialInfo) {\n window._bucket_id =\n initialInfo.app_runtime_extra?.bucket?.default_bucket_id;\n }\n return initialInfo;\n })\n .finally(() => {\n pendingPromise = null;\n });\n return pendingPromise;\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * @internal\n * 处理 className 与 tailwind-merge\n */\nexport function clsxWithTw(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * @internal\n * 当前是否是预览态\n */\nexport function isPreview() {\n return window.IS_MIAODA_PREVIEW;\n}\n\n/**\n * @internal\n * 标准化基础路径,确保路径格式一致\n * 移除末尾的斜杠,确保路径不以斜杠结尾\n */\nexport function normalizeBasePath(basePath?: string): string {\n if (!basePath || basePath === '/') {\n return '';\n }\n // 移除末尾的斜杠\n return basePath.replace(/\\/+$/, '');\n}\n\n// 获取 ws 路径\nexport function getWsPath(): string {\n const rawBasePath = process.env.CLIENT_BASE_PATH || '/';\n const normalizedBasePath = rawBasePath.startsWith('/')\n ? rawBasePath\n : `/${rawBasePath}`;\n const basePathWithoutTrailingSlash = normalizedBasePath.endsWith('/')\n ? normalizedBasePath.slice(0, -1)\n : normalizedBasePath;\n\n return `${basePathWithoutTrailingSlash}/ws`;\n}\n\n/** 判断是否是沙箱模式 */\nexport function isSparkRuntime() {\n // 兼容全栈模式标记(通过构建方式注入)\n return window._IS_Spark_RUNTIME ?? process.env.runtimeMode === 'fullstack';\n}","/* eslint-disable */\nimport { AppInfoPayload } from '../types/common';\nimport { getInitialInfo } from '../utils/getInitialInfo';\nimport { isSparkRuntime } from '../utils/utils';\n\nexport async function getAppInfo(refresh = false): Promise<AppInfoPayload> {\n let appInfo = typeof window !== 'undefined' ? (window as any)._appInfo : undefined;\n if ((!appInfo || refresh) && isSparkRuntime()) {\n const info = (await getInitialInfo(refresh))?.app_info;\n appInfo = {\n name: info?.app_name || '',\n avatar: info?.app_avatar || '',\n description: info?.app_description || '',\n };\n if (appInfo.name) {\n appInfo.name = appInfo.name.trim();\n }\n\n if (typeof window !== 'undefined') {\n (window as any)._appInfo = appInfo;\n }\n }\n return appInfo ?? {};\n}\n","import { useEffect, useState } from 'react';\nimport { IUserProfile } from '../types/udt-types';\nimport { getCurrentUserProfile } from '../integrations/getCurrentUserProfile';\nimport { getDataloom } from '../integrations/dataloom';\nimport { isSparkRuntime } from '../utils/utils';\n\n/**\n * 从 name 数组中获取用户名称\n * 优先选择 language_code 为 2052(简体中文)的数据,如果匹配不到则取第一个\n */\nfunction getNameFromArray(\n nameArray?: Array<{ language_code?: number; text?: string }>,\n): string | undefined {\n if (!nameArray || nameArray.length === 0) {\n return undefined;\n }\n const chineseName = nameArray.find((item) => item.language_code === 2052);\n return chineseName?.text ?? nameArray[0]?.text;\n}\n\nexport interface ICompatibilityUserProfile extends IUserProfile {\n /**\n * @deprecated please use `name`\n */\n userName: string;\n /**\n * @deprecated please use `avatar`\n */\n userAvatar: string;\n}\n\nfunction getCompatibilityUserProfile(): ICompatibilityUserProfile {\n const userInfo = getCurrentUserProfile();\n return {\n ...userInfo,\n // 兼容处理\n userName: userInfo.name,\n userAvatar: userInfo.avatar,\n };\n}\n\nexport const useCurrentUserProfile = () => {\n const [userInfo, setUserInfo] = useState<ICompatibilityUserProfile>(() =>\n getCompatibilityUserProfile(),\n );\n\n // 事件驱动,从 window 上取值\n useEffect(() => {\n let cancelled = false;\n\n const fetchAndSetUserInfo = async () => {\n const dataloom = await getDataloom();\n const result = await dataloom?.service?.session?.getUserInfo();\n if (cancelled) return;\n const info = result?.data?.user_info;\n const userName = getNameFromArray(info?.name);\n const newUserInfo: ICompatibilityUserProfile = {\n user_id: info?.user_id?.toString() ?? '',\n email: info?.email ?? '',\n name: userName ?? '',\n avatar: info?.avatar?.image?.large ?? '',\n userName: userName ?? '',\n userAvatar: info?.avatar?.image?.large ?? '',\n };\n if (process.env.NODE_ENV === 'development') {\n console.log('MiaoDaMetaInfoChanged', newUserInfo);\n }\n setUserInfo(newUserInfo);\n };\n\n let handleMetaInfoChanged: () => void;\n if (isSparkRuntime()) {\n fetchAndSetUserInfo();\n handleMetaInfoChanged = () => { fetchAndSetUserInfo(); };\n } else {\n handleMetaInfoChanged = () => {\n if (process.env.NODE_ENV === 'development') {\n console.log('MiaoDaMetaInfoChanged', getCompatibilityUserProfile());\n }\n setUserInfo(getCompatibilityUserProfile());\n };\n }\n\n window.addEventListener('MiaoDaMetaInfoChanged', handleMetaInfoChanged);\n return () => {\n cancelled = true;\n window.removeEventListener(\n 'MiaoDaMetaInfoChanged',\n handleMetaInfoChanged,\n );\n };\n }, []);\n\n return userInfo;\n};\n","/* eslint-disable */\nimport { IUserProfile } from '../types/udt-types';\n\nexport function getCurrentUserProfile(): IUserProfile {\n return (window as any)._userInfo || {};\n}\n\n/**\n * @deprecated 请使用 getCurrentUserProfile 代替\n */\nexport const getUserInfo = getCurrentUserProfile;\n","\nexport interface UrlParts {\n baseUrl: string;\n workspace: string;\n}\n\n/**\n * @internal\n */\nexport function splitWorkspaceUrl(fullUrl: string): UrlParts {\n try {\n // https://www.suda.com/suda/api/v1/workspaces/:workspace_id\n const url = new URL(fullUrl);\n const pathParts = url.pathname.split('/');\n\n // 找到 workspaces 位置\n const workspacesIndex = pathParts.findIndex(part => part === 'workspaces');\n if (workspacesIndex === -1) {\n throw new Error('Invalid workspace URL format');\n }\n\n const basePathParts = pathParts.slice(0, workspacesIndex);\n const workspace = pathParts[workspacesIndex + 1];\n\n return {\n baseUrl: `${url.origin}${basePathParts.join('/')}`,\n workspace,\n };\n } catch (error) {\n console.error('Error splitting workspace URL:', error);\n }\n return {\n baseUrl: fullUrl,\n // 兜底给一个,不要给空字符串,不然 createClient 都直接挂了,页面会白屏,体感不太好\n workspace: 'workspace',\n };\n}\n","import { splitWorkspaceUrl } from '../utils/url';\nimport { createClient } from '@data-loom/js';\nimport { getAppId } from '../utils/getAppId';\nimport { getInitialInfo } from '../utils/getInitialInfo';\n\nconst createDataLoomClient = (url?: string, pat?: string) => {\n const { baseUrl, workspace } = url ? splitWorkspaceUrl(url) : { baseUrl: '', workspace: '' };\n const appId = getAppId() ?? '';\n return createClient(baseUrl, pat ?? '', workspace, {\n global: {\n enableDataloomLog: process.env.NODE_ENV !== 'production',\n requestRateLimit: process.env.NODE_ENV !== 'production' ? 100 : undefined,\n brandName: 'miaoda',\n appId,\n onError: (error, dataloomInstance) => {\n if (error?.status === 401) {\n if (error?.code === 'k_ident_013001') {\n // apiKey 为空\n dataloomInstance.service.session.redirectToLogin();\n }\n }\n },\n },\n });\n};\n\nlet dataloom: ReturnType<typeof createDataLoomClient> | null = null;\n// 缓存进行中的 Promise,防止并发调用创建多个实例\nlet pendingPromise: Promise<ReturnType<typeof createDataLoomClient>> | null = null;\n\n/** 获取dataloom实例 */\nexport function getDataloom(): Promise<ReturnType<typeof createDataLoomClient>> {\n if (dataloom) {\n return Promise.resolve(dataloom);\n }\n if (pendingPromise) {\n return pendingPromise;\n }\n pendingPromise = getInitialInfo()\n .then(info => {\n const DATALOOM_CLIENT_URL = info?.app_runtime_extra?.url;\n const DATALOOM_PAT = info?.app_runtime_extra?.token;\n dataloom = createDataLoomClient(DATALOOM_CLIENT_URL, DATALOOM_PAT);\n return dataloom;\n })\n .finally(() => {\n pendingPromise = null;\n });\n return pendingPromise;\n}\n","import React from 'react';\nimport { debounce } from 'lodash';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean>(\n window.innerWidth < MOBILE_BREAKPOINT\n );\n\n React.useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n\n const debouncedHandleResize = debounce(handleResize, 200);\n\n window.addEventListener('resize', debouncedHandleResize);\n\n // Set initial value\n handleResize();\n\n return () => {\n window.removeEventListener('resize', debouncedHandleResize);\n debouncedHandleResize.cancel(); // Cancel any pending execution on unmount\n };\n }, []);\n\n return isMobile;\n}\n","import { useState } from 'react';\nimport { getDataloom } from '../integrations/dataloom';\n\nexport function useLogout() {\n const [isLoading, setIsLoading] = useState(false);\n async function handlerLogout() {\n if (process.env.NODE_ENV !== 'production') {\n console.log('只有生产环境才执行登出');\n return;\n }\n setIsLoading(true);\n try {\n const dataloom = await getDataloom();\n await dataloom.service.session.signOut();\n } catch (error) {\n console.error('登出失败', error);\n } finally {\n setIsLoading(false);\n }\n }\n\n return {\n handlerLogout,\n isLoading,\n };\n}\n","/**\n * 中英文文案源(统一管理)。\n *\n * 每条文案同时包含 zh 和 en,方便对照和维护。\n * Key 规则:`{组件}.{区域}.{标识}`\n * 文案来源:https://bytedance.larkoffice.com/wiki/BJCQwv9auiP9erkudMfcVIIGnRg\n */\n\nconst messages: Record<string, { zh: string; en: string }> = {\n // ── Safety 组件 ──────────────────────────────────────────────\n 'safety.badge.label': {\n zh: '妙搭',\n en: 'Spark',\n },\n 'safety.badge.builtWith': {\n zh: '由妙搭搭建',\n en: 'Built with Spark',\n },\n 'safety.ai.disclaimer': {\n zh: '包含 AI 生成内容,请注意甄别',\n en: 'AI-generated content. Use with care.',\n },\n 'safety.tenant.operated': {\n zh: '{name}运营',\n en: 'Operated by {name}',\n },\n 'safety.button.dontShowAgain': {\n zh: '不再展示',\n en: \"Don't show again\",\n },\n 'safety.button.learnMore': {\n zh: '了解更多',\n en: 'Learn more',\n },\n 'safety.cover.pc': {\n zh: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover.png',\n en: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-weben.png',\n },\n 'safety.cover.mobile': {\n zh: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobile.png',\n en: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobileen.png',\n },\n};\n\nexport default messages;\n","/**\n * 统一的语言判断方法。\n *\n * 基于浏览器 Accept-Language(navigator.language)判断。\n * 返回标准化的 locale code:'zh' | 'en'。\n * 目前只区分中英文,未来需要更多语言时在此扩展。\n */\n\nexport type Locale = 'zh' | 'en';\n\nexport function getLocale(): Locale {\n const lang = navigator.language || 'zh';\n return lang.startsWith('zh') ? 'zh' : 'en';\n}\n","import messages from './messages';\nimport { getLocale } from '../utils/locale';\nimport type { Locale } from '../utils/locale';\n\n/**\n * 获取当前语言环境下的翻译文案。\n *\n * 支持 `{key}` 形式的变量替换:\n * ```ts\n * t('safety.tenant.operated', { name: '字节' })\n * // zh → \"字节运营\"\n * // en → \"Operated by 字节\"\n * ```\n *\n * 如果 key 不存在,fallback 到中文;中文也没有则返回 key 本身。\n */\nexport function t(key: string, params?: Record<string, string>): string {\n const locale = getLocale();\n const entry = messages[key];\n let text = entry?.[locale] ?? entry?.zh ?? key;\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n text = text.replace(`{${k}}`, v);\n }\n }\n return text;\n}\n\nexport { getLocale } from '../utils/locale';\nexport type { Locale } from '../utils/locale';\n","import React from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nlet defaultQueryClient: QueryClient | null = null;\n\nconst getDefaultQueryClient = () => {\n if (!defaultQueryClient) {\n defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n },\n mutations: {\n retry: 1,\n },\n },\n });\n }\n return defaultQueryClient;\n};\n\nexport type QueryProviderProps = {\n children: React.ReactNode;\n client?: QueryClient;\n};\n\nconst QueryProvider: React.FC<QueryProviderProps> = ({ children, client }) => {\n const qc = client ?? getDefaultQueryClient();\n return <QueryClientProvider client={qc}>{children}</QueryClientProvider>;\n};\n\nexport default QueryProvider;\nexport { getDefaultQueryClient };\n\n","import md5 from 'blueimp-md5';\nimport sha1 from 'crypto-js/sha1';\nimport { isMobile } from '../../../utils/deviceType';\nimport { getEnv } from '../../../utils/getEnv';\nimport { getLarkUserInfo } from './getLarkUser';\n\nimport { type TrackParams } from '../../../types/tea';\n\nconst saltA = '08a441';\nconst saltB = '42b91e';\nexport const encryptTea = (message: any): string => {\n const msgString = String(message);\n return sha1(saltA + md5(msgString + saltB)).toString();\n};\n\nlet teaInstance = false;\n\n/**\n * 初始化Tea 客户端\n * @export\n */\nexport async function createTracker(): Promise<void> {\n const { data } = await getLarkUserInfo();\n const { tenantID, userID} = data || {};\n const userIDEncrypt = userID && userID !== '0' ? encryptTea(userID) : undefined;\n const tenantIDEncrypt = tenantID && tenantID !== '0' ? encryptTea(tenantID) : undefined;\n\n window.collectEvent?.('init', {\n app_id: 788827,\n channel: 'cn',\n disable_auto_pv: false,\n enable_ab_test: false,\n enable_debug: false,\n enable_stay_duration: true, // 上报页面停留时间\n reportTime: 1000, // 事件上报异步队列的时间间隔\n });\n\n window.collectEvent?.('config', {\n user_unique_id: userIDEncrypt,\n device_type: isMobile() ? 'mobile' : 'pc',\n evtParams: {\n open_from: new URLSearchParams(window.location.search).get('open-from') ?? undefined,\n env: getEnv(),\n user_id: userIDEncrypt,\n tenant_id: tenantIDEncrypt,\n },\n });\n teaInstance = true;\n\n window.collectEvent?.('start');\n}\n\nexport const reportTeaEvent = async ({ trackKey, trackParams = {}}: TrackParams): Promise<void> => {\n try {\n if (!teaInstance) {\n teaInstance = true;\n await createTracker();\n }\n\n window.collectEvent?.(trackKey, trackParams);\n } catch (err) {\n // 静默,不影响业务\n console.error(err); // eslint-disable-line no-restricted-syntax\n }\n};\n","export const isIpad = (): boolean => {\n const _isIpad =\n /iPad|Tab|Tablet/i.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 1;\n\n return Boolean(_isIpad);\n};\n\nexport const isMobile = (): boolean => {\n const isPhone =\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i.test(\n navigator.userAgent\n );\n\n return isPhone || isIpad();\n};\n\nexport const isIOS = (): boolean => {\n if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {\n return true;\n }\n return false;\n};\n","export function getEnv(): 'BOE' | 'PRE' | 'ONLINE' {\n switch((globalThis as any).ENVIRONMENT) {\n case 'staging':\n return 'BOE';\n case 'gray':\n return 'PRE';\n case 'online':\n return 'ONLINE';\n default:\n break;\n\n }\n const { origin } = window.location;\n // 线上环境\n if (origin.includes('feishuapp.cn') || origin.includes('miaoda.feishuapp.net') || origin.includes('aiforce.cloud') || origin.includes('aiforce.run')) {\n return 'ONLINE';\n // PRE 环境\n } else if (origin.includes('fsapp.kundou.cn') || origin.includes('miaoda-pre.feishuapp.net') || origin.includes('aiforce-pre.bytedance.net') || origin.includes('aiforce-pre-preview.bytedance.net') || origin.includes('aiforce-pre.cloud') || origin.includes('aiforce-pre.run')) {\n return 'PRE';\n // BOE 环境\n } else {\n return 'BOE';\n }\n}\n","import { getAppId } from '../../../utils/getAppId';\nimport { getCsrfToken } from '../../../utils/getCsrfToken';\nimport { isNewPathEnabled } from '../../../utils/apiPath';\n\nexport async function getLarkUserInfo() {\n const appId = getAppId();\n if (!appId) {\n return {\n code: 1,\n msg: 'appId is required',\n data: {},\n };\n }\n\n const url = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/lark/user_info`\n : `/spark/b/${appId}/lark/user_info`;\n\n const response = await fetch(url, {\n headers: {\n 'X-Suda-Csrf-Token': getCsrfToken() ?? '',\n },\n });\n\n return await response.json();\n}\n","export interface TrackParams {\n trackKey: TrackKey;\n trackParams?: Record<string, unknown>;\n}\n\nexport enum TrackKey {\n VIEW = 'aily_agent_artifact_page_view',\n}\n","import React from 'react';\n\nconst Welcome: React.FC<{\n title?: string;\n description?: string;\n}> = ({ title = '页面待开发', description = '页面暂未开发,请耐心等待...' }) => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: 'calc(100vh - 64px)',\n padding: '0 24px',\n textAlign: 'center',\n }}\n >\n <img\n style={{ borderRadius: 6, marginBottom: 24 }}\n width=\"320\"\n height=\"200\"\n src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg\"\n alt=\"Welcome\"\n />\n <div style={{ fontSize: 16, fontWeight: 500, lineHeight: '24px', marginBottom: 4, color: '#1f2329' }}>\n {title}\n </div>\n <div style={{ fontSize: 16, lineHeight: '24px', color: '#8f959e', maxWidth: 480 }}>\n {description}\n </div>\n </div>\n );\n};\n\nexport default Welcome;\n","import React from 'react';\n\nconst PagePlaceholder: React.FC<{\n title?: string;\n description?: string;\n}> = ({ title = '页面待开发', description = '页面暂未开发,请耐心等待...' }) => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 24px',\n width: '100%',\n height: 'calc(100vh - 64px)',\n textAlign: 'center',\n }}\n >\n <img\n style={{ borderRadius: '6px', marginBottom: '24px' }}\n width=\"320\"\n height=\"200\"\n src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg\"\n alt=\"Welcome\"\n />\n <div style={{ fontSize: '16px', fontWeight: 500, marginBottom: '4px', lineHeight: '24px' }}>\n {title}\n </div>\n <div\n style={{\n color: '#6b7280',\n fontSize: '16px',\n lineHeight: '24px',\n maxWidth: '480px',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {description}\n </div>\n </div>\n );\n};\n\nexport default PagePlaceholder;\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { NavLink, type NavLinkProps } from 'react-router-dom';\n\nexport interface ActiveLinkProps extends Omit<NavLinkProps, 'to'> {\n to: string;\n}\n\n/**\n * ActiveLink 组件\n *\n * 替换 react-router-dom 的 NavLink,扩展支持 hash 路由跳转和激活态功能\n *\n * @example\n * // 普通路由跳转\n * <ActiveLink to=\"/dashboard\">Dashboard</ActiveLink>\n *\n * // hash 路由跳转\n * <ActiveLink to=\"#section1\">Section 1</ActiveLink>\n *\n * // 使用函数式 className 显示激活态\n * <ActiveLink\n * to=\"#features\"\n * className={({isActive}) => isActive ? 'active' : ''}\n * >\n * Features\n * </ActiveLink>\n */\n\nexport const ActiveLink = forwardRef<HTMLAnchorElement, ActiveLinkProps>(\n ({ to, onClick, className, style, children, ...rest }, ref) => {\n const [currentHash, setCurrentHash] = useState(() =>\n typeof window !== 'undefined' ? window.location.hash : ''\n );\n\n // 检测是否为 hash 路由\n const isHashRoute = typeof to === 'string' && to.startsWith('#');\n\n // 监听 hash 变化\n useEffect(() => {\n if (!isHashRoute) return;\n\n const handleHashChange = () => {\n setCurrentHash(window.location.hash);\n };\n\n window.addEventListener('hashchange', handleHashChange);\n return () => window.removeEventListener('hashchange', handleHashChange);\n }, [isHashRoute]);\n\n // 计算激活态\n const isActive = isHashRoute && currentHash === to;\n\n // 如果是普通路由,使用 NavLink\n if (!isHashRoute) {\n return (\n <NavLink\n ref={ref}\n to={to}\n onClick={onClick}\n className={className}\n style={style}\n {...rest}\n >\n {children}\n </NavLink>\n );\n }\n\n // 处理 hash 路由点击事件\n const handleHashClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // 先调用用户自定义的 onClick\n onClick?.(e);\n\n // 如果用户在 onClick 中调用了 preventDefault,则不执行默认行为\n if (e.defaultPrevented) {\n return;\n }\n\n // 阻止默认的锚点跳转行为\n e.preventDefault();\n\n const targetId = to.slice(1); // \"#home\" -> \"home\"\n const targetElement = document.getElementById(targetId);\n\n // 使用 pushState 更新 URL,保留历史记录且避免浏览器默认的瞬间跳转\n history.pushState(null, '', to);\n\n // 立即更新内部状态以确保 UI 及时响应\n setCurrentHash(to);\n\n // 手动触发 hashchange 事件以通知其他组件\n window.dispatchEvent(new Event('hashchange'));\n\n // 平滑滚动到目标元素\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\n targetElement.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n // 处理 className(支持函数和字符串)\n const computedClassName =\n typeof className === 'function'\n ? className({ isActive, isPending: false, isTransitioning: false })\n : className;\n\n // 处理 style(支持函数和对象)\n const computedStyle =\n typeof style === 'function'\n ? style({ isActive, isPending: false, isTransitioning: false })\n : style;\n\n // 处理 children(支持函数和 ReactNode)\n const computedChildren =\n typeof children === 'function'\n ? children({ isActive, isPending: false, isTransitioning: false })\n : children;\n\n return (\n <a\n ref={ref}\n href={to}\n onClick={handleHashClick}\n className={computedClassName}\n style={computedStyle}\n {...rest}\n >\n {computedChildren}\n </a>\n );\n }\n);\n\nActiveLink.displayName = 'ActiveLink';\n","/* eslint-disable */\nimport * as React from 'react';\nimport {\n NavLink as OriginalNavLink,\n useLocation,\n useNavigate,\n type NavLinkProps,\n} from 'react-router-dom';\n\n/**\n * Enhanced NavLink component that extends react-router-dom's NavLink\n * with support for hash links (anchor navigation) and smooth scrolling.\n */\nconst NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n ({ to, children, className, style, ...props }, ref) => {\n const isHashLink = typeof to === 'string' && to.startsWith('#');\n const location = useLocation();\n const navigate = useNavigate();\n\n if (isHashLink) {\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n const element = document.querySelector(to as string);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n }\n navigate(to as string);\n };\n\n const isActive = location.hash === to;\n\n const renderProps = {\n isActive,\n isPending: false,\n isTransitioning: false,\n };\n\n const resolvedClassName =\n typeof className === 'function' ? className(renderProps) : className;\n const resolvedStyle =\n typeof style === 'function' ? style(renderProps) : style;\n\n const {\n caseSensitive,\n end,\n replace,\n state,\n preventScrollReset,\n relative,\n viewTransition,\n ...restProps\n } = props;\n\n return (\n <a\n href={to as string}\n onClick={handleClick}\n ref={ref}\n className={resolvedClassName}\n style={resolvedStyle}\n {...restProps}\n >\n {typeof children === 'function' ? children(renderProps) : children}\n </a>\n );\n }\n\n return (\n <OriginalNavLink\n to={to}\n ref={ref}\n className={className}\n style={style}\n onClick={() =>\n (document.getElementById('rootContainer') || window)?.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n }\n {...props}\n >\n {children}\n </OriginalNavLink>\n );\n },\n);\n\nNavLink.displayName = 'NavLink';\n\nexport { NavLink };\nexport type { NavLinkProps };\n","import React from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\n\nexport interface UniversalLinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** 链接目标:内部路由、hash 锚点或外部 URL */\n to: string;\n}\n\n/** 是否为内部路由(非 hash、非外链) */\nfunction isInternalRoute(to: string): boolean {\n return !to.startsWith('#') && !to.startsWith('http://') && !to.startsWith('https://') && !to.startsWith('//');\n}\n\n/** 是否为外部链接 */\nfunction isExternalLink(to: string): boolean {\n return to.startsWith('http://') || to.startsWith('https://') || to.startsWith('//');\n}\n\n/**\n * 统一的链接组件,用于替换原生 <a> 标签\n * - 内部路由(/dashboard)→ react-router Link\n * - Hash 锚点(#section)→ <a>\n * - 外链(https://...)→ <a target=\"_blank\">\n */\nexport const UniversalLink = React.forwardRef<HTMLAnchorElement, UniversalLinkProps>(\n function UniversalLink({ to, ...props }, ref) {\n // 内部路由\n if (isInternalRoute(to)) {\n return <RouterLink to={to} ref={ref} {...props} />;\n }\n\n // Hash 链接 & 外部链接\n return (\n <a\n href={to}\n ref={ref}\n {...props}\n {...(isExternalLink(to) && {\n target: props.target ?? '_blank',\n rel: props.rel ?? 'noopener noreferrer',\n })}\n />\n );\n }\n);\n","import { getAppId } from './getAppId';\n\n/**\n * 获取当前 appId 对应的命名空间前缀\n * 格式:__miaoda_<appId>__:\n * 若 appId 为 null,则使用 __global__\n */\nfunction getPrefix(): string {\n const appId = getAppId();\n const namespace = appId || '__global__';\n return `__miaoda_${namespace}__:`;\n}\n\n/**\n * 获取当前 appId 范围内的所有 key(已去前缀)\n */\nfunction getScopedKeys(): string[] {\n const prefix = getPrefix();\n const keys: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && key.startsWith(prefix)) {\n keys.push(key.substring(prefix.length));\n }\n }\n\n return keys;\n}\n\n/**\n * 按 appId 隔离的 localStorage 封装\n * API 与原生 localStorage 保持一致\n */\nexport const scopedStorage: Storage = {\n /**\n * 获取指定 key 的值\n */\n getItem(key: string): string | null {\n const prefixedKey = getPrefix() + key;\n return localStorage.getItem(prefixedKey);\n },\n\n /**\n * 设置指定 key 的值\n */\n setItem(key: string, value: string): void {\n const prefixedKey = getPrefix() + key;\n localStorage.setItem(prefixedKey, value);\n },\n\n /**\n * 删除指定 key\n */\n removeItem(key: string): void {\n const prefixedKey = getPrefix() + key;\n localStorage.removeItem(prefixedKey);\n },\n\n /**\n * 清空当前 appId 范围内的所有 key\n * 不影响其他 app 和无前缀的 key\n */\n clear(): void {\n const prefix = getPrefix();\n const keysToRemove: string[] = [];\n\n // 收集需要删除的 key\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && key.startsWith(prefix)) {\n keysToRemove.push(key);\n }\n }\n\n // 删除收集到的 key\n keysToRemove.forEach(key => localStorage.removeItem(key));\n },\n\n /**\n * 返回当前 appId 范围内第 index 个 key(去前缀后的原始 key)\n */\n key(index: number): string | null {\n const keys = getScopedKeys();\n return keys[index] || null;\n },\n\n /**\n * 返回当前 appId 范围内的 key 数量\n */\n get length(): number {\n return getScopedKeys().length;\n },\n};\n","/**\n * 复制字符串到剪切板\n * @param text 要复制的文本\n * @returns Promise<boolean> 复制是否成功\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n // 优先使用现代的 Clipboard API\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n\n // 降级方案:使用传统的 execCommand 方法\n return fallbackCopyToClipboard(text);\n } catch (error) {\n // 执行navigator.clipboard.writeText失败时,降级方案\n return fallbackCopyToClipboard(text);\n }\n}\n\n/**\n * 降级复制方案(兼容旧浏览器)\n * @param text 要复制的文本\n * @returns boolean 复制是否成功\n */\nfunction fallbackCopyToClipboard(text: string): boolean {\n try {\n // 创建临时的 textarea 元素\n const textArea = document.createElement('textarea');\n textArea.value = text;\n\n // 设置样式,使其不可见\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n textArea.setAttribute('readonly', '');\n\n // 添加到 DOM\n document.body.appendChild(textArea);\n\n // 选中文本\n textArea.focus();\n textArea.select();\n\n // 执行复制命令\n const successful = document.execCommand('copy');\n\n // 清理:移除临时元素\n document.body.removeChild(textArea);\n\n return successful;\n } catch (error) {\n console.error('降级复制方案失败:', error);\n return false;\n }\n}\n","import { normalizeBasePath } from './utils';\n\n/**\n * 确保路径包含 CLIENT_BASE_PATH 前缀\n */\nfunction ensureBasePath(pathname: string, basePath: string): string {\n if (!basePath) return pathname;\n if (pathname.startsWith(basePath)) return pathname;\n return `${basePath}${pathname.startsWith('/') ? '' : '/'}${pathname}`;\n}\n\n/**\n * 解析应用内路径,自动补全 CLIENT_BASE_PATH 前缀,返回完整 URL\n * 适用于生成分享链接、二维码等需要完整 URL 的场景\n *\n * - 相对路径:补全前缀 + 当前域名\n * - 当前域名的完整 URL:修正路径部分,补全前缀\n * - 其他域名的 URL:原样返回,不做处理\n *\n * @param path - 应用内相对路径或完整 URL\n * @returns 完整的 URL 字符串\n *\n * @example\n * // 假设 CLIENT_BASE_PATH = '/app/abc',当前域名为 https://example.com\n *\n * resolveAppUrl('/detail/123')\n * // => 'https://example.com/app/abc/detail/123'\n *\n * resolveAppUrl('https://example.com/detail/123')\n * // => 'https://example.com/app/abc/detail/123'\n *\n * resolveAppUrl('https://example.com/app/abc/detail/123')\n * // => 'https://example.com/app/abc/detail/123' (已有前缀,不重复添加)\n *\n * resolveAppUrl('https://other-site.com/page')\n * // => 'https://other-site.com/page' (非当前域名,原样返回)\n */\nexport function resolveAppUrl(path: string): string {\n const basePath = normalizeBasePath(process.env.CLIENT_BASE_PATH);\n\n // 尝试解析为完整 URL\n try {\n const url = new URL(path);\n // 非当前域名,原样返回\n if (url.origin !== window.location.origin) {\n return path;\n }\n // 当前域名,修正路径\n url.pathname = ensureBasePath(url.pathname, basePath);\n return url.toString();\n } catch {\n // 不是完整 URL,当作相对路径处理\n }\n\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n const resolvedPath = ensureBasePath(normalizedPath, basePath);\n return `${window.location.origin}${resolvedPath}`;\n}\n","/**\n * @internal\n */\nexport function getEnvPath() {\n return window.IS_MIAODA_PREVIEW ? 'feida_preview' : 'feida_runtime';\n}\n","// 安全的 JSON.stringify 实现\nexport function safeStringify(obj: unknown): string {\n const seen = new Set<object>();\n\n try {\n return JSON.stringify(obj, (_key, value) => {\n // 处理循环引用\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n\n // 处理 BigInt\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n // 处理 Date\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n // 处理 Map\n if (value instanceof Map) {\n return Object.fromEntries(value);\n }\n\n // 处理 Set\n if (value instanceof Set) {\n return Array.from(value);\n }\n\n // 处理 undefined\n if (typeof value === 'undefined') {\n return 'undefined';\n }\n\n // 处理 Symbol\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n return value;\n });\n } catch {\n return '';\n } finally {\n seen.clear();\n }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport { initAxiosConfig } from './axiosConfig';\n\nlet axiosInstance: AxiosInstance | undefined;\n\n/** 显示 toast 提示(兼容 PC/移动端) */\nfunction showToast(message: string, duration = 3000): Promise<void> {\n return new Promise(resolve => {\n const toast = document.createElement('div');\n\n const iconSvg = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 1.333a6.667 6.667 0 1 1 0 13.334A6.667 6.667 0 0 1 8 1.333ZM8 10a.667.667 0 1 0 0 1.333A.667.667 0 0 0 8 10Zm0-5.333a.667.667 0 0 0-.667.666v3.334a.667.667 0 0 0 1.334 0V5.333A.667.667 0 0 0 8 4.667Z\" fill=\"#ff811a\"/>\n </svg>`;\n\n const iconWrapper = document.createElement('span');\n iconWrapper.innerHTML = iconSvg;\n Object.assign(iconWrapper.style, {\n display: 'flex',\n alignItems: 'center',\n marginRight: '8px',\n flexShrink: '0',\n });\n\n const textWrapper = document.createElement('span');\n textWrapper.textContent = message;\n\n toast.appendChild(iconWrapper);\n toast.appendChild(textWrapper);\n\n Object.assign(toast.style, {\n position: 'fixed',\n top: '20%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n backgroundColor: '#fff',\n color: '#1f2329',\n border: '1px solid #dee0e3',\n borderRadius: '6px',\n fontSize: '14px',\n lineHeight: '1.5',\n zIndex: '99999',\n maxWidth: '80vw',\n wordBreak: 'break-word',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.03), 0 3px 6px rgba(0, 0, 0, 0.05), 0 6px 18px rgba(0, 0, 0, 0.03)',\n opacity: '0',\n transition: 'opacity 0.3s ease',\n });\n\n document.body.appendChild(toast);\n\n requestAnimationFrame(() => {\n toast.style.opacity = '1';\n });\n\n setTimeout(() => {\n toast.style.opacity = '0';\n setTimeout(() => {\n document.body.removeChild(toast);\n resolve();\n }, 300);\n }, duration);\n });\n}\n\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n meta?: {\n autoJumpToLogin?: boolean;\n };\n }\n}\n\n/** 获取axios实例 */\nexport function getAxiosForBackend() {\n if (!axiosInstance) {\n axiosInstance = axios.create({\n baseURL: process.env.CLIENT_BASE_PATH || '/',\n });\n axiosInstance.interceptors.response.use(\n null,\n err => {\n if (err.config.meta?.autoJumpToLogin !== false) {\n const loginUrl = err.response?.headers?.['x-login-url'];\n if (loginUrl) {\n showToast('需要登录后才能执行操作,将自动跳转登录页', 3000).then(() => {\n window.location.href = loginUrl;\n });\n }\n }\n return Promise.reject(err);\n });\n initAxiosConfig(axiosInstance);\n }\n return axiosInstance;\n}\n\nexport const axiosForBackend = getAxiosForBackend();\n","// 头像 Avatar 图\nexport const avatarImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/1.jpg';\nexport const avatarImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/2.jpg';\nexport const avatarImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/3.jpg';\nexport const avatarImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/4.jpg';\nexport const avatarImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/5.jpg';\nexport const avatarImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/6.jpg';\nexport const avatarImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/7.jpg';\nexport const avatarImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/8.jpg';\nexport const avatarImg9 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/9.jpg';\nexport const avatarImg10 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/10.jpg';\nexport const avatarImg11 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/11.jpg';\n","// Banner 图 technology 类型\nexport const techBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/1.jpg';\nexport const techBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/2.jpg';\nexport const techBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/3.jpg';\nexport const techBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/4.jpg';\nexport const techBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/5.jpg';\nexport const techBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/6.jpg';\nexport const techBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/7.jpg';\nexport const techBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/8.jpg';\n\n// Banner 图 professional 类型\nexport const professionalBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/1.jpg';\nexport const professionalBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/2.jpg';\nexport const professionalBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/3.jpg';\nexport const professionalBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/4.jpg';\nexport const professionalBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/5.jpg';\nexport const professionalBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/6.jpg';\nexport const professionalBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/7.jpg';\nexport const professionalBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/8.jpg';\n\n// Banner 图 minimalism 类型\nexport const minimalismBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/1.jpg';\nexport const minimalismBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/2.jpg';\nexport const minimalismBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/3.jpg';\nexport const minimalismBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/4.jpg';\nexport const minimalismBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/5.jpg';\nexport const minimalismBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/6.jpg';\nexport const minimalismBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/7.jpg';\nexport const minimalismBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/8.jpg';\n","// Cover 图 office\nexport const officeCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/1.jpg';\nexport const officeCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/2.jpg';\nexport const officeCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/3.jpg';\nexport const officeCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/4.jpg';\nexport const officeCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/5.jpg';\nexport const officeCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/6.jpg';\n\n// Cover 图 architecture\nexport const architectureCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/1.jpg';\nexport const architectureCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/2.jpg';\nexport const architectureCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/3.jpg';\nexport const architectureCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/4.jpg';\nexport const architectureCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/5.jpg';\nexport const architectureCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/6.jpg';\n\n// Cover 图 appeal-clothing\nexport const appealClothingCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/1.jpg';\nexport const appealClothingCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/2.jpg';\nexport const appealClothingCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/3.jpg';\nexport const appealClothingCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/4.jpg';\nexport const appealClothingCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/5.jpg';\nexport const appealClothingCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/6.jpg';\n\n// Cover 图 scenery\nexport const sceneryCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/1.jpg';\nexport const sceneryCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/2.jpg';\nexport const sceneryCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/3.jpg';\nexport const sceneryCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/4.jpg';\nexport const sceneryCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/5.jpg';\nexport const sceneryCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/6.jpg';\n\n// Cover 图 technology-internet\nexport const technologyInternetCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/1.jpg';\nexport const technologyInternetCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/2.jpg';\nexport const technologyInternetCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/3.jpg';\nexport const technologyInternetCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/4.jpg';\nexport const technologyInternetCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/5.jpg';\nexport const technologyInternetCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/6.jpg';\n\n// Cover 图 abstract-art-3d-rendering\nexport const abstractArt3dRenderingCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/1.jpg';\nexport const abstractArt3dRenderingCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/2.jpg';\nexport const abstractArt3dRenderingCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/3.jpg';\nexport const abstractArt3dRenderingCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/4.jpg';\nexport const abstractArt3dRenderingCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/5.jpg';\nexport const abstractArt3dRenderingCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/6.jpg';\n"],"mappings":"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;AACK,IAAMC,aACX;AACK,IAAMC,aACX;AACK,IAAMC,aACX;AACK,IAAMC,cACX;AACK,IAAMC,cACX;;;ACtBF;;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AACK,IAAMC,iBACX;AAGK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AACK,IAAMC,yBACX;AAGK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;AACK,IAAMC,uBACX;;;ACpDF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AAGK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AAGK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AAGK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AAGK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AAGK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;","names":["React","useEffect","window","process","env","NODE_ENV","__REACT_DEVTOOLS_GLOBAL_HOOK__","renderers","Map","supportsFiber","inject","renderer","id","size","set","onCommitFiberRoot","onCommitFiberUnmount","hook","originalInject","bind","has","axios","getCsrfToken","cookieName","cookies","document","cookie","split","name","value","decodeURIComponent","window","csrfToken","initAxiosConfig","axiosInstance","axios","interceptors","request","use","config","csrfToken","getCsrfToken","headers","window","location","pathname","error","Promise","reject","response","process","env","NODE_ENV","console","warn","method","toUpperCase","url","message","window","__FULLSTACK_RUNTIME_INITIALIZED__","initAxiosConfig","React","useEffect","useRef","useState","PopoverPrimitive","DialogPrimitive","getAppId","windowAppId","window","appId","isNewPathEnabled","basePath","process","env","CLIENT_BASE_PATH","test","useEffect","useState","getAppPublished","headers","window","token","MIAODA_BUILTIN_TTT","getCsrfToken","appId","getAppId","path","isNewPathEnabled","url","location","origin","response","fetch","method","credentials","res","json","code","status_code","data","console","error","undefined","initialInfo","pendingPromise","getInitialInfo","refresh","Promise","resolve","then","info","_bucket_id","app_runtime_extra","bucket","default_bucket_id","finally","clsx","twMerge","clsxWithTw","inputs","twMerge","clsx","isPreview","window","IS_MIAODA_PREVIEW","normalizeBasePath","basePath","replace","getWsPath","rawBasePath","process","env","CLIENT_BASE_PATH","normalizedBasePath","startsWith","basePathWithoutTrailingSlash","endsWith","slice","isSparkRuntime","_IS_Spark_RUNTIME","runtimeMode","getAppInfo","refresh","appInfo","window","_appInfo","undefined","isSparkRuntime","info","getInitialInfo","app_info","name","app_name","avatar","app_avatar","description","app_description","trim","useAppInfo","appInfo","setAppInfo","useState","useEffect","updateDomInfo","info","name","document","title","meta","querySelector","content","avatar","link","createElement","rel","head","appendChild","href","description","metaDom","handleMetaInfoChanged","refresh","getAppInfo","prev","undefined","onUpdate","e","detail","window","addEventListener","removeEventListener","appName","appLogo","useEffect","useState","getCurrentUserProfile","window","_userInfo","splitWorkspaceUrl","fullUrl","url","URL","pathParts","pathname","split","workspacesIndex","findIndex","part","Error","basePathParts","slice","workspace","baseUrl","origin","join","error","console","createClient","createDataLoomClient","url","pat","baseUrl","workspace","splitWorkspaceUrl","appId","getAppId","createClient","global","enableDataloomLog","process","env","NODE_ENV","requestRateLimit","undefined","brandName","onError","error","dataloomInstance","status","code","service","session","redirectToLogin","dataloom","pendingPromise","getDataloom","Promise","resolve","getInitialInfo","then","info","DATALOOM_CLIENT_URL","app_runtime_extra","DATALOOM_PAT","token","finally","getNameFromArray","nameArray","length","undefined","chineseName","find","item","language_code","text","getCompatibilityUserProfile","userInfo","getCurrentUserProfile","userName","name","userAvatar","avatar","useCurrentUserProfile","setUserInfo","useState","useEffect","cancelled","fetchAndSetUserInfo","dataloom","getDataloom","result","service","session","getUserInfo","info","data","user_info","newUserInfo","user_id","toString","email","image","large","process","env","NODE_ENV","console","log","handleMetaInfoChanged","isSparkRuntime","window","addEventListener","removeEventListener","React","debounce","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","React","useState","window","innerWidth","useEffect","handleResize","debouncedHandleResize","debounce","addEventListener","removeEventListener","cancel","useState","useLogout","isLoading","setIsLoading","useState","handlerLogout","process","env","NODE_ENV","console","log","dataloom","getDataloom","service","session","signOut","error","messages","zh","en","getLocale","lang","navigator","language","startsWith","t","key","params","locale","getLocale","entry","messages","text","zh","k","v","Object","entries","replace","resetBase","boxSizing","margin","padding","border","background","font","color","textAlign","textDecoration","textTransform","letterSpacing","wordSpacing","lineHeight","verticalAlign","listStyle","FONT_FAMILY","Z_BADGE","Z_OVERLAY","LOGO_URL","getCoverUrl","t","getCoverMobileUrl","ICON_COMPANY_URL","ICON_AI_URL","LANDING_URL","badgeBase","position","display","alignItems","gap","boxShadow","borderRadius","fontFamily","fontSize","zIndex","cursor","badgeDesktop","right","bottom","badgeMobile","logoStyle","flexShrink","width","height","badgeTextStyle","popoverContent","overflow","popoverInner","flexDirection","popoverCover","popoverBody","justifyContent","infoRow","alignSelf","infoIcon","infoIconMobile","infoText","btnRow","btnBase","flex","borderWidth","borderStyle","borderColor","transition","btnHovered","overlayStyle","inset","sheetContent","outline","sheetInner","sheetCloseBtn","top","left","sheetCover","sheetBody","sheetInfoText","mobileBtnRow","mobileBtnBase","mobileBtnOutline","mobileBtnFilled","HoverButton","style","onClick","children","rest","hovered","setHovered","useState","React","div","onMouseEnter","onMouseLeave","XIcon","svg","xmlns","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","path","d","Safety","HasClosedKey","getAppId","visible","setVisible","window","localStorage","getItem","open","setOpen","isMobile","useIsMobile","userinfo","setUserinfo","isInternetVisible","setIsInternetVisible","showBadge","setShowBadge","badgeLoaded","setBadgeLoaded","timeoutRef","useRef","useEffect","appId","csrfToken","getCsrfToken","csrfHeaders","tenantInfoUrl","isNewPathEnabled","fetch","headers","then","res","json","data","tenant_info","is_internet_visible","catch","getPublishedUrl","badge","app_info","show_badge","finally","link","document","createElement","rel","as","href","head","appendChild","process","env","NODE_ENV","Root","onOpenChange","Trigger","asChild","img","src","p","minWidth","Portal","Overlay","Content","aria-describedby","undefined","Title","clip","alt","name","e","stopPropagation","preventDefault","setTimeout","setItem","current","clearTimeout","side","align","sideOffset","data-custom-element","React","QueryClient","QueryClientProvider","defaultQueryClient","getDefaultQueryClient","QueryClient","defaultOptions","queries","retry","refetchOnWindowFocus","mutations","QueryProvider","children","client","qc","React","QueryClientProvider","md5","sha1","isIpad","_isIpad","test","navigator","userAgent","maxTouchPoints","Boolean","isMobile","isPhone","isIOS","getEnv","globalThis","ENVIRONMENT","origin","window","location","includes","getLarkUserInfo","appId","getAppId","code","msg","data","url","isNewPathEnabled","response","fetch","headers","getCsrfToken","json","saltA","saltB","encryptTea","message","msgString","String","sha1","md5","toString","teaInstance","createTracker","data","getLarkUserInfo","tenantID","userID","userIDEncrypt","undefined","tenantIDEncrypt","window","collectEvent","app_id","channel","disable_auto_pv","enable_ab_test","enable_debug","enable_stay_duration","reportTime","user_unique_id","device_type","isMobile","evtParams","open_from","URLSearchParams","location","search","get","env","getEnv","user_id","tenant_id","reportTeaEvent","trackKey","trackParams","err","console","error","TrackKey","AppContainer","children","useAppInfo","useEffect","process","env","NODE_ENV","reportTeaEvent","trackKey","TrackKey","VIEW","trackParams","artifact_uid","getAppId","agent_id","url","window","location","href","React","Safety","QueryProvider","React","Welcome","title","description","React","div","style","display","flexDirection","alignItems","justifyContent","width","height","padding","textAlign","img","borderRadius","marginBottom","src","alt","fontSize","fontWeight","lineHeight","color","maxWidth","React","PagePlaceholder","title","description","React","div","style","display","flexDirection","alignItems","justifyContent","padding","width","height","textAlign","img","borderRadius","marginBottom","src","alt","fontSize","fontWeight","lineHeight","color","maxWidth","overflow","WebkitLineClamp","WebkitBoxOrient","React","forwardRef","useEffect","useState","NavLink","ActiveLink","forwardRef","to","onClick","className","style","children","rest","ref","currentHash","setCurrentHash","useState","window","location","hash","isHashRoute","startsWith","useEffect","handleHashChange","addEventListener","removeEventListener","isActive","React","NavLink","handleHashClick","e","defaultPrevented","preventDefault","targetId","slice","targetElement","document","getElementById","history","pushState","dispatchEvent","Event","scrollIntoView","behavior","computedClassName","isPending","isTransitioning","computedStyle","computedChildren","a","href","displayName","React","NavLink","OriginalNavLink","useLocation","useNavigate","NavLink","React","forwardRef","to","children","className","style","props","ref","isHashLink","startsWith","location","useLocation","navigate","useNavigate","handleClick","e","preventDefault","element","document","querySelector","scrollIntoView","behavior","isActive","hash","renderProps","isPending","isTransitioning","resolvedClassName","resolvedStyle","caseSensitive","end","replace","state","preventScrollReset","relative","viewTransition","restProps","a","href","onClick","OriginalNavLink","getElementById","window","scrollTo","top","displayName","React","Link","RouterLink","isInternalRoute","to","startsWith","isExternalLink","UniversalLink","React","forwardRef","props","ref","RouterLink","a","href","target","rel","getPrefix","appId","getAppId","namespace","getScopedKeys","prefix","keys","i","localStorage","length","key","startsWith","push","substring","scopedStorage","getItem","prefixedKey","setItem","value","removeItem","clear","keysToRemove","forEach","index","copyToClipboard","text","navigator","clipboard","window","isSecureContext","writeText","fallbackCopyToClipboard","error","textArea","document","createElement","value","style","position","left","top","setAttribute","body","appendChild","focus","select","successful","execCommand","removeChild","console","ensureBasePath","pathname","basePath","startsWith","resolveAppUrl","path","normalizeBasePath","process","env","CLIENT_BASE_PATH","url","URL","origin","window","location","toString","normalizedPath","resolvedPath","getEnvPath","window","IS_MIAODA_PREVIEW","safeStringify","obj","seen","Set","JSON","stringify","_key","value","has","add","toString","Date","toISOString","Map","Object","fromEntries","Array","from","clear","axios","axiosInstance","showToast","message","duration","Promise","resolve","toast","document","createElement","iconSvg","iconWrapper","innerHTML","Object","assign","style","display","alignItems","marginRight","flexShrink","textWrapper","textContent","appendChild","position","top","left","transform","padding","backgroundColor","color","border","borderRadius","fontSize","lineHeight","zIndex","maxWidth","wordBreak","boxShadow","opacity","transition","body","requestAnimationFrame","setTimeout","removeChild","getAxiosForBackend","axios","create","baseURL","process","env","CLIENT_BASE_PATH","interceptors","response","use","err","config","meta","autoJumpToLogin","loginUrl","headers","then","window","location","href","reject","initAxiosConfig","axiosForBackend","avatarImg1","avatarImg2","avatarImg3","avatarImg4","avatarImg5","avatarImg6","avatarImg7","avatarImg8","avatarImg9","avatarImg10","avatarImg11","techBannerImg1","techBannerImg2","techBannerImg3","techBannerImg4","techBannerImg5","techBannerImg6","techBannerImg7","techBannerImg8","professionalBannerImg1","professionalBannerImg2","professionalBannerImg3","professionalBannerImg4","professionalBannerImg5","professionalBannerImg6","professionalBannerImg7","professionalBannerImg8","minimalismBannerImg1","minimalismBannerImg2","minimalismBannerImg3","minimalismBannerImg4","minimalismBannerImg5","minimalismBannerImg6","minimalismBannerImg7","minimalismBannerImg8","officeCoverImg1","officeCoverImg2","officeCoverImg3","officeCoverImg4","officeCoverImg5","officeCoverImg6","architectureCoverImg1","architectureCoverImg2","architectureCoverImg3","architectureCoverImg4","architectureCoverImg5","architectureCoverImg6","appealClothingCoverImg1","appealClothingCoverImg2","appealClothingCoverImg3","appealClothingCoverImg4","appealClothingCoverImg5","appealClothingCoverImg6","sceneryCoverImg1","sceneryCoverImg2","sceneryCoverImg3","sceneryCoverImg4","sceneryCoverImg5","sceneryCoverImg6","technologyInternetCoverImg1","technologyInternetCoverImg2","technologyInternetCoverImg3","technologyInternetCoverImg4","technologyInternetCoverImg5","technologyInternetCoverImg6","abstractArt3dRenderingCoverImg1","abstractArt3dRenderingCoverImg2","abstractArt3dRenderingCoverImg3","abstractArt3dRenderingCoverImg4","abstractArt3dRenderingCoverImg5","abstractArt3dRenderingCoverImg6"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AppContainer/index.tsx","../src/runtime/react-devtools-hook.ts","../src/utils/axiosConfig.ts","../src/utils/getCsrfToken.ts","../src/runtime/index.ts","../src/components/AppContainer/safety.tsx","../src/utils/getAppId.ts","../src/utils/apiPath.ts","../src/hooks/useAppInfo.tsx","../src/utils/getInitialInfo.ts","../src/utils/utils.ts","../src/integrations/getAppInfo.ts","../src/hooks/useCurrentUserProfile.tsx","../src/integrations/getCurrentUserProfile.ts","../src/utils/url.ts","../src/integrations/dataloom.ts","../src/hooks/useIsMobile.ts","../src/hooks/useLogout.ts","../src/locales/messages.ts","../src/utils/locale.ts","../src/locales/index.ts","../src/components/QueryProvider/index.tsx","../src/components/AppContainer/utils/tea.ts","../src/utils/deviceType.ts","../src/utils/getEnv.ts","../src/components/AppContainer/utils/getLarkUser.ts","../src/types/tea.ts","../src/components/Welcome/index.tsx","../src/components/PagePlaceholder/index.tsx","../src/route-components/ActiveLink.tsx","../src/route-components/NavLink.tsx","../src/route-components/UniversalLink.tsx","../src/utils/scopedStorage.ts","../src/utils/copyToClipboard.ts","../src/utils/resolveAppUrl.ts","../src/utils/getEnvPath.ts","../src/utils/safeStringify.ts","../src/utils/getAxiosForBackend.ts","../src/constants/img-resources/avatar.ts","../src/constants/img-resources/banner.ts","../src/constants/img-resources/cover.ts"],"sourcesContent":["import React, { useEffect } from 'react';\n\n// 兼容性:确保 runtime 被加载\n// runtime 内部有防重复机制(__FULLSTACK_RUNTIME_INITIALIZED__),不会重复执行\nimport '../../runtime';\n\nimport Safety from './safety';\nimport QueryProvider from '../QueryProvider';\nimport { useAppInfo } from '../../hooks';\nimport { reportTeaEvent } from './utils/tea';\nimport { TrackKey } from '../../types/tea';\nimport { getAppId } from '../../utils/getAppId';\n\ninterface AppContainerProps {\n children: React.ReactNode;\n}\n\nconst AppContainer: React.FC<AppContainerProps> = ({ children }) => {\n useAppInfo();\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n reportTeaEvent({\n trackKey: TrackKey.VIEW,\n trackParams: {\n artifact_uid: getAppId(),\n agent_id: 'agent_miaoda',\n url: window.location.href,\n },\n });\n }\n }, []);\n\n return (\n <>\n <Safety />\n <QueryProvider>\n {children}\n </QueryProvider>\n </>\n );\n};\n\nexport default AppContainer;\n","/* eslint-disable */\n/**\n * Inject minimal __REACT_DEVTOOLS_GLOBAL_HOOK__ before React loads.\n * React checks for this hook during module initialization and registers its\n * renderer via hook.inject(). This gives us access to renderer.overrideProps()\n * for live component prop modification in the inspector.\n *\n * Must execute before React's module-level code runs.\n *\n * When react-refresh-runtime runs first (as an rspack runtime module),\n * it may create __REACT_DEVTOOLS_GLOBAL_HOOK__ with an inject() that\n * doesn't populate the renderers Map. We patch the existing hook to\n * ensure renderers are always tracked.\n */\n\nexport {};\n\ndeclare global {\n interface Window {\n __REACT_DEVTOOLS_GLOBAL_HOOK__?: any;\n }\n}\n\nif (typeof window !== 'undefined' && process.env.NODE_ENV !== 'production') {\n if (!window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n // No hook yet — create a minimal one\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {\n renderers: new Map(),\n supportsFiber: true,\n inject(renderer: any) {\n const id = this.renderers.size + 1;\n this.renderers.set(id, renderer);\n return id;\n },\n onCommitFiberRoot() {},\n onCommitFiberUnmount() {},\n };\n } else {\n // Hook already exists (react-refresh, React DevTools extension, etc.)\n // Ensure renderers Map and inject() both work correctly.\n const hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (!(hook.renderers instanceof Map)) {\n hook.renderers = new Map();\n }\n\n const originalInject =\n typeof hook.inject === 'function' ? hook.inject.bind(hook) : null;\n\n hook.inject = function (renderer: any) {\n const id = originalInject\n ? originalInject(renderer)\n : hook.renderers.size + 1;\n if (id != null && !hook.renderers.has(id)) {\n hook.renderers.set(id, renderer);\n }\n return id;\n };\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { getCsrfToken } from './getCsrfToken';\n\n/**\n * 精简版 Axios 配置\n * 仅注入 CSRF token 和基础拦截器,不包含 observable/slardar/trace\n */\nexport function initAxiosConfig(axiosInstance?: AxiosInstance): void {\n if (!axiosInstance) {\n axiosInstance = axios;\n }\n // 请求拦截器:注入 CSRF token\n axiosInstance.interceptors.request.use(\n (config) => {\n const csrfToken = getCsrfToken();\n if (csrfToken) {\n config.headers['X-Suda-Csrf-Token'] = csrfToken;\n }\n\n // 注入当前页面路由\n if (typeof window !== 'undefined') {\n config.headers['X-Page-Route'] = window.location.pathname;\n }\n\n return config;\n },\n (error) => Promise.reject(error),\n );\n\n // 响应拦截器:开发环境日志\n axiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[axios]', error.config?.method?.toUpperCase(), error.config?.url, error.message);\n }\n return Promise.reject(error);\n },\n );\n}\n","/**\n * 获取cookie中存放的suda-csrf-token值\n * @returns {string | null} - suda-csrf-token的值,如果不存在则返回null\n */\nexport function getCsrfToken() {\n const cookieName = 'suda-csrf-token';\n\n // 从document.cookie中获取所有cookie\n const cookies = document.cookie.split('; ');\n\n // 查找指定name的cookie\n for (const cookie of cookies) {\n const [name, value] = cookie.split('=');\n if (name === cookieName) {\n // 解码cookie值\n return decodeURIComponent(value);\n }\n }\n\n // 如果没有找到,则从window上获取(全栈模式下,window上会有这个值)\n return window.csrfToken ?? null;\n}\n","/**\n * Client Toolkit Lite Runtime\n *\n * 精简版全局初始化逻辑,可通过构建工具自动注入或 AppContainer 导入触发\n *\n * 执行顺序:\n * 1. React DevTools Hook(必须在 React 加载之前)\n * 2. 全局样式\n * 3. Axios 配置(仅 CSRF token 注入)\n *\n * 不包含:Observable、Server Log SSE、Iframe Bridge、Dayjs 插件\n */\n\n// 0. React DevTools Hook(必须在 React 加载之前执行)\nimport './react-devtools-hook';\n\n// 1. Axios 配置(精简版:仅 CSRF + 基础拦截器)\nimport { initAxiosConfig } from '../utils/axiosConfig';\n\n// ============================================\n// 防重复初始化标志位\n// ============================================\n\ndeclare global {\n interface Window {\n __FULLSTACK_RUNTIME_INITIALIZED__?: boolean;\n }\n}\n\nif (!window.__FULLSTACK_RUNTIME_INITIALIZED__) {\n window.__FULLSTACK_RUNTIME_INITIALIZED__ = true;\n\n // ============================================\n // 同步初始化\n // ============================================\n\n initAxiosConfig();\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { getCsrfToken } from '../../utils/getCsrfToken';\nimport { getAppId } from '../../utils/getAppId';\nimport { isNewPathEnabled } from '../../utils/apiPath';\nimport { useIsMobile } from '../../hooks';\nimport { t } from '../../locales';\n\n// ── defensive reset (prevents host page CSS from leaking in) ────\n\nconst resetBase: React.CSSProperties = {\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n border: 'none',\n background: 'none',\n font: 'inherit',\n color: 'inherit',\n textAlign: 'left',\n textDecoration: 'none',\n textTransform: 'none',\n letterSpacing: 'normal',\n wordSpacing: 'normal',\n lineHeight: 'normal',\n verticalAlign: 'baseline',\n listStyle: 'none',\n};\n\n// ── inline style constants ──────────────────────────────────────\n\nconst FONT_FAMILY = \"'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\nconst Z_BADGE = 10000000;\nconst Z_OVERLAY = 10000001;\n\nconst LOGO_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodalogo.svg';\n// Cover URLs 通过 locale 机制获取,支持中英文不同封面\nconst getCoverUrl = () => t('safety.cover.pc');\nconst getCoverMobileUrl = () => t('safety.cover.mobile');\nconst ICON_COMPANY_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_company_outlined.svg';\nconst ICON_AI_URL = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/icon/icon_efficiency-ai_outlined.svg';\nconst LANDING_URL = 'https://miaoda.feishu.cn/landing';\n\nconst badgeBase: React.CSSProperties = {\n ...resetBase,\n position: 'fixed',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n border: '1px solid rgba(255,255,255,0.1)',\n padding: '6px 10px',\n background: '#1f2329',\n boxShadow: '0 6px 12px 0 rgba(65,68,74,0.04), 0 8px 24px 8px rgba(65,68,74,0.04)',\n borderRadius: 6,\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n zIndex: Z_BADGE,\n cursor: 'pointer',\n};\n\nconst badgeDesktop: React.CSSProperties = { ...badgeBase, right: 12, bottom: 12 };\nconst badgeMobile: React.CSSProperties = { ...badgeBase, right: 12, bottom: 80 };\n\nconst logoStyle: React.CSSProperties = { flexShrink: 0, width: 16, height: 16 };\n\nconst badgeTextStyle: React.CSSProperties = {\n flexShrink: 0,\n margin: 0,\n color: '#EBEBEB',\n};\n\n// ── desktop popover styles ──────────────────────────────────────\n\nconst popoverContent: React.CSSProperties = {\n ...resetBase,\n overflow: 'hidden',\n borderRadius: 12,\n width: 286,\n boxShadow: '0 6px 12px 0 rgba(65,68,74,0.04), 0 8px 24px 0 rgba(65,68,74,0.04)',\n zIndex: Z_OVERLAY,\n};\n\nconst popoverInner: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n background: '#1A1A1A',\n};\n\nconst popoverCover: React.CSSProperties = { width: 286, height: 128, cursor: 'pointer', display: 'block' };\n\nconst popoverBody: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'flex-end',\n gap: 12,\n border: '1px solid rgba(255,255,255,0.05)',\n padding: '11px 15px 15px 14px',\n borderRadius: '12px 12px 0 0',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n color: '#a6a6a6',\n background: '#1f2021',\n};\n\nconst infoRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n alignSelf: 'stretch',\n};\n\nconst infoIcon: React.CSSProperties = { flexShrink: 0, width: 12, height: 12 };\nconst infoIconMobile: React.CSSProperties = { flexShrink: 0, width: 14, height: 14 };\n\nconst infoText: React.CSSProperties = { margin: 0, color: '#a6a6a6', flexShrink: 0 };\n\nconst btnRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n width: '100%',\n alignSelf: 'stretch',\n};\n\nconst btnBase: React.CSSProperties = {\n ...resetBase,\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 34,\n borderRadius: 8,\n borderWidth: '0.5px',\n borderStyle: 'solid',\n borderColor: 'rgba(255,255,255,0.11)',\n background: 'rgba(255,255,255,0.03)',\n color: '#ebebeb',\n cursor: 'pointer',\n fontSize: 12,\n fontFamily: FONT_FAMILY,\n transition: 'background 0.15s ease, border-color 0.15s ease',\n};\n\nconst btnHovered: React.CSSProperties = {\n background: 'rgba(255,255,255,0.08)',\n borderColor: 'rgba(255,255,255,0.2)',\n};\n\n// ── mobile sheet styles ─────────────────────────────────────────\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: Z_OVERLAY,\n background: 'rgba(0,0,0,0.5)',\n};\n\nconst sheetContent: React.CSSProperties = {\n position: 'fixed',\n inset: 'auto 0 0 0',\n zIndex: Z_OVERLAY + 1,\n outline: 'none',\n};\n\nconst sheetInner: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n overflow: 'hidden',\n borderRadius: '16px 16px 0 0',\n position: 'relative',\n};\n\nconst sheetCloseBtn: React.CSSProperties = {\n position: 'absolute',\n top: 8,\n left: 16,\n width: 24,\n height: 24,\n color: '#2B2F36',\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n};\n\nconst sheetCover: React.CSSProperties = { width: '100%', display: 'block', cursor: 'pointer' };\n\nconst sheetBody: React.CSSProperties = {\n ...resetBase,\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'flex-end',\n gap: 16,\n padding: '16px 20px 48px',\n fontFamily: FONT_FAMILY,\n fontSize: 12,\n lineHeight: '20px',\n color: '#a6a6a6',\n};\n\nconst sheetInfoText: React.CSSProperties = { margin: 0, color: '#646A73', fontSize: 14, flexShrink: 0 };\n\nconst mobileBtnRow: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 16,\n alignSelf: 'stretch',\n};\n\nconst mobileBtnBase: React.CSSProperties = {\n ...resetBase,\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 99,\n fontSize: 18,\n fontFamily: FONT_FAMILY,\n padding: '12px 0',\n cursor: 'pointer',\n};\n\nconst mobileBtnOutline: React.CSSProperties = {\n ...mobileBtnBase,\n border: '0.5px solid #D0D3D6',\n background: '#fff',\n color: '#1F2329',\n};\n\nconst mobileBtnFilled: React.CSSProperties = {\n ...mobileBtnBase,\n border: '0.5px solid #000',\n background: '#000',\n color: '#fff',\n};\n\n// ── HoverButton helper ──────────────────────────────────────────\n\nconst HoverButton: React.FC<{\n style: React.CSSProperties;\n onClick: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n 'data-custom-element'?: string;\n}> = ({ style, onClick, children, ...rest }) => {\n const [hovered, setHovered] = useState(false);\n return (\n <div\n style={{\n ...style,\n ...(hovered ? btnHovered : {}),\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={onClick}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\n// ── X icon (inline SVG, replaces lucide-react dependency) ───────\n\nconst XIcon: React.FC<{ style?: React.CSSProperties; onClick?: () => void }> = ({ style, onClick }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={style}\n onClick={onClick}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n);\n\n// ── main component ──────────────────────────────────────────────\n\nconst Safety = () => {\n const HasClosedKey = `miaoda-creatByMiaodo-has-closed-${getAppId()}`;\n const [visible, setVisible] = useState(\n !window.localStorage?.getItem(HasClosedKey),\n );\n const [open, setOpen] = useState(false);\n const isMobile = useIsMobile();\n const [userinfo, setUserinfo] = useState<{ id: number; name: string } | null>(null);\n const [isInternetVisible, setIsInternetVisible] = useState(false);\n const [showBadge, setShowBadge] = useState(true);\n const [badgeLoaded, setBadgeLoaded] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const appId = getAppId();\n const csrfToken = getCsrfToken() ?? '';\n const csrfHeaders: Record<string, string> = { 'X-Suda-Csrf-Token': csrfToken };\n\n const tenantInfoUrl = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/tenant_info`\n : `/spark/b/${appId}/tenant_info`;\n fetch(tenantInfoUrl, { headers: csrfHeaders })\n .then(res => res.json())\n .then(data => {\n setUserinfo(data?.data?.tenant_info);\n setIsInternetVisible(data?.data?.is_internet_visible);\n })\n .catch(() => {});\n\n const getPublishedUrl = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/get_published`\n : `/spark/b/${appId}/get_published`;\n fetch(getPublishedUrl, { headers: csrfHeaders })\n .then(res => res.json())\n .then(data => {\n const badge = data?.data?.app_info?.show_badge;\n setShowBadge(badge !== false);\n })\n .catch(() => {\n setShowBadge(true);\n })\n .finally(() => {\n setBadgeLoaded(true);\n });\n }, []);\n\n useEffect(() => {\n if (isMobile) {\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = getCoverMobileUrl();\n document.head.appendChild(link);\n }\n }, [isMobile]);\n\n if (process.env.NODE_ENV !== 'production') return null;\n if (!badgeLoaded) return null;\n if (!showBadge) return null;\n if (!visible) return null;\n\n // ── mobile: bottom sheet ────────────────────────────────────\n if (isMobile) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={setOpen}>\n <DialogPrimitive.Trigger asChild>\n <div style={badgeMobile} onClick={() => setOpen(true)}>\n <img src={LOGO_URL} style={logoStyle} />\n <p style={{ ...badgeTextStyle, minWidth: 28 }}>{t('safety.badge.label')}</p>\n </div>\n </DialogPrimitive.Trigger>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay style={overlayStyle} />\n <DialogPrimitive.Content style={sheetContent} aria-describedby={undefined}>\n <DialogPrimitive.Title style={{ position: 'absolute', clip: 'rect(0 0 0 0)' }}>\n {t('safety.badge.builtWith')}\n </DialogPrimitive.Title>\n <div style={sheetInner}>\n <XIcon style={sheetCloseBtn} onClick={() => setOpen(false)} />\n <img\n src={getCoverMobileUrl()}\n alt=\"\"\n style={sheetCover}\n onClick={() => window.open(LANDING_URL, '_blank')}\n />\n <div style={sheetBody}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n {isInternetVisible && (\n <div style={infoRow}>\n <img src={ICON_COMPANY_URL} style={infoIconMobile} />\n <p style={sheetInfoText}>{t('safety.tenant.operated', { name: userinfo?.name ?? '' })}</p>\n </div>\n )}\n <div style={infoRow}>\n <img src={ICON_AI_URL} style={infoIconMobile} />\n <p style={sheetInfoText}>{t('safety.ai.disclaimer')}</p>\n </div>\n </div>\n <div style={mobileBtnRow}>\n <div\n style={mobileBtnOutline}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setOpen(false);\n setTimeout(() => setVisible(false), 200);\n window.localStorage?.setItem(HasClosedKey, 'true');\n }}\n >\n {t('safety.button.dontShowAgain')}\n </div>\n <div\n style={mobileBtnFilled}\n onClick={() => window.open(LANDING_URL, '_blank')}\n >\n {t('safety.button.learnMore')}\n </div>\n </div>\n </div>\n </div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n }\n\n // ── desktop: popover on hover ───────────────────────────────\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <div\n style={badgeDesktop}\n onMouseEnter={() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setOpen(true);\n }}\n onMouseLeave={() => {\n timeoutRef.current = setTimeout(() => setOpen(false), 100);\n }}\n >\n <img src={LOGO_URL} style={logoStyle} />\n <p style={{ ...badgeTextStyle, minWidth: 60 }}>{t('safety.badge.builtWith')}</p>\n </div>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n style={popoverContent}\n side=\"top\"\n align=\"end\"\n sideOffset={8}\n onMouseEnter={() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n setOpen(true);\n }}\n onMouseLeave={() => {\n timeoutRef.current = setTimeout(() => setOpen(false), 100);\n }}\n >\n <div style={popoverInner}>\n <img\n src={getCoverUrl()}\n alt=\"\"\n style={popoverCover}\n onClick={() => window.open(LANDING_URL, '_blank')}\n />\n <div style={popoverBody}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n {isInternetVisible && (\n <div style={infoRow}>\n <img src={ICON_COMPANY_URL} style={infoIcon} />\n <p style={infoText}>{t('safety.tenant.operated', { name: userinfo?.name ?? '' })}</p>\n </div>\n )}\n <div style={infoRow}>\n <img src={ICON_AI_URL} style={infoIcon} />\n <p style={infoText}>{t('safety.ai.disclaimer')}</p>\n </div>\n </div>\n <div style={btnRow}>\n <HoverButton\n style={btnBase}\n data-custom-element=\"safety-close\"\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n setVisible(false);\n window.localStorage?.setItem(HasClosedKey, 'true');\n }}\n >\n {t('safety.button.dontShowAgain')}\n </HoverButton>\n <HoverButton\n style={btnBase}\n data-custom-element=\"safety-more\"\n onClick={() => window.open(LANDING_URL, '_blank')}\n >\n {t('safety.button.learnMore')}\n </HoverButton>\n </div>\n </div>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\n\nexport default Safety;\n","/* eslint-disable */\n/**\n * 获取应用 ID\n */\nexport function getAppId(): string | null {\n const windowAppId = (window as any).appId || null;\n return windowAppId;\n}\n","/**\n * 判断当前是否启用新的路径规范\n * 新路径规范:CLIENT_BASE_PATH 以 /app/:appId 格式开头\n */\nexport function isNewPathEnabled(): boolean {\n const basePath = process.env.CLIENT_BASE_PATH || '/';\n return /^\\/app\\/[^/]/.test(basePath);\n}\n","import { useEffect, useState } from 'react';\nimport { AppInfoPayload } from '../types/common';\nimport { getAppInfo } from '../integrations/getAppInfo';\n\nexport const useAppInfo = () => {\n const [appInfo, setAppInfo] = useState<Partial<AppInfoPayload>>({});\n\n useEffect(() => {\n const updateDomInfo = (info: AppInfoPayload) => {\n if (info.name) {\n document.title = info.name;\n const meta = document.querySelector(\"meta[property='og:title']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.name;\n }\n }\n if (info.avatar) {\n let link = document.querySelector(\"link[rel~='icon']\") as HTMLLinkElement;\n if (!link) {\n link = document.createElement('link');\n link.rel = 'icon';\n document.head.appendChild(link);\n }\n link.href = info.avatar;\n const meta = document.querySelector(\"meta[property='og:image']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.avatar;\n }\n }\n if (info.description) {\n const meta = document.querySelector(\"meta[property='og:description']\") as HTMLMetaElement;\n if (meta) {\n meta.content = info.description;\n }\n const metaDom = document.querySelector(\"meta[name='description']\") as HTMLMetaElement;\n if (metaDom) {\n metaDom.content = info.description;\n }\n }\n }\n\n const handleMetaInfoChanged = async (info?: AppInfoPayload, refresh = true) => {\n if (!info) {\n info = await getAppInfo(refresh);\n }\n updateDomInfo(info);\n setAppInfo(prev => ({ ...prev, ...info }));\n };\n handleMetaInfoChanged(undefined, false);\n const onUpdate = (e: Event) => {\n const info = (e as CustomEvent<AppInfoPayload>).detail;\n handleMetaInfoChanged(info);\n };\n window.addEventListener('MiaoDaMetaInfoChanged', onUpdate);\n return () => {\n window.removeEventListener('MiaoDaMetaInfoChanged', onUpdate);\n };\n }, []);\n\n return {\n ...appInfo,\n appName: appInfo.name,\n appLogo: appInfo.avatar,\n };\n};\n","import { getAppId } from './getAppId';\nimport { getCsrfToken } from './getCsrfToken';\nimport { isNewPathEnabled } from './apiPath';\n\ninterface AppRuntimeExtra {\n token?: string;\n url?: string;\n bucket?: BucketConfig;\n}\ninterface AppRuntimePublished {\n app_name?: string;\n css_urls?: string[];\n js_urls?: string[];\n app_avatar?: string;\n app_description?: string;\n}\ninterface BucketConfig {\n default_bucket_id?: string;\n}\n\n/**\n * 从API获取已发布的应用信息(仅全栈沙箱模式下使用)\n */\nasync function getAppPublished(): Promise<\n | {\n app_info?: AppRuntimePublished;\n app_runtime_extra?: AppRuntimeExtra;\n }\n | undefined\n> {\n try {\n // 构建请求头\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Kunlun-Token': window.token,\n 'x-miaoda-token': window.MIAODA_BUILTIN_TTT,\n 'X-Suda-Csrf-Token': getCsrfToken(),\n };\n const appId = getAppId();\n const path = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/get_published`\n : `/spark/b/${appId}/get_published`;\n const url = `${window.location.origin}${path}`;\n // 发起fetch请求\n const response = await fetch(url, {\n method: 'GET',\n headers,\n credentials: 'include', // 包含cookies\n });\n\n // 解析响应数据\n const res = await response.json();\n if (res.code === 0 || res.status_code === '0') {\n return res.data;\n }\n console.error('Error fetching published app info:', res);\n } catch (error) {\n console.error('Error fetching published app info:', error);\n }\n return undefined;\n}\n// 存储的公共信息\nlet initialInfo:\n | {\n app_info?: AppRuntimePublished;\n app_runtime_extra?: AppRuntimeExtra;\n }\n | undefined;\n\n// 缓存进行中的 Promise,防止并发调用发起多个重复请求\nlet pendingPromise: Promise<typeof initialInfo> | null = null;\n\n/** 获取应用初始化信息(仅全栈沙箱模式下使用) */\nexport function getInitialInfo(refresh = false): Promise<typeof initialInfo> {\n if (initialInfo && !refresh) {\n return Promise.resolve(initialInfo);\n }\n if (pendingPromise && !refresh) {\n return pendingPromise;\n }\n pendingPromise = getAppPublished()\n .then(info => {\n initialInfo = info;\n if (initialInfo) {\n window._bucket_id =\n initialInfo.app_runtime_extra?.bucket?.default_bucket_id;\n }\n return initialInfo;\n })\n .finally(() => {\n pendingPromise = null;\n });\n return pendingPromise;\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * @internal\n * 处理 className 与 tailwind-merge\n */\nexport function clsxWithTw(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * @internal\n * 当前是否是预览态\n */\nexport function isPreview() {\n return window.IS_MIAODA_PREVIEW;\n}\n\n/**\n * @internal\n * 标准化基础路径,确保路径格式一致\n * 移除末尾的斜杠,确保路径不以斜杠结尾\n */\nexport function normalizeBasePath(basePath?: string): string {\n if (!basePath || basePath === '/') {\n return '';\n }\n // 移除末尾的斜杠\n return basePath.replace(/\\/+$/, '');\n}\n\n// 获取 ws 路径\nexport function getWsPath(): string {\n const rawBasePath = process.env.CLIENT_BASE_PATH || '/';\n const normalizedBasePath = rawBasePath.startsWith('/')\n ? rawBasePath\n : `/${rawBasePath}`;\n const basePathWithoutTrailingSlash = normalizedBasePath.endsWith('/')\n ? normalizedBasePath.slice(0, -1)\n : normalizedBasePath;\n\n return `${basePathWithoutTrailingSlash}/ws`;\n}\n\n/** 判断是否是沙箱模式 */\nexport function isSparkRuntime() {\n // 兼容全栈模式标记(通过构建方式注入)\n return window._IS_Spark_RUNTIME ?? process.env.runtimeMode === 'fullstack';\n}","/* eslint-disable */\nimport { AppInfoPayload } from '../types/common';\nimport { getInitialInfo } from '../utils/getInitialInfo';\nimport { isSparkRuntime } from '../utils/utils';\n\nexport async function getAppInfo(refresh = false): Promise<AppInfoPayload> {\n let appInfo = typeof window !== 'undefined' ? (window as any)._appInfo : undefined;\n if ((!appInfo || refresh) && isSparkRuntime()) {\n const info = (await getInitialInfo(refresh))?.app_info;\n appInfo = {\n name: info?.app_name || '',\n avatar: info?.app_avatar || '',\n description: info?.app_description || '',\n };\n if (appInfo.name) {\n appInfo.name = appInfo.name.trim();\n }\n\n if (typeof window !== 'undefined') {\n (window as any)._appInfo = appInfo;\n }\n }\n return appInfo ?? {};\n}\n","import { useEffect, useState } from 'react';\nimport { IUserProfile } from '../types/udt-types';\nimport { getCurrentUserProfile } from '../integrations/getCurrentUserProfile';\nimport { getDataloom } from '../integrations/dataloom';\nimport { isSparkRuntime } from '../utils/utils';\n\n/**\n * 从 name 数组中获取用户名称\n * 优先选择 language_code 为 2052(简体中文)的数据,如果匹配不到则取第一个\n */\nfunction getNameFromArray(\n nameArray?: Array<{ language_code?: number; text?: string }>,\n): string | undefined {\n if (!nameArray || nameArray.length === 0) {\n return undefined;\n }\n const chineseName = nameArray.find((item) => item.language_code === 2052);\n return chineseName?.text ?? nameArray[0]?.text;\n}\n\nexport interface ICompatibilityUserProfile extends IUserProfile {\n /**\n * @deprecated please use `name`\n */\n userName: string;\n /**\n * @deprecated please use `avatar`\n */\n userAvatar: string;\n}\n\nfunction getCompatibilityUserProfile(): ICompatibilityUserProfile {\n const userInfo = getCurrentUserProfile();\n return {\n ...userInfo,\n // 兼容处理\n userName: userInfo.name,\n userAvatar: userInfo.avatar,\n };\n}\n\nexport const useCurrentUserProfile = () => {\n const [userInfo, setUserInfo] = useState<ICompatibilityUserProfile>(() =>\n getCompatibilityUserProfile(),\n );\n\n // 事件驱动,从 window 上取值\n useEffect(() => {\n let cancelled = false;\n\n const fetchAndSetUserInfo = async () => {\n const dataloom = await getDataloom();\n const result = await dataloom?.service?.session?.getUserInfo();\n if (cancelled) return;\n const info = result?.data?.user_info;\n const userName = getNameFromArray(info?.name);\n const newUserInfo: ICompatibilityUserProfile = {\n user_id: info?.user_id?.toString() ?? '',\n email: info?.email ?? '',\n name: userName ?? '',\n avatar: info?.avatar?.image?.large ?? '',\n userName: userName ?? '',\n userAvatar: info?.avatar?.image?.large ?? '',\n };\n if (process.env.NODE_ENV === 'development') {\n console.log('MiaoDaMetaInfoChanged', newUserInfo);\n }\n setUserInfo(newUserInfo);\n };\n\n let handleMetaInfoChanged: () => void;\n if (isSparkRuntime()) {\n fetchAndSetUserInfo();\n handleMetaInfoChanged = () => { fetchAndSetUserInfo(); };\n } else {\n handleMetaInfoChanged = () => {\n if (process.env.NODE_ENV === 'development') {\n console.log('MiaoDaMetaInfoChanged', getCompatibilityUserProfile());\n }\n setUserInfo(getCompatibilityUserProfile());\n };\n }\n\n window.addEventListener('MiaoDaMetaInfoChanged', handleMetaInfoChanged);\n return () => {\n cancelled = true;\n window.removeEventListener(\n 'MiaoDaMetaInfoChanged',\n handleMetaInfoChanged,\n );\n };\n }, []);\n\n return userInfo;\n};\n","/* eslint-disable */\nimport { IUserProfile } from '../types/udt-types';\n\nexport function getCurrentUserProfile(): IUserProfile {\n return (window as any)._userInfo || {};\n}\n\n/**\n * @deprecated 请使用 getCurrentUserProfile 代替\n */\nexport const getUserInfo = getCurrentUserProfile;\n","\nexport interface UrlParts {\n baseUrl: string;\n workspace: string;\n}\n\n/**\n * @internal\n */\nexport function splitWorkspaceUrl(fullUrl: string): UrlParts {\n try {\n // https://www.suda.com/suda/api/v1/workspaces/:workspace_id\n const url = new URL(fullUrl);\n const pathParts = url.pathname.split('/');\n\n // 找到 workspaces 位置\n const workspacesIndex = pathParts.findIndex(part => part === 'workspaces');\n if (workspacesIndex === -1) {\n throw new Error('Invalid workspace URL format');\n }\n\n const basePathParts = pathParts.slice(0, workspacesIndex);\n const workspace = pathParts[workspacesIndex + 1];\n\n return {\n baseUrl: `${url.origin}${basePathParts.join('/')}`,\n workspace,\n };\n } catch (error) {\n console.error('Error splitting workspace URL:', error);\n }\n return {\n baseUrl: fullUrl,\n // 兜底给一个,不要给空字符串,不然 createClient 都直接挂了,页面会白屏,体感不太好\n workspace: 'workspace',\n };\n}\n","import { splitWorkspaceUrl } from '../utils/url';\nimport { createClient } from '@lark-apaas/dataloom';\nimport { getAppId } from '../utils/getAppId';\nimport { getInitialInfo } from '../utils/getInitialInfo';\n\nconst createDataLoomClient = (url?: string, pat?: string) => {\n const { baseUrl } = url ? splitWorkspaceUrl(url) : { baseUrl: '' };\n const appId = getAppId() ?? '';\n return createClient(baseUrl, pat ?? '', {\n global: {\n enableDataloomLog: process.env.NODE_ENV !== 'production',\n requestRateLimit: process.env.NODE_ENV !== 'production' ? 100 : undefined,\n brandName: 'miaoda',\n appId\n },\n });\n};\n\nlet dataloom: ReturnType<typeof createDataLoomClient> | null = null;\n// 缓存进行中的 Promise,防止并发调用创建多个实例\nlet pendingPromise: Promise<ReturnType<typeof createDataLoomClient>> | null = null;\n\n/** 获取dataloom实例 */\nexport function getDataloom(): Promise<ReturnType<typeof createDataLoomClient>> {\n if (dataloom) {\n return Promise.resolve(dataloom);\n }\n if (pendingPromise) {\n return pendingPromise;\n }\n pendingPromise = getInitialInfo()\n .then(info => {\n const DATALOOM_CLIENT_URL = info?.app_runtime_extra?.url;\n const DATALOOM_PAT = info?.app_runtime_extra?.token;\n dataloom = createDataLoomClient(DATALOOM_CLIENT_URL, DATALOOM_PAT);\n return dataloom;\n })\n .finally(() => {\n pendingPromise = null;\n });\n return pendingPromise;\n}\n","import React from 'react';\nimport { debounce } from 'lodash';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean>(\n window.innerWidth < MOBILE_BREAKPOINT\n );\n\n React.useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n\n const debouncedHandleResize = debounce(handleResize, 200);\n\n window.addEventListener('resize', debouncedHandleResize);\n\n // Set initial value\n handleResize();\n\n return () => {\n window.removeEventListener('resize', debouncedHandleResize);\n debouncedHandleResize.cancel(); // Cancel any pending execution on unmount\n };\n }, []);\n\n return isMobile;\n}\n","import { useState } from 'react';\nimport { getDataloom } from '../integrations/dataloom';\n\nexport function useLogout() {\n const [isLoading, setIsLoading] = useState(false);\n async function handlerLogout() {\n if (process.env.NODE_ENV !== 'production') {\n console.log('只有生产环境才执行登出');\n return;\n }\n setIsLoading(true);\n try {\n const dataloom = await getDataloom();\n await dataloom.service.session.signOut();\n } catch (error) {\n console.error('登出失败', error);\n } finally {\n setIsLoading(false);\n }\n }\n\n return {\n handlerLogout,\n isLoading,\n };\n}\n","/**\n * 中英文文案源(统一管理)。\n *\n * 每条文案同时包含 zh 和 en,方便对照和维护。\n * Key 规则:`{组件}.{区域}.{标识}`\n * 文案来源:https://bytedance.larkoffice.com/wiki/BJCQwv9auiP9erkudMfcVIIGnRg\n */\n\nconst messages: Record<string, { zh: string; en: string }> = {\n // ── Safety 组件 ──────────────────────────────────────────────\n 'safety.badge.label': {\n zh: '妙搭',\n en: 'Spark',\n },\n 'safety.badge.builtWith': {\n zh: '由妙搭搭建',\n en: 'Built with Spark',\n },\n 'safety.ai.disclaimer': {\n zh: '包含 AI 生成内容,请注意甄别',\n en: 'AI-generated content. Use with care.',\n },\n 'safety.tenant.operated': {\n zh: '{name}运营',\n en: 'Operated by {name}',\n },\n 'safety.button.dontShowAgain': {\n zh: '不再展示',\n en: \"Don't show again\",\n },\n 'safety.button.learnMore': {\n zh: '了解更多',\n en: 'Learn more',\n },\n 'safety.cover.pc': {\n zh: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover.png',\n en: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-weben.png',\n },\n 'safety.cover.mobile': {\n zh: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobile.png',\n en: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/logo/miaodacover-mobileen.png',\n },\n};\n\nexport default messages;\n","/**\n * 统一的语言判断方法。\n *\n * 生产环境(`process.env.NODE_ENV === 'production'`):\n * 只看浏览器容器语言(navigator.language)。\n *\n * 非生产环境(沙箱预览场景):\n * 优先级 query > localStorage > navigator。\n * URL query `locale`(值为 `zh_CN` / `en_US`)由宿主平台(miaoda)\n * 通过 iframe src 透传,确保产物内的语言与宿主一致;\n * 读到 query 时会同步写入 localStorage,便于后续无 query 的跳转/刷新场景使用。\n *\n * 返回标准化 locale code:'zh' | 'en'。\n * 目前只区分中英文,未来扩展时在此调整。\n */\n\nexport type Locale = 'zh' | 'en';\n\nconst STORAGE_KEY = 'miaoda:preview-locale';\n\nfunction toLocale(value: string | null | undefined): Locale {\n const lang = value ?? 'zh';\n return lang.toLowerCase().startsWith('zh') ? 'zh' : 'en';\n}\n\nfunction readLocaleFromQuery(): string | null {\n if (typeof window === 'undefined') return null;\n try {\n const value = new URLSearchParams(window.location.search).get('locale');\n return value && value.length > 0 ? value : null;\n } catch {\n return null;\n }\n}\n\nfunction readLocaleFromStorage(): string | null {\n if (typeof window === 'undefined') return null;\n try {\n const value = window.localStorage?.getItem(STORAGE_KEY);\n return value && value.length > 0 ? value : null;\n } catch {\n return null;\n }\n}\n\nfunction writeLocaleToStorage(value: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage?.setItem(STORAGE_KEY, value);\n } catch {\n // ignore(隐私模式 / 配额满等)\n }\n}\n\nexport function getLocale(): Locale {\n // 生产环境只信任容器语言,不受 query/localStorage 影响\n if (process.env.NODE_ENV === 'production') {\n return toLocale(navigator.language);\n }\n\n const fromQuery = readLocaleFromQuery();\n if (fromQuery) {\n writeLocaleToStorage(fromQuery);\n return toLocale(fromQuery);\n }\n\n const fromStorage = readLocaleFromStorage();\n if (fromStorage) return toLocale(fromStorage);\n\n return toLocale(navigator.language);\n}\n","import messages from './messages';\nimport { getLocale } from '../utils/locale';\nimport type { Locale } from '../utils/locale';\n\n/**\n * 获取当前语言环境下的翻译文案。\n *\n * 支持 `{key}` 形式的变量替换:\n * ```ts\n * t('safety.tenant.operated', { name: '字节' })\n * // zh → \"字节运营\"\n * // en → \"Operated by 字节\"\n * ```\n *\n * 如果 key 不存在,fallback 到中文;中文也没有则返回 key 本身。\n */\nexport function t(key: string, params?: Record<string, string>): string {\n const locale = getLocale();\n const entry = messages[key];\n let text = entry?.[locale] ?? entry?.zh ?? key;\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n text = text.replace(`{${k}}`, v);\n }\n }\n return text;\n}\n\nexport { getLocale } from '../utils/locale';\nexport type { Locale } from '../utils/locale';\n","import React from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nlet defaultQueryClient: QueryClient | null = null;\n\nconst getDefaultQueryClient = () => {\n if (!defaultQueryClient) {\n defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n refetchOnWindowFocus: false,\n },\n mutations: {\n retry: 1,\n },\n },\n });\n }\n return defaultQueryClient;\n};\n\nexport type QueryProviderProps = {\n children: React.ReactNode;\n client?: QueryClient;\n};\n\nconst QueryProvider: React.FC<QueryProviderProps> = ({ children, client }) => {\n const qc = client ?? getDefaultQueryClient();\n return <QueryClientProvider client={qc}>{children}</QueryClientProvider>;\n};\n\nexport default QueryProvider;\nexport { getDefaultQueryClient };\n\n","import md5 from 'blueimp-md5';\nimport sha1 from 'crypto-js/sha1';\nimport { isMobile } from '../../../utils/deviceType';\nimport { getEnv } from '../../../utils/getEnv';\nimport { getLarkUserInfo } from './getLarkUser';\n\nimport { type TrackParams } from '../../../types/tea';\n\nconst saltA = '08a441';\nconst saltB = '42b91e';\nexport const encryptTea = (message: any): string => {\n const msgString = String(message);\n return sha1(saltA + md5(msgString + saltB)).toString();\n};\n\nlet teaInstance = false;\n\n/**\n * 初始化Tea 客户端\n * @export\n */\nexport async function createTracker(): Promise<void> {\n const { data } = await getLarkUserInfo();\n const { tenantID, userID} = data || {};\n const userIDEncrypt = userID && userID !== '0' ? encryptTea(userID) : undefined;\n const tenantIDEncrypt = tenantID && tenantID !== '0' ? encryptTea(tenantID) : undefined;\n\n window.collectEvent?.('init', {\n app_id: 788827,\n channel: 'cn',\n disable_auto_pv: false,\n enable_ab_test: false,\n enable_debug: false,\n enable_stay_duration: true, // 上报页面停留时间\n reportTime: 1000, // 事件上报异步队列的时间间隔\n });\n\n window.collectEvent?.('config', {\n user_unique_id: userIDEncrypt,\n device_type: isMobile() ? 'mobile' : 'pc',\n evtParams: {\n open_from: new URLSearchParams(window.location.search).get('open-from') ?? undefined,\n env: getEnv(),\n user_id: userIDEncrypt,\n tenant_id: tenantIDEncrypt,\n },\n });\n teaInstance = true;\n\n window.collectEvent?.('start');\n}\n\nexport const reportTeaEvent = async ({ trackKey, trackParams = {}}: TrackParams): Promise<void> => {\n try {\n if (!teaInstance) {\n teaInstance = true;\n await createTracker();\n }\n\n window.collectEvent?.(trackKey, trackParams);\n } catch (err) {\n // 静默,不影响业务\n console.error(err); // eslint-disable-line no-restricted-syntax\n }\n};\n","export const isIpad = (): boolean => {\n const _isIpad =\n /iPad|Tab|Tablet/i.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 1;\n\n return Boolean(_isIpad);\n};\n\nexport const isMobile = (): boolean => {\n const isPhone =\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i.test(\n navigator.userAgent\n );\n\n return isPhone || isIpad();\n};\n\nexport const isIOS = (): boolean => {\n if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {\n return true;\n }\n return false;\n};\n","export function getEnv(): 'BOE' | 'PRE' | 'ONLINE' {\n switch((globalThis as any).ENVIRONMENT) {\n case 'staging':\n return 'BOE';\n case 'gray':\n return 'PRE';\n case 'online':\n return 'ONLINE';\n default:\n break;\n\n }\n const { origin } = window.location;\n // 线上环境\n if (origin.includes('feishuapp.cn') || origin.includes('miaoda.feishuapp.net') || origin.includes('aiforce.cloud') || origin.includes('aiforce.run')) {\n return 'ONLINE';\n // PRE 环境\n } else if (origin.includes('fsapp.kundou.cn') || origin.includes('miaoda-pre.feishuapp.net') || origin.includes('aiforce-pre.bytedance.net') || origin.includes('aiforce-pre-preview.bytedance.net') || origin.includes('aiforce-pre.cloud') || origin.includes('aiforce-pre.run')) {\n return 'PRE';\n // BOE 环境\n } else {\n return 'BOE';\n }\n}\n","import { getAppId } from '../../../utils/getAppId';\nimport { getCsrfToken } from '../../../utils/getCsrfToken';\nimport { isNewPathEnabled } from '../../../utils/apiPath';\n\nexport async function getLarkUserInfo() {\n const appId = getAppId();\n if (!appId) {\n return {\n code: 1,\n msg: 'appId is required',\n data: {},\n };\n }\n\n const url = isNewPathEnabled()\n ? `/app/${appId}/__runtime__/api/v1/studio/lark/user_info`\n : `/spark/b/${appId}/lark/user_info`;\n\n const response = await fetch(url, {\n headers: {\n 'X-Suda-Csrf-Token': getCsrfToken() ?? '',\n },\n });\n\n return await response.json();\n}\n","export interface TrackParams {\n trackKey: TrackKey;\n trackParams?: Record<string, unknown>;\n}\n\nexport enum TrackKey {\n VIEW = 'aily_agent_artifact_page_view',\n}\n","import React from 'react';\n\nconst Welcome: React.FC<{\n title?: string;\n description?: string;\n}> = ({ title = '页面待开发', description = '页面暂未开发,请耐心等待...' }) => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: 'calc(100vh - 64px)',\n padding: '0 24px',\n textAlign: 'center',\n }}\n >\n <img\n style={{ borderRadius: 6, marginBottom: 24 }}\n width=\"320\"\n height=\"200\"\n src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg\"\n alt=\"Welcome\"\n />\n <div style={{ fontSize: 16, fontWeight: 500, lineHeight: '24px', marginBottom: 4, color: '#1f2329' }}>\n {title}\n </div>\n <div style={{ fontSize: 16, lineHeight: '24px', color: '#8f959e', maxWidth: 480 }}>\n {description}\n </div>\n </div>\n );\n};\n\nexport default Welcome;\n","import React from 'react';\n\nconst PagePlaceholder: React.FC<{\n title?: string;\n description?: string;\n}> = ({ title = '页面待开发', description = '页面暂未开发,请耐心等待...' }) => {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 24px',\n width: '100%',\n height: 'calc(100vh - 64px)',\n textAlign: 'center',\n }}\n >\n <img\n style={{ borderRadius: '6px', marginBottom: '24px' }}\n width=\"320\"\n height=\"200\"\n src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/LMfspH/ljhwZthlaukjlkulzlp/miao/welcome.svg\"\n alt=\"Welcome\"\n />\n <div style={{ fontSize: '16px', fontWeight: 500, marginBottom: '4px', lineHeight: '24px' }}>\n {title}\n </div>\n <div\n style={{\n color: '#6b7280',\n fontSize: '16px',\n lineHeight: '24px',\n maxWidth: '480px',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {description}\n </div>\n </div>\n );\n};\n\nexport default PagePlaceholder;\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { NavLink, type NavLinkProps } from 'react-router-dom';\n\nexport interface ActiveLinkProps extends Omit<NavLinkProps, 'to'> {\n to: string;\n}\n\n/**\n * ActiveLink 组件\n *\n * 替换 react-router-dom 的 NavLink,扩展支持 hash 路由跳转和激活态功能\n *\n * @example\n * // 普通路由跳转\n * <ActiveLink to=\"/dashboard\">Dashboard</ActiveLink>\n *\n * // hash 路由跳转\n * <ActiveLink to=\"#section1\">Section 1</ActiveLink>\n *\n * // 使用函数式 className 显示激活态\n * <ActiveLink\n * to=\"#features\"\n * className={({isActive}) => isActive ? 'active' : ''}\n * >\n * Features\n * </ActiveLink>\n */\n\nexport const ActiveLink = forwardRef<HTMLAnchorElement, ActiveLinkProps>(\n ({ to, onClick, className, style, children, ...rest }, ref) => {\n const [currentHash, setCurrentHash] = useState(() =>\n typeof window !== 'undefined' ? window.location.hash : ''\n );\n\n // 检测是否为 hash 路由\n const isHashRoute = typeof to === 'string' && to.startsWith('#');\n\n // 监听 hash 变化\n useEffect(() => {\n if (!isHashRoute) return;\n\n const handleHashChange = () => {\n setCurrentHash(window.location.hash);\n };\n\n window.addEventListener('hashchange', handleHashChange);\n return () => window.removeEventListener('hashchange', handleHashChange);\n }, [isHashRoute]);\n\n // 计算激活态\n const isActive = isHashRoute && currentHash === to;\n\n // 如果是普通路由,使用 NavLink\n if (!isHashRoute) {\n return (\n <NavLink\n ref={ref}\n to={to}\n onClick={onClick}\n className={className}\n style={style}\n {...rest}\n >\n {children}\n </NavLink>\n );\n }\n\n // 处理 hash 路由点击事件\n const handleHashClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n // 先调用用户自定义的 onClick\n onClick?.(e);\n\n // 如果用户在 onClick 中调用了 preventDefault,则不执行默认行为\n if (e.defaultPrevented) {\n return;\n }\n\n // 阻止默认的锚点跳转行为\n e.preventDefault();\n\n const targetId = to.slice(1); // \"#home\" -> \"home\"\n const targetElement = document.getElementById(targetId);\n\n // 使用 pushState 更新 URL,保留历史记录且避免浏览器默认的瞬间跳转\n history.pushState(null, '', to);\n\n // 立即更新内部状态以确保 UI 及时响应\n setCurrentHash(to);\n\n // 手动触发 hashchange 事件以通知其他组件\n window.dispatchEvent(new Event('hashchange'));\n\n // 平滑滚动到目标元素\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\n targetElement.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n // 处理 className(支持函数和字符串)\n const computedClassName =\n typeof className === 'function'\n ? className({ isActive, isPending: false, isTransitioning: false })\n : className;\n\n // 处理 style(支持函数和对象)\n const computedStyle =\n typeof style === 'function'\n ? style({ isActive, isPending: false, isTransitioning: false })\n : style;\n\n // 处理 children(支持函数和 ReactNode)\n const computedChildren =\n typeof children === 'function'\n ? children({ isActive, isPending: false, isTransitioning: false })\n : children;\n\n return (\n <a\n ref={ref}\n href={to}\n onClick={handleHashClick}\n className={computedClassName}\n style={computedStyle}\n {...rest}\n >\n {computedChildren}\n </a>\n );\n }\n);\n\nActiveLink.displayName = 'ActiveLink';\n","/* eslint-disable */\nimport * as React from 'react';\nimport {\n NavLink as OriginalNavLink,\n useLocation,\n useNavigate,\n type NavLinkProps,\n} from 'react-router-dom';\n\n/**\n * Enhanced NavLink component that extends react-router-dom's NavLink\n * with support for hash links (anchor navigation) and smooth scrolling.\n */\nconst NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n ({ to, children, className, style, ...props }, ref) => {\n const isHashLink = typeof to === 'string' && to.startsWith('#');\n const location = useLocation();\n const navigate = useNavigate();\n\n if (isHashLink) {\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n const element = document.querySelector(to as string);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n }\n navigate(to as string);\n };\n\n const isActive = location.hash === to;\n\n const renderProps = {\n isActive,\n isPending: false,\n isTransitioning: false,\n };\n\n const resolvedClassName =\n typeof className === 'function' ? className(renderProps) : className;\n const resolvedStyle =\n typeof style === 'function' ? style(renderProps) : style;\n\n const {\n caseSensitive,\n end,\n replace,\n state,\n preventScrollReset,\n relative,\n viewTransition,\n ...restProps\n } = props;\n\n return (\n <a\n href={to as string}\n onClick={handleClick}\n ref={ref}\n className={resolvedClassName}\n style={resolvedStyle}\n {...restProps}\n >\n {typeof children === 'function' ? children(renderProps) : children}\n </a>\n );\n }\n\n return (\n <OriginalNavLink\n to={to}\n ref={ref}\n className={className}\n style={style}\n onClick={() =>\n (document.getElementById('rootContainer') || window)?.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n }\n {...props}\n >\n {children}\n </OriginalNavLink>\n );\n },\n);\n\nNavLink.displayName = 'NavLink';\n\nexport { NavLink };\nexport type { NavLinkProps };\n","import React from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\n\nexport interface UniversalLinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** 链接目标:内部路由、hash 锚点或外部 URL */\n to: string;\n}\n\n/** 是否为内部路由(非 hash、非外链) */\nfunction isInternalRoute(to: string): boolean {\n return !to.startsWith('#') && !to.startsWith('http://') && !to.startsWith('https://') && !to.startsWith('//');\n}\n\n/** 是否为外部链接 */\nfunction isExternalLink(to: string): boolean {\n return to.startsWith('http://') || to.startsWith('https://') || to.startsWith('//');\n}\n\n/**\n * 统一的链接组件,用于替换原生 <a> 标签\n * - 内部路由(/dashboard)→ react-router Link\n * - Hash 锚点(#section)→ <a>\n * - 外链(https://...)→ <a target=\"_blank\">\n */\nexport const UniversalLink = React.forwardRef<HTMLAnchorElement, UniversalLinkProps>(\n function UniversalLink({ to, ...props }, ref) {\n // 内部路由\n if (isInternalRoute(to)) {\n return <RouterLink to={to} ref={ref} {...props} />;\n }\n\n // Hash 链接 & 外部链接\n return (\n <a\n href={to}\n ref={ref}\n {...props}\n {...(isExternalLink(to) && {\n target: props.target ?? '_blank',\n rel: props.rel ?? 'noopener noreferrer',\n })}\n />\n );\n }\n);\n","import { getAppId } from './getAppId';\n\n/**\n * 获取当前 appId 对应的命名空间前缀\n * 格式:__miaoda_<appId>__:\n * 若 appId 为 null,则使用 __global__\n */\nfunction getPrefix(): string {\n const appId = getAppId();\n const namespace = appId || '__global__';\n return `__miaoda_${namespace}__:`;\n}\n\n/**\n * 获取当前 appId 范围内的所有 key(已去前缀)\n */\nfunction getScopedKeys(): string[] {\n const prefix = getPrefix();\n const keys: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && key.startsWith(prefix)) {\n keys.push(key.substring(prefix.length));\n }\n }\n\n return keys;\n}\n\n/**\n * 按 appId 隔离的 localStorage 封装\n * API 与原生 localStorage 保持一致\n */\nexport const scopedStorage: Storage = {\n /**\n * 获取指定 key 的值\n */\n getItem(key: string): string | null {\n const prefixedKey = getPrefix() + key;\n return localStorage.getItem(prefixedKey);\n },\n\n /**\n * 设置指定 key 的值\n */\n setItem(key: string, value: string): void {\n const prefixedKey = getPrefix() + key;\n localStorage.setItem(prefixedKey, value);\n },\n\n /**\n * 删除指定 key\n */\n removeItem(key: string): void {\n const prefixedKey = getPrefix() + key;\n localStorage.removeItem(prefixedKey);\n },\n\n /**\n * 清空当前 appId 范围内的所有 key\n * 不影响其他 app 和无前缀的 key\n */\n clear(): void {\n const prefix = getPrefix();\n const keysToRemove: string[] = [];\n\n // 收集需要删除的 key\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && key.startsWith(prefix)) {\n keysToRemove.push(key);\n }\n }\n\n // 删除收集到的 key\n keysToRemove.forEach(key => localStorage.removeItem(key));\n },\n\n /**\n * 返回当前 appId 范围内第 index 个 key(去前缀后的原始 key)\n */\n key(index: number): string | null {\n const keys = getScopedKeys();\n return keys[index] || null;\n },\n\n /**\n * 返回当前 appId 范围内的 key 数量\n */\n get length(): number {\n return getScopedKeys().length;\n },\n};\n","/**\n * 复制字符串到剪切板\n * @param text 要复制的文本\n * @returns Promise<boolean> 复制是否成功\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n // 优先使用现代的 Clipboard API\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n\n // 降级方案:使用传统的 execCommand 方法\n return fallbackCopyToClipboard(text);\n } catch (error) {\n // 执行navigator.clipboard.writeText失败时,降级方案\n return fallbackCopyToClipboard(text);\n }\n}\n\n/**\n * 降级复制方案(兼容旧浏览器)\n * @param text 要复制的文本\n * @returns boolean 复制是否成功\n */\nfunction fallbackCopyToClipboard(text: string): boolean {\n try {\n // 创建临时的 textarea 元素\n const textArea = document.createElement('textarea');\n textArea.value = text;\n\n // 设置样式,使其不可见\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n textArea.setAttribute('readonly', '');\n\n // 添加到 DOM\n document.body.appendChild(textArea);\n\n // 选中文本\n textArea.focus();\n textArea.select();\n\n // 执行复制命令\n const successful = document.execCommand('copy');\n\n // 清理:移除临时元素\n document.body.removeChild(textArea);\n\n return successful;\n } catch (error) {\n console.error('降级复制方案失败:', error);\n return false;\n }\n}\n","import { normalizeBasePath } from './utils';\n\n/**\n * 确保路径包含 CLIENT_BASE_PATH 前缀\n */\nfunction ensureBasePath(pathname: string, basePath: string): string {\n if (!basePath) return pathname;\n if (pathname.startsWith(basePath)) return pathname;\n return `${basePath}${pathname.startsWith('/') ? '' : '/'}${pathname}`;\n}\n\n/**\n * 解析应用内路径,自动补全 CLIENT_BASE_PATH 前缀,返回完整 URL\n * 适用于生成分享链接、二维码等需要完整 URL 的场景\n *\n * - 相对路径:补全前缀 + 当前域名\n * - 当前域名的完整 URL:修正路径部分,补全前缀\n * - 其他域名的 URL:原样返回,不做处理\n *\n * @param path - 应用内相对路径或完整 URL\n * @returns 完整的 URL 字符串\n *\n * @example\n * // 假设 CLIENT_BASE_PATH = '/app/abc',当前域名为 https://example.com\n *\n * resolveAppUrl('/detail/123')\n * // => 'https://example.com/app/abc/detail/123'\n *\n * resolveAppUrl('https://example.com/detail/123')\n * // => 'https://example.com/app/abc/detail/123'\n *\n * resolveAppUrl('https://example.com/app/abc/detail/123')\n * // => 'https://example.com/app/abc/detail/123' (已有前缀,不重复添加)\n *\n * resolveAppUrl('https://other-site.com/page')\n * // => 'https://other-site.com/page' (非当前域名,原样返回)\n */\nexport function resolveAppUrl(path: string): string {\n const basePath = normalizeBasePath(process.env.CLIENT_BASE_PATH);\n\n // 尝试解析为完整 URL\n try {\n const url = new URL(path);\n // 非当前域名,原样返回\n if (url.origin !== window.location.origin) {\n return path;\n }\n // 当前域名,修正路径\n url.pathname = ensureBasePath(url.pathname, basePath);\n return url.toString();\n } catch {\n // 不是完整 URL,当作相对路径处理\n }\n\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n const resolvedPath = ensureBasePath(normalizedPath, basePath);\n return `${window.location.origin}${resolvedPath}`;\n}\n","/**\n * @internal\n */\nexport function getEnvPath() {\n return window.IS_MIAODA_PREVIEW ? 'feida_preview' : 'feida_runtime';\n}\n","// 安全的 JSON.stringify 实现\nexport function safeStringify(obj: unknown): string {\n const seen = new Set<object>();\n\n try {\n return JSON.stringify(obj, (_key, value) => {\n // 处理循环引用\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n\n // 处理 BigInt\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n // 处理 Date\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n // 处理 Map\n if (value instanceof Map) {\n return Object.fromEntries(value);\n }\n\n // 处理 Set\n if (value instanceof Set) {\n return Array.from(value);\n }\n\n // 处理 undefined\n if (typeof value === 'undefined') {\n return 'undefined';\n }\n\n // 处理 Symbol\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n return value;\n });\n } catch {\n return '';\n } finally {\n seen.clear();\n }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport { initAxiosConfig } from './axiosConfig';\n\nlet axiosInstance: AxiosInstance | undefined;\n\n/** 显示 toast 提示(兼容 PC/移动端) */\nfunction showToast(message: string, duration = 3000): Promise<void> {\n return new Promise(resolve => {\n const toast = document.createElement('div');\n\n const iconSvg = `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 1.333a6.667 6.667 0 1 1 0 13.334A6.667 6.667 0 0 1 8 1.333ZM8 10a.667.667 0 1 0 0 1.333A.667.667 0 0 0 8 10Zm0-5.333a.667.667 0 0 0-.667.666v3.334a.667.667 0 0 0 1.334 0V5.333A.667.667 0 0 0 8 4.667Z\" fill=\"#ff811a\"/>\n </svg>`;\n\n const iconWrapper = document.createElement('span');\n iconWrapper.innerHTML = iconSvg;\n Object.assign(iconWrapper.style, {\n display: 'flex',\n alignItems: 'center',\n marginRight: '8px',\n flexShrink: '0',\n });\n\n const textWrapper = document.createElement('span');\n textWrapper.textContent = message;\n\n toast.appendChild(iconWrapper);\n toast.appendChild(textWrapper);\n\n Object.assign(toast.style, {\n position: 'fixed',\n top: '20%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n backgroundColor: '#fff',\n color: '#1f2329',\n border: '1px solid #dee0e3',\n borderRadius: '6px',\n fontSize: '14px',\n lineHeight: '1.5',\n zIndex: '99999',\n maxWidth: '80vw',\n wordBreak: 'break-word',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.03), 0 3px 6px rgba(0, 0, 0, 0.05), 0 6px 18px rgba(0, 0, 0, 0.03)',\n opacity: '0',\n transition: 'opacity 0.3s ease',\n });\n\n document.body.appendChild(toast);\n\n requestAnimationFrame(() => {\n toast.style.opacity = '1';\n });\n\n setTimeout(() => {\n toast.style.opacity = '0';\n setTimeout(() => {\n document.body.removeChild(toast);\n resolve();\n }, 300);\n }, duration);\n });\n}\n\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n meta?: {\n autoJumpToLogin?: boolean;\n };\n }\n}\n\n/** 获取axios实例 */\nexport function getAxiosForBackend() {\n if (!axiosInstance) {\n axiosInstance = axios.create({\n baseURL: process.env.CLIENT_BASE_PATH || '/',\n });\n axiosInstance.interceptors.response.use(\n null,\n err => {\n if (err.config.meta?.autoJumpToLogin !== false) {\n const loginUrl = err.response?.headers?.['x-login-url'];\n if (loginUrl) {\n showToast('需要登录后才能执行操作,将自动跳转登录页', 3000).then(() => {\n window.location.href = loginUrl;\n });\n }\n }\n return Promise.reject(err);\n });\n initAxiosConfig(axiosInstance);\n }\n return axiosInstance;\n}\n\nexport const axiosForBackend = getAxiosForBackend();\n","// 头像 Avatar 图\nexport const avatarImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/1.jpg';\nexport const avatarImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/2.jpg';\nexport const avatarImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/3.jpg';\nexport const avatarImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/4.jpg';\nexport const avatarImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/5.jpg';\nexport const avatarImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/6.jpg';\nexport const avatarImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/7.jpg';\nexport const avatarImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/8.jpg';\nexport const avatarImg9 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/9.jpg';\nexport const avatarImg10 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/10.jpg';\nexport const avatarImg11 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/avatar/base/11.jpg';\n","// Banner 图 technology 类型\nexport const techBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/1.jpg';\nexport const techBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/2.jpg';\nexport const techBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/3.jpg';\nexport const techBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/4.jpg';\nexport const techBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/5.jpg';\nexport const techBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/6.jpg';\nexport const techBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/7.jpg';\nexport const techBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/technology/8.jpg';\n\n// Banner 图 professional 类型\nexport const professionalBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/1.jpg';\nexport const professionalBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/2.jpg';\nexport const professionalBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/3.jpg';\nexport const professionalBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/4.jpg';\nexport const professionalBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/5.jpg';\nexport const professionalBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/6.jpg';\nexport const professionalBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/7.jpg';\nexport const professionalBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/professional/8.jpg';\n\n// Banner 图 minimalism 类型\nexport const minimalismBannerImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/1.jpg';\nexport const minimalismBannerImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/2.jpg';\nexport const minimalismBannerImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/3.jpg';\nexport const minimalismBannerImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/4.jpg';\nexport const minimalismBannerImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/5.jpg';\nexport const minimalismBannerImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/6.jpg';\nexport const minimalismBannerImg7 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/7.jpg';\nexport const minimalismBannerImg8 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/banner/minimalism/8.jpg';\n","// Cover 图 office\nexport const officeCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/1.jpg';\nexport const officeCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/2.jpg';\nexport const officeCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/3.jpg';\nexport const officeCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/4.jpg';\nexport const officeCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/5.jpg';\nexport const officeCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/office/6.jpg';\n\n// Cover 图 architecture\nexport const architectureCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/1.jpg';\nexport const architectureCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/2.jpg';\nexport const architectureCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/3.jpg';\nexport const architectureCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/4.jpg';\nexport const architectureCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/5.jpg';\nexport const architectureCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/architecture/6.jpg';\n\n// Cover 图 appeal-clothing\nexport const appealClothingCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/1.jpg';\nexport const appealClothingCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/2.jpg';\nexport const appealClothingCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/3.jpg';\nexport const appealClothingCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/4.jpg';\nexport const appealClothingCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/5.jpg';\nexport const appealClothingCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/appeal-clothing/6.jpg';\n\n// Cover 图 scenery\nexport const sceneryCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/1.jpg';\nexport const sceneryCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/2.jpg';\nexport const sceneryCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/3.jpg';\nexport const sceneryCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/4.jpg';\nexport const sceneryCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/5.jpg';\nexport const sceneryCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/scenery/6.jpg';\n\n// Cover 图 technology-internet\nexport const technologyInternetCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/1.jpg';\nexport const technologyInternetCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/2.jpg';\nexport const technologyInternetCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/3.jpg';\nexport const technologyInternetCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/4.jpg';\nexport const technologyInternetCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/5.jpg';\nexport const technologyInternetCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/technology-internet/6.jpg';\n\n// Cover 图 abstract-art-3d-rendering\nexport const abstractArt3dRenderingCoverImg1 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/1.jpg';\nexport const abstractArt3dRenderingCoverImg2 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/2.jpg';\nexport const abstractArt3dRenderingCoverImg3 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/3.jpg';\nexport const abstractArt3dRenderingCoverImg4 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/4.jpg';\nexport const abstractArt3dRenderingCoverImg5 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/5.jpg';\nexport const abstractArt3dRenderingCoverImg6 =\n 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ylcylz_fsph_ryhs/ljhwZthlaukjlkulzlp/feisuda/cover/abstract-art-3d-rendering/6.jpg';\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AACK,IAAMC,kBACX;AAGK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AACK,IAAMC,wBACX;AAGK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AACK,IAAMC,0BACX;AAGK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AACK,IAAMC,mBACX;AAGK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AACK,IAAMC,8BACX;AAGK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;AACK,IAAMC,kCACX;","names":["React","useEffect","window","process","env","NODE_ENV","__REACT_DEVTOOLS_GLOBAL_HOOK__","renderers","Map","supportsFiber","inject","renderer","id","size","set","onCommitFiberRoot","onCommitFiberUnmount","hook","originalInject","bind","has","axios","getCsrfToken","cookieName","cookies","document","cookie","split","name","value","decodeURIComponent","window","csrfToken","initAxiosConfig","axiosInstance","axios","interceptors","request","use","config","csrfToken","getCsrfToken","headers","window","location","pathname","error","Promise","reject","response","process","env","NODE_ENV","console","warn","method","toUpperCase","url","message","window","__FULLSTACK_RUNTIME_INITIALIZED__","initAxiosConfig","React","useEffect","useRef","useState","PopoverPrimitive","DialogPrimitive","getAppId","windowAppId","window","appId","isNewPathEnabled","basePath","process","env","CLIENT_BASE_PATH","test","useEffect","useState","getAppPublished","headers","window","token","MIAODA_BUILTIN_TTT","getCsrfToken","appId","getAppId","path","isNewPathEnabled","url","location","origin","response","fetch","method","credentials","res","json","code","status_code","data","console","error","undefined","initialInfo","pendingPromise","getInitialInfo","refresh","Promise","resolve","then","info","_bucket_id","app_runtime_extra","bucket","default_bucket_id","finally","clsx","twMerge","clsxWithTw","inputs","twMerge","clsx","isPreview","window","IS_MIAODA_PREVIEW","normalizeBasePath","basePath","replace","getWsPath","rawBasePath","process","env","CLIENT_BASE_PATH","normalizedBasePath","startsWith","basePathWithoutTrailingSlash","endsWith","slice","isSparkRuntime","_IS_Spark_RUNTIME","runtimeMode","getAppInfo","refresh","appInfo","window","_appInfo","undefined","isSparkRuntime","info","getInitialInfo","app_info","name","app_name","avatar","app_avatar","description","app_description","trim","useAppInfo","appInfo","setAppInfo","useState","useEffect","updateDomInfo","info","name","document","title","meta","querySelector","content","avatar","link","createElement","rel","head","appendChild","href","description","metaDom","handleMetaInfoChanged","refresh","getAppInfo","prev","undefined","onUpdate","e","detail","window","addEventListener","removeEventListener","appName","appLogo","useEffect","useState","getCurrentUserProfile","window","_userInfo","splitWorkspaceUrl","fullUrl","url","URL","pathParts","pathname","split","workspacesIndex","findIndex","part","Error","basePathParts","slice","workspace","baseUrl","origin","join","error","console","createClient","createDataLoomClient","url","pat","baseUrl","splitWorkspaceUrl","appId","getAppId","createClient","global","enableDataloomLog","process","env","NODE_ENV","requestRateLimit","undefined","brandName","dataloom","pendingPromise","getDataloom","Promise","resolve","getInitialInfo","then","info","DATALOOM_CLIENT_URL","app_runtime_extra","DATALOOM_PAT","token","finally","getNameFromArray","nameArray","length","undefined","chineseName","find","item","language_code","text","getCompatibilityUserProfile","userInfo","getCurrentUserProfile","userName","name","userAvatar","avatar","useCurrentUserProfile","setUserInfo","useState","useEffect","cancelled","fetchAndSetUserInfo","dataloom","getDataloom","result","service","session","getUserInfo","info","data","user_info","newUserInfo","user_id","toString","email","image","large","process","env","NODE_ENV","console","log","handleMetaInfoChanged","isSparkRuntime","window","addEventListener","removeEventListener","React","debounce","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","React","useState","window","innerWidth","useEffect","handleResize","debouncedHandleResize","debounce","addEventListener","removeEventListener","cancel","useState","useLogout","isLoading","setIsLoading","useState","handlerLogout","process","env","NODE_ENV","console","log","dataloom","getDataloom","service","session","signOut","error","messages","zh","en","STORAGE_KEY","toLocale","value","lang","toLowerCase","startsWith","readLocaleFromQuery","window","URLSearchParams","location","search","get","length","readLocaleFromStorage","localStorage","getItem","writeLocaleToStorage","setItem","getLocale","process","env","NODE_ENV","navigator","language","fromQuery","fromStorage","t","key","params","locale","getLocale","entry","messages","text","zh","k","v","Object","entries","replace","resetBase","boxSizing","margin","padding","border","background","font","color","textAlign","textDecoration","textTransform","letterSpacing","wordSpacing","lineHeight","verticalAlign","listStyle","FONT_FAMILY","Z_BADGE","Z_OVERLAY","LOGO_URL","getCoverUrl","t","getCoverMobileUrl","ICON_COMPANY_URL","ICON_AI_URL","LANDING_URL","badgeBase","position","display","alignItems","gap","boxShadow","borderRadius","fontFamily","fontSize","zIndex","cursor","badgeDesktop","right","bottom","badgeMobile","logoStyle","flexShrink","width","height","badgeTextStyle","popoverContent","overflow","popoverInner","flexDirection","popoverCover","popoverBody","justifyContent","infoRow","alignSelf","infoIcon","infoIconMobile","infoText","btnRow","btnBase","flex","borderWidth","borderStyle","borderColor","transition","btnHovered","overlayStyle","inset","sheetContent","outline","sheetInner","sheetCloseBtn","top","left","sheetCover","sheetBody","sheetInfoText","mobileBtnRow","mobileBtnBase","mobileBtnOutline","mobileBtnFilled","HoverButton","style","onClick","children","rest","hovered","setHovered","useState","React","div","onMouseEnter","onMouseLeave","XIcon","svg","xmlns","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","path","d","Safety","HasClosedKey","getAppId","visible","setVisible","window","localStorage","getItem","open","setOpen","isMobile","useIsMobile","userinfo","setUserinfo","isInternetVisible","setIsInternetVisible","showBadge","setShowBadge","badgeLoaded","setBadgeLoaded","timeoutRef","useRef","useEffect","appId","csrfToken","getCsrfToken","csrfHeaders","tenantInfoUrl","isNewPathEnabled","fetch","headers","then","res","json","data","tenant_info","is_internet_visible","catch","getPublishedUrl","badge","app_info","show_badge","finally","link","document","createElement","rel","as","href","head","appendChild","process","env","NODE_ENV","Root","onOpenChange","Trigger","asChild","img","src","p","minWidth","Portal","Overlay","Content","aria-describedby","undefined","Title","clip","alt","name","e","stopPropagation","preventDefault","setTimeout","setItem","current","clearTimeout","side","align","sideOffset","data-custom-element","React","QueryClient","QueryClientProvider","defaultQueryClient","getDefaultQueryClient","QueryClient","defaultOptions","queries","retry","refetchOnWindowFocus","mutations","QueryProvider","children","client","qc","React","QueryClientProvider","md5","sha1","isIpad","_isIpad","test","navigator","userAgent","maxTouchPoints","Boolean","isMobile","isPhone","isIOS","getEnv","globalThis","ENVIRONMENT","origin","window","location","includes","getLarkUserInfo","appId","getAppId","code","msg","data","url","isNewPathEnabled","response","fetch","headers","getCsrfToken","json","saltA","saltB","encryptTea","message","msgString","String","sha1","md5","toString","teaInstance","createTracker","data","getLarkUserInfo","tenantID","userID","userIDEncrypt","undefined","tenantIDEncrypt","window","collectEvent","app_id","channel","disable_auto_pv","enable_ab_test","enable_debug","enable_stay_duration","reportTime","user_unique_id","device_type","isMobile","evtParams","open_from","URLSearchParams","location","search","get","env","getEnv","user_id","tenant_id","reportTeaEvent","trackKey","trackParams","err","console","error","TrackKey","AppContainer","children","useAppInfo","useEffect","process","env","NODE_ENV","reportTeaEvent","trackKey","TrackKey","VIEW","trackParams","artifact_uid","getAppId","agent_id","url","window","location","href","React","Safety","QueryProvider","React","Welcome","title","description","React","div","style","display","flexDirection","alignItems","justifyContent","width","height","padding","textAlign","img","borderRadius","marginBottom","src","alt","fontSize","fontWeight","lineHeight","color","maxWidth","React","PagePlaceholder","title","description","React","div","style","display","flexDirection","alignItems","justifyContent","padding","width","height","textAlign","img","borderRadius","marginBottom","src","alt","fontSize","fontWeight","lineHeight","color","maxWidth","overflow","WebkitLineClamp","WebkitBoxOrient","React","forwardRef","useEffect","useState","NavLink","ActiveLink","forwardRef","to","onClick","className","style","children","rest","ref","currentHash","setCurrentHash","useState","window","location","hash","isHashRoute","startsWith","useEffect","handleHashChange","addEventListener","removeEventListener","isActive","React","NavLink","handleHashClick","e","defaultPrevented","preventDefault","targetId","slice","targetElement","document","getElementById","history","pushState","dispatchEvent","Event","scrollIntoView","behavior","computedClassName","isPending","isTransitioning","computedStyle","computedChildren","a","href","displayName","React","NavLink","OriginalNavLink","useLocation","useNavigate","NavLink","React","forwardRef","to","children","className","style","props","ref","isHashLink","startsWith","location","useLocation","navigate","useNavigate","handleClick","e","preventDefault","element","document","querySelector","scrollIntoView","behavior","isActive","hash","renderProps","isPending","isTransitioning","resolvedClassName","resolvedStyle","caseSensitive","end","replace","state","preventScrollReset","relative","viewTransition","restProps","a","href","onClick","OriginalNavLink","getElementById","window","scrollTo","top","displayName","React","Link","RouterLink","isInternalRoute","to","startsWith","isExternalLink","UniversalLink","React","forwardRef","props","ref","RouterLink","a","href","target","rel","getPrefix","appId","getAppId","namespace","getScopedKeys","prefix","keys","i","localStorage","length","key","startsWith","push","substring","scopedStorage","getItem","prefixedKey","setItem","value","removeItem","clear","keysToRemove","forEach","index","copyToClipboard","text","navigator","clipboard","window","isSecureContext","writeText","fallbackCopyToClipboard","error","textArea","document","createElement","value","style","position","left","top","setAttribute","body","appendChild","focus","select","successful","execCommand","removeChild","console","ensureBasePath","pathname","basePath","startsWith","resolveAppUrl","path","normalizeBasePath","process","env","CLIENT_BASE_PATH","url","URL","origin","window","location","toString","normalizedPath","resolvedPath","getEnvPath","window","IS_MIAODA_PREVIEW","safeStringify","obj","seen","Set","JSON","stringify","_key","value","has","add","toString","Date","toISOString","Map","Object","fromEntries","Array","from","clear","axios","axiosInstance","showToast","message","duration","Promise","resolve","toast","document","createElement","iconSvg","iconWrapper","innerHTML","Object","assign","style","display","alignItems","marginRight","flexShrink","textWrapper","textContent","appendChild","position","top","left","transform","padding","backgroundColor","color","border","borderRadius","fontSize","lineHeight","zIndex","maxWidth","wordBreak","boxShadow","opacity","transition","body","requestAnimationFrame","setTimeout","removeChild","getAxiosForBackend","axios","create","baseURL","process","env","CLIENT_BASE_PATH","interceptors","response","use","err","config","meta","autoJumpToLogin","loginUrl","headers","then","window","location","href","reject","initAxiosConfig","axiosForBackend","avatarImg1","avatarImg2","avatarImg3","avatarImg4","avatarImg5","avatarImg6","avatarImg7","avatarImg8","avatarImg9","avatarImg10","avatarImg11","techBannerImg1","techBannerImg2","techBannerImg3","techBannerImg4","techBannerImg5","techBannerImg6","techBannerImg7","techBannerImg8","professionalBannerImg1","professionalBannerImg2","professionalBannerImg3","professionalBannerImg4","professionalBannerImg5","professionalBannerImg6","professionalBannerImg7","professionalBannerImg8","minimalismBannerImg1","minimalismBannerImg2","minimalismBannerImg3","minimalismBannerImg4","minimalismBannerImg5","minimalismBannerImg6","minimalismBannerImg7","minimalismBannerImg8","officeCoverImg1","officeCoverImg2","officeCoverImg3","officeCoverImg4","officeCoverImg5","officeCoverImg6","architectureCoverImg1","architectureCoverImg2","architectureCoverImg3","architectureCoverImg4","architectureCoverImg5","architectureCoverImg6","appealClothingCoverImg1","appealClothingCoverImg2","appealClothingCoverImg3","appealClothingCoverImg4","appealClothingCoverImg5","appealClothingCoverImg6","sceneryCoverImg1","sceneryCoverImg2","sceneryCoverImg3","sceneryCoverImg4","sceneryCoverImg5","sceneryCoverImg6","technologyInternetCoverImg1","technologyInternetCoverImg2","technologyInternetCoverImg3","technologyInternetCoverImg4","technologyInternetCoverImg5","technologyInternetCoverImg6","abstractArt3dRenderingCoverImg1","abstractArt3dRenderingCoverImg2","abstractArt3dRenderingCoverImg3","abstractArt3dRenderingCoverImg4","abstractArt3dRenderingCoverImg5","abstractArt3dRenderingCoverImg6"]}
|