- 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.
66 lines
1.6 KiB
TypeScript
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,
|
|
};
|
|
}
|