diff --git a/apps/sim/app/w/[id]/components/loop-node/loop-node.tsx b/apps/sim/app/w/[id]/components/loop-node/loop-node.tsx index ae0bb86741b..d657fac658b 100644 --- a/apps/sim/app/w/[id]/components/loop-node/loop-node.tsx +++ b/apps/sim/app/w/[id]/components/loop-node/loop-node.tsx @@ -94,7 +94,7 @@ export const LoopNodeComponent = memo(({ data, selected, id }: NodeProps) => { const getNestedStyles = () => { // Base styles const styles: Record = { - backgroundColor: 'transparent', + backgroundColor: 'rgba(0, 0, 0, 0.02)', } // Apply nested styles diff --git a/apps/sim/app/w/[id]/components/parallel-node/parallel-config.ts b/apps/sim/app/w/[id]/components/parallel-node/parallel-config.ts index a1a79eb29bd..fe00c935bec 100644 --- a/apps/sim/app/w/[id]/components/parallel-node/parallel-config.ts +++ b/apps/sim/app/w/[id]/components/parallel-node/parallel-config.ts @@ -6,7 +6,7 @@ export const ParallelTool = { name: 'Parallel', description: 'Parallel Execution', icon: SplitIcon, - bgColor: '#8BC34A', + bgColor: '#FEE12B', data: { label: 'Parallel', parallelType: 'collection' as 'collection' | 'count', diff --git a/apps/sim/app/w/[id]/components/parallel-node/parallel-node.tsx b/apps/sim/app/w/[id]/components/parallel-node/parallel-node.tsx index d5b1cbd4e90..299a75acaed 100644 --- a/apps/sim/app/w/[id]/components/parallel-node/parallel-node.tsx +++ b/apps/sim/app/w/[id]/components/parallel-node/parallel-node.tsx @@ -111,7 +111,7 @@ export const ParallelNodeComponent = memo(({ data, selected, id }: NodeProps) => const getNestedStyles = () => { // Base styles const styles: Record = { - backgroundColor: 'transparent', + backgroundColor: 'rgba(0, 0, 0, 0.02)', } // Apply nested styles diff --git a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/code.tsx b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/code.tsx index b04b805bcb3..b6078b4dee9 100644 --- a/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/code.tsx +++ b/apps/sim/app/w/[id]/components/workflow-block/components/sub-block/components/code.tsx @@ -81,7 +81,8 @@ export function Code({ (useSubBlockStore((state) => state.getValue(blockId, collapsedStateKey)) as boolean) ?? false const setCollapsedValue = useSubBlockStore((state) => state.setValue) - const showCollapseButton = subBlockId === 'responseFormat' && code.split('\n').length > 5 + const showCollapseButton = + (subBlockId === 'responseFormat' || subBlockId === 'code') && code.split('\n').length > 5 const editorRef = useRef(null) diff --git a/apps/sim/app/w/knowledge/[id]/[documentId]/document.tsx b/apps/sim/app/w/knowledge/[id]/[documentId]/document.tsx index 84888da21a0..6d663f464d9 100644 --- a/apps/sim/app/w/knowledge/[id]/[documentId]/document.tsx +++ b/apps/sim/app/w/knowledge/[id]/[documentId]/document.tsx @@ -1,7 +1,17 @@ 'use client' -import { useEffect, useState } from 'react' -import { Circle, CircleOff, FileText, Plus, Search, Trash2, X } from 'lucide-react' +import { useCallback, useEffect, useState } from 'react' +import { + ChevronLeft, + ChevronRight, + Circle, + CircleOff, + FileText, + Plus, + Search, + Trash2, + X, +} from 'lucide-react' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' @@ -59,11 +69,18 @@ export function Document({ const [isLoadingDocument, setIsLoadingDocument] = useState(true) const [error, setError] = useState(null) - // Use the new chunks hook + // Use the updated chunks hook with pagination const { chunks, isLoading: isLoadingChunks, error: chunksError, + currentPage, + totalPages, + hasNextPage, + hasPrevPage, + goToPage, + nextPage, + prevPage, refreshChunks, updateChunk, } = useDocumentChunks(knowledgeBaseId, documentId) @@ -71,6 +88,34 @@ export function Document({ // Combine errors const combinedError = error || chunksError + // Handle pagination navigation + const handlePrevPage = useCallback(() => { + if (hasPrevPage && !isLoadingChunks) { + prevPage()?.catch((err) => { + logger.error('Previous page failed:', err) + }) + } + }, [hasPrevPage, isLoadingChunks, prevPage]) + + const handleNextPage = useCallback(() => { + if (hasNextPage && !isLoadingChunks) { + nextPage()?.catch((err) => { + logger.error('Next page failed:', err) + }) + } + }, [hasNextPage, isLoadingChunks, nextPage]) + + const handleGoToPage = useCallback( + (page: number) => { + if (page !== currentPage && !isLoadingChunks) { + goToPage(page)?.catch((err) => { + logger.error('Go to page failed:', err) + }) + } + }, + [currentPage, isLoadingChunks, goToPage] + ) + // Try to get document from store cache first, then fetch if needed useEffect(() => { const fetchDocument = async () => { @@ -308,7 +353,7 @@ export function Document({ onClick={() => setIsCreateChunkModalOpen(true)} disabled={document?.processingStatus === 'failed'} size='sm' - className='flex items-center gap-1 bg-[#701FFC] font-[480] text-primary-foreground shadow-[0_0_0_0_#701FFC] transition-all duration-200 hover:bg-[#6518E6] hover:shadow-[0_0_0_4px_rgba(127,47,255,0.15)] disabled:cursor-not-allowed disabled:opacity-50' + className='flex items-center gap-1 bg-[#701FFC] font-[480] text-white shadow-[0_0_0_0_#701FFC] transition-all duration-200 hover:bg-[#6518E6] hover:shadow-[0_0_0_4px_rgba(127,47,255,0.15)] disabled:cursor-not-allowed disabled:opacity-50' > Create Chunk @@ -566,6 +611,64 @@ export function Document({ + + {/* Pagination Controls */} + {document?.processingStatus === 'completed' && totalPages > 1 && ( +
+
+ + + {/* Page numbers - show a few around current page */} +
+ {Array.from({ length: Math.min(totalPages, 5) }, (_, i) => { + let page: number + if (totalPages <= 5) { + page = i + 1 + } else if (currentPage <= 3) { + page = i + 1 + } else if (currentPage >= totalPages - 2) { + page = totalPages - 4 + i + } else { + page = currentPage - 2 + i + } + + if (page < 1 || page > totalPages) return null + + return ( + + ) + })} +
+ + +
+
+ )} diff --git a/apps/sim/app/w/knowledge/[id]/base.tsx b/apps/sim/app/w/knowledge/[id]/base.tsx index 5c0acac5c72..4eba4ca7fc8 100644 --- a/apps/sim/app/w/knowledge/[id]/base.tsx +++ b/apps/sim/app/w/knowledge/[id]/base.tsx @@ -569,7 +569,7 @@ export function KnowledgeBase({ onClick={handleAddDocuments} disabled={isUploading} size='sm' - className='flex items-center gap-1 bg-[#701FFC] font-[480] text-primary-foreground shadow-[0_0_0_0_#701FFC] transition-all duration-200 hover:bg-[#6518E6] hover:shadow-[0_0_0_4px_rgba(127,47,255,0.15)]' + className='flex items-center gap-1 bg-[#701FFC] font-[480] text-white shadow-[0_0_0_0_#701FFC] transition-all duration-200 hover:bg-[#6518E6] hover:shadow-[0_0_0_4px_rgba(127,47,255,0.15)]' > {isUploading ? 'Uploading...' : 'Add Documents'} diff --git a/apps/sim/app/w/knowledge/knowledge.tsx b/apps/sim/app/w/knowledge/knowledge.tsx index b9721ef749a..cc0cfc70cb2 100644 --- a/apps/sim/app/w/knowledge/knowledge.tsx +++ b/apps/sim/app/w/knowledge/knowledge.tsx @@ -92,7 +92,7 @@ export function Knowledge() {