API features (separate files in /api/src/features/): - media-input: upload text/audio/photo/video, transcription - gamification: points, streaks, badges, leaderboard - templates: predefined task sets (sprint, study, moving) - time-tracking: start/stop timer, task/user reports - kanban: board view, drag-and-drop move - ai-briefing: daily AI summary with tasks/goals/reviews - webhooks-outgoing: notify external systems on events UI components (separate files in /components/features/): - IconButton: icon-only buttons with tooltip - CompactHeader, PageActionBar, InlineEditField - TaskDetailActions, GoalActionButtons, CollabActionButtons - DeleteIconButton, CollabBackButton All features modular — registry.js enables/disables each one. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
'use client';
|
|
import IconButton from './IconButton';
|
|
|
|
interface Props {
|
|
onAssign: () => void;
|
|
onTransfer: () => void;
|
|
onClaim: () => void;
|
|
disabled: boolean;
|
|
t: (key: string) => string;
|
|
}
|
|
|
|
export default function CollabActionButtons({ onAssign, onTransfer, onClaim, disabled, t }: Props) {
|
|
return (
|
|
<div className="flex flex-wrap gap-2">
|
|
<IconButton
|
|
icon={
|
|
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
|
<path strokeLinecap="round" strokeLinejoin="round" d="M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z" />
|
|
</svg>
|
|
}
|
|
label={t("collab.assign")}
|
|
onClick={onAssign}
|
|
disabled={disabled}
|
|
variant="primary"
|
|
size="md"
|
|
/>
|
|
|
|
<IconButton
|
|
icon={
|
|
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
|
<path strokeLinecap="round" strokeLinejoin="round" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" />
|
|
</svg>
|
|
}
|
|
label={t("collab.transfer")}
|
|
onClick={onTransfer}
|
|
disabled={disabled}
|
|
variant="warning"
|
|
size="md"
|
|
/>
|
|
|
|
<IconButton
|
|
icon={
|
|
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
|
<path strokeLinecap="round" strokeLinejoin="round" d="M7 11.5V14m0 0V14m0 0h2.5M7 14H4.5m4.5 0a6 6 0 1012 0 6 6 0 00-12 0z" />
|
|
</svg>
|
|
}
|
|
label={t("collab.claim")}
|
|
onClick={onClaim}
|
|
disabled={disabled}
|
|
variant="success"
|
|
size="md"
|
|
/>
|
|
</div>
|
|
);
|
|
}
|