Files
dify/web/app/components/workflow/skill/constants.ts
yyh 92731bffba feat: add ArtifactSlice and integrate artifact preview into skill editor tabs
Introduce a dedicated Zustand ArtifactSlice to manage artifact selection
state with mutual exclusion against the main file tree. Artifact files
from the sandbox can now be opened as tabs in the skill editor, rendered
via a lightweight ArtifactContentPanel that reuses ReadOnlyFilePreview.
2026-01-29 17:52:41 +08:00

48 lines
1.4 KiB
TypeScript

/**
* File Tree Constants - Single source of truth for root/blank identifiers
*/
// Root folder identifier (convert to null for API calls via toApiParentId)
export const ROOT_ID = 'root' as const
// Start tab identifier - a special tab that is always present
export const START_TAB_ID = '__start__' as const
// Drag type identifier for internal tree node dragging
export const INTERNAL_NODE_DRAG_TYPE = 'application/x-dify-tree-node'
// Context menu trigger types (describes WHERE user clicked)
export const CONTEXT_MENU_TYPE = {
BLANK: 'blank',
NODE: 'node',
} as const
export type ContextMenuType = (typeof CONTEXT_MENU_TYPE)[keyof typeof CONTEXT_MENU_TYPE]
// Node menu types (determines which menu options to show)
export const NODE_MENU_TYPE = {
ROOT: 'root',
FOLDER: 'folder',
FILE: 'file',
} as const
export type NodeMenuType = (typeof NODE_MENU_TYPE)[keyof typeof NODE_MENU_TYPE]
export const ARTIFACT_TAB_PREFIX = 'artifact:' as const
export function isArtifactTab(tabId: string | null): boolean {
return tabId?.startsWith(ARTIFACT_TAB_PREFIX) ?? false
}
export function getArtifactPath(tabId: string): string {
return tabId.slice(ARTIFACT_TAB_PREFIX.length)
}
export function makeArtifactTabId(path: string): string {
return `${ARTIFACT_TAB_PREFIX}${path}`
}
export const SIDEBAR_MIN_WIDTH = 240
export const SIDEBAR_MAX_WIDTH = 480
export const SIDEBAR_DEFAULT_WIDTH = 320