mirror of
https://github.com/langgenius/dify.git
synced 2026-03-26 08:00:29 -04:00
Made-with: Cursor # Conflicts: # .devcontainer/post_create_command.sh # api/commands.py # api/core/agent/cot_agent_runner.py # api/core/agent/fc_agent_runner.py # api/core/app/apps/workflow_app_runner.py # api/core/app/entities/queue_entities.py # api/core/app/entities/task_entities.py # api/core/workflow/workflow_entry.py # api/dify_graph/enums.py # api/dify_graph/graph/graph.py # api/dify_graph/graph_events/node.py # api/dify_graph/model_runtime/entities/message_entities.py # api/dify_graph/node_events/node.py # api/dify_graph/nodes/agent/agent_node.py # api/dify_graph/nodes/base/__init__.py # api/dify_graph/nodes/base/entities.py # api/dify_graph/nodes/base/node.py # api/dify_graph/nodes/llm/entities.py # api/dify_graph/nodes/llm/node.py # api/dify_graph/nodes/tool/tool_node.py # api/pyproject.toml # api/uv.lock # web/app/components/base/avatar/__tests__/index.spec.tsx # web/app/components/base/avatar/index.tsx # web/app/components/base/date-and-time-picker/time-picker/__tests__/index.spec.tsx # web/app/components/base/file-uploader/file-from-link-or-local/index.tsx # web/app/components/base/prompt-editor/index.tsx # web/app/components/datasets/metadata/edit-metadata-batch/modal.tsx # web/app/components/header/account-dropdown/index.spec.tsx # web/app/components/share/text-generation/index.tsx # web/app/components/workflow/block-selector/tool/action-item.tsx # web/app/components/workflow/block-selector/trigger-plugin/action-item.tsx # web/app/components/workflow/hooks/use-edges-interactions.ts # web/app/components/workflow/hooks/use-nodes-interactions.ts # web/app/components/workflow/index.tsx # web/app/components/workflow/nodes/_base/components/editor/code-editor/index.tsx # web/app/components/workflow/nodes/http/components/key-value/key-value-edit/index.tsx # web/app/components/workflow/nodes/human-input/components/delivery-method/recipient/email-item.tsx # web/app/components/workflow/nodes/loop/use-interactions.ts # web/contract/router.ts # web/env.ts # web/eslint-suppressions.json # web/package.json # web/pnpm-lock.yaml
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
export const isMac = () => {
|
|
return navigator.userAgent.toUpperCase().includes('MAC')
|
|
}
|
|
|
|
const specialKeysNameMap: Record<string, string | undefined> = {
|
|
ctrl: '⌘',
|
|
alt: '⌥',
|
|
shift: '⇧',
|
|
}
|
|
|
|
export const getKeyboardKeyNameBySystem = (key: string) => {
|
|
if (isMac())
|
|
return specialKeysNameMap[key] || key
|
|
|
|
return key
|
|
}
|
|
|
|
const specialKeysCodeMap: Record<string, string | undefined> = {
|
|
ctrl: 'meta',
|
|
}
|
|
|
|
export const getKeyboardKeyCodeBySystem = (key: string) => {
|
|
if (isMac())
|
|
return specialKeysCodeMap[key] || key
|
|
|
|
return key
|
|
}
|
|
|
|
export const isEventTargetInputArea = (target: HTMLElement) => {
|
|
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')
|
|
return true
|
|
|
|
if (target.contentEditable === 'true')
|
|
return true
|
|
|
|
if (target.closest?.('.monaco-editor, .monaco-diff-editor'))
|
|
return true
|
|
}
|
|
|
|
/**
|
|
* Format workflow run identifier using finished_at timestamp
|
|
* @param finishedAt - Unix timestamp in seconds
|
|
* @param fallbackText - Text to show when finishedAt is not available (default: 'Running')
|
|
* @returns Formatted string like " (14:30:25)" or " (Running)"
|
|
*/
|
|
export const formatWorkflowRunIdentifier = (finishedAt?: number, fallbackText = 'Running'): string => {
|
|
if (!finishedAt)
|
|
return ` (${fallbackText})`
|
|
|
|
const date = new Date(finishedAt * 1000)
|
|
const timeStr = date.toLocaleTimeString([], {
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
second: '2-digit',
|
|
})
|
|
return ` (${timeStr})`
|
|
}
|