@inf-monkeys-tech/monkeys-design 0.4.50 → 0.4.52

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.
Files changed (49) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +335 -335
  3. package/dist/components/base/index.js +1 -1
  4. package/dist/components/base/index.js.map +1 -1
  5. package/dist/components/base/index.mjs +1 -1
  6. package/dist/components/base/index.mjs.map +1 -1
  7. package/dist/components/data-explorer/index.js.map +1 -1
  8. package/dist/components/data-explorer/index.mjs.map +1 -1
  9. package/dist/components/layout/index.js +5 -5
  10. package/dist/components/layout/index.js.map +1 -1
  11. package/dist/components/layout/index.mjs +5 -5
  12. package/dist/components/layout/index.mjs.map +1 -1
  13. package/dist/components/login/index.js.map +1 -1
  14. package/dist/components/login/index.mjs.map +1 -1
  15. package/dist/components/toast/index.js.map +1 -1
  16. package/dist/components/toast/index.mjs.map +1 -1
  17. package/dist/components/toolbar/index.js.map +1 -1
  18. package/dist/components/toolbar/index.mjs.map +1 -1
  19. package/dist/components/workbench/index.js +1 -1
  20. package/dist/components/workbench/index.js.map +1 -1
  21. package/dist/components/workbench/index.mjs +1 -1
  22. package/dist/components/workbench/index.mjs.map +1 -1
  23. package/dist/icons/oauth/index.js.map +1 -1
  24. package/dist/icons/oauth/index.mjs.map +1 -1
  25. package/dist/index.js +5 -5
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +5 -5
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/palette/index.js.map +1 -1
  30. package/dist/palette/index.mjs.map +1 -1
  31. package/dist/registry/index.js.map +1 -1
  32. package/dist/registry/index.mjs.map +1 -1
  33. package/dist/styles/global.scss +21 -21
  34. package/dist/styles/login-page.scss +518 -518
  35. package/dist/styles/workflow-board.scss +440 -440
  36. package/dist/styles/workflow-nodes.css +340 -340
  37. package/dist/theme-system/index.js +1 -1
  38. package/dist/theme-system/index.js.map +1 -1
  39. package/dist/theme-system/index.mjs +1 -1
  40. package/dist/theme-system/index.mjs.map +1 -1
  41. package/dist/themes/artist/index.js.map +1 -1
  42. package/dist/themes/artist/index.mjs.map +1 -1
  43. package/dist/themes/bsd/index.js.map +1 -1
  44. package/dist/themes/bsd/index.mjs.map +1 -1
  45. package/dist/themes/concept/index.js.map +1 -1
  46. package/dist/themes/concept/index.mjs.map +1 -1
  47. package/dist/themes/default/index.js.map +1 -1
  48. package/dist/themes/default/index.mjs.map +1 -1
  49. package/package.json +151 -151
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/bsd/components/LandingPage.tsx","../../../src/themes/bsd/components/ToolboxPanel.tsx","../../../src/themes/bsd/index.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ComponentType } from 'react';\nimport type { ComponentRegistry, ThemeConfig } from '../types';\n\n// 存储所有主题的组件注册表\nconst registries: Record<string, ComponentRegistry> = {};\n\n// 存储主题配置\nconst themeConfigs: Record<string, ThemeConfig> = {};\n\n/**\n * 注册主题组件\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\n * @param components 组件注册表\n * @param config 主题配置(可选)\n */\nexport function registerTheme(\n themeId: string,\n components: ComponentRegistry,\n config?: Omit<ThemeConfig, 'id'>\n): void {\n registries[themeId] = { ...registries[themeId], ...components };\n\n if (config) {\n themeConfigs[themeId] = { id: themeId, ...config };\n }\n}\n\n/**\n * 注册单个组件到指定主题\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @param component 组件\n */\nexport function registerComponent(\n themeId: string,\n componentName: string,\n component: ComponentType<any>\n): void {\n if (!registries[themeId]) {\n registries[themeId] = {};\n }\n registries[themeId][componentName] = component;\n}\n\n/**\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @returns 组件或 null\n */\nexport function resolveComponent<P = any>(\n themeId: string,\n componentName: string\n): ComponentType<P> | null {\n // 1. 先尝试获取主题特定组件\n const themeComponent = registries[themeId]?.[componentName];\n if (themeComponent) {\n return themeComponent as ComponentType<P>;\n }\n\n // 2. Fallback 到 default 主题\n const defaultComponent = registries['default']?.[componentName];\n if (defaultComponent) {\n return defaultComponent as ComponentType<P>;\n }\n\n // 3. 未找到\n return null;\n}\n\n/**\n * 检查主题是否有特定组件的定制版本\n * @param themeId 主题 ID\n * @param componentName 组件名称\n */\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\n return !!registries[themeId]?.[componentName];\n}\n\n/**\n * 获取主题的所有已注册组件名称\n * @param themeId 主题 ID\n */\nexport function getRegisteredComponents(themeId: string): string[] {\n return Object.keys(registries[themeId] || {});\n}\n\n/**\n * 获取所有已注册的主题 ID\n */\nexport function getRegisteredThemes(): string[] {\n return Object.keys(registries);\n}\n\n/**\n * 获取主题配置\n * @param themeId 主题 ID\n */\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\n return themeConfigs[themeId] || null;\n}\n\n/**\n * 清除所有注册(主要用于测试)\n */\nexport function clearRegistry(): void {\n Object.keys(registries).forEach((key) => delete registries[key]);\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\n}\n","'use client';\n\nimport React, { useEffect, useLayoutEffect, useState } from 'react';\n\nimport bsdBackgroundImage from '../../../assets/bsd/background-final.png';\nimport bsdCardFreeVariationImage from '../../../assets/bsd/bsd-card-free-variation.png';\nimport bsdCardInspirationImage from '../../../assets/bsd/bsd-card-inspiration.png';\nimport bsdCardLineArtImage from '../../../assets/bsd/bsd-card-line-art.png';\nimport bsdCardLocalEditImage from '../../../assets/bsd/bsd-card-local-edit.png';\nimport bsdCardMoreToolsImage from '../../../assets/bsd/bsd-card-more-tools.png';\nimport bsdCardStyleFusionImage from '../../../assets/bsd/bsd-card-style-fusion.png';\nimport bsdHeroImage from '../../../assets/bsd/bsd-hero.png';\nimport bsdIconDesignImage from '../../../assets/bsd/bsd-icon-design.png';\nimport bsdIconTrendImage from '../../../assets/bsd/bsd-icon-trend.png';\n\nexport interface CarouselItem {\n id: number;\n title: string;\n subtitle: string;\n image: string;\n}\n\nexport interface FeatureCardData {\n title: string;\n subtitle: string;\n imageUrl: string;\n isToolbox?: boolean;\n imageTransform?: string;\n hoverImageTransform?: string;\n}\n\nexport interface UserInfo {\n name?: string;\n photo?: string;\n}\n\nexport interface BsdLandingPageProps {\n /** 是否已认证 */\n isAuthenticated?: boolean;\n /** 用户信息 */\n user?: UserInfo | null;\n /** 功能卡片数据(可覆盖默认值) */\n featureCards?: FeatureCardData[];\n /** 点击进入工作台 */\n onEnterWorkbench?: () => void;\n /** 点击登录 */\n onLogin?: () => void;\n /** 点击卡片 */\n onCardClick?: (title: string) => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 国际化文本 */\n i18n?: {\n enterWorkspace?: string;\n designAgent?: string;\n tags?: string[];\n };\n}\n\nexport const BSD_CONFIG = {\n logo: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/bsd/bsd.ai.svg',\n backgroundImage: bsdBackgroundImage,\n sloganImage: bsdHeroImage,\n primaryColor: 'rgba(40, 82, 173, 1)',\n borderRadius: 20,\n icons: {\n news: bsdIconTrendImage,\n agent: bsdIconDesignImage,\n },\n};\n\nexport const BSD_DEFAULT_FEATURE_CARDS: FeatureCardData[] = [\n {\n title: '灵感生成',\n subtitle: '由提示词生成设计稿',\n imageUrl: bsdCardInspirationImage,\n imageTransform: 'translateX(20%) scale(1.045)',\n hoverImageTransform: 'translateX(20%) scale(1.06)',\n },\n {\n title: '自由裂变',\n subtitle: '由参考图片和提示词生成设计稿',\n imageUrl: bsdCardFreeVariationImage,\n },\n {\n title: '风格融合',\n subtitle: '融合多类型参考图片生成设计稿',\n imageUrl: bsdCardStyleFusionImage,\n },\n {\n title: '局部修改',\n subtitle: '划定选区,选区内设计修改',\n imageUrl: bsdCardLocalEditImage,\n },\n {\n title: '线稿成衣',\n subtitle: '参考线稿图生成设计稿',\n imageUrl: bsdCardLineArtImage,\n },\n {\n title: '更多 AI 工具',\n subtitle: '访问你的设计工具箱',\n imageUrl: bsdCardMoreToolsImage,\n isToolbox: true,\n },\n];\n\nconst TREND_LABEL = '找趋势';\nconst DESIGN_LABEL = '做设计';\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nconst resolveViewportHeight = () => {\n if (typeof window === 'undefined') return null;\n\n const height = window.visualViewport?.height ?? window.innerHeight;\n return Number.isFinite(height) && height > 0 ? height : null;\n};\n\nconst useBsdLandingViewportHeight = () => {\n const [viewportHeight, setViewportHeight] = useState<number | null>(null);\n\n useBrowserLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n\n const updateViewportHeight = () => {\n const nextHeight = resolveViewportHeight();\n if (!nextHeight) return;\n setViewportHeight((currentHeight) => (currentHeight === nextHeight ? currentHeight : nextHeight));\n };\n\n // iPad Safari can keep CSS 100vh out of sync with the visible viewport near the home indicator.\n updateViewportHeight();\n window.visualViewport?.addEventListener('resize', updateViewportHeight);\n window.visualViewport?.addEventListener('scroll', updateViewportHeight);\n window.addEventListener('orientationchange', updateViewportHeight);\n window.addEventListener('resize', updateViewportHeight);\n\n return () => {\n window.visualViewport?.removeEventListener('resize', updateViewportHeight);\n window.visualViewport?.removeEventListener('scroll', updateViewportHeight);\n window.removeEventListener('orientationchange', updateViewportHeight);\n window.removeEventListener('resize', updateViewportHeight);\n };\n }, []);\n\n return viewportHeight ? `${viewportHeight}px` : '100vh';\n};\n\nconst actionBaseStyle: React.CSSProperties = {\n position: 'relative',\n isolation: 'isolate',\n display: 'inline-flex',\n height: 'clamp(3.75rem, 6.2dvh, 4.75rem)',\n minWidth: '15.75rem',\n alignItems: 'center',\n justifyContent: 'space-between',\n overflow: 'hidden',\n borderRadius: '1.35rem',\n border: '1px solid rgba(111, 143, 200, 0.16)',\n background: 'rgba(7, 16, 28, 0.9)',\n padding: '0 clamp(1.25rem, 1.45vw, 1.75rem)',\n color: '#fff',\n boxShadow:\n '0 18px 42px rgba(0,0,0,0.42), 0 0 18px rgba(24,62,146,0.08), inset 0 1px 0 rgba(255,255,255,0.08), inset 0 -1px 0 rgba(64,103,180,0.08)',\n backdropFilter: 'blur(24px)',\n cursor: 'pointer',\n font: 'inherit',\n outline: 'none',\n transition: 'border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\n};\n\nconst actionHoverStyle = {\n trend: {\n borderColor: 'rgba(115, 234, 255, 0.62)',\n background: 'rgba(11, 31, 49, 0.96)',\n boxShadow:\n '0 0 0 1px rgba(116,240,255,0.22), 0 0 38px rgba(0,194,255,0.34), 0 0 78px rgba(0,123,255,0.22), 0 18px 44px rgba(0,0,0,0.48), inset 0 1px 0 rgba(255,255,255,0.20), inset 0 -20px 42px rgba(0,106,164,0.26)',\n },\n design: {\n borderColor: 'rgba(159, 186, 255, 0.72)',\n background: 'rgba(17, 27, 70, 0.96)',\n boxShadow:\n '0 0 0 1px rgba(157,190,255,0.28), 0 0 40px rgba(65,98,255,0.46), 0 0 82px rgba(70,88,255,0.30), 0 18px 44px rgba(0,0,0,0.48), inset 0 1px 0 rgba(255,255,255,0.24), inset 0 -20px 42px rgba(36,70,220,0.30)',\n },\n} satisfies Record<'trend' | 'design', React.CSSProperties>;\n\nconst UserIcon: React.FC<{ size?: number }> = ({ size = 24 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n);\n\nconst SparklesIcon: React.FC<{ size?: number }> = ({ size = 24 }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n <path d=\"M5 3v4\" />\n <path d=\"M19 17v4\" />\n <path d=\"M3 5h4\" />\n <path d=\"M17 19h4\" />\n </svg>\n);\n\nconst ArrowRightIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 12h14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <path d=\"m13 6 6 6-6 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\ninterface BsdPrimaryActionProps {\n iconSrc: string;\n label: string;\n tone: 'trend' | 'design';\n iconSize: number;\n onClick: () => void;\n}\n\nconst BsdPrimaryAction: React.FC<BsdPrimaryActionProps> = ({ iconSrc, label, tone, iconSize, onClick }) => {\n const [isHovered, setIsHovered] = useState(false);\n const glowColor = tone === 'design' ? 'rgba(74,111,255,0.72)' : 'rgba(0,231,255,0.46)';\n const washColor = tone === 'design' ? 'rgba(190,212,255,0.31)' : 'rgba(108,244,255,0.22)';\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsHovered(true)}\n onBlur={() => setIsHovered(false)}\n style={{\n ...actionBaseStyle,\n ...(isHovered ? actionHoverStyle[tone] : null),\n }}\n aria-label={label}\n >\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: -3,\n background:\n 'radial-gradient(circle at 72% 22%, rgba(63,102,190,0.16), transparent 34%), linear-gradient(180deg, rgba(12,24,42,0.34) 0%, rgba(4,11,22,0.20) 100%)',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: '-2rem',\n zIndex: -2,\n borderRadius: '1.6rem',\n opacity: isHovered ? 1 : 0,\n filter: 'blur(24px)',\n transition: 'opacity 300ms ease',\n background:\n tone === 'design'\n ? `radial-gradient(circle at 72% 24%, ${glowColor}, transparent 38%), radial-gradient(circle at 18% 92%, rgba(0,196,255,0.36), transparent 42%)`\n : `radial-gradient(circle at 24% 50%, ${glowColor}, transparent 34%), radial-gradient(circle at 82% 24%, rgba(0,120,255,0.34), transparent 42%)`,\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: -1,\n opacity: isHovered || tone === 'design' ? 1 : 0,\n transition: 'opacity 300ms ease',\n background:\n tone === 'design'\n ? `radial-gradient(circle at 68% 18%, ${washColor}, transparent 29%), linear-gradient(135deg, rgba(24,42,108,0.96) 0%, rgba(34,69,178,0.93) 54%, rgba(18,112,180,0.64) 100%)`\n : `radial-gradient(circle at 18% 50%, ${washColor}, transparent 28%), linear-gradient(135deg, rgba(9,24,36,0.96) 0%, rgba(7,42,70,0.92) 58%, rgba(0,106,156,0.54) 100%)`,\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n borderRadius: '1.25rem',\n boxShadow: `inset 0 0 0 1px ${isHovered ? 'rgba(255,255,255,0.24)' : 'rgba(255,255,255,0.10)'}`,\n transition: 'box-shadow 300ms ease',\n }}\n />\n\n <span style={{ position: 'relative', zIndex: 1, display: 'flex', minWidth: 0, alignItems: 'center', gap: '1rem' }}>\n <span\n style={{\n position: 'relative',\n display: 'grid',\n width: '2.75rem',\n height: '2.75rem',\n flexShrink: 0,\n placeItems: 'center',\n borderRadius: '0.95rem',\n border: `1px solid ${isHovered ? (tone === 'design' ? 'rgba(201,213,255,0.66)' : 'rgba(159,247,255,0.56)') : 'rgba(141,174,255,0.14)'}`,\n background: isHovered ? (tone === 'design' ? 'rgba(49,95,255,0.72)' : 'rgba(8,125,166,0.70)') : 'rgba(16,34,67,0.54)',\n boxShadow: isHovered\n ? tone === 'design'\n ? '0 0 26px rgba(68,109,255,0.76), inset 0 1px 0 rgba(255,255,255,0.32)'\n : '0 0 24px rgba(0,212,255,0.58), inset 0 1px 0 rgba(255,255,255,0.26)'\n : '0 0 12px rgba(46,85,180,0.10), inset 0 1px 0 rgba(255,255,255,0.10)',\n transition: 'border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\n }}\n >\n <img\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n width: iconSize,\n height: iconSize,\n objectFit: 'contain',\n filter: 'drop-shadow(0 0 8px rgba(255,255,255,0.28))',\n }}\n />\n </span>\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '1.18rem',\n fontWeight: 600,\n letterSpacing: 0,\n color: isHovered ? '#fff' : '#eef4ff',\n transition: 'color 300ms ease',\n }}\n >\n {label}\n </span>\n </span>\n\n <span\n style={{\n position: 'relative',\n zIndex: 1,\n display: 'inline-flex',\n flexShrink: 0,\n color: isHovered ? '#fff' : 'rgba(255,255,255,0.58)',\n transition: 'color 300ms ease',\n }}\n >\n <ArrowRightIcon />\n </span>\n </button>\n );\n};\n\ninterface FeatureCardProps extends FeatureCardData {\n onClick: () => void;\n}\n\nconst FeatureCard: React.FC<FeatureCardProps> = ({\n title,\n subtitle,\n imageUrl,\n imageTransform,\n hoverImageTransform,\n onClick,\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n const cardTransform = isHovered ? hoverImageTransform ?? 'scale(1.016)' : imageTransform ?? 'scale(1)';\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsHovered(true)}\n onBlur={() => setIsHovered(false)}\n style={{\n position: 'relative',\n height: 'auto',\n maxHeight: isHovered ? 'clamp(17.5rem, 36dvh, 24.25rem)' : 'clamp(16rem, 33dvh, 22rem)',\n minWidth: 0,\n width: '100%',\n aspectRatio: '540 / 800',\n transform: isHovered ? 'translateY(-0.35rem)' : 'translateY(0)',\n alignSelf: 'flex-end',\n overflow: 'hidden',\n borderRadius: '1.35rem',\n border: `1px solid ${isHovered ? 'rgba(130,233,255,0.78)' : 'rgba(79,121,255,0.38)'}`,\n background: isHovered ? '#0a1424' : '#07101d',\n boxShadow: isHovered\n ? '0 22px 62px rgba(0,0,0,0.34), 0 0 0 1px rgba(98,166,255,0.24), 0 0 32px rgba(0,225,255,0.20), 0 0 56px rgba(71,100,255,0.20), inset 0 1px 0 rgba(255,255,255,0.18), inset 0 -18px 42px rgba(31,92,255,0.20)'\n : '0 18px 54px rgba(0,0,0,0.28), inset 0 1px 0 rgba(255,255,255,0.06)',\n cursor: 'pointer',\n font: 'inherit',\n outline: 'none',\n padding: 0,\n transition: 'transform 280ms ease, border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\n }}\n aria-label={`进入${title}`}\n >\n <img\n src={imageUrl}\n alt=\"\"\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n transform: cardTransform,\n filter: isHovered ? 'brightness(1.08) contrast(1.04) saturate(1.16)' : 'none',\n transition: 'transform 300ms ease, filter 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n background:\n 'linear-gradient(180deg, rgba(2,8,18,0.04) 0%, rgba(3,10,22,0.18) 42%, rgba(4,12,27,0.58) 72%, rgba(16,54,172,0.38) 100%)',\n opacity: isHovered ? 0.7 : 1,\n transition: 'opacity 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n opacity: isHovered ? 1 : 0,\n background:\n 'radial-gradient(circle at 74% 18%, rgba(113,220,255,0.20), transparent 34%), radial-gradient(circle at 30% 96%, rgba(45,99,255,0.32), transparent 40%)',\n transition: 'opacity 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n height: '50%',\n background: 'linear-gradient(180deg, rgba(5,13,27,0) 0%, rgba(7,16,35,0.52) 38%, rgba(22,70,205,0.90) 100%)',\n opacity: isHovered ? 1 : 0.92,\n transition: 'opacity 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: '-12%',\n right: '-12%',\n bottom: '-18%',\n height: '42%',\n borderRadius: '50%',\n background: 'radial-gradient(ellipse at center, rgba(0,224,255,0.38) 0%, rgba(56,100,255,0.28) 42%, transparent 72%)',\n filter: 'blur(28px)',\n opacity: isHovered ? 1 : 0.62,\n transition: 'opacity 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: '1px',\n borderRadius: '1.28rem',\n background: 'linear-gradient(140deg, rgba(255,255,255,0.12) 0%, transparent 24%, transparent 70%, rgba(93,230,255,0.16) 100%)',\n opacity: isHovered ? 1 : 0,\n transition: 'opacity 300ms ease',\n }}\n />\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: '5%',\n right: '5%',\n bottom: 0,\n height: 1,\n background: 'linear-gradient(90deg, transparent, rgba(83,229,255,0.70), rgba(96,128,255,0.78), transparent)',\n opacity: isHovered ? 1 : 0.75,\n transition: 'opacity 300ms ease',\n }}\n />\n\n <span\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 2,\n display: 'flex',\n alignItems: 'flex-end',\n padding: '2rem 1.25rem 1.25rem',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'flex', minWidth: 0, maxWidth: '100%', flexDirection: 'column', alignItems: 'flex-start' }}>\n <span\n style={{\n display: 'block',\n maxWidth: '100%',\n background: 'linear-gradient(180deg, #ffffff 0%, #eef4ff 54%, #bfd3ff 100%)',\n WebkitBackgroundClip: 'text',\n backgroundClip: 'text',\n color: 'transparent',\n fontSize: '1.72rem',\n fontWeight: 600,\n lineHeight: 1.06,\n letterSpacing: 0,\n filter: isHovered ? 'drop-shadow(0 0 14px rgba(180,218,255,0.34))' : 'none',\n transition: 'filter 300ms ease',\n }}\n >\n {title}\n </span>\n <span\n style={{\n display: 'block',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n marginTop: '0.75rem',\n paddingBottom: '0.125rem',\n paddingRight: '0.5rem',\n background: 'linear-gradient(180deg, rgba(255,255,255,0.94) 0%, rgba(214,228,255,0.88) 52%, rgba(163,191,255,0.84) 100%)',\n WebkitBackgroundClip: 'text',\n backgroundClip: 'text',\n color: 'transparent',\n fontSize: '0.8rem',\n lineHeight: 1.45,\n letterSpacing: 0,\n opacity: isHovered ? 1 : 0.86,\n transition: 'opacity 300ms ease',\n }}\n >\n {subtitle}\n </span>\n </span>\n </span>\n </button>\n );\n};\n\nexport function BsdLandingPage({\n isAuthenticated = false,\n user,\n featureCards = BSD_DEFAULT_FEATURE_CARDS,\n onEnterWorkbench,\n onLogin,\n onCardClick,\n className = '',\n style = {},\n i18n = {},\n}: BsdLandingPageProps) {\n const { tags = [] } = i18n;\n const viewportHeight = useBsdLandingViewportHeight();\n\n const handleEnterNews = () => {\n if (!isAuthenticated) {\n onLogin?.();\n return;\n }\n if (onCardClick) {\n onCardClick(TREND_LABEL);\n return;\n }\n onEnterWorkbench?.();\n };\n\n const handleToWorkbench = () => {\n if (isAuthenticated) {\n onEnterWorkbench?.();\n } else {\n onLogin?.();\n }\n };\n\n const handleCardClick = (title: string, isToolbox?: boolean) => {\n if (!isAuthenticated) {\n onLogin?.();\n return;\n }\n if (isToolbox) {\n if (onCardClick) {\n onCardClick('AI工具箱');\n return;\n }\n onEnterWorkbench?.();\n } else {\n onCardClick?.(title);\n }\n };\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'flex',\n height: viewportHeight,\n width: '100%',\n minWidth: 0,\n flexDirection: 'column',\n overflow: 'hidden',\n background: '#000',\n color: '#fff',\n ...style,\n }}\n >\n <div aria-hidden=\"true\" style={{ pointerEvents: 'none', position: 'absolute', inset: 0, zIndex: 0, background: '#020409' }} />\n <div aria-hidden=\"true\" style={{ pointerEvents: 'none', position: 'absolute', inset: 0, zIndex: 0, overflow: 'hidden' }}>\n <img\n src={BSD_CONFIG.backgroundImage}\n alt=\"\"\n style={{\n position: 'absolute',\n left: '50%',\n top: '50%',\n width: '108%',\n height: '108%',\n maxWidth: 'none',\n transform: 'translate(-50%, -50%)',\n objectFit: 'cover',\n objectPosition: 'center',\n opacity: 0.9,\n }}\n />\n </div>\n <div\n aria-hidden=\"true\"\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n zIndex: 0,\n background:\n 'radial-gradient(circle at top, rgba(98,144,255,0.18), transparent 32%), radial-gradient(circle at 50% 42%, rgba(80,177,255,0.14), transparent 28%)',\n }}\n />\n <div\n aria-hidden=\"true\"\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n zIndex: 0,\n background: 'linear-gradient(180deg, rgba(0,0,0,0.32) 0%, rgba(0,0,0,0.16) 18%, rgba(0,0,0,0.48) 52%, rgba(0,0,0,0.88) 100%)',\n }}\n />\n\n <header\n style={{\n position: 'relative',\n zIndex: 30,\n display: 'flex',\n height: 'clamp(4.5rem, 7dvh, 5.75rem)',\n flexShrink: 0,\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid rgba(255,255,255,0.1)',\n background: 'rgba(0,0,0,0.01)',\n padding: '0 clamp(1.25rem, 3.2vw, 4rem)',\n backdropFilter: 'blur(8px)',\n }}\n >\n <img src={BSD_CONFIG.logo} alt=\"BSD AI\" style={{ display: 'block', width: 'auto', height: 'clamp(5.8rem, 10dvh, 8.7rem)' }} />\n\n {isAuthenticated && user ? (\n <div\n style={{\n width: '2.75rem',\n height: '2.75rem',\n borderRadius: '50%',\n background: 'linear-gradient(135deg, #60a5fa, #a855f7)',\n display: 'grid',\n placeItems: 'center',\n overflow: 'hidden',\n color: '#fff',\n }}\n title={user.name}\n >\n {user.photo ? (\n <img src={user.photo} alt={user.name || ''} style={{ width: '100%', height: '100%', objectFit: 'cover', borderRadius: '50%' }} />\n ) : (\n <UserIcon size={20} />\n )}\n </div>\n ) : (\n <div\n style={{\n width: '2.75rem',\n height: '2.75rem',\n borderRadius: '50%',\n background: 'linear-gradient(135deg, #4ade80, #3b82f6)',\n display: 'grid',\n placeItems: 'center',\n color: '#fff',\n }}\n >\n <SparklesIcon size={20} />\n </div>\n )}\n </header>\n\n <main\n style={{\n position: 'relative',\n zIndex: 10,\n minHeight: 0,\n flex: '1 1 auto',\n overflow: 'hidden',\n padding: 'clamp(1.25rem, 3.2dvh, 4rem) clamp(1.25rem, 2vw, 2.5rem)',\n }}\n >\n <div\n style={{\n position: 'relative',\n display: 'flex',\n height: '100%',\n width: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <div\n style={{\n display: 'grid',\n width: '100%',\n height: 'min(100%, clamp(34rem, 72dvh, 58rem))',\n minHeight: 0,\n transform: 'translateY(clamp(0rem, 1.1dvh, 1rem))',\n gridTemplateRows: 'auto minmax(0, 1fr)',\n alignContent: 'center',\n gap: 'clamp(0.5rem, 1.35dvh, 1.25rem)',\n }}\n >\n <div style={{ display: 'flex', width: '100%', flexDirection: 'column', alignItems: 'center', textAlign: 'center' }}>\n <img\n src={BSD_CONFIG.sloganImage}\n alt=\"从山川到极地的风格指南\"\n style={{\n width: 'min(72vw, 66rem)',\n maxWidth: '100%',\n maxHeight: 'clamp(5.25rem, 12dvh, 7.5rem)',\n objectFit: 'contain',\n }}\n />\n\n {tags.length > 0 ? (\n <div\n style={{\n marginTop: '0.75rem',\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.65rem',\n color: 'rgba(255,255,255,0.78)',\n fontSize: '0.95rem',\n lineHeight: 1.4,\n }}\n >\n {tags.map((tag, index) => (\n <React.Fragment key={tag}>\n <span>{tag}</span>\n {index < tags.length - 1 ? <span style={{ color: 'rgba(255,255,255,0.42)' }}>|</span> : null}\n </React.Fragment>\n ))}\n </div>\n ) : null}\n\n <div\n style={{\n marginTop: 'clamp(0.9rem, 2.2dvh, 1.75rem)',\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '1rem',\n }}\n >\n <BsdPrimaryAction iconSrc={BSD_CONFIG.icons.news} iconSize={24} label={TREND_LABEL} tone=\"trend\" onClick={handleEnterNews} />\n <BsdPrimaryAction iconSrc={BSD_CONFIG.icons.agent} iconSize={32} label={DESIGN_LABEL} tone=\"design\" onClick={handleToWorkbench} />\n </div>\n </div>\n\n <div style={{ display: 'flex', minHeight: 0, alignItems: 'flex-end', justifyContent: 'center', paddingTop: 0 }}>\n <div\n style={{\n display: 'grid',\n width: '92vw',\n maxWidth: '1620px',\n minWidth: 0,\n gridTemplateColumns: 'repeat(6, minmax(0, 1fr))',\n alignItems: 'flex-end',\n justifyContent: 'center',\n gap: 'clamp(0.5rem, 1vw, 1.35rem)',\n }}\n >\n {featureCards.map((card) => (\n <FeatureCard\n key={card.title}\n {...card}\n onClick={() => handleCardClick(card.title, card.isToolbox)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n );\n}\n\nexport default BsdLandingPage;\n","import React from 'react';\n\n// 工具定义类型\nexport interface ToolDefinition {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n category?: string;\n}\n\n// 工具箱面板 Props\nexport interface ToolboxPanelProps {\n className?: string;\n style?: React.CSSProperties;\n tools?: ToolDefinition[];\n onToolSelect?: (toolId: string) => void;\n}\n\n// BSD 工具箱封面 URL 前缀\nconst BSD_TOOLBOX_COVER_PREFIX =\n 'https://bsd-ai-oss-prd.oss-cn-wulanchabu.aliyuncs.com/new-ai/%E5%B7%A5%E5%85%B7%E7%AE%B1/';\n\n// BSD 默认工具定义\nconst BSD_DEFAULT_TOOLS: ToolDefinition[] = [\n { id: 'inspiration', title: '灵感生成', category: 'text', description: '根据文字描述生成设计灵感' },\n { id: 'free-fission', title: '自由裂变', category: 'image', description: '图片多样化裂变生成' },\n { id: 'style-fusion', title: '风格融合', category: 'image', description: '多风格智能融合' },\n { id: 'local-edit', title: '局部修改', category: 'image', description: '局部区域精准修改' },\n { id: 'line-to-garment', title: '线稿成衣', category: 'image', description: '线稿快速转化成衣' },\n { id: 'garment-on-model', title: '成衣上身', category: 'image', description: '服装虚拟试穿' },\n { id: 'light-effect', title: '光影大片', category: 'image', description: '专业光影效果' },\n { id: 'atmosphere', title: '氛围图生成', category: 'image', description: '氛围场景生成' },\n { id: 'smart-outfit', title: '智能穿搭', category: 'image', description: '智能搭配推荐' },\n { id: 'runway', title: '秀场款生成', category: 'image', description: '秀场风格生成' },\n];\n\n/**\n * BSD Toolbox Panel - 波司登品牌定制工具箱面板\n */\nexport function BsdToolboxPanel({\n className,\n style,\n tools = BSD_DEFAULT_TOOLS,\n onToolSelect,\n}: ToolboxPanelProps) {\n return (\n <div\n className={className}\n style={{\n padding: 24,\n background: 'linear-gradient(180deg, #1a1a2e 0%, #0f0f1a 100%)',\n borderRadius: 20,\n ...style,\n }}\n >\n <h2 style={{ color: '#fff', marginBottom: 24 }}>AI 工具箱</h2>\n\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))',\n gap: 16,\n }}\n >\n {tools.map((tool) => (\n <div\n key={tool.id}\n onClick={() => onToolSelect?.(tool.id)}\n style={{\n padding: 16,\n borderRadius: 12,\n background: 'rgba(255,255,255,0.05)',\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'rgba(40, 82, 173, 0.3)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'rgba(255,255,255,0.05)';\n }}\n >\n {/* Tool Cover Image */}\n <div\n style={{\n width: '100%',\n aspectRatio: '1',\n borderRadius: 8,\n marginBottom: 12,\n background: `url(${BSD_TOOLBOX_COVER_PREFIX}${tool.id}.png) center/cover`,\n backgroundColor: 'rgba(40, 82, 173, 0.2)',\n }}\n />\n <h4 style={{ color: '#fff', margin: 0 }}>{tool.title}</h4>\n {tool.description && (\n <p style={{ color: 'rgba(255,255,255,0.6)', margin: '4px 0 0', fontSize: 12 }}>\n {tool.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport default BsdToolboxPanel;\n","import { registerTheme } from '../../registry';\nimport { BsdLandingPage, BSD_CONFIG, BSD_DEFAULT_FEATURE_CARDS } from './components/LandingPage';\nimport { BsdToolboxPanel } from './components/ToolboxPanel';\n\n// 注册 BSD 主题\nregisterTheme(\n 'bsd',\n {\n 'landing-page': BsdLandingPage,\n 'toolbox-panel': BsdToolboxPanel,\n },\n {\n name: 'BSD Theme',\n description: 'BSD Theme Components for Monkeys UI',\n version: '1.0.0',\n }\n);\n\n// 导出组件供直接使用\nexport { BsdLandingPage, BsdToolboxPanel };\n\n// 导出类型\nexport type { BsdLandingPageProps, FeatureCardData, UserInfo } from './components/LandingPage';\n\n// 导出配置常量\nexport { BSD_CONFIG, BSD_DEFAULT_FEATURE_CARDS };\n"]}
1
+ {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/bsd/components/LandingPage.tsx","../../../src/themes/bsd/components/ToolboxPanel.tsx","../../../src/themes/bsd/index.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ComponentType } from 'react';\r\nimport type { ComponentRegistry, ThemeConfig } from '../types';\r\n\r\n// 存储所有主题的组件注册表\r\nconst registries: Record<string, ComponentRegistry> = {};\r\n\r\n// 存储主题配置\r\nconst themeConfigs: Record<string, ThemeConfig> = {};\r\n\r\n/**\r\n * 注册主题组件\r\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\r\n * @param components 组件注册表\r\n * @param config 主题配置(可选)\r\n */\r\nexport function registerTheme(\r\n themeId: string,\r\n components: ComponentRegistry,\r\n config?: Omit<ThemeConfig, 'id'>\r\n): void {\r\n registries[themeId] = { ...registries[themeId], ...components };\r\n\r\n if (config) {\r\n themeConfigs[themeId] = { id: themeId, ...config };\r\n }\r\n}\r\n\r\n/**\r\n * 注册单个组件到指定主题\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @param component 组件\r\n */\r\nexport function registerComponent(\r\n themeId: string,\r\n componentName: string,\r\n component: ComponentType<any>\r\n): void {\r\n if (!registries[themeId]) {\r\n registries[themeId] = {};\r\n }\r\n registries[themeId][componentName] = component;\r\n}\r\n\r\n/**\r\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @returns 组件或 null\r\n */\r\nexport function resolveComponent<P = any>(\r\n themeId: string,\r\n componentName: string\r\n): ComponentType<P> | null {\r\n // 1. 先尝试获取主题特定组件\r\n const themeComponent = registries[themeId]?.[componentName];\r\n if (themeComponent) {\r\n return themeComponent as ComponentType<P>;\r\n }\r\n\r\n // 2. Fallback 到 default 主题\r\n const defaultComponent = registries['default']?.[componentName];\r\n if (defaultComponent) {\r\n return defaultComponent as ComponentType<P>;\r\n }\r\n\r\n // 3. 未找到\r\n return null;\r\n}\r\n\r\n/**\r\n * 检查主题是否有特定组件的定制版本\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n */\r\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\r\n return !!registries[themeId]?.[componentName];\r\n}\r\n\r\n/**\r\n * 获取主题的所有已注册组件名称\r\n * @param themeId 主题 ID\r\n */\r\nexport function getRegisteredComponents(themeId: string): string[] {\r\n return Object.keys(registries[themeId] || {});\r\n}\r\n\r\n/**\r\n * 获取所有已注册的主题 ID\r\n */\r\nexport function getRegisteredThemes(): string[] {\r\n return Object.keys(registries);\r\n}\r\n\r\n/**\r\n * 获取主题配置\r\n * @param themeId 主题 ID\r\n */\r\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\r\n return themeConfigs[themeId] || null;\r\n}\r\n\r\n/**\r\n * 清除所有注册(主要用于测试)\r\n */\r\nexport function clearRegistry(): void {\r\n Object.keys(registries).forEach((key) => delete registries[key]);\r\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\r\n}\r\n","'use client';\r\n\r\nimport React, { useEffect, useLayoutEffect, useState } from 'react';\r\n\r\nimport bsdBackgroundImage from '../../../assets/bsd/background-final.png';\r\nimport bsdCardFreeVariationImage from '../../../assets/bsd/bsd-card-free-variation.png';\r\nimport bsdCardInspirationImage from '../../../assets/bsd/bsd-card-inspiration.png';\r\nimport bsdCardLineArtImage from '../../../assets/bsd/bsd-card-line-art.png';\r\nimport bsdCardLocalEditImage from '../../../assets/bsd/bsd-card-local-edit.png';\r\nimport bsdCardMoreToolsImage from '../../../assets/bsd/bsd-card-more-tools.png';\r\nimport bsdCardStyleFusionImage from '../../../assets/bsd/bsd-card-style-fusion.png';\r\nimport bsdHeroImage from '../../../assets/bsd/bsd-hero.png';\r\nimport bsdIconDesignImage from '../../../assets/bsd/bsd-icon-design.png';\r\nimport bsdIconTrendImage from '../../../assets/bsd/bsd-icon-trend.png';\r\n\r\nexport interface CarouselItem {\r\n id: number;\r\n title: string;\r\n subtitle: string;\r\n image: string;\r\n}\r\n\r\nexport interface FeatureCardData {\r\n title: string;\r\n subtitle: string;\r\n imageUrl: string;\r\n isToolbox?: boolean;\r\n imageTransform?: string;\r\n hoverImageTransform?: string;\r\n}\r\n\r\nexport interface UserInfo {\r\n name?: string;\r\n photo?: string;\r\n}\r\n\r\nexport interface BsdLandingPageProps {\r\n /** 是否已认证 */\r\n isAuthenticated?: boolean;\r\n /** 用户信息 */\r\n user?: UserInfo | null;\r\n /** 功能卡片数据(可覆盖默认值) */\r\n featureCards?: FeatureCardData[];\r\n /** 点击进入工作台 */\r\n onEnterWorkbench?: () => void;\r\n /** 点击登录 */\r\n onLogin?: () => void;\r\n /** 点击卡片 */\r\n onCardClick?: (title: string) => void;\r\n /** 自定义类名 */\r\n className?: string;\r\n /** 自定义样式 */\r\n style?: React.CSSProperties;\r\n /** 国际化文本 */\r\n i18n?: {\r\n enterWorkspace?: string;\r\n designAgent?: string;\r\n tags?: string[];\r\n };\r\n}\r\n\r\nexport const BSD_CONFIG = {\r\n logo: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/bsd/bsd.ai.svg',\r\n backgroundImage: bsdBackgroundImage,\r\n sloganImage: bsdHeroImage,\r\n primaryColor: 'rgba(40, 82, 173, 1)',\r\n borderRadius: 20,\r\n icons: {\r\n news: bsdIconTrendImage,\r\n agent: bsdIconDesignImage,\r\n },\r\n};\r\n\r\nexport const BSD_DEFAULT_FEATURE_CARDS: FeatureCardData[] = [\r\n {\r\n title: '灵感生成',\r\n subtitle: '由提示词生成设计稿',\r\n imageUrl: bsdCardInspirationImage,\r\n imageTransform: 'translateX(20%) scale(1.045)',\r\n hoverImageTransform: 'translateX(20%) scale(1.06)',\r\n },\r\n {\r\n title: '自由裂变',\r\n subtitle: '由参考图片和提示词生成设计稿',\r\n imageUrl: bsdCardFreeVariationImage,\r\n },\r\n {\r\n title: '风格融合',\r\n subtitle: '融合多类型参考图片生成设计稿',\r\n imageUrl: bsdCardStyleFusionImage,\r\n },\r\n {\r\n title: '局部修改',\r\n subtitle: '划定选区,选区内设计修改',\r\n imageUrl: bsdCardLocalEditImage,\r\n },\r\n {\r\n title: '线稿成衣',\r\n subtitle: '参考线稿图生成设计稿',\r\n imageUrl: bsdCardLineArtImage,\r\n },\r\n {\r\n title: '更多 AI 工具',\r\n subtitle: '访问你的设计工具箱',\r\n imageUrl: bsdCardMoreToolsImage,\r\n isToolbox: true,\r\n },\r\n];\r\n\r\nconst TREND_LABEL = '找趋势';\r\nconst DESIGN_LABEL = '做设计';\r\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\r\n\r\nconst resolveViewportHeight = () => {\r\n if (typeof window === 'undefined') return null;\r\n\r\n const height = window.visualViewport?.height ?? window.innerHeight;\r\n return Number.isFinite(height) && height > 0 ? height : null;\r\n};\r\n\r\nconst useBsdLandingViewportHeight = () => {\r\n const [viewportHeight, setViewportHeight] = useState<number | null>(null);\r\n\r\n useBrowserLayoutEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const updateViewportHeight = () => {\r\n const nextHeight = resolveViewportHeight();\r\n if (!nextHeight) return;\r\n setViewportHeight((currentHeight) => (currentHeight === nextHeight ? currentHeight : nextHeight));\r\n };\r\n\r\n // iPad Safari can keep CSS 100vh out of sync with the visible viewport near the home indicator.\r\n updateViewportHeight();\r\n window.visualViewport?.addEventListener('resize', updateViewportHeight);\r\n window.visualViewport?.addEventListener('scroll', updateViewportHeight);\r\n window.addEventListener('orientationchange', updateViewportHeight);\r\n window.addEventListener('resize', updateViewportHeight);\r\n\r\n return () => {\r\n window.visualViewport?.removeEventListener('resize', updateViewportHeight);\r\n window.visualViewport?.removeEventListener('scroll', updateViewportHeight);\r\n window.removeEventListener('orientationchange', updateViewportHeight);\r\n window.removeEventListener('resize', updateViewportHeight);\r\n };\r\n }, []);\r\n\r\n return viewportHeight ? `${viewportHeight}px` : '100vh';\r\n};\r\n\r\nconst actionBaseStyle: React.CSSProperties = {\r\n position: 'relative',\r\n isolation: 'isolate',\r\n display: 'inline-flex',\r\n height: 'clamp(3.75rem, 6.2dvh, 4.75rem)',\r\n minWidth: '15.75rem',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n borderRadius: '1.35rem',\r\n border: '1px solid rgba(111, 143, 200, 0.16)',\r\n background: 'rgba(7, 16, 28, 0.9)',\r\n padding: '0 clamp(1.25rem, 1.45vw, 1.75rem)',\r\n color: '#fff',\r\n boxShadow:\r\n '0 18px 42px rgba(0,0,0,0.42), 0 0 18px rgba(24,62,146,0.08), inset 0 1px 0 rgba(255,255,255,0.08), inset 0 -1px 0 rgba(64,103,180,0.08)',\r\n backdropFilter: 'blur(24px)',\r\n cursor: 'pointer',\r\n font: 'inherit',\r\n outline: 'none',\r\n transition: 'border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\r\n};\r\n\r\nconst actionHoverStyle = {\r\n trend: {\r\n borderColor: 'rgba(115, 234, 255, 0.62)',\r\n background: 'rgba(11, 31, 49, 0.96)',\r\n boxShadow:\r\n '0 0 0 1px rgba(116,240,255,0.22), 0 0 38px rgba(0,194,255,0.34), 0 0 78px rgba(0,123,255,0.22), 0 18px 44px rgba(0,0,0,0.48), inset 0 1px 0 rgba(255,255,255,0.20), inset 0 -20px 42px rgba(0,106,164,0.26)',\r\n },\r\n design: {\r\n borderColor: 'rgba(159, 186, 255, 0.72)',\r\n background: 'rgba(17, 27, 70, 0.96)',\r\n boxShadow:\r\n '0 0 0 1px rgba(157,190,255,0.28), 0 0 40px rgba(65,98,255,0.46), 0 0 82px rgba(70,88,255,0.30), 0 18px 44px rgba(0,0,0,0.48), inset 0 1px 0 rgba(255,255,255,0.24), inset 0 -20px 42px rgba(36,70,220,0.30)',\r\n },\r\n} satisfies Record<'trend' | 'design', React.CSSProperties>;\r\n\r\nconst UserIcon: React.FC<{ size?: number }> = ({ size = 24 }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </svg>\r\n);\r\n\r\nconst SparklesIcon: React.FC<{ size?: number }> = ({ size = 24 }) => (\r\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\r\n <path d=\"M5 3v4\" />\r\n <path d=\"M19 17v4\" />\r\n <path d=\"M3 5h4\" />\r\n <path d=\"M17 19h4\" />\r\n </svg>\r\n);\r\n\r\nconst ArrowRightIcon: React.FC = () => (\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 12h14\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\r\n <path d=\"m13 6 6 6-6 6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n);\r\n\r\ninterface BsdPrimaryActionProps {\r\n iconSrc: string;\r\n label: string;\r\n tone: 'trend' | 'design';\r\n iconSize: number;\r\n onClick: () => void;\r\n}\r\n\r\nconst BsdPrimaryAction: React.FC<BsdPrimaryActionProps> = ({ iconSrc, label, tone, iconSize, onClick }) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const glowColor = tone === 'design' ? 'rgba(74,111,255,0.72)' : 'rgba(0,231,255,0.46)';\r\n const washColor = tone === 'design' ? 'rgba(190,212,255,0.31)' : 'rgba(108,244,255,0.22)';\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onFocus={() => setIsHovered(true)}\r\n onBlur={() => setIsHovered(false)}\r\n style={{\r\n ...actionBaseStyle,\r\n ...(isHovered ? actionHoverStyle[tone] : null),\r\n }}\r\n aria-label={label}\r\n >\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n zIndex: -3,\r\n background:\r\n 'radial-gradient(circle at 72% 22%, rgba(63,102,190,0.16), transparent 34%), linear-gradient(180deg, rgba(12,24,42,0.34) 0%, rgba(4,11,22,0.20) 100%)',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: '-2rem',\r\n zIndex: -2,\r\n borderRadius: '1.6rem',\r\n opacity: isHovered ? 1 : 0,\r\n filter: 'blur(24px)',\r\n transition: 'opacity 300ms ease',\r\n background:\r\n tone === 'design'\r\n ? `radial-gradient(circle at 72% 24%, ${glowColor}, transparent 38%), radial-gradient(circle at 18% 92%, rgba(0,196,255,0.36), transparent 42%)`\r\n : `radial-gradient(circle at 24% 50%, ${glowColor}, transparent 34%), radial-gradient(circle at 82% 24%, rgba(0,120,255,0.34), transparent 42%)`,\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n zIndex: -1,\r\n opacity: isHovered || tone === 'design' ? 1 : 0,\r\n transition: 'opacity 300ms ease',\r\n background:\r\n tone === 'design'\r\n ? `radial-gradient(circle at 68% 18%, ${washColor}, transparent 29%), linear-gradient(135deg, rgba(24,42,108,0.96) 0%, rgba(34,69,178,0.93) 54%, rgba(18,112,180,0.64) 100%)`\r\n : `radial-gradient(circle at 18% 50%, ${washColor}, transparent 28%), linear-gradient(135deg, rgba(9,24,36,0.96) 0%, rgba(7,42,70,0.92) 58%, rgba(0,106,156,0.54) 100%)`,\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n inset: 0,\r\n borderRadius: '1.25rem',\r\n boxShadow: `inset 0 0 0 1px ${isHovered ? 'rgba(255,255,255,0.24)' : 'rgba(255,255,255,0.10)'}`,\r\n transition: 'box-shadow 300ms ease',\r\n }}\r\n />\r\n\r\n <span style={{ position: 'relative', zIndex: 1, display: 'flex', minWidth: 0, alignItems: 'center', gap: '1rem' }}>\r\n <span\r\n style={{\r\n position: 'relative',\r\n display: 'grid',\r\n width: '2.75rem',\r\n height: '2.75rem',\r\n flexShrink: 0,\r\n placeItems: 'center',\r\n borderRadius: '0.95rem',\r\n border: `1px solid ${isHovered ? (tone === 'design' ? 'rgba(201,213,255,0.66)' : 'rgba(159,247,255,0.56)') : 'rgba(141,174,255,0.14)'}`,\r\n background: isHovered ? (tone === 'design' ? 'rgba(49,95,255,0.72)' : 'rgba(8,125,166,0.70)') : 'rgba(16,34,67,0.54)',\r\n boxShadow: isHovered\r\n ? tone === 'design'\r\n ? '0 0 26px rgba(68,109,255,0.76), inset 0 1px 0 rgba(255,255,255,0.32)'\r\n : '0 0 24px rgba(0,212,255,0.58), inset 0 1px 0 rgba(255,255,255,0.26)'\r\n : '0 0 12px rgba(46,85,180,0.10), inset 0 1px 0 rgba(255,255,255,0.10)',\r\n transition: 'border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\r\n }}\r\n >\r\n <img\r\n src={iconSrc}\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n style={{\r\n width: iconSize,\r\n height: iconSize,\r\n objectFit: 'contain',\r\n filter: 'drop-shadow(0 0 8px rgba(255,255,255,0.28))',\r\n }}\r\n />\r\n </span>\r\n <span\r\n style={{\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n fontSize: '1.18rem',\r\n fontWeight: 600,\r\n letterSpacing: 0,\r\n color: isHovered ? '#fff' : '#eef4ff',\r\n transition: 'color 300ms ease',\r\n }}\r\n >\r\n {label}\r\n </span>\r\n </span>\r\n\r\n <span\r\n style={{\r\n position: 'relative',\r\n zIndex: 1,\r\n display: 'inline-flex',\r\n flexShrink: 0,\r\n color: isHovered ? '#fff' : 'rgba(255,255,255,0.58)',\r\n transition: 'color 300ms ease',\r\n }}\r\n >\r\n <ArrowRightIcon />\r\n </span>\r\n </button>\r\n );\r\n};\r\n\r\ninterface FeatureCardProps extends FeatureCardData {\r\n onClick: () => void;\r\n}\r\n\r\nconst FeatureCard: React.FC<FeatureCardProps> = ({\r\n title,\r\n subtitle,\r\n imageUrl,\r\n imageTransform,\r\n hoverImageTransform,\r\n onClick,\r\n}) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const cardTransform = isHovered ? hoverImageTransform ?? 'scale(1.016)' : imageTransform ?? 'scale(1)';\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n onClick={onClick}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onFocus={() => setIsHovered(true)}\r\n onBlur={() => setIsHovered(false)}\r\n style={{\r\n position: 'relative',\r\n height: 'auto',\r\n maxHeight: isHovered ? 'clamp(17.5rem, 36dvh, 24.25rem)' : 'clamp(16rem, 33dvh, 22rem)',\r\n minWidth: 0,\r\n width: '100%',\r\n aspectRatio: '540 / 800',\r\n transform: isHovered ? 'translateY(-0.35rem)' : 'translateY(0)',\r\n alignSelf: 'flex-end',\r\n overflow: 'hidden',\r\n borderRadius: '1.35rem',\r\n border: `1px solid ${isHovered ? 'rgba(130,233,255,0.78)' : 'rgba(79,121,255,0.38)'}`,\r\n background: isHovered ? '#0a1424' : '#07101d',\r\n boxShadow: isHovered\r\n ? '0 22px 62px rgba(0,0,0,0.34), 0 0 0 1px rgba(98,166,255,0.24), 0 0 32px rgba(0,225,255,0.20), 0 0 56px rgba(71,100,255,0.20), inset 0 1px 0 rgba(255,255,255,0.18), inset 0 -18px 42px rgba(31,92,255,0.20)'\r\n : '0 18px 54px rgba(0,0,0,0.28), inset 0 1px 0 rgba(255,255,255,0.06)',\r\n cursor: 'pointer',\r\n font: 'inherit',\r\n outline: 'none',\r\n padding: 0,\r\n transition: 'transform 280ms ease, border-color 300ms ease, background-color 300ms ease, box-shadow 300ms ease',\r\n }}\r\n aria-label={`进入${title}`}\r\n >\r\n <img\r\n src={imageUrl}\r\n alt=\"\"\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n transform: cardTransform,\r\n filter: isHovered ? 'brightness(1.08) contrast(1.04) saturate(1.16)' : 'none',\r\n transition: 'transform 300ms ease, filter 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n background:\r\n 'linear-gradient(180deg, rgba(2,8,18,0.04) 0%, rgba(3,10,22,0.18) 42%, rgba(4,12,27,0.58) 72%, rgba(16,54,172,0.38) 100%)',\r\n opacity: isHovered ? 0.7 : 1,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n opacity: isHovered ? 1 : 0,\r\n background:\r\n 'radial-gradient(circle at 74% 18%, rgba(113,220,255,0.20), transparent 34%), radial-gradient(circle at 30% 96%, rgba(45,99,255,0.32), transparent 40%)',\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n height: '50%',\r\n background: 'linear-gradient(180deg, rgba(5,13,27,0) 0%, rgba(7,16,35,0.52) 38%, rgba(22,70,205,0.90) 100%)',\r\n opacity: isHovered ? 1 : 0.92,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n left: '-12%',\r\n right: '-12%',\r\n bottom: '-18%',\r\n height: '42%',\r\n borderRadius: '50%',\r\n background: 'radial-gradient(ellipse at center, rgba(0,224,255,0.38) 0%, rgba(56,100,255,0.28) 42%, transparent 72%)',\r\n filter: 'blur(28px)',\r\n opacity: isHovered ? 1 : 0.62,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n inset: '1px',\r\n borderRadius: '1.28rem',\r\n background: 'linear-gradient(140deg, rgba(255,255,255,0.12) 0%, transparent 24%, transparent 70%, rgba(93,230,255,0.16) 100%)',\r\n opacity: isHovered ? 1 : 0,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: 'absolute',\r\n left: '5%',\r\n right: '5%',\r\n bottom: 0,\r\n height: 1,\r\n background: 'linear-gradient(90deg, transparent, rgba(83,229,255,0.70), rgba(96,128,255,0.78), transparent)',\r\n opacity: isHovered ? 1 : 0.75,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n />\r\n\r\n <span\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n zIndex: 2,\r\n display: 'flex',\r\n alignItems: 'flex-end',\r\n padding: '2rem 1.25rem 1.25rem',\r\n textAlign: 'left',\r\n }}\r\n >\r\n <span style={{ display: 'flex', minWidth: 0, maxWidth: '100%', flexDirection: 'column', alignItems: 'flex-start' }}>\r\n <span\r\n style={{\r\n display: 'block',\r\n maxWidth: '100%',\r\n background: 'linear-gradient(180deg, #ffffff 0%, #eef4ff 54%, #bfd3ff 100%)',\r\n WebkitBackgroundClip: 'text',\r\n backgroundClip: 'text',\r\n color: 'transparent',\r\n fontSize: '1.72rem',\r\n fontWeight: 600,\r\n lineHeight: 1.06,\r\n letterSpacing: 0,\r\n filter: isHovered ? 'drop-shadow(0 0 14px rgba(180,218,255,0.34))' : 'none',\r\n transition: 'filter 300ms ease',\r\n }}\r\n >\r\n {title}\r\n </span>\r\n <span\r\n style={{\r\n display: 'block',\r\n maxWidth: '100%',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n marginTop: '0.75rem',\r\n paddingBottom: '0.125rem',\r\n paddingRight: '0.5rem',\r\n background: 'linear-gradient(180deg, rgba(255,255,255,0.94) 0%, rgba(214,228,255,0.88) 52%, rgba(163,191,255,0.84) 100%)',\r\n WebkitBackgroundClip: 'text',\r\n backgroundClip: 'text',\r\n color: 'transparent',\r\n fontSize: '0.8rem',\r\n lineHeight: 1.45,\r\n letterSpacing: 0,\r\n opacity: isHovered ? 1 : 0.86,\r\n transition: 'opacity 300ms ease',\r\n }}\r\n >\r\n {subtitle}\r\n </span>\r\n </span>\r\n </span>\r\n </button>\r\n );\r\n};\r\n\r\nexport function BsdLandingPage({\r\n isAuthenticated = false,\r\n user,\r\n featureCards = BSD_DEFAULT_FEATURE_CARDS,\r\n onEnterWorkbench,\r\n onLogin,\r\n onCardClick,\r\n className = '',\r\n style = {},\r\n i18n = {},\r\n}: BsdLandingPageProps) {\r\n const { tags = [] } = i18n;\r\n const viewportHeight = useBsdLandingViewportHeight();\r\n\r\n const handleEnterNews = () => {\r\n if (!isAuthenticated) {\r\n onLogin?.();\r\n return;\r\n }\r\n if (onCardClick) {\r\n onCardClick(TREND_LABEL);\r\n return;\r\n }\r\n onEnterWorkbench?.();\r\n };\r\n\r\n const handleToWorkbench = () => {\r\n if (isAuthenticated) {\r\n onEnterWorkbench?.();\r\n } else {\r\n onLogin?.();\r\n }\r\n };\r\n\r\n const handleCardClick = (title: string, isToolbox?: boolean) => {\r\n if (!isAuthenticated) {\r\n onLogin?.();\r\n return;\r\n }\r\n if (isToolbox) {\r\n if (onCardClick) {\r\n onCardClick('AI工具箱');\r\n return;\r\n }\r\n onEnterWorkbench?.();\r\n } else {\r\n onCardClick?.(title);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n height: viewportHeight,\r\n width: '100%',\r\n minWidth: 0,\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n background: '#000',\r\n color: '#fff',\r\n ...style,\r\n }}\r\n >\r\n <div aria-hidden=\"true\" style={{ pointerEvents: 'none', position: 'absolute', inset: 0, zIndex: 0, background: '#020409' }} />\r\n <div aria-hidden=\"true\" style={{ pointerEvents: 'none', position: 'absolute', inset: 0, zIndex: 0, overflow: 'hidden' }}>\r\n <img\r\n src={BSD_CONFIG.backgroundImage}\r\n alt=\"\"\r\n style={{\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n width: '108%',\r\n height: '108%',\r\n maxWidth: 'none',\r\n transform: 'translate(-50%, -50%)',\r\n objectFit: 'cover',\r\n objectPosition: 'center',\r\n opacity: 0.9,\r\n }}\r\n />\r\n </div>\r\n <div\r\n aria-hidden=\"true\"\r\n style={{\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n inset: 0,\r\n zIndex: 0,\r\n background:\r\n 'radial-gradient(circle at top, rgba(98,144,255,0.18), transparent 32%), radial-gradient(circle at 50% 42%, rgba(80,177,255,0.14), transparent 28%)',\r\n }}\r\n />\r\n <div\r\n aria-hidden=\"true\"\r\n style={{\r\n pointerEvents: 'none',\r\n position: 'absolute',\r\n inset: 0,\r\n zIndex: 0,\r\n background: 'linear-gradient(180deg, rgba(0,0,0,0.32) 0%, rgba(0,0,0,0.16) 18%, rgba(0,0,0,0.48) 52%, rgba(0,0,0,0.88) 100%)',\r\n }}\r\n />\r\n\r\n <header\r\n style={{\r\n position: 'relative',\r\n zIndex: 30,\r\n display: 'flex',\r\n height: 'clamp(4.5rem, 7dvh, 5.75rem)',\r\n flexShrink: 0,\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n borderBottom: '1px solid rgba(255,255,255,0.1)',\r\n background: 'rgba(0,0,0,0.01)',\r\n padding: '0 clamp(1.25rem, 3.2vw, 4rem)',\r\n backdropFilter: 'blur(8px)',\r\n }}\r\n >\r\n <img src={BSD_CONFIG.logo} alt=\"BSD AI\" style={{ display: 'block', width: 'auto', height: 'clamp(5.8rem, 10dvh, 8.7rem)' }} />\r\n\r\n {isAuthenticated && user ? (\r\n <div\r\n style={{\r\n width: '2.75rem',\r\n height: '2.75rem',\r\n borderRadius: '50%',\r\n background: 'linear-gradient(135deg, #60a5fa, #a855f7)',\r\n display: 'grid',\r\n placeItems: 'center',\r\n overflow: 'hidden',\r\n color: '#fff',\r\n }}\r\n title={user.name}\r\n >\r\n {user.photo ? (\r\n <img src={user.photo} alt={user.name || ''} style={{ width: '100%', height: '100%', objectFit: 'cover', borderRadius: '50%' }} />\r\n ) : (\r\n <UserIcon size={20} />\r\n )}\r\n </div>\r\n ) : (\r\n <div\r\n style={{\r\n width: '2.75rem',\r\n height: '2.75rem',\r\n borderRadius: '50%',\r\n background: 'linear-gradient(135deg, #4ade80, #3b82f6)',\r\n display: 'grid',\r\n placeItems: 'center',\r\n color: '#fff',\r\n }}\r\n >\r\n <SparklesIcon size={20} />\r\n </div>\r\n )}\r\n </header>\r\n\r\n <main\r\n style={{\r\n position: 'relative',\r\n zIndex: 10,\r\n minHeight: 0,\r\n flex: '1 1 auto',\r\n overflow: 'hidden',\r\n padding: 'clamp(1.25rem, 3.2dvh, 4rem) clamp(1.25rem, 2vw, 2.5rem)',\r\n }}\r\n >\r\n <div\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n height: '100%',\r\n width: '100%',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: 'grid',\r\n width: '100%',\r\n height: 'min(100%, clamp(34rem, 72dvh, 58rem))',\r\n minHeight: 0,\r\n transform: 'translateY(clamp(0rem, 1.1dvh, 1rem))',\r\n gridTemplateRows: 'auto minmax(0, 1fr)',\r\n alignContent: 'center',\r\n gap: 'clamp(0.5rem, 1.35dvh, 1.25rem)',\r\n }}\r\n >\r\n <div style={{ display: 'flex', width: '100%', flexDirection: 'column', alignItems: 'center', textAlign: 'center' }}>\r\n <img\r\n src={BSD_CONFIG.sloganImage}\r\n alt=\"从山川到极地的风格指南\"\r\n style={{\r\n width: 'min(72vw, 66rem)',\r\n maxWidth: '100%',\r\n maxHeight: 'clamp(5.25rem, 12dvh, 7.5rem)',\r\n objectFit: 'contain',\r\n }}\r\n />\r\n\r\n {tags.length > 0 ? (\r\n <div\r\n style={{\r\n marginTop: '0.75rem',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.65rem',\r\n color: 'rgba(255,255,255,0.78)',\r\n fontSize: '0.95rem',\r\n lineHeight: 1.4,\r\n }}\r\n >\r\n {tags.map((tag, index) => (\r\n <React.Fragment key={tag}>\r\n <span>{tag}</span>\r\n {index < tags.length - 1 ? <span style={{ color: 'rgba(255,255,255,0.42)' }}>|</span> : null}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n style={{\r\n marginTop: 'clamp(0.9rem, 2.2dvh, 1.75rem)',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '1rem',\r\n }}\r\n >\r\n <BsdPrimaryAction iconSrc={BSD_CONFIG.icons.news} iconSize={24} label={TREND_LABEL} tone=\"trend\" onClick={handleEnterNews} />\r\n <BsdPrimaryAction iconSrc={BSD_CONFIG.icons.agent} iconSize={32} label={DESIGN_LABEL} tone=\"design\" onClick={handleToWorkbench} />\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: 'flex', minHeight: 0, alignItems: 'flex-end', justifyContent: 'center', paddingTop: 0 }}>\r\n <div\r\n style={{\r\n display: 'grid',\r\n width: '92vw',\r\n maxWidth: '1620px',\r\n minWidth: 0,\r\n gridTemplateColumns: 'repeat(6, minmax(0, 1fr))',\r\n alignItems: 'flex-end',\r\n justifyContent: 'center',\r\n gap: 'clamp(0.5rem, 1vw, 1.35rem)',\r\n }}\r\n >\r\n {featureCards.map((card) => (\r\n <FeatureCard\r\n key={card.title}\r\n {...card}\r\n onClick={() => handleCardClick(card.title, card.isToolbox)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </main>\r\n </div>\r\n );\r\n}\r\n\r\nexport default BsdLandingPage;\r\n","import React from 'react';\r\n\r\n// 工具定义类型\r\nexport interface ToolDefinition {\r\n id: string;\r\n title: string;\r\n description?: string;\r\n icon?: string;\r\n category?: string;\r\n}\r\n\r\n// 工具箱面板 Props\r\nexport interface ToolboxPanelProps {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n tools?: ToolDefinition[];\r\n onToolSelect?: (toolId: string) => void;\r\n}\r\n\r\n// BSD 工具箱封面 URL 前缀\r\nconst BSD_TOOLBOX_COVER_PREFIX =\r\n 'https://bsd-ai-oss-prd.oss-cn-wulanchabu.aliyuncs.com/new-ai/%E5%B7%A5%E5%85%B7%E7%AE%B1/';\r\n\r\n// BSD 默认工具定义\r\nconst BSD_DEFAULT_TOOLS: ToolDefinition[] = [\r\n { id: 'inspiration', title: '灵感生成', category: 'text', description: '根据文字描述生成设计灵感' },\r\n { id: 'free-fission', title: '自由裂变', category: 'image', description: '图片多样化裂变生成' },\r\n { id: 'style-fusion', title: '风格融合', category: 'image', description: '多风格智能融合' },\r\n { id: 'local-edit', title: '局部修改', category: 'image', description: '局部区域精准修改' },\r\n { id: 'line-to-garment', title: '线稿成衣', category: 'image', description: '线稿快速转化成衣' },\r\n { id: 'garment-on-model', title: '成衣上身', category: 'image', description: '服装虚拟试穿' },\r\n { id: 'light-effect', title: '光影大片', category: 'image', description: '专业光影效果' },\r\n { id: 'atmosphere', title: '氛围图生成', category: 'image', description: '氛围场景生成' },\r\n { id: 'smart-outfit', title: '智能穿搭', category: 'image', description: '智能搭配推荐' },\r\n { id: 'runway', title: '秀场款生成', category: 'image', description: '秀场风格生成' },\r\n];\r\n\r\n/**\r\n * BSD Toolbox Panel - 波司登品牌定制工具箱面板\r\n */\r\nexport function BsdToolboxPanel({\r\n className,\r\n style,\r\n tools = BSD_DEFAULT_TOOLS,\r\n onToolSelect,\r\n}: ToolboxPanelProps) {\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n padding: 24,\r\n background: 'linear-gradient(180deg, #1a1a2e 0%, #0f0f1a 100%)',\r\n borderRadius: 20,\r\n ...style,\r\n }}\r\n >\r\n <h2 style={{ color: '#fff', marginBottom: 24 }}>AI 工具箱</h2>\r\n\r\n <div\r\n style={{\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))',\r\n gap: 16,\r\n }}\r\n >\r\n {tools.map((tool) => (\r\n <div\r\n key={tool.id}\r\n onClick={() => onToolSelect?.(tool.id)}\r\n style={{\r\n padding: 16,\r\n borderRadius: 12,\r\n background: 'rgba(255,255,255,0.05)',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.background = 'rgba(40, 82, 173, 0.3)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.background = 'rgba(255,255,255,0.05)';\r\n }}\r\n >\r\n {/* Tool Cover Image */}\r\n <div\r\n style={{\r\n width: '100%',\r\n aspectRatio: '1',\r\n borderRadius: 8,\r\n marginBottom: 12,\r\n background: `url(${BSD_TOOLBOX_COVER_PREFIX}${tool.id}.png) center/cover`,\r\n backgroundColor: 'rgba(40, 82, 173, 0.2)',\r\n }}\r\n />\r\n <h4 style={{ color: '#fff', margin: 0 }}>{tool.title}</h4>\r\n {tool.description && (\r\n <p style={{ color: 'rgba(255,255,255,0.6)', margin: '4px 0 0', fontSize: 12 }}>\r\n {tool.description}\r\n </p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default BsdToolboxPanel;\r\n","import { registerTheme } from '../../registry';\r\nimport { BsdLandingPage, BSD_CONFIG, BSD_DEFAULT_FEATURE_CARDS } from './components/LandingPage';\r\nimport { BsdToolboxPanel } from './components/ToolboxPanel';\r\n\r\n// 注册 BSD 主题\r\nregisterTheme(\r\n 'bsd',\r\n {\r\n 'landing-page': BsdLandingPage,\r\n 'toolbox-panel': BsdToolboxPanel,\r\n },\r\n {\r\n name: 'BSD Theme',\r\n description: 'BSD Theme Components for Monkeys UI',\r\n version: '1.0.0',\r\n }\r\n);\r\n\r\n// 导出组件供直接使用\r\nexport { BsdLandingPage, BsdToolboxPanel };\r\n\r\n// 导出类型\r\nexport type { BsdLandingPageProps, FeatureCardData, UserInfo } from './components/LandingPage';\r\n\r\n// 导出配置常量\r\nexport { BSD_CONFIG, BSD_DEFAULT_FEATURE_CARDS };\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/concept/components/LandingPage.tsx","../../../src/themes/concept/index.ts"],"names":["jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import type { ComponentType } from 'react';\nimport type { ComponentRegistry, ThemeConfig } from '../types';\n\n// 存储所有主题的组件注册表\nconst registries: Record<string, ComponentRegistry> = {};\n\n// 存储主题配置\nconst themeConfigs: Record<string, ThemeConfig> = {};\n\n/**\n * 注册主题组件\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\n * @param components 组件注册表\n * @param config 主题配置(可选)\n */\nexport function registerTheme(\n themeId: string,\n components: ComponentRegistry,\n config?: Omit<ThemeConfig, 'id'>\n): void {\n registries[themeId] = { ...registries[themeId], ...components };\n\n if (config) {\n themeConfigs[themeId] = { id: themeId, ...config };\n }\n}\n\n/**\n * 注册单个组件到指定主题\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @param component 组件\n */\nexport function registerComponent(\n themeId: string,\n componentName: string,\n component: ComponentType<any>\n): void {\n if (!registries[themeId]) {\n registries[themeId] = {};\n }\n registries[themeId][componentName] = component;\n}\n\n/**\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @returns 组件或 null\n */\nexport function resolveComponent<P = any>(\n themeId: string,\n componentName: string\n): ComponentType<P> | null {\n // 1. 先尝试获取主题特定组件\n const themeComponent = registries[themeId]?.[componentName];\n if (themeComponent) {\n return themeComponent as ComponentType<P>;\n }\n\n // 2. Fallback 到 default 主题\n const defaultComponent = registries['default']?.[componentName];\n if (defaultComponent) {\n return defaultComponent as ComponentType<P>;\n }\n\n // 3. 未找到\n return null;\n}\n\n/**\n * 检查主题是否有特定组件的定制版本\n * @param themeId 主题 ID\n * @param componentName 组件名称\n */\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\n return !!registries[themeId]?.[componentName];\n}\n\n/**\n * 获取主题的所有已注册组件名称\n * @param themeId 主题 ID\n */\nexport function getRegisteredComponents(themeId: string): string[] {\n return Object.keys(registries[themeId] || {});\n}\n\n/**\n * 获取所有已注册的主题 ID\n */\nexport function getRegisteredThemes(): string[] {\n return Object.keys(registries);\n}\n\n/**\n * 获取主题配置\n * @param themeId 主题 ID\n */\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\n return themeConfigs[themeId] || null;\n}\n\n/**\n * 清除所有注册(主要用于测试)\n */\nexport function clearRegistry(): void {\n Object.keys(registries).forEach((key) => delete registries[key]);\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\n}\n","'use client';\n\nimport React from 'react';\n\n// ==================== 类型定义 ====================\n\nexport interface QuickActionData {\n name: string;\n cardUrl: string;\n}\n\nexport interface ConceptDesignLandingPageProps {\n /** 是否已认证 */\n isAuthenticated?: boolean;\n /** 快速操作数据(可覆盖默认值) */\n quickActions?: QuickActionData[];\n /** 点击进入工作台 */\n onEnterWorkbench?: () => void;\n /** 点击登录 */\n onLogin?: () => void;\n /** 点击快速操作 */\n onQuickActionClick?: (name: string) => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\n// ==================== 默认配置 ====================\n\nexport const CONCEPT_CONFIG = {\n backgroundUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/bg.jpg',\n titleUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title.svg',\n titleTailUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title_tail.svg',\n othersUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/others.svg',\n entryActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/entry-actions',\n quickActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/quick-actions',\n};\n\nexport const CONCEPT_DEFAULT_QUICK_ACTIONS: QuickActionData[] = [\n {\n name: '设计工作台',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/设计工作台/card.svg`,\n },\n {\n name: '创新方法识别',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/创新方法识别/card.svg`,\n },\n {\n name: '灵感激发',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/灵感激发/card.svg`,\n },\n {\n name: '逻辑关系发现',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/逻辑关系发现/card.svg`,\n },\n];\n\n// ==================== 子组件 ====================\n\ninterface QuickActionCardProps {\n cardUrl: string;\n onClick?: () => void;\n}\n\nconst QuickActionCard: React.FC<QuickActionCardProps> = ({ cardUrl, onClick }) => {\n return (\n <div\n onClick={onClick}\n style={{\n height: '350px',\n width: '260px',\n cursor: 'pointer',\n border: '1.5px solid #e0e0e0',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n transition: 'all 0.3s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 1)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.7)';\n }}\n >\n <img src={cardUrl} alt=\"\" style={{ width: '100%', height: '100%' }} />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nexport function ConceptDesignLandingPage({\n isAuthenticated = false,\n quickActions = CONCEPT_DEFAULT_QUICK_ACTIONS,\n onEnterWorkbench,\n onLogin,\n onQuickActionClick,\n className = '',\n style = {},\n}: ConceptDesignLandingPageProps) {\n const handleToWorkbench = () => {\n if (isAuthenticated) {\n onEnterWorkbench?.();\n } else {\n onLogin?.();\n }\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '100vh',\n padding: '40px 80px',\n backgroundImage: `url('${CONCEPT_CONFIG.backgroundUrl}')`,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n backgroundSize: 'cover',\n position: 'relative',\n ...style,\n }}\n >\n {/* 标题区域 */}\n <div\n style={{\n marginTop: '100px',\n display: 'flex',\n height: '180px',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <img src={CONCEPT_CONFIG.titleUrl} alt=\"\" style={{ height: '100%' }} />\n <img src={CONCEPT_CONFIG.titleTailUrl} alt=\"\" style={{ height: '100%' }} />\n </div>\n\n {/* 弹性占位 */}\n <div style={{ flex: 1 }} />\n\n {/* 入口操作区域 */}\n <div\n style={{\n marginBottom: '60px',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n }}\n >\n <div style={{ display: 'flex', gap: '18px' }}>\n <div\n onClick={handleToWorkbench}\n style={{\n cursor: 'pointer',\n background: 'linear-gradient(to bottom, #444444, #000000)',\n padding: '24px 20px',\n transition: 'transform 0.3s',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\n >\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\n <img\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E4%BB%8E%E8%AE%BE%E8%AE%A1%E6%A8%A1%E6%9D%BF%E5%87%BA%E5%8F%91.svg`}\n alt=\"从设计模板出发\"\n />\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/plus.svg`} alt=\"+\" />\n </div>\n </div>\n\n <div\n onClick={handleToWorkbench}\n style={{\n cursor: 'pointer',\n background: '#ffffff',\n padding: '24px 20px',\n transition: 'transform 0.3s',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\n >\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\n <img\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E8%AE%BE%E8%AE%A1%E8%B5%84%E4%BA%A7.svg`}\n alt=\"设计资产\"\n />\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/right.svg`} alt=\"→\" />\n </div>\n </div>\n </div>\n </div>\n\n {/* 快速操作区域 */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n <img src={CONCEPT_CONFIG.othersUrl} alt=\"\" style={{ width: '96px' }} />\n\n <div style={{ display: 'flex', gap: '22px' }}>\n {quickActions.map((action) => (\n <QuickActionCard\n key={action.name}\n cardUrl={action.cardUrl}\n onClick={() => onQuickActionClick?.(action.name)}\n />\n ))}\n </div>\n </div>\n\n {/* 装饰线条 */}\n <div\n style={{\n position: 'fixed',\n bottom: '390px',\n left: 0,\n height: '1.5px',\n width: '100%',\n background: '#ACACAC',\n boxShadow: '0 2px 4px rgba(0,0,0,0.1)',\n zIndex: 1,\n }}\n />\n <div\n style={{\n position: 'fixed',\n bottom: 0,\n left: '80px',\n height: '492px',\n width: '1.5px',\n background: '#ACACAC',\n boxShadow: '2px 0 4px rgba(0,0,0,0.1)',\n zIndex: 1,\n }}\n />\n </div>\n );\n}\n\nexport default ConceptDesignLandingPage;\n","import { registerTheme } from '../../registry';\nimport { ConceptDesignLandingPage, CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS } from './components/LandingPage';\n\n// 注册 Concept Design 主题\nregisterTheme(\n 'concept-design',\n {\n 'landing-page': ConceptDesignLandingPage,\n },\n {\n name: 'Concept Design Theme',\n description: 'Concept Design Theme Components for Monkeys UI',\n version: '1.0.0',\n }\n);\n\n// 导出组件\nexport { ConceptDesignLandingPage };\n\n// 导出类型\nexport type { ConceptDesignLandingPageProps, QuickActionData } from './components/LandingPage';\n\n// 导出配置\nexport { CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS };\n"]}
1
+ {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/concept/components/LandingPage.tsx","../../../src/themes/concept/index.ts"],"names":["jsx","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import type { ComponentType } from 'react';\r\nimport type { ComponentRegistry, ThemeConfig } from '../types';\r\n\r\n// 存储所有主题的组件注册表\r\nconst registries: Record<string, ComponentRegistry> = {};\r\n\r\n// 存储主题配置\r\nconst themeConfigs: Record<string, ThemeConfig> = {};\r\n\r\n/**\r\n * 注册主题组件\r\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\r\n * @param components 组件注册表\r\n * @param config 主题配置(可选)\r\n */\r\nexport function registerTheme(\r\n themeId: string,\r\n components: ComponentRegistry,\r\n config?: Omit<ThemeConfig, 'id'>\r\n): void {\r\n registries[themeId] = { ...registries[themeId], ...components };\r\n\r\n if (config) {\r\n themeConfigs[themeId] = { id: themeId, ...config };\r\n }\r\n}\r\n\r\n/**\r\n * 注册单个组件到指定主题\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @param component 组件\r\n */\r\nexport function registerComponent(\r\n themeId: string,\r\n componentName: string,\r\n component: ComponentType<any>\r\n): void {\r\n if (!registries[themeId]) {\r\n registries[themeId] = {};\r\n }\r\n registries[themeId][componentName] = component;\r\n}\r\n\r\n/**\r\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @returns 组件或 null\r\n */\r\nexport function resolveComponent<P = any>(\r\n themeId: string,\r\n componentName: string\r\n): ComponentType<P> | null {\r\n // 1. 先尝试获取主题特定组件\r\n const themeComponent = registries[themeId]?.[componentName];\r\n if (themeComponent) {\r\n return themeComponent as ComponentType<P>;\r\n }\r\n\r\n // 2. Fallback 到 default 主题\r\n const defaultComponent = registries['default']?.[componentName];\r\n if (defaultComponent) {\r\n return defaultComponent as ComponentType<P>;\r\n }\r\n\r\n // 3. 未找到\r\n return null;\r\n}\r\n\r\n/**\r\n * 检查主题是否有特定组件的定制版本\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n */\r\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\r\n return !!registries[themeId]?.[componentName];\r\n}\r\n\r\n/**\r\n * 获取主题的所有已注册组件名称\r\n * @param themeId 主题 ID\r\n */\r\nexport function getRegisteredComponents(themeId: string): string[] {\r\n return Object.keys(registries[themeId] || {});\r\n}\r\n\r\n/**\r\n * 获取所有已注册的主题 ID\r\n */\r\nexport function getRegisteredThemes(): string[] {\r\n return Object.keys(registries);\r\n}\r\n\r\n/**\r\n * 获取主题配置\r\n * @param themeId 主题 ID\r\n */\r\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\r\n return themeConfigs[themeId] || null;\r\n}\r\n\r\n/**\r\n * 清除所有注册(主要用于测试)\r\n */\r\nexport function clearRegistry(): void {\r\n Object.keys(registries).forEach((key) => delete registries[key]);\r\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\r\n}\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\n// ==================== 类型定义 ====================\r\n\r\nexport interface QuickActionData {\r\n name: string;\r\n cardUrl: string;\r\n}\r\n\r\nexport interface ConceptDesignLandingPageProps {\r\n /** 是否已认证 */\r\n isAuthenticated?: boolean;\r\n /** 快速操作数据(可覆盖默认值) */\r\n quickActions?: QuickActionData[];\r\n /** 点击进入工作台 */\r\n onEnterWorkbench?: () => void;\r\n /** 点击登录 */\r\n onLogin?: () => void;\r\n /** 点击快速操作 */\r\n onQuickActionClick?: (name: string) => void;\r\n /** 自定义类名 */\r\n className?: string;\r\n /** 自定义样式 */\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// ==================== 默认配置 ====================\r\n\r\nexport const CONCEPT_CONFIG = {\r\n backgroundUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/bg.jpg',\r\n titleUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title.svg',\r\n titleTailUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title_tail.svg',\r\n othersUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/others.svg',\r\n entryActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/entry-actions',\r\n quickActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/quick-actions',\r\n};\r\n\r\nexport const CONCEPT_DEFAULT_QUICK_ACTIONS: QuickActionData[] = [\r\n {\r\n name: '设计工作台',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/设计工作台/card.svg`,\r\n },\r\n {\r\n name: '创新方法识别',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/创新方法识别/card.svg`,\r\n },\r\n {\r\n name: '灵感激发',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/灵感激发/card.svg`,\r\n },\r\n {\r\n name: '逻辑关系发现',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/逻辑关系发现/card.svg`,\r\n },\r\n];\r\n\r\n// ==================== 子组件 ====================\r\n\r\ninterface QuickActionCardProps {\r\n cardUrl: string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst QuickActionCard: React.FC<QuickActionCardProps> = ({ cardUrl, onClick }) => {\r\n return (\r\n <div\r\n onClick={onClick}\r\n style={{\r\n height: '350px',\r\n width: '260px',\r\n cursor: 'pointer',\r\n border: '1.5px solid #e0e0e0',\r\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\r\n transition: 'all 0.3s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 1)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.7)';\r\n }}\r\n >\r\n <img src={cardUrl} alt=\"\" style={{ width: '100%', height: '100%' }} />\r\n </div>\r\n );\r\n};\r\n\r\n// ==================== 主组件 ====================\r\n\r\nexport function ConceptDesignLandingPage({\r\n isAuthenticated = false,\r\n quickActions = CONCEPT_DEFAULT_QUICK_ACTIONS,\r\n onEnterWorkbench,\r\n onLogin,\r\n onQuickActionClick,\r\n className = '',\r\n style = {},\r\n}: ConceptDesignLandingPageProps) {\r\n const handleToWorkbench = () => {\r\n if (isAuthenticated) {\r\n onEnterWorkbench?.();\r\n } else {\r\n onLogin?.();\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n minHeight: '100vh',\r\n padding: '40px 80px',\r\n backgroundImage: `url('${CONCEPT_CONFIG.backgroundUrl}')`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'top center',\r\n backgroundSize: 'cover',\r\n position: 'relative',\r\n ...style,\r\n }}\r\n >\r\n {/* 标题区域 */}\r\n <div\r\n style={{\r\n marginTop: '100px',\r\n display: 'flex',\r\n height: '180px',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n <img src={CONCEPT_CONFIG.titleUrl} alt=\"\" style={{ height: '100%' }} />\r\n <img src={CONCEPT_CONFIG.titleTailUrl} alt=\"\" style={{ height: '100%' }} />\r\n </div>\r\n\r\n {/* 弹性占位 */}\r\n <div style={{ flex: 1 }} />\r\n\r\n {/* 入口操作区域 */}\r\n <div\r\n style={{\r\n marginBottom: '60px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <div style={{ display: 'flex', gap: '18px' }}>\r\n <div\r\n onClick={handleToWorkbench}\r\n style={{\r\n cursor: 'pointer',\r\n background: 'linear-gradient(to bottom, #444444, #000000)',\r\n padding: '24px 20px',\r\n transition: 'transform 0.3s',\r\n }}\r\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\r\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\r\n >\r\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\r\n <img\r\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E4%BB%8E%E8%AE%BE%E8%AE%A1%E6%A8%A1%E6%9D%BF%E5%87%BA%E5%8F%91.svg`}\r\n alt=\"从设计模板出发\"\r\n />\r\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/plus.svg`} alt=\"+\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n onClick={handleToWorkbench}\r\n style={{\r\n cursor: 'pointer',\r\n background: '#ffffff',\r\n padding: '24px 20px',\r\n transition: 'transform 0.3s',\r\n }}\r\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\r\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\r\n >\r\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\r\n <img\r\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E8%AE%BE%E8%AE%A1%E8%B5%84%E4%BA%A7.svg`}\r\n alt=\"设计资产\"\r\n />\r\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/right.svg`} alt=\"→\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 快速操作区域 */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\r\n <img src={CONCEPT_CONFIG.othersUrl} alt=\"\" style={{ width: '96px' }} />\r\n\r\n <div style={{ display: 'flex', gap: '22px' }}>\r\n {quickActions.map((action) => (\r\n <QuickActionCard\r\n key={action.name}\r\n cardUrl={action.cardUrl}\r\n onClick={() => onQuickActionClick?.(action.name)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 装饰线条 */}\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '390px',\r\n left: 0,\r\n height: '1.5px',\r\n width: '100%',\r\n background: '#ACACAC',\r\n boxShadow: '0 2px 4px rgba(0,0,0,0.1)',\r\n zIndex: 1,\r\n }}\r\n />\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: 0,\r\n left: '80px',\r\n height: '492px',\r\n width: '1.5px',\r\n background: '#ACACAC',\r\n boxShadow: '2px 0 4px rgba(0,0,0,0.1)',\r\n zIndex: 1,\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default ConceptDesignLandingPage;\r\n","import { registerTheme } from '../../registry';\r\nimport { ConceptDesignLandingPage, CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS } from './components/LandingPage';\r\n\r\n// 注册 Concept Design 主题\r\nregisterTheme(\r\n 'concept-design',\r\n {\r\n 'landing-page': ConceptDesignLandingPage,\r\n },\r\n {\r\n name: 'Concept Design Theme',\r\n description: 'Concept Design Theme Components for Monkeys UI',\r\n version: '1.0.0',\r\n }\r\n);\r\n\r\n// 导出组件\r\nexport { ConceptDesignLandingPage };\r\n\r\n// 导出类型\r\nexport type { ConceptDesignLandingPageProps, QuickActionData } from './components/LandingPage';\r\n\r\n// 导出配置\r\nexport { CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS };\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/concept/components/LandingPage.tsx","../../../src/themes/concept/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ComponentType } from 'react';\nimport type { ComponentRegistry, ThemeConfig } from '../types';\n\n// 存储所有主题的组件注册表\nconst registries: Record<string, ComponentRegistry> = {};\n\n// 存储主题配置\nconst themeConfigs: Record<string, ThemeConfig> = {};\n\n/**\n * 注册主题组件\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\n * @param components 组件注册表\n * @param config 主题配置(可选)\n */\nexport function registerTheme(\n themeId: string,\n components: ComponentRegistry,\n config?: Omit<ThemeConfig, 'id'>\n): void {\n registries[themeId] = { ...registries[themeId], ...components };\n\n if (config) {\n themeConfigs[themeId] = { id: themeId, ...config };\n }\n}\n\n/**\n * 注册单个组件到指定主题\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @param component 组件\n */\nexport function registerComponent(\n themeId: string,\n componentName: string,\n component: ComponentType<any>\n): void {\n if (!registries[themeId]) {\n registries[themeId] = {};\n }\n registries[themeId][componentName] = component;\n}\n\n/**\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @returns 组件或 null\n */\nexport function resolveComponent<P = any>(\n themeId: string,\n componentName: string\n): ComponentType<P> | null {\n // 1. 先尝试获取主题特定组件\n const themeComponent = registries[themeId]?.[componentName];\n if (themeComponent) {\n return themeComponent as ComponentType<P>;\n }\n\n // 2. Fallback 到 default 主题\n const defaultComponent = registries['default']?.[componentName];\n if (defaultComponent) {\n return defaultComponent as ComponentType<P>;\n }\n\n // 3. 未找到\n return null;\n}\n\n/**\n * 检查主题是否有特定组件的定制版本\n * @param themeId 主题 ID\n * @param componentName 组件名称\n */\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\n return !!registries[themeId]?.[componentName];\n}\n\n/**\n * 获取主题的所有已注册组件名称\n * @param themeId 主题 ID\n */\nexport function getRegisteredComponents(themeId: string): string[] {\n return Object.keys(registries[themeId] || {});\n}\n\n/**\n * 获取所有已注册的主题 ID\n */\nexport function getRegisteredThemes(): string[] {\n return Object.keys(registries);\n}\n\n/**\n * 获取主题配置\n * @param themeId 主题 ID\n */\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\n return themeConfigs[themeId] || null;\n}\n\n/**\n * 清除所有注册(主要用于测试)\n */\nexport function clearRegistry(): void {\n Object.keys(registries).forEach((key) => delete registries[key]);\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\n}\n","'use client';\n\nimport React from 'react';\n\n// ==================== 类型定义 ====================\n\nexport interface QuickActionData {\n name: string;\n cardUrl: string;\n}\n\nexport interface ConceptDesignLandingPageProps {\n /** 是否已认证 */\n isAuthenticated?: boolean;\n /** 快速操作数据(可覆盖默认值) */\n quickActions?: QuickActionData[];\n /** 点击进入工作台 */\n onEnterWorkbench?: () => void;\n /** 点击登录 */\n onLogin?: () => void;\n /** 点击快速操作 */\n onQuickActionClick?: (name: string) => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\n// ==================== 默认配置 ====================\n\nexport const CONCEPT_CONFIG = {\n backgroundUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/bg.jpg',\n titleUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title.svg',\n titleTailUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title_tail.svg',\n othersUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/others.svg',\n entryActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/entry-actions',\n quickActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/quick-actions',\n};\n\nexport const CONCEPT_DEFAULT_QUICK_ACTIONS: QuickActionData[] = [\n {\n name: '设计工作台',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/设计工作台/card.svg`,\n },\n {\n name: '创新方法识别',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/创新方法识别/card.svg`,\n },\n {\n name: '灵感激发',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/灵感激发/card.svg`,\n },\n {\n name: '逻辑关系发现',\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/逻辑关系发现/card.svg`,\n },\n];\n\n// ==================== 子组件 ====================\n\ninterface QuickActionCardProps {\n cardUrl: string;\n onClick?: () => void;\n}\n\nconst QuickActionCard: React.FC<QuickActionCardProps> = ({ cardUrl, onClick }) => {\n return (\n <div\n onClick={onClick}\n style={{\n height: '350px',\n width: '260px',\n cursor: 'pointer',\n border: '1.5px solid #e0e0e0',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n transition: 'all 0.3s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 1)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.7)';\n }}\n >\n <img src={cardUrl} alt=\"\" style={{ width: '100%', height: '100%' }} />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nexport function ConceptDesignLandingPage({\n isAuthenticated = false,\n quickActions = CONCEPT_DEFAULT_QUICK_ACTIONS,\n onEnterWorkbench,\n onLogin,\n onQuickActionClick,\n className = '',\n style = {},\n}: ConceptDesignLandingPageProps) {\n const handleToWorkbench = () => {\n if (isAuthenticated) {\n onEnterWorkbench?.();\n } else {\n onLogin?.();\n }\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '100vh',\n padding: '40px 80px',\n backgroundImage: `url('${CONCEPT_CONFIG.backgroundUrl}')`,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n backgroundSize: 'cover',\n position: 'relative',\n ...style,\n }}\n >\n {/* 标题区域 */}\n <div\n style={{\n marginTop: '100px',\n display: 'flex',\n height: '180px',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <img src={CONCEPT_CONFIG.titleUrl} alt=\"\" style={{ height: '100%' }} />\n <img src={CONCEPT_CONFIG.titleTailUrl} alt=\"\" style={{ height: '100%' }} />\n </div>\n\n {/* 弹性占位 */}\n <div style={{ flex: 1 }} />\n\n {/* 入口操作区域 */}\n <div\n style={{\n marginBottom: '60px',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n }}\n >\n <div style={{ display: 'flex', gap: '18px' }}>\n <div\n onClick={handleToWorkbench}\n style={{\n cursor: 'pointer',\n background: 'linear-gradient(to bottom, #444444, #000000)',\n padding: '24px 20px',\n transition: 'transform 0.3s',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\n >\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\n <img\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E4%BB%8E%E8%AE%BE%E8%AE%A1%E6%A8%A1%E6%9D%BF%E5%87%BA%E5%8F%91.svg`}\n alt=\"从设计模板出发\"\n />\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/plus.svg`} alt=\"+\" />\n </div>\n </div>\n\n <div\n onClick={handleToWorkbench}\n style={{\n cursor: 'pointer',\n background: '#ffffff',\n padding: '24px 20px',\n transition: 'transform 0.3s',\n }}\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\n >\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\n <img\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E8%AE%BE%E8%AE%A1%E8%B5%84%E4%BA%A7.svg`}\n alt=\"设计资产\"\n />\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/right.svg`} alt=\"→\" />\n </div>\n </div>\n </div>\n </div>\n\n {/* 快速操作区域 */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n <img src={CONCEPT_CONFIG.othersUrl} alt=\"\" style={{ width: '96px' }} />\n\n <div style={{ display: 'flex', gap: '22px' }}>\n {quickActions.map((action) => (\n <QuickActionCard\n key={action.name}\n cardUrl={action.cardUrl}\n onClick={() => onQuickActionClick?.(action.name)}\n />\n ))}\n </div>\n </div>\n\n {/* 装饰线条 */}\n <div\n style={{\n position: 'fixed',\n bottom: '390px',\n left: 0,\n height: '1.5px',\n width: '100%',\n background: '#ACACAC',\n boxShadow: '0 2px 4px rgba(0,0,0,0.1)',\n zIndex: 1,\n }}\n />\n <div\n style={{\n position: 'fixed',\n bottom: 0,\n left: '80px',\n height: '492px',\n width: '1.5px',\n background: '#ACACAC',\n boxShadow: '2px 0 4px rgba(0,0,0,0.1)',\n zIndex: 1,\n }}\n />\n </div>\n );\n}\n\nexport default ConceptDesignLandingPage;\n","import { registerTheme } from '../../registry';\nimport { ConceptDesignLandingPage, CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS } from './components/LandingPage';\n\n// 注册 Concept Design 主题\nregisterTheme(\n 'concept-design',\n {\n 'landing-page': ConceptDesignLandingPage,\n },\n {\n name: 'Concept Design Theme',\n description: 'Concept Design Theme Components for Monkeys UI',\n version: '1.0.0',\n }\n);\n\n// 导出组件\nexport { ConceptDesignLandingPage };\n\n// 导出类型\nexport type { ConceptDesignLandingPageProps, QuickActionData } from './components/LandingPage';\n\n// 导出配置\nexport { CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS };\n"]}
1
+ {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/concept/components/LandingPage.tsx","../../../src/themes/concept/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ComponentType } from 'react';\r\nimport type { ComponentRegistry, ThemeConfig } from '../types';\r\n\r\n// 存储所有主题的组件注册表\r\nconst registries: Record<string, ComponentRegistry> = {};\r\n\r\n// 存储主题配置\r\nconst themeConfigs: Record<string, ThemeConfig> = {};\r\n\r\n/**\r\n * 注册主题组件\r\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\r\n * @param components 组件注册表\r\n * @param config 主题配置(可选)\r\n */\r\nexport function registerTheme(\r\n themeId: string,\r\n components: ComponentRegistry,\r\n config?: Omit<ThemeConfig, 'id'>\r\n): void {\r\n registries[themeId] = { ...registries[themeId], ...components };\r\n\r\n if (config) {\r\n themeConfigs[themeId] = { id: themeId, ...config };\r\n }\r\n}\r\n\r\n/**\r\n * 注册单个组件到指定主题\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @param component 组件\r\n */\r\nexport function registerComponent(\r\n themeId: string,\r\n componentName: string,\r\n component: ComponentType<any>\r\n): void {\r\n if (!registries[themeId]) {\r\n registries[themeId] = {};\r\n }\r\n registries[themeId][componentName] = component;\r\n}\r\n\r\n/**\r\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @returns 组件或 null\r\n */\r\nexport function resolveComponent<P = any>(\r\n themeId: string,\r\n componentName: string\r\n): ComponentType<P> | null {\r\n // 1. 先尝试获取主题特定组件\r\n const themeComponent = registries[themeId]?.[componentName];\r\n if (themeComponent) {\r\n return themeComponent as ComponentType<P>;\r\n }\r\n\r\n // 2. Fallback 到 default 主题\r\n const defaultComponent = registries['default']?.[componentName];\r\n if (defaultComponent) {\r\n return defaultComponent as ComponentType<P>;\r\n }\r\n\r\n // 3. 未找到\r\n return null;\r\n}\r\n\r\n/**\r\n * 检查主题是否有特定组件的定制版本\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n */\r\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\r\n return !!registries[themeId]?.[componentName];\r\n}\r\n\r\n/**\r\n * 获取主题的所有已注册组件名称\r\n * @param themeId 主题 ID\r\n */\r\nexport function getRegisteredComponents(themeId: string): string[] {\r\n return Object.keys(registries[themeId] || {});\r\n}\r\n\r\n/**\r\n * 获取所有已注册的主题 ID\r\n */\r\nexport function getRegisteredThemes(): string[] {\r\n return Object.keys(registries);\r\n}\r\n\r\n/**\r\n * 获取主题配置\r\n * @param themeId 主题 ID\r\n */\r\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\r\n return themeConfigs[themeId] || null;\r\n}\r\n\r\n/**\r\n * 清除所有注册(主要用于测试)\r\n */\r\nexport function clearRegistry(): void {\r\n Object.keys(registries).forEach((key) => delete registries[key]);\r\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\r\n}\r\n","'use client';\r\n\r\nimport React from 'react';\r\n\r\n// ==================== 类型定义 ====================\r\n\r\nexport interface QuickActionData {\r\n name: string;\r\n cardUrl: string;\r\n}\r\n\r\nexport interface ConceptDesignLandingPageProps {\r\n /** 是否已认证 */\r\n isAuthenticated?: boolean;\r\n /** 快速操作数据(可覆盖默认值) */\r\n quickActions?: QuickActionData[];\r\n /** 点击进入工作台 */\r\n onEnterWorkbench?: () => void;\r\n /** 点击登录 */\r\n onLogin?: () => void;\r\n /** 点击快速操作 */\r\n onQuickActionClick?: (name: string) => void;\r\n /** 自定义类名 */\r\n className?: string;\r\n /** 自定义样式 */\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// ==================== 默认配置 ====================\r\n\r\nexport const CONCEPT_CONFIG = {\r\n backgroundUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/bg.jpg',\r\n titleUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title.svg',\r\n titleTailUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/title_tail.svg',\r\n othersUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/others.svg',\r\n entryActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/entry-actions',\r\n quickActionsBaseUrl: 'https://inf-monkeys.oss-cn-beijing.aliyuncs.com/monkeys-assets/concept-design/quick-actions',\r\n};\r\n\r\nexport const CONCEPT_DEFAULT_QUICK_ACTIONS: QuickActionData[] = [\r\n {\r\n name: '设计工作台',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/设计工作台/card.svg`,\r\n },\r\n {\r\n name: '创新方法识别',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/创新方法识别/card.svg`,\r\n },\r\n {\r\n name: '灵感激发',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/灵感激发/card.svg`,\r\n },\r\n {\r\n name: '逻辑关系发现',\r\n cardUrl: `${CONCEPT_CONFIG.quickActionsBaseUrl}/逻辑关系发现/card.svg`,\r\n },\r\n];\r\n\r\n// ==================== 子组件 ====================\r\n\r\ninterface QuickActionCardProps {\r\n cardUrl: string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst QuickActionCard: React.FC<QuickActionCardProps> = ({ cardUrl, onClick }) => {\r\n return (\r\n <div\r\n onClick={onClick}\r\n style={{\r\n height: '350px',\r\n width: '260px',\r\n cursor: 'pointer',\r\n border: '1.5px solid #e0e0e0',\r\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\r\n transition: 'all 0.3s',\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 1)';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.7)';\r\n }}\r\n >\r\n <img src={cardUrl} alt=\"\" style={{ width: '100%', height: '100%' }} />\r\n </div>\r\n );\r\n};\r\n\r\n// ==================== 主组件 ====================\r\n\r\nexport function ConceptDesignLandingPage({\r\n isAuthenticated = false,\r\n quickActions = CONCEPT_DEFAULT_QUICK_ACTIONS,\r\n onEnterWorkbench,\r\n onLogin,\r\n onQuickActionClick,\r\n className = '',\r\n style = {},\r\n}: ConceptDesignLandingPageProps) {\r\n const handleToWorkbench = () => {\r\n if (isAuthenticated) {\r\n onEnterWorkbench?.();\r\n } else {\r\n onLogin?.();\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n minHeight: '100vh',\r\n padding: '40px 80px',\r\n backgroundImage: `url('${CONCEPT_CONFIG.backgroundUrl}')`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'top center',\r\n backgroundSize: 'cover',\r\n position: 'relative',\r\n ...style,\r\n }}\r\n >\r\n {/* 标题区域 */}\r\n <div\r\n style={{\r\n marginTop: '100px',\r\n display: 'flex',\r\n height: '180px',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n <img src={CONCEPT_CONFIG.titleUrl} alt=\"\" style={{ height: '100%' }} />\r\n <img src={CONCEPT_CONFIG.titleTailUrl} alt=\"\" style={{ height: '100%' }} />\r\n </div>\r\n\r\n {/* 弹性占位 */}\r\n <div style={{ flex: 1 }} />\r\n\r\n {/* 入口操作区域 */}\r\n <div\r\n style={{\r\n marginBottom: '60px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <div style={{ display: 'flex', gap: '18px' }}>\r\n <div\r\n onClick={handleToWorkbench}\r\n style={{\r\n cursor: 'pointer',\r\n background: 'linear-gradient(to bottom, #444444, #000000)',\r\n padding: '24px 20px',\r\n transition: 'transform 0.3s',\r\n }}\r\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\r\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\r\n >\r\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\r\n <img\r\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E4%BB%8E%E8%AE%BE%E8%AE%A1%E6%A8%A1%E6%9D%BF%E5%87%BA%E5%8F%91.svg`}\r\n alt=\"从设计模板出发\"\r\n />\r\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/plus.svg`} alt=\"+\" />\r\n </div>\r\n </div>\r\n\r\n <div\r\n onClick={handleToWorkbench}\r\n style={{\r\n cursor: 'pointer',\r\n background: '#ffffff',\r\n padding: '24px 20px',\r\n transition: 'transform 0.3s',\r\n }}\r\n onMouseEnter={(e) => { e.currentTarget.style.transform = 'scale(1.02)'; }}\r\n onMouseLeave={(e) => { e.currentTarget.style.transform = 'scale(1)'; }}\r\n >\r\n <div style={{ display: 'flex', height: '26px', alignItems: 'center', justifyContent: 'center', gap: '10px' }}>\r\n <img\r\n src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/%E8%AE%BE%E8%AE%A1%E8%B5%84%E4%BA%A7.svg`}\r\n alt=\"设计资产\"\r\n />\r\n <img src={`${CONCEPT_CONFIG.entryActionsBaseUrl}/right.svg`} alt=\"→\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* 快速操作区域 */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\r\n <img src={CONCEPT_CONFIG.othersUrl} alt=\"\" style={{ width: '96px' }} />\r\n\r\n <div style={{ display: 'flex', gap: '22px' }}>\r\n {quickActions.map((action) => (\r\n <QuickActionCard\r\n key={action.name}\r\n cardUrl={action.cardUrl}\r\n onClick={() => onQuickActionClick?.(action.name)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* 装饰线条 */}\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: '390px',\r\n left: 0,\r\n height: '1.5px',\r\n width: '100%',\r\n background: '#ACACAC',\r\n boxShadow: '0 2px 4px rgba(0,0,0,0.1)',\r\n zIndex: 1,\r\n }}\r\n />\r\n <div\r\n style={{\r\n position: 'fixed',\r\n bottom: 0,\r\n left: '80px',\r\n height: '492px',\r\n width: '1.5px',\r\n background: '#ACACAC',\r\n boxShadow: '2px 0 4px rgba(0,0,0,0.1)',\r\n zIndex: 1,\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default ConceptDesignLandingPage;\r\n","import { registerTheme } from '../../registry';\r\nimport { ConceptDesignLandingPage, CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS } from './components/LandingPage';\r\n\r\n// 注册 Concept Design 主题\r\nregisterTheme(\r\n 'concept-design',\r\n {\r\n 'landing-page': ConceptDesignLandingPage,\r\n },\r\n {\r\n name: 'Concept Design Theme',\r\n description: 'Concept Design Theme Components for Monkeys UI',\r\n version: '1.0.0',\r\n }\r\n);\r\n\r\n// 导出组件\r\nexport { ConceptDesignLandingPage };\r\n\r\n// 导出类型\r\nexport type { ConceptDesignLandingPageProps, QuickActionData } from './components/LandingPage';\r\n\r\n// 导出配置\r\nexport { CONCEPT_CONFIG, CONCEPT_DEFAULT_QUICK_ACTIONS };\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/default/components/LandingPage.tsx","../../../src/themes/default/components/ToolboxPanel.tsx","../../../src/themes/default/index.ts"],"names":["jsx","jsxs"],"mappings":";;;;;AAIA,IAAM,aAAgD,EAAC;AAWhD,SAAS,aAAA,CACd,OAAA,EACA,UAAA,EACA,MAAA,EACM;AACN,EAAA,UAAA,CAAW,OAAO,IAAI,EAAE,GAAG,WAAW,OAAO,CAAA,EAAG,GAAG,UAAA,EAAW;AAE9D,EAAA,IAAI,MAAA,EAAQ;AACV,KAAwB,EAAE,EAAA,EAAI,OAAA,EAAS,GAAG,MAAA,GAAO;AAAA,EACnD;AACF;ACbO,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,KAAA,EAAO,UAAS,EAAqB;AACnF,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,SAAA,EAAW,OAAA;AAAA,QACX,GAAG;AAAA,OACL;AAAA,MAEC,QAAA,EAAA,QAAA,oBAAYA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,oBAAA,EAAkB;AAAA;AAAA,GACvC;AAEJ;ACTO,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT;AACF,CAAA,EAAsB;AACpB,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EACzB,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,QAAG,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACXA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAM,EACvC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,MAAM,YAAA,GAAe,IAAA,CAAK,EAAE,CAAA;AAAA,QACrC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,SAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAQ,mBAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACV;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,UACnB,IAAA,CAAK,WAAA,oBAAeA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,GAAA,EAAI,EAAI,eAAK,WAAA,EAAY;AAAA;AAAA,OAAA;AAAA,MAXjF,IAAA,CAAK;AAAA,KAab,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;;;AC1CA,aAAA;AAAA,EACE,SAAA;AAAA,EACA;AAAA,IACE,cAAA,EAAgB,kBAAA;AAAA,IAChB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB,CAAA","file":"index.js","sourcesContent":["import type { ComponentType } from 'react';\nimport type { ComponentRegistry, ThemeConfig } from '../types';\n\n// 存储所有主题的组件注册表\nconst registries: Record<string, ComponentRegistry> = {};\n\n// 存储主题配置\nconst themeConfigs: Record<string, ThemeConfig> = {};\n\n/**\n * 注册主题组件\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\n * @param components 组件注册表\n * @param config 主题配置(可选)\n */\nexport function registerTheme(\n themeId: string,\n components: ComponentRegistry,\n config?: Omit<ThemeConfig, 'id'>\n): void {\n registries[themeId] = { ...registries[themeId], ...components };\n\n if (config) {\n themeConfigs[themeId] = { id: themeId, ...config };\n }\n}\n\n/**\n * 注册单个组件到指定主题\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @param component 组件\n */\nexport function registerComponent(\n themeId: string,\n componentName: string,\n component: ComponentType<any>\n): void {\n if (!registries[themeId]) {\n registries[themeId] = {};\n }\n registries[themeId][componentName] = component;\n}\n\n/**\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\n * @param themeId 主题 ID\n * @param componentName 组件名称\n * @returns 组件或 null\n */\nexport function resolveComponent<P = any>(\n themeId: string,\n componentName: string\n): ComponentType<P> | null {\n // 1. 先尝试获取主题特定组件\n const themeComponent = registries[themeId]?.[componentName];\n if (themeComponent) {\n return themeComponent as ComponentType<P>;\n }\n\n // 2. Fallback 到 default 主题\n const defaultComponent = registries['default']?.[componentName];\n if (defaultComponent) {\n return defaultComponent as ComponentType<P>;\n }\n\n // 3. 未找到\n return null;\n}\n\n/**\n * 检查主题是否有特定组件的定制版本\n * @param themeId 主题 ID\n * @param componentName 组件名称\n */\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\n return !!registries[themeId]?.[componentName];\n}\n\n/**\n * 获取主题的所有已注册组件名称\n * @param themeId 主题 ID\n */\nexport function getRegisteredComponents(themeId: string): string[] {\n return Object.keys(registries[themeId] || {});\n}\n\n/**\n * 获取所有已注册的主题 ID\n */\nexport function getRegisteredThemes(): string[] {\n return Object.keys(registries);\n}\n\n/**\n * 获取主题配置\n * @param themeId 主题 ID\n */\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\n return themeConfigs[themeId] || null;\n}\n\n/**\n * 清除所有注册(主要用于测试)\n */\nexport function clearRegistry(): void {\n Object.keys(registries).forEach((key) => delete registries[key]);\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\n}\n","import React from 'react';\n\nexport interface LandingPageProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n onNavigate?: (path: string) => void;\n}\n\n/**\n * Default Landing Page - 默认主题的 Landing Page\n */\nexport function DefaultLandingPage({ className, style, children }: LandingPageProps) {\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '100vh',\n ...style,\n }}\n >\n {children || <span>Welcome to Monkeys</span>}\n </div>\n );\n}\n\nexport default DefaultLandingPage;\n","import React from 'react';\n\nexport interface ToolDefinition {\n id: string;\n title: string;\n description?: string;\n}\n\nexport interface ToolboxPanelProps {\n className?: string;\n style?: React.CSSProperties;\n tools?: ToolDefinition[];\n onToolSelect?: (toolId: string) => void;\n}\n\n/**\n * Default Toolbox Panel - 默认主题的工具箱面板\n */\nexport function DefaultToolboxPanel({\n className,\n style,\n tools = [],\n onToolSelect,\n}: ToolboxPanelProps) {\n return (\n <div className={className} style={style}>\n <h3>Toolbox</h3>\n <div style={{ display: 'grid', gap: '8px' }}>\n {tools.map((tool) => (\n <button\n key={tool.id}\n onClick={() => onToolSelect?.(tool.id)}\n style={{\n padding: '12px',\n textAlign: 'left',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n cursor: 'pointer',\n }}\n >\n <strong>{tool.title}</strong>\n {tool.description && <p style={{ margin: '4px 0 0', opacity: 0.7 }}>{tool.description}</p>}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\nexport default DefaultToolboxPanel;\n","import { registerTheme } from '../../registry';\nimport { DefaultLandingPage } from './components/LandingPage';\nimport { DefaultToolboxPanel } from './components/ToolboxPanel';\n\n// 注册 default 主题\nregisterTheme(\n 'default',\n {\n 'landing-page': DefaultLandingPage,\n 'toolbox-panel': DefaultToolboxPanel,\n },\n {\n name: 'Default Theme',\n description: 'Monkeys default theme with basic components',\n }\n);\n\n// 导出组件供直接使用\nexport { DefaultLandingPage, DefaultToolboxPanel };\n\n// 导出类型\nexport type { LandingPageProps as DefaultLandingPageProps } from './components/LandingPage';\n"]}
1
+ {"version":3,"sources":["../../../src/registry/index.ts","../../../src/themes/default/components/LandingPage.tsx","../../../src/themes/default/components/ToolboxPanel.tsx","../../../src/themes/default/index.ts"],"names":["jsx","jsxs"],"mappings":";;;;;AAIA,IAAM,aAAgD,EAAC;AAWhD,SAAS,aAAA,CACd,OAAA,EACA,UAAA,EACA,MAAA,EACM;AACN,EAAA,UAAA,CAAW,OAAO,IAAI,EAAE,GAAG,WAAW,OAAO,CAAA,EAAG,GAAG,UAAA,EAAW;AAE9D,EAAA,IAAI,MAAA,EAAQ;AACV,KAAwB,EAAE,EAAA,EAAI,OAAA,EAAS,GAAG,MAAA,GAAO;AAAA,EACnD;AACF;ACbO,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,KAAA,EAAO,UAAS,EAAqB;AACnF,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,SAAA,EAAW,OAAA;AAAA,QACX,GAAG;AAAA,OACL;AAAA,MAEC,QAAA,EAAA,QAAA,oBAAYA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,oBAAA,EAAkB;AAAA;AAAA,GACvC;AAEJ;ACTO,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAQ,EAAC;AAAA,EACT;AACF,CAAA,EAAsB;AACpB,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EACzB,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,QAAG,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACXA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAM,EACvC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,MAAM,YAAA,GAAe,IAAA,CAAK,EAAE,CAAA;AAAA,QACrC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,SAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAQ,mBAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACV;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,UACnB,IAAA,CAAK,WAAA,oBAAeA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,GAAA,EAAI,EAAI,eAAK,WAAA,EAAY;AAAA;AAAA,OAAA;AAAA,MAXjF,IAAA,CAAK;AAAA,KAab,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;;;AC1CA,aAAA;AAAA,EACE,SAAA;AAAA,EACA;AAAA,IACE,cAAA,EAAgB,kBAAA;AAAA,IAChB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB,CAAA","file":"index.js","sourcesContent":["import type { ComponentType } from 'react';\r\nimport type { ComponentRegistry, ThemeConfig } from '../types';\r\n\r\n// 存储所有主题的组件注册表\r\nconst registries: Record<string, ComponentRegistry> = {};\r\n\r\n// 存储主题配置\r\nconst themeConfigs: Record<string, ThemeConfig> = {};\r\n\r\n/**\r\n * 注册主题组件\r\n * @param themeId 主题 ID (如 'bsd', 'artist', 'concept')\r\n * @param components 组件注册表\r\n * @param config 主题配置(可选)\r\n */\r\nexport function registerTheme(\r\n themeId: string,\r\n components: ComponentRegistry,\r\n config?: Omit<ThemeConfig, 'id'>\r\n): void {\r\n registries[themeId] = { ...registries[themeId], ...components };\r\n\r\n if (config) {\r\n themeConfigs[themeId] = { id: themeId, ...config };\r\n }\r\n}\r\n\r\n/**\r\n * 注册单个组件到指定主题\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @param component 组件\r\n */\r\nexport function registerComponent(\r\n themeId: string,\r\n componentName: string,\r\n component: ComponentType<any>\r\n): void {\r\n if (!registries[themeId]) {\r\n registries[themeId] = {};\r\n }\r\n registries[themeId][componentName] = component;\r\n}\r\n\r\n/**\r\n * 解析组件 - 优先使用主题特定组件,fallback 到 default\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n * @returns 组件或 null\r\n */\r\nexport function resolveComponent<P = any>(\r\n themeId: string,\r\n componentName: string\r\n): ComponentType<P> | null {\r\n // 1. 先尝试获取主题特定组件\r\n const themeComponent = registries[themeId]?.[componentName];\r\n if (themeComponent) {\r\n return themeComponent as ComponentType<P>;\r\n }\r\n\r\n // 2. Fallback 到 default 主题\r\n const defaultComponent = registries['default']?.[componentName];\r\n if (defaultComponent) {\r\n return defaultComponent as ComponentType<P>;\r\n }\r\n\r\n // 3. 未找到\r\n return null;\r\n}\r\n\r\n/**\r\n * 检查主题是否有特定组件的定制版本\r\n * @param themeId 主题 ID\r\n * @param componentName 组件名称\r\n */\r\nexport function hasCustomComponent(themeId: string, componentName: string): boolean {\r\n return !!registries[themeId]?.[componentName];\r\n}\r\n\r\n/**\r\n * 获取主题的所有已注册组件名称\r\n * @param themeId 主题 ID\r\n */\r\nexport function getRegisteredComponents(themeId: string): string[] {\r\n return Object.keys(registries[themeId] || {});\r\n}\r\n\r\n/**\r\n * 获取所有已注册的主题 ID\r\n */\r\nexport function getRegisteredThemes(): string[] {\r\n return Object.keys(registries);\r\n}\r\n\r\n/**\r\n * 获取主题配置\r\n * @param themeId 主题 ID\r\n */\r\nexport function getThemeConfig(themeId: string): ThemeConfig | null {\r\n return themeConfigs[themeId] || null;\r\n}\r\n\r\n/**\r\n * 清除所有注册(主要用于测试)\r\n */\r\nexport function clearRegistry(): void {\r\n Object.keys(registries).forEach((key) => delete registries[key]);\r\n Object.keys(themeConfigs).forEach((key) => delete themeConfigs[key]);\r\n}\r\n","import React from 'react';\r\n\r\nexport interface LandingPageProps {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n children?: React.ReactNode;\r\n onNavigate?: (path: string) => void;\r\n}\r\n\r\n/**\r\n * Default Landing Page - 默认主题的 Landing Page\r\n */\r\nexport function DefaultLandingPage({ className, style, children }: LandingPageProps) {\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: '100vh',\r\n ...style,\r\n }}\r\n >\r\n {children || <span>Welcome to Monkeys</span>}\r\n </div>\r\n );\r\n}\r\n\r\nexport default DefaultLandingPage;\r\n","import React from 'react';\r\n\r\nexport interface ToolDefinition {\r\n id: string;\r\n title: string;\r\n description?: string;\r\n}\r\n\r\nexport interface ToolboxPanelProps {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n tools?: ToolDefinition[];\r\n onToolSelect?: (toolId: string) => void;\r\n}\r\n\r\n/**\r\n * Default Toolbox Panel - 默认主题的工具箱面板\r\n */\r\nexport function DefaultToolboxPanel({\r\n className,\r\n style,\r\n tools = [],\r\n onToolSelect,\r\n}: ToolboxPanelProps) {\r\n return (\r\n <div className={className} style={style}>\r\n <h3>Toolbox</h3>\r\n <div style={{ display: 'grid', gap: '8px' }}>\r\n {tools.map((tool) => (\r\n <button\r\n key={tool.id}\r\n onClick={() => onToolSelect?.(tool.id)}\r\n style={{\r\n padding: '12px',\r\n textAlign: 'left',\r\n border: '1px solid #e0e0e0',\r\n borderRadius: '8px',\r\n cursor: 'pointer',\r\n }}\r\n >\r\n <strong>{tool.title}</strong>\r\n {tool.description && <p style={{ margin: '4px 0 0', opacity: 0.7 }}>{tool.description}</p>}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default DefaultToolboxPanel;\r\n","import { registerTheme } from '../../registry';\r\nimport { DefaultLandingPage } from './components/LandingPage';\r\nimport { DefaultToolboxPanel } from './components/ToolboxPanel';\r\n\r\n// 注册 default 主题\r\nregisterTheme(\r\n 'default',\r\n {\r\n 'landing-page': DefaultLandingPage,\r\n 'toolbox-panel': DefaultToolboxPanel,\r\n },\r\n {\r\n name: 'Default Theme',\r\n description: 'Monkeys default theme with basic components',\r\n }\r\n);\r\n\r\n// 导出组件供直接使用\r\nexport { DefaultLandingPage, DefaultToolboxPanel };\r\n\r\n// 导出类型\r\nexport type { LandingPageProps as DefaultLandingPageProps } from './components/LandingPage';\r\n"]}