ai-chatbot/docs/video-canvas-control-scan-2026-09-17.json

823 lines
48 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"file": "components/canvas/LiblibVideoCanvasReplica.tsx",
"root": "LiblibVideoCanvasReplica",
"method": "Conservative identifier reachability; candidates need manual review, not runtime coverage.",
"reachableDeclarations": [
"LiblibVideoCanvasReplica",
"createConfiguredToolCatalog",
"functionRequiresMedia",
"getConfiguredToolType",
"getCanvasModelRef",
"resolveSiteName",
"DEFAULT_SITE_NAME",
"DEFAULT_VIEWPORT",
"ASSET_MANAGER_DEFAULT_WIDTH",
"VIDEO_ROLE_AGREEMENT_STORAGE_KEY",
"isVideoMediaNode",
"getDraftString",
"getNodeMediaUrl",
"normalizeCanvasTitle",
"restoreNodes",
"normalizeRestoredNode",
"isCharacterThreeViewNode",
"getNodeFunctionKey",
"getNodeParams",
"CHARACTER_THREE_VIEW_FUNCTION_KEY",
"isCharacterThreeViewOption",
"getOfficialImagePresetFunctionKey",
"STORY_BEAT_GRID_FUNCTION_KEY",
"CONTINUOUS_STORYBOARD_GRID_FUNCTION_KEY",
"CINEMATIC_LIGHTING_CORRECTION_FUNCTION_KEY",
"FRAME_PREDICTION_PLUS_3S_FUNCTION_KEY",
"FRAME_PREDICTION_MINUS_5S_FUNCTION_KEY",
"MULTI_VIEW_NINE_GRID_FUNCTION_KEY",
"getPresetMode",
"normalizeTextResourceNode",
"extractTrailingNumber",
"OFFICIAL_TEXT_RESOURCE_WIDTH",
"OFFICIAL_TEXT_RESOURCE_HEIGHT",
"OFFICIAL_NINE_GRID_WIDTH",
"OFFICIAL_NINE_GRID_HEIGHT",
"getDefaultFunctionPrompt",
"resolveOfficialImagePresetFunctionKey",
"getPresetGridLayout",
"getDraftNumber",
"getTargetModuleKind",
"inferLegacyTargetModuleKind",
"normalizeTargetModuleNode",
"createTargetModuleNode",
"makeId",
"shouldResetTargetModuleTitle",
"restoreEdges",
"clampCanvasZoom",
"CANVAS_MAX_ZOOM",
"CANVAS_MIN_ZOOM",
"serializeNodes",
"serializeEdges",
"createMediaResourceNode",
"DIRECTOR_CAMERA_SNAPSHOT_NODE_OFFSET_X",
"createToolboxTemplateGroupNode",
"TOOLBOX_TEMPLATE_GROUP_FRAME",
"FIRST_FRAME_IMAGE_URL",
"createTextResourceNode",
"SCRIPT_VIDEO_REFERENCE_URL",
"TOOLBOX_TEMPLATE_VIEWPORT",
"createToolNode",
"getToolType",
"TOOL_TYPE_META",
"getToolLabel",
"getToolFunctionKey",
"getConfiguredFunction",
"getToolRoute",
"resolveNodeReferenceImages",
"getNodeReferenceMediaUrl",
"getNodeGridSplitState",
"normalizeGridSplitState",
"createEqualGridRects",
"normalizeGridRect",
"getNodeGridSplitSourceUrl",
"getNodeSourceMediaUrl",
"createGridSplitReferenceAsset",
"cropRectToBlobUrlSource",
"loadCanvasImage",
"requiresMedia",
"getToolRules",
"composeFunctionPrompt",
"getFunctionModel",
"normalizeModelRef",
"normalizeVideoGenerationMode",
"selectVideoReferenceImages",
"isWideImageGenerationFunction",
"composeMultiViewNineGridPrompt",
"composeConfiguredImagePresetPrompt",
"isOfficialImagePresetFunctionKey",
"isPresetGridFunction",
"getImageGenerationBillingFeature",
"getFirstGeneratedImageUrl",
"getGridCellVisual",
"NINE_GRID_CELL_VISUALS",
"getToolReferenceModuleTemplates",
"getToolReferenceMediaSpec",
"AUDIO_SOURCE_URL",
"CHARACTER_IMAGE_URL",
"VIDEO_FIRST_FRAME_SOURCE_URL",
"VIDEO_FIRST_LAST_FIRST_URL",
"VIDEO_FIRST_LAST_LAST_URL",
"AUDIO_REFERENCE_IMAGE_URL",
"HD_IMAGE_SOURCE_URL",
"OFFICIAL_NODE_GAP",
"createUploadedMediaNode",
"MATERIAL_STYLE_SCREEN_ANCHOR",
"createMaterialStyleNode",
"MATERIAL_STYLE_NODE_SIZE",
"STYLE_MARKET_THUMBNAIL_URL",
"isVideoEffectMaterialNode",
"createMaterialEffectNode",
"isVideoRoleMaterialNode",
"createMaterialRoleNode",
"ROLE_LIBRARY_NODE_LAYOUT",
"ROLE_LIBRARY_APPLY_VIEWPORT",
"TEXT_TO_VIDEO_PROMPT",
"TEXT_TO_VIDEO_GENERATE_PROMPT",
"IMAGE_TO_PROMPT_PROMPT",
"TEXT_TO_MUSIC_PROMPT",
"AUDIO_TO_VIDEO_PROMPT",
"VIDEO_FIRST_FRAME_PROMPT",
"VIDEO_FIRST_LAST_PROMPT",
"STORY_SCRIPT_TEXT",
"SCRIPT_CHARACTER_PROMPT",
"SCRIPT_CHARACTER_ONE_URL",
"SCRIPT_CHARACTER_TWO_URL",
"getNodeLocalEditRegions",
"LOCAL_EDIT_MAX_REGIONS",
"normalizeLocalEditRegion",
"LOCAL_EDIT_COLORS",
"normalizeGridOption",
"clearGridSplitDraftValues",
"createNineGridCompositeNode",
"withReindexedLocalEditRegions",
"LOCAL_EDIT_MAX_POLL_ATTEMPTS",
"wait",
"ensureRemoteCanvasImageUrl",
"getGridSplitCellLabel",
"normalizeVideoDurationValue",
"getVideoCanvasMagicMarks",
"normalizeVideoCanvasMagicMarks",
"getVideoFunctionKeyForMode",
"normalizeVideoRatioValue",
"normalizeVideoResolutionValue",
"formatVideoRatioLabel",
"formatVideoResolutionLabel",
"formatVideoDurationLabel",
"STORY_SCRIPT_PROMPT",
"getStoryScriptRows",
"normalizeStoryScriptRow",
"formatStoryShot",
"buildStoryVideoPrompt",
"normalizeVideoClipRange",
"normalizeVideoHdResolutionOption",
"createVideoHdUpscaleNode",
"VIDEO_CROP_RECT",
"createVideoCropResultNode",
"getVideoNodePreviewUrl",
"getVideoNodeDurationSeconds",
"VIDEO_CROP_OUTPUT_LABEL",
"createVideoStoryAnalysisNode",
"buildVideoAnalysisRows",
"formatVideoStoryNumber",
"cleanVideoStoryText",
"formatVideoStoryShot",
"STARTER_CARDS",
"createStarterWorkflow",
"createPresetScriptNode",
"makePresetEdges",
"createPresetMediaNode",
"CHARACTER_THREE_VIEW_URL",
"PRESET_WORKFLOW_CENTER",
"createInputNode",
"createSimpleNode",
"capturedTools",
"arrangeNodesForPreview",
"clampAssetManagerWidth",
"ASSET_MANAGER_MAX_WIDTH",
"ASSET_MANAGER_MIN_WIDTH",
"isOfficialImageControlNode",
"getPresetControlMode",
"ReferenceSelectionToolbar",
"VideoCanvasMarkSelectionToolbar",
"CancelGenerationConfirmDialog",
"CANVAS_EXTENT",
"CloneEdges",
"getCanvasEdgePath",
"getCanvasEdgeMidpoint",
"EdgeFlowSegments",
"sampleEdgePath",
"parseSimpleEdgePath",
"getPointAtSampledLength",
"CloneCanvasNode",
"ToolboxTemplateGroupCanvasNode",
"MaterialStyleCanvasNode",
"preventNativeImageDrag",
"CanvasNodeShell",
"TargetModuleCanvasNode",
"TargetModuleHeroGraphic",
"ModuleActionIcon",
"PureTextResourceCanvasNode",
"VideoStoryCanvasNode",
"getVideoStoryRows",
"normalizeVideoStoryRow",
"VideoAnalysisGlyph",
"VideoSubtitleErasePendingCanvasNode",
"VideoHdUpscaleCanvasNode",
"PresetMediaCanvasNode",
"normalizeGridCropTile",
"normalizeGridCellVisual",
"OfficialAudioCard",
"formatAudioTimestamp",
"GenerationPendingPreview",
"OfficialVideoResultCard",
"formatVideoTimestamp",
"NineGridCompositePreview",
"GridCellImage",
"CroppedGridTileImage",
"LocalEditOverlay",
"getContainedImageRect",
"GridSplitSelectionOverlay",
"PresetScriptCanvasNode",
"GridTilesGlyph",
"VideoCanvasMarkSourceOverlay",
"PointerBadge",
"CanvasCommandPalette",
"ADD_NODE_PRIMARY_MODULES",
"ADD_NODE_MODULES",
"CanvasAddMenuButton",
"CanvasAddBadge",
"CanvasAddSubmenu",
"SCRIPT_SUBMENU_OPTIONS",
"ASSET_LIBRARY_SUBMENU_OPTIONS",
"NodeContextMenu",
"ConnectionAddMenu",
"CONNECTION_ADD_MODULES",
"PresetWorkflowControls",
"GridSplitActionToolbar",
"OFFICIAL_IMAGE_TOOLBAR_SCALE",
"WorkflowGlyph",
"SceneToolIcon",
"CharacterPresetToolbar",
"SceneTool",
"ImageToolbarActionGlyph",
"SceneToolbarPopover",
"OFFICIAL_DROPDOWN_SCALE",
"NineGridPresetGlyph",
"ImageToolMenuGlyph",
"CustomGridPicker",
"PromptComposer",
"resolveVideoCanvasBillingDisplay",
"getVideoCanvasFallbackBillingDisplay",
"getCanvasModelOptionByRef",
"PROMPT_COMPOSER_BASE_HEIGHT",
"OFFICIAL_COMPOSER_SCALE",
"PROMPT_COMPOSER_BASE_WIDTH",
"PromptActionButton",
"ComposerReferencePopover",
"ComposerSlashPopover",
"SLASH_IMAGE_ITEMS",
"ComposerFocusPopover",
"ComposerPopover",
"filterCanvasModelsByKind",
"ComposerControl",
"getCanvasModelDisplayName",
"getFunctionModelValue",
"PresetFloatingToolbar",
"PresetComposerPanel",
"PRESET_COMPOSER_BASE_HEIGHT",
"PRESET_MEDIA_TOOLBAR_ITEMS",
"AudioToVideoComposerPanel",
"VideoModelPopover",
"getVideoComposerModelLabel",
"VideoParameterEditor",
"VideoParameterRow",
"VideoRatioOptions",
"VideoSegmentedOptions",
"VIDEO_AUDIO_OPTIONS",
"VIDEO_COUNT_OPTIONS",
"VideoMotionPresetPopover",
"VideoEffectPresetPopover",
"VIDEO_EFFECT_PRESETS",
"VideoRoleConsentPopover",
"formatVideoParameterSummary",
"OfficialVideoMediaToolbar",
"OfficialVideoToolbarButton",
"VideoHdSettingsPopover",
"VideoToolbarMenuPopover",
"VideoToolbarMenuItem",
"VideoCropSelectionOverlay",
"getVideoCardOverlayRect",
"clampUnit",
"VideoInlineActionBar",
"LightningGlyph",
"getVideoCropSelectionLabel",
"VideoSubtitleEraseRegionOverlay",
"normalizeSubtitleEraseRegion",
"VideoSubtitleEraseRegionActionBar",
"VideoRegionBarIconButton",
"VideoClipEditorBar",
"VIDEO_CLIP_FRAME_COUNT",
"formatClipDurationLabel",
"TextTargetModuleComposer",
"VideoTargetModuleComposer",
"inferVideoComposerDefaultTab",
"normalizeComposerBoolean",
"resolveVideoComposerMode",
"getVideoModeIcon",
"getVideoComposerModelShortLabel",
"VideoModePopover",
"VideoMotionLibraryPanel",
"VIDEO_MOTION_FAVORITES_STORAGE_KEY",
"VIDEO_MOTION_CUSTOM_STORAGE_KEY",
"AudioTargetModuleComposer",
"StoryScriptWorkflowDialog",
"getStoryWorkflowAssetGroups",
"downloadStoryScriptRows",
"sanitizeDownloadFilename",
"TopBar",
"StylizedBrandLogo",
"formatCreditValue",
"LeftToolbar",
"TOOLBAR_ITEMS",
"getToolbarButtonLabel",
"AssetGlyph",
"ZoomDock",
"MagnetGlyph",
"ZoomDockButton",
"ArrangeCanvasGlyph",
"CanvasOverviewPopover",
"EdgeVisibilityGlyph",
"CANVAS_ZOOM_STEP",
"ArrangeCanvasConfirm",
"AddModulePanel",
"WorkflowPanel",
"TOOLBOX_TEMPLATE_PRESETS",
"capturedWorkflows",
"InspectorPanel",
"getToolProperties",
"getInspectorTitle",
"getToolModes",
"PropertyField",
"getPropertyLabel",
"getOptions",
"getDefaultValue",
"getOptionValue",
"ToggleRow",
"getOptionLabel",
"AssetLibraryLauncherPanel",
"AssetLibraryLauncherRow",
"AssetMarketPanel",
"EFFECT_MARKET_CARDS",
"STYLE_MARKET_CARDS",
"EFFECT_MARKET_SEARCH_CARDS",
"STYLE_MARKET_SEARCH_CARDS",
"STYLE_MARKET_CATEGORIES",
"EFFECT_MARKET_THUMBNAIL_URL",
"HistoryAssetsPanel",
"HISTORY_ASSET_ZOOM_LEVELS",
"HistoryBatchActionButton",
"HistorySelectionCheckbox",
"HistoryAssetPickerModal",
"WatermarkRulesModal",
"CanvasAssetManagerPanel",
"ASSET_MANAGER_FILTERS",
"ShortcutPanel",
"TutorialHelpPanel",
"VIDEO_CANVAS_TUTORIAL_URL",
"RoleLibraryPanel",
"ROLE_LIBRARY_FILTER_GROUPS",
"VideoRoleLibraryPanel",
"VideoRoleAgreementModal",
"LibModal",
"SupportPanel",
"SkillsAccessModal",
"SharePopover",
"getSiteShowcaseName",
"StoreGlyph",
"PublishModal",
"PUBLISH_MODAL_BG_URL",
"UploadBox",
"MemberStoreModal",
"CreditPackGrid",
"EmptyState",
"formatCurrencyAmount",
"VipPlanGrid",
"BillingHistoryGrid",
"formatBillingDate",
"getBillingStatusClass",
"getBillingStatusLabel",
"NotificationsPopover",
"AccountPopover",
"TARGET_AVATAR",
"AccountMetricCard",
"AccountMenuButton",
"LogoutGlyph",
"ImageNodePreview",
"DirectorStudioDialog",
"DirectorTutorialFollowBar",
"MultiAngleEditorDialog",
"AngleSlider"
],
"unreachableFunctions": [
"createWorkflowNode",
"createHistoryDemoAssetNode",
"createVideoSubtitleEraseNode",
"buildStorySceneText",
"getPersistedVideoAnalysisState",
"isCanvasImageModel",
"isCanvasVideoModel",
"buildGridRectsFromLines",
"getLineScore",
"findGridDividerLines",
"detectGridSplitFromImage",
"ArrowGlyph",
"MusicStarterIcon",
"DiamondGlyph",
"VideoMediaToolbar",
"VideoToolbarActionButton",
"VideoToolbarSubmenu",
"VideoAnalysisFloatingPanel",
"StoryScriptScene",
"FirstFrameVideoScene",
"AudioToVideoScene",
"SceneConnector",
"StoryTextPanel",
"ScriptGeneratorPanel",
"PresetMediaPanel",
"VideoResultPanel",
"AudioResourcePanel",
"CharacterThreeViewScene",
"CharacterImagePanel",
"VideoAdvancedSwitchRow",
"DirectorRatioPreview",
"getNextDirectorCameraName",
"formatDirectorCameraShotTitle",
"getNextDirectorRoleName",
"DirectorConsole3DDialog",
"DirectorPanoramaHistoryDialog",
"DirectorPanoramaAiDialog",
"DirectorRoleInspectorPanel",
"DirectorAiImportDialog",
"DirectorAxisInputs",
"AssetLibraryPanel"
],
"candidates": [
{
"owner": "LiblibVideoCanvasReplica",
"line": 10996,
"tag": "PresetWorkflowControls",
"handler": "",
"snippet": "(\n <PresetWorkflowControls\n anchor={selectedPresetAnchor}\n membershipSummary={membershipSummary}\n mode={selectedPresetMode ?? \"character-three-view\"}\n functionConfig={videoCanvasFunctionConfig}\n modelOptions={canvasModelOptions}\n nodes={nodes}\n onClearGridSplitSelection={() => clearNodeGridSplitSelection(selectedPresetControlNode.id)}\n onGridSplitCreateNodes={() => createGridSplitImageNodes(selectedPresetControlNode.id)}\n onGridSplitUpscale={(scaleFactor) => upscaleSelectedGridSplit(selectedPresetControlNode.id, scaleFactor)}\n onComposerSubmit={(p"
},
{
"owner": "LiblibVideoCanvasReplica",
"line": 11038,
"tag": "VideoArchiveButton",
"handler": "",
"snippet": "return <VideoArchiveButton key={nodeId} automaticBusy={meta.storageStatus === \"archiving\"} url={sourceUrl} onSaved={url => setNodes(current => current.map(node =>\n node.id === nodeId && getNodeMediaUrl(node) === sourceUrl ? { ...node, draftValues: {\n ...node.draftValues, mediaUrl: url, url: [url], videoMeta: { ...meta, storageStatus: \"archived\", permanentVideoUrl: url },\n } } : node))} />;"
},
{
"owner": "ZoomDock",
"line": 12045,
"tag": "button",
"handler": "",
"snippet": "<button className=\"flex h-7 w-10 items-center justify-center rounded-lg bg-white/10 transition-colors hover:bg-white/14\" type=\"button\">\n <MagnetGlyph />\n </button>"
},
{
"owner": "VideoSubtitleEraseRegionActionBar",
"line": 13371,
"tag": "button",
"handler": "",
"snippet": "<button\n aria-label=\"框选区域\"\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-[8px] bg-white/10 text-white transition\"\n type=\"button\"\n >\n <BoxSelect className=\"h-4 w-4\" />\n </button>"
},
{
"owner": "VideoClipEditorBar",
"line": 13808,
"tag": "button",
"handler": "onClick={() => toast.info(\"视频音轨编辑后端待接入。\")}",
"snippet": "<button\n className=\"flex h-10 w-10 items-center justify-center rounded-[10px] text-white/44 transition hover:bg-white/8 hover:text-white/76\"\n onClick={() => toast.info(\"视频音轨编辑后端待接入。\")}\n type=\"button\"\n >\n <Music2 className=\"h-[18px] w-[18px]\" strokeWidth={2} />\n </button>"
},
{
"owner": "TextTargetModuleComposer",
"line": 14184,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(\"翻译接口待接入。\")}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[17px] text-white/78\">\n <ComposerControl\n active={menu === \"model\"}\n label={getCanvasModelDisplayName(selectedModel, modelOptions)}\n icon=\"⌘\"\n dropdown\n onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")}\n />\n <div className=\"min-w-0 flex-1\" />\n <ComposerControl label=\"文\" onClick={() => toast.info(\"翻译接口待接入。\")} />\n <ComposerControl\n label={billingDisplay.label}\n icon=\"⚡\"\n muted\n onC"
},
{
"owner": "TextTargetModuleComposer",
"line": 14185,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(billingDisplay.message)}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[17px] text-white/78\">\n <ComposerControl\n active={menu === \"model\"}\n label={getCanvasModelDisplayName(selectedModel, modelOptions)}\n icon=\"⌘\"\n dropdown\n onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")}\n />\n <div className=\"min-w-0 flex-1\" />\n <ComposerControl label=\"文\" onClick={() => toast.info(\"翻译接口待接入。\")} />\n <ComposerControl\n label={billingDisplay.label}\n icon=\"⚡\"\n muted\n onC"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15442,
"tag": "button",
"handler": "onClick={() => toast.info(\"展开音频生视频编辑器待接入。\")}",
"snippet": "<button className=\"absolute right-6 top-5 text-[32px] text-white/38 hover:text-white/70\" onClick={() => toast.info(\"展开音频生视频编辑器待接入。\")} type=\"button\">↗</button>"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15445,
"tag": "button",
"handler": "onClick={() => toast.info(`${tab}模式后端待接入。`)}",
"snippet": "<button\n className={cn(\n \"h-[38px] rounded-[8px] border border-white/10 px-4 text-[18px] text-white/48\",\n index === 1 && \"bg-white/8 text-white\"\n )}\n key={tab}\n onClick={() => toast.info(`${tab}模式后端待接入。`)}\n type=\"button\"\n >\n {tab}\n </button>"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15466,
"tag": "button",
"handler": "onClick={() => {\n if (key === \"reference\") {\n toast.info(\"音频和图片参考已连接,可继续补充更多素材。\");\n return;\n }\n if (key === \"mark\") {\n appendPromptSnippet(\"添加人物与构图标记\");\n return;\n }\n setAssistMenu((current) => current === key ? null : (key as typeof assistMenu));\n setMenu(null);\n }}",
"snippet": "<button\n className={cn(\n \"flex h-[72px] w-[92px] flex-col items-center justify-center gap-1 rounded-[8px] border border-white/10 text-[16px] text-white/50 transition hover:bg-white/[0.07] hover:text-white/80\",\n assistMenu === key && \"border-white/22 bg-white/10 text-white\"\n )}\n key={label}\n onClick={() => {\n if (key === \"reference\") {\n toast.info(\"音频和图片参考已连接,可继续补充更多素材。\");\n return;\n }\n if (key === \"mark\") {\n appendPromptSnippet(\"添加人物与构图标记\");\n return;\n "
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15510,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(\"翻译接口待接入。\")}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[86px] flex items-center gap-7 overflow-hidden text-[22px] text-white/82\">\n <ComposerControl active={menu === \"model\"} label={getVideoComposerModelLabel(settings, modelOptions)} icon=\"▥\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n <span className=\"rounded-[5px] bg-[#f6c85f] px-1.5 py-0.5 text-[13px] font-bold text-[#2b2314]\">VIP</span>\n <ComposerControl active={menu === \"settings\"} label={formatVideoParameterSummary(settings)} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"settings\" ? null : \"settings\")} />"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15511,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(\"高级设置后端待接入。\")}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[86px] flex items-center gap-7 overflow-hidden text-[22px] text-white/82\">\n <ComposerControl active={menu === \"model\"} label={getVideoComposerModelLabel(settings, modelOptions)} icon=\"▥\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n <span className=\"rounded-[5px] bg-[#f6c85f] px-1.5 py-0.5 text-[13px] font-bold text-[#2b2314]\">VIP</span>\n <ComposerControl active={menu === \"settings\"} label={formatVideoParameterSummary(settings)} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"settings\" ? null : \"settings\")} />"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15512,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(billingDisplay.message)}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[86px] flex items-center gap-7 overflow-hidden text-[22px] text-white/82\">\n <ComposerControl active={menu === \"model\"} label={getVideoComposerModelLabel(settings, modelOptions)} icon=\"▥\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n <span className=\"rounded-[5px] bg-[#f6c85f] px-1.5 py-0.5 text-[13px] font-bold text-[#2b2314]\">VIP</span>\n <ComposerControl active={menu === \"settings\"} label={formatVideoParameterSummary(settings)} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"settings\" ? null : \"settings\")} />"
},
{
"owner": "AudioToVideoComposerPanel",
"line": 15519,
"tag": "button",
"handler": "onClick={() => {\n if (onSubmit) {\n onSubmit(prompt, settings);\n return;\n }\n toast.info(\"音频生视频生成接口待接入。\");\n }}",
"snippet": "<button\n className=\"absolute bottom-5 right-5 flex h-14 w-14 items-center justify-center rounded-[14px] bg-white text-[34px] leading-none text-black hover:bg-white/90\"\n onClick={() => {\n if (onSubmit) {\n onSubmit(prompt, settings);\n return;\n }\n toast.info(\"音频生视频生成接口待接入。\");\n }}\n type=\"button\"\n >\n ↑\n </button>"
},
{
"owner": "PresetFloatingToolbar",
"line": 15941,
"tag": "button",
"handler": "onClick={() => {\n if (onClick) {\n onClick();\n return;\n }\n if (message) toast.info(message);\n }}",
"snippet": "<button\n className={cn(\n \"flex items-center justify-center rounded-[8px] hover:bg-white/8 hover:text-white\",\n compact ? \"h-8 text-[14px] font-medium\" : \"h-10 gap-2 rounded-[10px] px-3 text-[15px]\"\n )}\n key={label}\n onClick={() => {\n if (onClick) {\n onClick();\n return;\n }\n if (message) toast.info(message);\n }}\n style={compact ? { width: compactWidth } : undefined}\n type=\"button\"\n >\n {!compact ? (\n <span className=\"flex h-5 w-5 items-center ju"
},
{
"owner": "PresetComposerPanel",
"line": 16227,
"tag": "button",
"handler": "onClick={() => toast.info(\"展开提示词编辑器待接入。\")}",
"snippet": "<button className=\"absolute right-5 top-5 text-[26px] text-white/45\" onClick={() => toast.info(\"展开提示词编辑器待接入。\")} type=\"button\">↗</button>"
},
{
"owner": "PresetComposerPanel",
"line": 16246,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(\"镜头配置接口待接入。\")}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[17px] text-white/78\">\n\t <ComposerControl active={menu === \"model\"} label={getCanvasModelDisplayName(settings.model, modelOptions)} icon=\"◉\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n\t <ComposerControl active={menu === \"ratio\"} label={settings.ratio} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"ratio\" ? null : \"ratio\")} />\n\t <ComposerControl active={menu === \"resolution\"} label={settings.resolution} dropdown onClick={() => setMenu((current) => current === \"re"
},
{
"owner": "PresetComposerPanel",
"line": 16247,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(\"当前仅支持单次生成 1 个结果。\")}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[17px] text-white/78\">\n\t <ComposerControl active={menu === \"model\"} label={getCanvasModelDisplayName(settings.model, modelOptions)} icon=\"◉\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n\t <ComposerControl active={menu === \"ratio\"} label={settings.ratio} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"ratio\" ? null : \"ratio\")} />\n\t <ComposerControl active={menu === \"resolution\"} label={settings.resolution} dropdown onClick={() => setMenu((current) => current === \"re"
},
{
"owner": "PresetComposerPanel",
"line": 16248,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(billingDisplay.message)}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[17px] text-white/78\">\n\t <ComposerControl active={menu === \"model\"} label={getCanvasModelDisplayName(settings.model, modelOptions)} icon=\"◉\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n\t <ComposerControl active={menu === \"ratio\"} label={settings.ratio} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"ratio\" ? null : \"ratio\")} />\n\t <ComposerControl active={menu === \"resolution\"} label={settings.resolution} dropdown onClick={() => setMenu((current) => current === \"re"
},
{
"owner": "PresetComposerPanel",
"line": 16255,
"tag": "button",
"handler": "onClick={() => {\n if (onSubmit) {\n onSubmit(draftPrompt, settings);\n return;\n }\n toast.info(submitMessage);\n }}",
"snippet": "<button\n\t className=\"absolute bottom-5 right-5 flex h-11 w-11 items-center justify-center rounded-[12px] bg-white/76 text-[24px] text-black hover:bg-white\"\n\t onClick={() => {\n if (onSubmit) {\n onSubmit(draftPrompt, settings);\n return;\n }\n toast.info(submitMessage);\n }}\n\t type=\"button\"\n\t >\n\t ↑\n\t </button>"
},
{
"owner": "PromptComposer",
"line": 16874,
"tag": "button",
"handler": "onClick={() => toast.info(\"展开提示词编辑器待接入。\")}",
"snippet": "<button className=\"absolute right-5 top-5 text-[26px] text-white/45\" onClick={() => toast.info(\"展开提示词编辑器待接入。\")} type=\"button\">↗</button>"
},
{
"owner": "PromptComposer",
"line": 16958,
"tag": "ComposerControl",
"handler": "onClick={() => toast.info(billingDisplay.message)}",
"snippet": "<div className=\"absolute bottom-5 left-5 right-[84px] flex items-center gap-6 overflow-hidden text-[18px] text-white/78\">\n <ComposerControl active={menu === \"model\"} label={getCanvasModelDisplayName(settings.model, modelOptions)} icon=\"◉\" dropdown onClick={() => setMenu((current) => current === \"model\" ? null : \"model\")} />\n <ComposerControl active={menu === \"ratio\"} label={settings.ratio} icon=\"▭\" dropdown onClick={() => setMenu((current) => current === \"ratio\" ? null : \"ratio\")} />\n <ComposerControl active={menu === \"resolution\"} label={settings.resolution} dropdown onClick={() => setMenu((current) => current === "
},
{
"owner": "PromptComposer",
"line": 16965,
"tag": "button",
"handler": "onClick={() =>\n onSubmit\n ? onSubmit({\n prompt,\n references,\n settings,\n slashScene,\n })\n : toast.info(\"角色三视图生成接口待接入。\")\n }",
"snippet": "<button\n className=\"absolute bottom-5 right-5 flex h-11 w-11 items-center justify-center rounded-[12px] bg-white/76 text-[24px] text-black hover:bg-white\"\n onClick={() =>\n onSubmit\n ? onSubmit({\n prompt,\n references,\n settings,\n slashScene,\n })\n : toast.info(\"角色三视图生成接口待接入。\")\n }\n type=\"button\"\n >\n ↑\n </button>"
},
{
"owner": "VideoMotionLibraryPanel",
"line": 17618,
"tag": "button",
"handler": "",
"snippet": "<button\n aria-label=\"搜索\"\n className=\"flex size-6 shrink-0 items-center justify-center text-white/42 hover:text-white/75\"\n type=\"submit\"\n >\n <Search className=\"size-4\" />\n </button>"
},
{
"owner": "CloneCanvasNode",
"line": 19132,
"tag": "button",
"handler": "",
"snippet": "<button className=\"relative mt-3 h-8 rounded-[8px] border border-[#dfe3ff] bg-white px-4 text-[11px] text-[#5161ff]\" type=\"button\">\n 选择文件\n </button>"
},
{
"owner": "PresetMediaCanvasNode",
"line": 21735,
"tag": "button",
"handler": "onClick={() => toast.info(\"视频全屏预览待接入。\")}",
"snippet": "<button\n className=\"absolute right-3 top-3 rounded-[8px] bg-white/8 px-3 py-2 text-[12px] text-white/72 hover:bg-white/12\"\n onClick={() => toast.info(\"视频全屏预览待接入。\")}\n type=\"button\"\n >\n ↗\n </button>"
},
{
"owner": "PresetMediaCanvasNode",
"line": 21810,
"tag": "button",
"handler": "onClick={() => toast.info(`${node.title}素材替换接口待接入。`)}",
"snippet": "<button\n className=\"absolute right-3 top-3 flex h-10 w-10 items-center justify-center rounded-[8px] bg-black/56 text-white/90\"\n onClick={() => toast.info(`${node.title}素材替换接口待接入。`)}\n type=\"button\"\n >\n ↥\n </button>"
},
{
"owner": "PresetScriptCanvasNode",
"line": 22476,
"tag": "button",
"handler": "onClick={() => toast.info(\"编辑剧本接口待接入。\")}",
"snippet": "<button className=\"rounded-[8px] px-2 py-1 text-[#4f5cff] hover:bg-black/5\" onClick={() => toast.info(\"编辑剧本接口待接入。\")} type=\"button\">\n 编辑\n </button>"
},
{
"owner": "AssetMarketPanel",
"line": 22917,
"tag": "button",
"handler": "",
"snippet": "<button className=\"flex h-7 w-[54px] items-center justify-center rounded-[8px] bg-white/10 text-[13px] text-white\" type=\"button\">\n 全部\n </button>"
},
{
"owner": "HistoryAssetPickerModal",
"line": 23177,
"tag": "button",
"handler": "",
"snippet": "<button className=\"flex h-8 w-8 items-center justify-center rounded-lg text-white/36 transition hover:bg-white/8 hover:text-white\" type=\"button\">\n <ChevronRight className=\"h-4 w-4 rotate-180\" />\n </button>"
},
{
"owner": "HistoryAssetPickerModal",
"line": 23181,
"tag": "button",
"handler": "",
"snippet": "<button className=\"flex h-8 w-8 items-center justify-center rounded-lg text-white/36 transition hover:bg-white/8 hover:text-white\" type=\"button\">\n <ChevronRight className=\"h-4 w-4\" />\n </button>"
},
{
"owner": "WorkflowPanel",
"line": 24486,
"tag": "button",
"handler": "",
"snippet": "<button\n className=\"cursor-pointer rounded-md border-none bg-transparent py-1 pr-2 pl-0 text-sm font-medium text-white transition-colors\"\n type=\"button\"\n >\n 我的工具箱\n </button>"
},
{
"owner": "WorkflowPanel",
"line": 24492,
"tag": "button",
"handler": "onClick={() => toast.info(\"工具箱模板会将参考图、提示词和成品节点应用到画布。\")}",
"snippet": "<button\n aria-label=\"工具箱模板说明\"\n className=\"-ml-1.5 flex size-4 cursor-help items-center justify-center rounded-full border-none bg-transparent p-0 text-white/70 opacity-50 transition-opacity hover:opacity-80\"\n onClick={() => toast.info(\"工具箱模板会将参考图、提示词和成品节点应用到画布。\")}\n type=\"button\"\n >\n <HelpCircle className=\"h-3.5 w-3.5\" />\n </button>"
},
{
"owner": "WorkflowPanel",
"line": 24501,
"tag": "button",
"handler": "",
"snippet": "<button\n className=\"cursor-pointer rounded-md border-none bg-transparent px-2 py-1 text-sm font-medium text-white/55 transition-colors hover:text-white/80\"\n type=\"button\"\n >\n 周星驰经典名场面\n </button>"
},
{
"owner": "InspectorPanel",
"line": 24620,
"tag": "button",
"handler": "onClick={() => (onAddReference ? onAddReference(node) : toast.info(\"上传/素材选择接口待接入。\"))}",
"snippet": "<button\n className=\"flex h-[74px] w-full items-center justify-center rounded-[8px] border border-white/10 bg-white/5 text-[14px] text-white/52 hover:bg-white/8 hover:text-white\"\n onClick={() => (onAddReference ? onAddReference(node) : toast.info(\"上传/素材选择接口待接入。\"))}\n type=\"button\"\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n {referenceCount > 0 ? `继续添加素材 · 已连入 ${referenceCount}` : \"添加素材\"}\n </button>"
},
{
"owner": "InspectorPanel",
"line": 24655,
"tag": "button",
"handler": "onClick={() => (onGenerate ? onGenerate(node) : toast.info(\"生成接口待接入。\"))}",
"snippet": "<button\n className=\"h-[64px] w-full rounded-[8px] bg-white font-bold text-[16px] text-black hover:bg-white/90 disabled:cursor-not-allowed disabled:bg-white/35\"\n disabled={isGenerating || (selectableRoute && (!compatibleModels.length || unavailableSelection))}\n onClick={() => (onGenerate ? onGenerate(node) : toast.info(\"生成接口待接入。\"))}\n type=\"button\"\n >\n {isGenerating ? \"生成中...\" : \"生成\"}\n </button>"
},
{
"owner": "PropertyField",
"line": 24751,
"tag": "button",
"handler": "onClick={() => toast.info(`${label}选择器待接入。`)}",
"snippet": "<button\n className=\"h-10 w-full rounded-[8px] border border-white/10 bg-black/18 px-3 text-left text-[13px] text-white/46 hover:border-white/20 hover:text-white\"\n onClick={() => toast.info(`${label}选择器待接入。`)}\n type=\"button\"\n >\n 选择{label}\n </button>"
},
{
"owner": "SkillsAccessModal",
"line": 24963,
"tag": "button",
"handler": "onClick={() =>\n toast.info(\"安装包位于 integrations/openclaw,可通过 STDIO MCP 接入。\")\n }",
"snippet": "<button\n className=\"ml-1 text-[#2f8bff] underline-offset-2 hover:underline\"\n onClick={() =>\n toast.info(\"安装包位于 integrations/openclaw,可通过 STDIO MCP 接入。\")\n }\n type=\"button\"\n >\n 接口文档\n </button>"
},
{
"owner": "SkillsAccessModal",
"line": 24998,
"tag": "button",
"handler": "onClick={() => {\n void navigator.clipboard?.writeText(createdToken);\n toast.success(\"Access Key 已复制\");\n }}",
"snippet": "<button\n className=\"flex h-8 shrink-0 items-center gap-1 rounded-[6px] bg-white px-2 text-[11px] font-medium text-black\"\n onClick={() => {\n void navigator.clipboard?.writeText(createdToken);\n toast.success(\"Access Key 已复制\");\n }}\n type=\"button\"\n >\n <Copy className=\"h-3.5 w-3.5\" />\n 复制\n </button>"
},
{
"owner": "VipPlanGrid",
"line": 25468,
"tag": "button",
"handler": "onClick={() => {\n if (isCurrent) return;\n toast.info(\"会员订阅支付尚未接入,当前请优先使用积分充值。\");\n }}",
"snippet": "<button\n className={cn(\n \"mt-4 h-9 w-full rounded-[8px] text-[13px] font-semibold transition-colors\",\n isCurrent\n ? \"cursor-default bg-white/12 text-white/38\"\n : \"bg-white text-black hover:bg-white/90\"\n )}\n disabled={isCurrent}\n onClick={() => {\n if (isCurrent) return;\n toast.info(\"会员订阅支付尚未接入,当前请优先使用积分充值。\");\n }}\n type=\"button\"\n >\n {isCurrent ? \"当前套餐\" : isFree ? \"默认套餐\" : \"即将接入\"}\n </button>"
},
{
"owner": "NotificationsPopover",
"line": 25654,
"tag": "button",
"handler": "",
"snippet": "<button\n className={cn(\n \"h-7 rounded-[8px] px-3 text-[12px] transition-colors\",\n index === 0 ? \"bg-white text-black\" : \"bg-white/6 text-white/56 hover:bg-white/10 hover:text-white\"\n )}\n key={item}\n type=\"button\"\n >\n {item}\n </button>"
},
{
"owner": "NotificationsPopover",
"line": 25671,
"tag": "button",
"handler": "onClick={() => toast.info(`${title}接口待接入。`)}",
"snippet": "<button\n className=\"mb-2 w-full rounded-[10px] border border-white/8 bg-white/5 p-3 text-left hover:bg-white/8\"\n key={title}\n onClick={() => toast.info(`${title}接口待接入。`)}\n type=\"button\"\n >\n <span className=\"block text-[13px] font-semibold text-white/82\">{title}</span>\n <span className=\"mt-1 block text-[12px] leading-5 text-white/42\">{description}</span>\n </button>"
},
{
"owner": "AccountPopover",
"line": 25727,
"tag": "button",
"handler": "onClick={() => {\n void navigator.clipboard?.writeText(displayEmail);\n toast.success(\"邮箱复制成功\");\n }}",
"snippet": "<button\n className=\"rounded-[6px] px-1 text-white/42 hover:bg-white/8 hover:text-white\"\n onClick={() => {\n void navigator.clipboard?.writeText(displayEmail);\n toast.success(\"邮箱复制成功\");\n }}\n type=\"button\"\n >\n <Copy className=\"h-3 w-3\" />\n </button>"
},
{
"owner": "AccountPopover",
"line": 25779,
"tag": "AccountMenuButton",
"handler": "onClick={() => toast.info(\"个人中心入口待接入。\")}",
"snippet": "<div className=\"mt-4 space-y-1\">\n <AccountMenuButton\n icon={<StoreGlyph />}\n label=\"积分与会员中心\"\n onClick={() => {\n onClose();\n onOpenMember();\n }}\n />\n <AccountMenuButton icon={<UserRound className=\"h-[18px] w-[18px]\" />} label=\"个人中心\" onClick={() => toast.info(\"个人中心入口待接入。\")} />\n <AccountMenuButton icon={<Plus className=\"h-[18px] w-[18px]\" />} label=\"创建团队\" onClick={() => toast.info(\"创建团队接口待接入。\")} />\n <AccountMenuButton icon={<FileText className=\"h-[18px] w-[18px]\" />} label=\"订阅与开发票\" onClick={() => toast.info(\"订阅"
},
{
"owner": "AccountPopover",
"line": 25780,
"tag": "AccountMenuButton",
"handler": "onClick={() => toast.info(\"创建团队接口待接入。\")}",
"snippet": "<div className=\"mt-4 space-y-1\">\n <AccountMenuButton\n icon={<StoreGlyph />}\n label=\"积分与会员中心\"\n onClick={() => {\n onClose();\n onOpenMember();\n }}\n />\n <AccountMenuButton icon={<UserRound className=\"h-[18px] w-[18px]\" />} label=\"个人中心\" onClick={() => toast.info(\"个人中心入口待接入。\")} />\n <AccountMenuButton icon={<Plus className=\"h-[18px] w-[18px]\" />} label=\"创建团队\" onClick={() => toast.info(\"创建团队接口待接入。\")} />\n <AccountMenuButton icon={<FileText className=\"h-[18px] w-[18px]\" />} label=\"订阅与开发票\" onClick={() => toast.info(\"订阅"
},
{
"owner": "AccountPopover",
"line": 25781,
"tag": "AccountMenuButton",
"handler": "onClick={() => toast.info(\"订阅与开发票入口待接入。\")}",
"snippet": "<div className=\"mt-4 space-y-1\">\n <AccountMenuButton\n icon={<StoreGlyph />}\n label=\"积分与会员中心\"\n onClick={() => {\n onClose();\n onOpenMember();\n }}\n />\n <AccountMenuButton icon={<UserRound className=\"h-[18px] w-[18px]\" />} label=\"个人中心\" onClick={() => toast.info(\"个人中心入口待接入。\")} />\n <AccountMenuButton icon={<Plus className=\"h-[18px] w-[18px]\" />} label=\"创建团队\" onClick={() => toast.info(\"创建团队接口待接入。\")} />\n <AccountMenuButton icon={<FileText className=\"h-[18px] w-[18px]\" />} label=\"订阅与开发票\" onClick={() => toast.info(\"订阅"
},
{
"owner": "AccountPopover",
"line": 25782,
"tag": "AccountMenuButton",
"handler": "onClick={() => toast.info(\"账号设置入口待接入。\")}",
"snippet": "<div className=\"mt-4 space-y-1\">\n <AccountMenuButton\n icon={<StoreGlyph />}\n label=\"积分与会员中心\"\n onClick={() => {\n onClose();\n onOpenMember();\n }}\n />\n <AccountMenuButton icon={<UserRound className=\"h-[18px] w-[18px]\" />} label=\"个人中心\" onClick={() => toast.info(\"个人中心入口待接入。\")} />\n <AccountMenuButton icon={<Plus className=\"h-[18px] w-[18px]\" />} label=\"创建团队\" onClick={() => toast.info(\"创建团队接口待接入。\")} />\n <AccountMenuButton icon={<FileText className=\"h-[18px] w-[18px]\" />} label=\"订阅与开发票\" onClick={() => toast.info(\"订阅"
},
{
"owner": "AccountPopover",
"line": 25783,
"tag": "AccountMenuButton",
"handler": "onClick={() => toast.info(\"退出登录接口待接入。\")}",
"snippet": "<div className=\"mt-4 space-y-1\">\n <AccountMenuButton\n icon={<StoreGlyph />}\n label=\"积分与会员中心\"\n onClick={() => {\n onClose();\n onOpenMember();\n }}\n />\n <AccountMenuButton icon={<UserRound className=\"h-[18px] w-[18px]\" />} label=\"个人中心\" onClick={() => toast.info(\"个人中心入口待接入。\")} />\n <AccountMenuButton icon={<Plus className=\"h-[18px] w-[18px]\" />} label=\"创建团队\" onClick={() => toast.info(\"创建团队接口待接入。\")} />\n <AccountMenuButton icon={<FileText className=\"h-[18px] w-[18px]\" />} label=\"订阅与开发票\" onClick={() => toast.info(\"订阅"
},
{
"owner": "AccountMetricCard",
"line": 25805,
"tag": "button",
"handler": "onClick={() => toast.info(`${label}接口待接入。`)}",
"snippet": "<button\n className={cn(\n \"rounded-[12px] border border-white/8 bg-white/[0.04] px-4 py-3 text-left hover:bg-white/[0.07]\",\n className\n )}\n onClick={() => toast.info(`${label}接口待接入。`)}\n type=\"button\"\n >\n <span className={cn(\"block text-[12px]\", accent ? \"text-[#09caf5]\" : \"text-white/45\")}>{label}</span>\n <span className=\"mt-1 flex items-baseline gap-1\">\n <span className={cn(\"font-['PlusJakartaSans'] text-[18px] font-bold\", accent ? \"text-[#09caf5]\" : \"text-white/88\")}>{value}</span>\n <span className=\"text-[12px] text-white/44\">{suffix}</span>\n </span>\n </button>"
},
{
"owner": "SupportPanel",
"line": 25859,
"tag": "button",
"handler": "onClick={() => toast.info(`${title}入口待接入。`)}",
"snippet": "<button\n className=\"w-full rounded-[8px] border border-white/8 bg-white/5 p-3 text-left hover:bg-white/8\"\n key={title}\n onClick={() => toast.info(`${title}入口待接入。`)}\n type=\"button\"\n >\n <div className=\"text-[13px] font-semibold text-white/82\">{title}</div>\n <div className=\"mt-1 text-[12px] text-white/42\">{description}</div>\n </button>"
},
{
"owner": "PublishModal",
"line": 26112,
"tag": "button",
"handler": "onClick={() => toast.info(\"发布接口待接入。\")}",
"snippet": "<button\n className=\"cursor-pointer rounded-lg bg-[#478EFF] px-3 py-2 text-[13px] text-white transition-colors hover:bg-[#2563EB]\"\n onClick={() => toast.info(\"发布接口待接入。\")}\n type=\"button\"\n >\n 发布并投稿\n </button>"
},
{
"owner": "PublishModal",
"line": 26125,
"tag": "button",
"handler": "onClick={() => toast.info(\"服务协议入口待接入。\")}",
"snippet": "<button\n className=\"text-[#478EFF] hover:underline\"\n onClick={() => toast.info(\"服务协议入口待接入。\")}\n type=\"button\"\n >\n 《{siteName}创作许可服务协议》\n </button>"
},
{
"owner": "UploadBox",
"line": 26142,
"tag": "button",
"handler": "onClick={() => toast.info(`${label}接口待接入。`)}",
"snippet": "<button\n className=\"flex h-[120px] flex-1 flex-col items-center justify-center rounded-[8px] border border-white/8 bg-white/12 text-white/72 transition-colors hover:bg-white/16 hover:text-white\"\n onClick={() => toast.info(`${label}接口待接入。`)}\n type=\"button\"\n >\n <Plus className=\"h-5 w-5\" />\n <span className=\"mt-2 text-[13px]\">{label}</span>\n {hint ? <span className=\"mt-2 text-[12px] text-white/42\">{hint}</span> : null}\n </button>"
}
]
}