diff --git a/apps/sim/app/w/[id]/components/notifications/notifications.tsx b/apps/sim/app/w/[id]/components/notifications/notifications.tsx index d572da25cb9..fd8e18cb0fd 100644 --- a/apps/sim/app/w/[id]/components/notifications/notifications.tsx +++ b/apps/sim/app/w/[id]/components/notifications/notifications.tsx @@ -134,7 +134,10 @@ function DeleteApiConfirmation({ Cancel - + Delete diff --git a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx index 6c3d0d927cc..f71b26046c3 100644 --- a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx +++ b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx @@ -648,7 +648,10 @@ export function ScheduleModal({ setShowDeleteConfirm(false)}> Cancel - + {isDeleting ? 'Deleting...' : 'Delete Schedule'} diff --git a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/webhook/components/ui/confirmation.tsx b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/webhook/components/ui/confirmation.tsx index 2197aa2d774..0578d1eb73e 100644 --- a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/webhook/components/ui/confirmation.tsx +++ b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/webhook/components/ui/confirmation.tsx @@ -33,7 +33,10 @@ export function DeleteConfirmDialog({ Cancel - + {isDeleting ? 'Deleting...' : 'Delete'} @@ -66,7 +69,10 @@ export function UnsavedChangesDialog({ Cancel - + Discard changes diff --git a/apps/sim/app/w/components/sidebar/components/folder-tree/components/folder-item.tsx b/apps/sim/app/w/components/sidebar/components/folder-tree/components/folder-item.tsx index 2c39f63bc50..4f02c73497d 100644 --- a/apps/sim/app/w/components/sidebar/components/folder-tree/components/folder-item.tsx +++ b/apps/sim/app/w/components/sidebar/components/folder-tree/components/folder-item.tsx @@ -1,8 +1,18 @@ 'use client' -import { useCallback, useEffect, useRef } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' import clsx from 'clsx' import { ChevronDown, ChevronRight, Folder, FolderOpen } from 'lucide-react' +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from '@/components/ui/alert-dialog' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { type FolderTreeNode, useFolderStore } from '@/stores/folders/store' import { FolderContextMenu } from '../../folder-context-menu/folder-context-menu' @@ -27,6 +37,8 @@ export function FolderItem({ onDrop, }: FolderItemProps) { const { expandedFolders, toggleExpanded, updateFolderAPI, deleteFolder } = useFolderStore() + const [showDeleteDialog, setShowDeleteDialog] = useState(false) + const [isDeleting, setIsDeleting] = useState(false) const isExpanded = expandedFolders.has(folder.id) const updateTimeoutRef = useRef | undefined>(undefined) @@ -69,83 +81,137 @@ export function FolderItem({ } const handleDelete = async (folderId: string) => { - if ( - confirm( - `Are you sure you want to delete "${folder.name}"? Child folders and workflows will be moved to the parent folder.` - ) - ) { - try { - await deleteFolder(folderId) - } catch (error) { - console.error('Failed to delete folder:', error) - } + setShowDeleteDialog(true) + } + + const confirmDelete = async () => { + setIsDeleting(true) + try { + await deleteFolder(folder.id) + setShowDeleteDialog(false) + } catch (error) { + console.error('Failed to delete folder:', error) + } finally { + setIsDeleting(false) } } if (isCollapsed) { return ( - - -
+ <> + +
- {isExpanded ? ( - - ) : ( - - )} +
+ {isExpanded ? ( + + ) : ( + + )} +
-
-
- -

{folder.name}

-
-
+ + +

{folder.name}

+
+ + + {/* Delete Confirmation Dialog */} + + + + Are you sure you want to delete "{folder.name}"? + + Child folders and workflows will be moved to the parent folder. + + + + Cancel + + {isDeleting ? 'Deleting...' : 'Delete'} + + + + + ) } return ( -
-
-
- {isExpanded ? : } -
+ <> +
+
+
+ {isExpanded ? ( + + ) : ( + + )} +
-
- {isExpanded ? ( - - ) : ( - - )} -
+
+ {isExpanded ? ( + + ) : ( + + )} +
+ + + {folder.name} + - - {folder.name} - - -
e.stopPropagation()}> - +
e.stopPropagation()}> + +
-
+ + {/* Delete Confirmation Dialog */} + + + + Are you sure you want to delete "{folder.name}"? + + Child folders and workflows will be moved to the parent folder. + + + + Cancel + + {isDeleting ? 'Deleting...' : 'Delete'} + + + + + ) } diff --git a/apps/sim/app/w/components/sidebar/components/settings-modal/components/general/general.tsx b/apps/sim/app/w/components/sidebar/components/settings-modal/components/general/general.tsx index 88ff1dcdea4..602768e82c1 100644 --- a/apps/sim/app/w/components/sidebar/components/settings-modal/components/general/general.tsx +++ b/apps/sim/app/w/components/sidebar/components/settings-modal/components/general/general.tsx @@ -265,7 +265,7 @@ export function General() { Cancel Reset Data diff --git a/apps/sim/app/w/knowledge/[id]/base.tsx b/apps/sim/app/w/knowledge/[id]/base.tsx index 4eba4ca7fc8..52f275ff5de 100644 --- a/apps/sim/app/w/knowledge/[id]/base.tsx +++ b/apps/sim/app/w/knowledge/[id]/base.tsx @@ -941,7 +941,7 @@ export function KnowledgeBase({ {isDeleting ? 'Deleting...' : 'Delete Knowledge Base'} diff --git a/apps/sim/blocks/blocks/huggingface.ts b/apps/sim/blocks/blocks/huggingface.ts index 8aa50ec516d..2fc6e6f6b2e 100644 --- a/apps/sim/blocks/blocks/huggingface.ts +++ b/apps/sim/blocks/blocks/huggingface.ts @@ -10,7 +10,7 @@ export const HuggingFaceBlock: BlockConfig = { 'Generate completions using Hugging Face Inference API with access to various open-source models. Leverage cutting-edge AI models for chat completions, content generation, and AI-powered conversations with customizable parameters.', docsLink: 'https://docs.simstudio.ai/tools/huggingface', category: 'tools', - bgColor: '#181C1E', + bgColor: '#0B0F19', icon: HuggingFaceIcon, subBlocks: [ { diff --git a/apps/sim/blocks/blocks/workflow.ts b/apps/sim/blocks/blocks/workflow.ts index c46b9f92761..854bc814c7f 100644 --- a/apps/sim/blocks/blocks/workflow.ts +++ b/apps/sim/blocks/blocks/workflow.ts @@ -1,4 +1,4 @@ -import { ComponentIcon } from '@/components/icons' +import { WorkflowIcon } from '@/components/icons' import { createLogger } from '@/lib/logs/console-logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { ToolResponse } from '@/tools/types' @@ -39,10 +39,10 @@ const getAvailableWorkflows = (): Array<{ label: string; id: string }> => { export const WorkflowBlock: BlockConfig = { type: 'workflow', name: 'Workflow', - description: 'Execute another workflow as a block', + description: 'Execute another workflow', category: 'blocks', - bgColor: '#6366f1', - icon: ComponentIcon, + bgColor: '#705335', + icon: WorkflowIcon, subBlocks: [ { id: 'workflowId', diff --git a/apps/sim/components/icons.tsx b/apps/sim/components/icons.tsx index 1f061476d34..db6522097fe 100644 --- a/apps/sim/components/icons.tsx +++ b/apps/sim/components/icons.tsx @@ -214,6 +214,73 @@ export function WorkIcon(props: SVGProps) { ) } +export function WorkflowIcon(props: SVGProps) { + return ( + + + + + + + + ) +} + export function WarnIcon(props: SVGProps) { return (