feat(activities): editable stages with tab and kanban views

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 11:18:53 +03:30
co-authored by Cursor
parent b4ffef9b6f
commit aa2f39256a
15 changed files with 1860 additions and 88 deletions
+35 -1
View File
@@ -1,6 +1,6 @@
import { matchesSearch } from '@/lib/search';
export type PipelineAccent = 'green' | 'orange' | 'purple';
export type PipelineAccent = 'green' | 'orange' | 'purple' | 'blue' | 'rose' | 'slate';
export type PipelineDeal = {
id: string;
@@ -49,6 +49,16 @@ export const PROJECT_BOARD_COPY: PipelineUiCopy = {
hideAmount: true,
};
export const ACTIVITY_BOARD_COPY: PipelineUiCopy = {
itemNoun: 'فعالیت',
addItem: 'افزودن فعالیت',
empty: 'فعالیتی نیست',
addItemAria: 'افزودن فعالیت به این ستون',
itemMenuAria: 'گزینه‌های فعالیت',
listColTitle: 'فعالیت',
hideAmount: true,
};
export type PipelineStage = {
id: string;
title: string;
@@ -56,6 +66,12 @@ export type PipelineStage = {
deals: PipelineDeal[];
isWon?: boolean;
isLost?: boolean;
/** تعداد کل از سرور وقتی کارت‌ها صفحه‌بندی‌شده بارگذاری می‌شوند */
total?: number;
hasMore?: boolean;
loadingMore?: boolean;
/** برچسب کوچک کنار عنوان ستون (مثلاً نوع مرحله) */
badge?: string;
};
export const PIPELINE_ACCENT: Record<
@@ -80,6 +96,24 @@ export const PIPELINE_ACCENT: Record<
text: '#6d28d9',
border: '#ddd6fe',
},
blue: {
soft: '#eff6ff',
solid: '#3b82f6',
text: '#1d4ed8',
border: '#bfdbfe',
},
rose: {
soft: '#fff1f2',
solid: '#f43f5e',
text: '#be123c',
border: '#fecdd3',
},
slate: {
soft: '#f8fafc',
solid: '#64748b',
text: '#334155',
border: '#e2e8f0',
},
};
const ACCENT_CYCLE: PipelineAccent[] = ['green', 'orange', 'purple'];