mirror of
https://github.com/langgenius/dify.git
synced 2026-02-12 13:00:45 -05:00
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.
48 lines
1.4 KiB
TypeScript
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
|