agent-ecosystem/src/renderer/components/team/activity/collapseState.ts
iliya 9bfcbb182c feat: enhance UI and functionality in team dialogs and components
- Improved lightbox toolbar button hit targets for better accessibility.
- Updated ActivityItem and ActivityTimeline components to support managed collapse states for messages.
- Refactored message collapsing logic to allow for user-controlled expansion in various components.
- Enhanced CreateTeamDialog and LaunchTeamDialog with improved loading indicators and layout adjustments.
- Increased maximum message length in SendMessageDialog to accommodate larger inputs.
- Added icons and visual enhancements in ProjectPathSelector and EffortLevelSelector for better user experience.
2026-03-06 23:21:56 +02:00

66 lines
1.6 KiB
TypeScript

export interface DefaultActivityCollapseState {
mode: 'default';
}
export interface ManagedActivityCollapseState {
mode: 'managed';
isCollapsed: boolean;
canToggle: boolean;
onToggle?: () => void;
}
export type ActivityCollapseState = DefaultActivityCollapseState | ManagedActivityCollapseState;
export interface TimelineItemLike {
type: 'message' | 'lead-thoughts';
}
interface ResolveTimelineCollapseStateArgs {
allCollapsed?: boolean;
itemIndex: number;
newestMessageIndex: number;
isPinnedThoughtGroup: boolean;
isExpandedOverride: boolean;
onToggleOverride?: () => void;
}
export function isManagedCollapseState(
collapseState: ActivityCollapseState | undefined
): collapseState is ManagedActivityCollapseState {
return collapseState?.mode === 'managed';
}
export function findNewestMessageIndex(items: readonly TimelineItemLike[]): number {
for (let i = 0; i < items.length; i++) {
if (items[i]?.type === 'message') return i;
}
return -1;
}
export function resolveTimelineCollapseState({
allCollapsed,
itemIndex,
newestMessageIndex,
isPinnedThoughtGroup,
isExpandedOverride,
onToggleOverride,
}: ResolveTimelineCollapseStateArgs): ActivityCollapseState {
if (!allCollapsed) {
return { mode: 'default' };
}
if (isPinnedThoughtGroup || itemIndex === newestMessageIndex) {
return {
mode: 'managed',
isCollapsed: false,
canToggle: false,
};
}
return {
mode: 'managed',
isCollapsed: !isExpandedOverride,
canToggle: onToggleOverride != null,
onToggle: onToggleOverride,
};
}