refactor(ui): standardize operation page actions

This commit is contained in:
poyrazavsever
2026-07-17 22:13:36 +03:00
parent c6eecf29ed
commit a642314786
7 changed files with 114 additions and 130 deletions
+18 -19
View File
@@ -158,7 +158,7 @@ export default function AIChatPage() {
<MessageSquare className="h-4 w-4" />
Sohbetler
</h2>
<Button variant="outline" size="icon" className="h-8 w-8" onClick={() => {
<Button effect="shine" variant="secondary" size="icon-sm" onClick={() => {
handleNewChat();
setIsMobileSessionsOpen(false);
}}>
@@ -173,31 +173,31 @@ export default function AIChatPage() {
</div>
) : (
sessions.map((session) => (
<button
key={session.id}
<div key={session.id} className="group flex items-center gap-1">
<Button effect="shine"
type="button"
variant={activeSessionId === session.id ? "default" : "secondary"}
onClick={() => {
setActiveSessionId(session.id);
setIsMobileSessionsOpen(false);
}}
className={`group flex w-full items-center justify-between rounded-sm p-3 text-left transition-colors ${
activeSessionId === session.id
? "bg-primary/10 text-primary"
: "text-foreground hover:bg-muted/50"
}`}
className="min-w-0 flex-1 justify-start px-3"
>
<span className="truncate pr-2 text-sm font-medium">
<span className="truncate text-sm font-medium">
{session.title || "İsimsiz sohbet"}
</span>
<span
role="button"
tabIndex={0}
</Button>
<Button effect="shine"
type="button"
variant="secondary"
size="icon-sm"
aria-label={`${session.title || "İsimsiz sohbet"} sohbetini sil`}
onClick={(event) => void handleDeleteSession(session.id, event)}
className="rounded-sm p-1 opacity-0 transition-all hover:bg-rose-50 hover:text-rose-600 lg:group-hover:opacity-100"
className="text-destructive opacity-0 transition-opacity lg:group-hover:opacity-100"
>
<Trash2 className="h-3.5 w-3.5" />
</span>
</button>
</Button>
</div>
))
)}
</div>
@@ -236,10 +236,9 @@ export default function AIChatPage() {
</div>
<div>
<h1 className="text-sm font-semibold text-foreground">AI Asistan</h1>
<p className="text-xs text-muted-foreground">Kayıtlı verilerin hakkında soru sor.</p>
</div>
</div>
<Button variant="outline" size="sm" className="h-8 md:hidden text-xs px-3" onClick={() => setIsMobileSessionsOpen(true)}>
<Button effect="shine" variant="secondary" size="sm" className="md:hidden text-xs px-3" onClick={() => setIsMobileSessionsOpen(true)}>
<MessageSquare className="h-3.5 w-3.5 mr-1.5" /> Sohbetler
</Button>
</header>
@@ -304,11 +303,11 @@ export default function AIChatPage() {
disabled={isLoading}
/>
{isLoading ? (
<Button type="button" variant="outline" size="icon" className="shrink-0 h-9 w-9" onClick={() => void stop()}>
<Button effect="shine" type="button" variant="secondary" size="icon" className="shrink-0" onClick={() => void stop()}>
<span className="h-3 w-3 bg-current" />
</Button>
) : (
<Button type="submit" size="icon" className="shrink-0 h-9 w-9" disabled={!input.trim()}>
<Button variant="default" effect="shine" type="submit" size="icon" className="shrink-0" disabled={!input.trim()}>
<Send className="h-4 w-4" />
</Button>
)}
@@ -102,7 +102,6 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
</div>
<div>
<h1 className="text-3xl font-bold text-foreground">{client.name}</h1>
{client.company_name && <p className="text-muted-foreground mt-1">{client.company_name}</p>}
</div>
</div>
<div className="flex gap-2 items-center">
@@ -113,7 +112,7 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
{!client.client_auth_id && (
<Dialog open={createUserOpen} onOpenChange={setCreateUserOpen}>
<DialogTrigger asChild>
<Button variant="outline" size="sm" className="gap-2 ml-2 border-dashed">
<Button effect="shine" variant="secondary" size="sm" className="gap-2 ml-2 border-dashed">
<UserPlus className="h-4 w-4" /> Portal Hesabı
</Button>
</DialogTrigger>
@@ -135,9 +134,9 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
<Label htmlFor="invitation-url">Davet bağlantısı</Label>
<div className="flex gap-2">
<Input id="invitation-url" value={invitationUrl} readOnly />
<Button
<Button effect="shine"
type="button"
variant="outline"
variant="secondary"
size="icon"
aria-label="Davet bağlantısını kopyala"
onClick={async () => {
@@ -153,8 +152,8 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
) : null}
</div>
<DialogFooter>
<Button type="button" variant="ghost" onClick={() => setCreateUserOpen(false)}>İptal</Button>
<Button type="submit" disabled={isCreatingUser || Boolean(invitationUrl)}>
<Button effect="shine" type="button" variant="secondary" onClick={() => setCreateUserOpen(false)}>İptal</Button>
<Button variant="default" effect="shine" type="submit" disabled={isCreatingUser || Boolean(invitationUrl)}>
{isCreatingUser && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Davet Oluştur
</Button>
@@ -226,7 +225,7 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
<Dialog open={openDialog} onOpenChange={setOpenDialog}>
<DialogTrigger asChild>
<Button size="sm" className="gap-2">
<Button variant="default" effect="shine" size="sm" className="gap-2">
<Plus className="h-4 w-4" /> Aktivite Ekle
</Button>
</DialogTrigger>
@@ -262,7 +261,7 @@ export function ClientDetailClient({ client, activities }: { client: ClientDetai
</div>
</div>
<DialogFooter>
<Button type="submit" disabled={isAddingActivity}>
<Button variant="default" effect="shine" type="submit" disabled={isAddingActivity}>
{isAddingActivity ? "Ekleniyor..." : "Ekle"}
</Button>
</DialogFooter>
+7 -10
View File
@@ -167,9 +167,6 @@ export function ClientsClient({
<h1 className="text-3xl font-semibold tracking-normal text-foreground">
CRM & Müşteriler
</h1>
<p className="mt-1 max-w-2xl text-sm text-muted-foreground">
Potansiyel müşterilerini pipeline üzerinden takip et ve müşteri ilişkilerini yönet.
</p>
</div>
<ClientDialog mode="create" />
@@ -331,7 +328,7 @@ function DraggableClientCard({
{client.name}
</PendingLink>
<div onPointerDown={(e) => e.stopPropagation()}>
<ClientDialog mode="edit" client={client} trigger={<Button variant="ghost" className="h-6 w-6 p-0"><Pencil className="h-3 w-3" /></Button>} />
<ClientDialog mode="edit" client={client} trigger={<Button size="icon-sm" effect="shine" variant="secondary" ><Pencil className="h-3 w-3" /></Button>} />
</div>
</div>
{client.company_name && <p className="text-xs text-muted-foreground mb-2 pointer-events-none">{client.company_name}</p>}
@@ -412,11 +409,11 @@ function ClientRow({ client }: { client: ClientListItem }) {
<div className="flex justify-end gap-2">
<PendingLink href={`/clients/${client.id}`} className="inline-flex" showSpinner>
<Button variant="ghost" className="h-9 w-9 p-0">
<Button size="icon" effect="shine" variant="secondary" >
<ArrowRight className="h-4 w-4" />
</Button>
</PendingLink>
<ClientDialog mode="edit" client={client} trigger={<Button variant="outline" className="h-9 min-w-20 gap-2 px-3"><Pencil className="h-4 w-4" /> Düzenle</Button>} />
<ClientDialog mode="edit" client={client} trigger={<Button effect="shine" variant="secondary" className="min-w-20 gap-2 px-3"><Pencil className="h-4 w-4" /> Düzenle</Button>} />
</div>
</div>
);
@@ -457,9 +454,9 @@ function ClientDialog({
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
{trigger || (
<Button
variant={mode === "create" ? "default" : "outline"}
className="h-9 min-w-24 gap-2 px-3"
<Button effect="shine"
variant={mode === "create" ? "default" : "secondary"}
className="min-w-24 gap-2 px-3"
>
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{mode === "create" ? "Müşteri ekle" : "Düzenle"}
@@ -483,7 +480,7 @@ function ClientDialog({
</div>
<DialogFooter className="shrink-0 border-t border-border bg-background p-5">
<Button type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{isSubmitting
? "Kaydediliyor"
@@ -198,7 +198,7 @@ export function ProjectDetailClient({
<div className="mx-auto flex max-w-7xl flex-col gap-6">
<div className="flex flex-col gap-4 border-b border-border pb-5 lg:flex-row lg:items-end lg:justify-between">
<div className="space-y-3">
<Button asChild variant="ghost" className="h-8 gap-2 px-0 text-muted-foreground">
<Button size="sm" effect="shine" asChild variant="secondary" className="gap-2 px-0 text-muted-foreground">
<PendingLink href="/projects" className="flex items-center gap-2" showSpinner>
<ArrowLeft className="h-4 w-4" />
Projelere dön
@@ -213,9 +213,6 @@ export function ProjectDetailClient({
{statusLabels[project.status]}
</Badge>
</div>
<p className="mt-1 max-w-3xl text-sm text-muted-foreground">
{project.description || "Bu proje için kısa açıklama eklenmedi."}
</p>
</div>
</div>
@@ -226,7 +223,7 @@ export function ProjectDetailClient({
<form action={completeProjectRecord}>
<input type="hidden" name="id" value={project.id} />
<PendingSubmitButton
variant="outline"
variant="secondary"
className="gap-2"
idleIcon={<CheckCircle2 className="h-4 w-4" />}
pendingChildren="Tamamlanıyor"
@@ -457,8 +454,8 @@ function PlanningSectionCard({ section }: { section: ProjectPlanningSectionItem
<input type="hidden" name="id" value={section.id} />
<input type="hidden" name="project_id" value={section.project_id} />
<PendingSubmitButton
variant="outline"
className="h-9 px-3 text-rose-600"
variant="secondary"
className="px-3 text-rose-600"
idleIcon={<Trash2 className="h-4 w-4" />}
aria-label="Sil"
/>
@@ -505,9 +502,9 @@ function SectionDialog({
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button
variant={mode === "create" ? "default" : "outline"}
className="h-9 gap-2 px-3"
<Button effect="shine"
variant={mode === "create" ? "default" : "secondary"}
className="gap-2 px-3"
>
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{mode === "create" ? "Alan ekle" : null}
@@ -574,7 +571,7 @@ function SectionDialog({
</div>
<DialogFooter>
<Button type="submit" disabled={isSubmitting} className="gap-2">
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting} className="gap-2">
{isSubmitting ? "Kaydediliyor" : "Kaydet"}
</Button>
</DialogFooter>
@@ -652,19 +649,19 @@ function TaskPanel({
</div>
<div className="flex flex-col gap-2 sm:flex-row">
<div className="flex rounded-sm border border-border p-1">
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "list" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "list" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("list")}
>
<LayoutList className="h-4 w-4" />
Liste
</Button>
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "kanban" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "kanban" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("kanban")}
>
<KanbanSquare className="h-4 w-4" />
@@ -720,12 +717,12 @@ function TaskPanel({
</div>
<div className="flex justify-start lg:justify-end">
{task.status !== "done" ? (
<Button
<Button effect="shine"
type="button"
variant="outline"
variant="secondary"
disabled={pendingTaskIds.has(task.id)}
aria-busy={pendingTaskIds.has(task.id)}
className="h-9 gap-2 px-3"
className="gap-2 px-3"
onClick={() => handleTaskStatusChange(task.id, "done")}
>
{pendingTaskIds.has(task.id) ? (
@@ -830,11 +827,12 @@ function ProjectTaskKanban({
<Badge className={priorityClasses[task.priority]}>{task.priority}</Badge>
{task.status !== "done" ? (
<Button
size="icon-sm"
effect="shine"
type="button"
variant="outline"
variant="secondary"
disabled={pendingTaskIds.has(task.id)}
aria-busy={pendingTaskIds.has(task.id)}
className="h-8 w-8 p-0"
title="Tamamla"
aria-label="Tamamla"
onClick={() => onTaskStatusChange(task.id, "done")}
@@ -881,7 +879,7 @@ function ProjectSettingsDialog({ project }: { project: ProjectDetail }) {
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button variant="outline" className="h-9 gap-2 px-3">
<Button effect="shine" variant="secondary" className="gap-2 px-3">
<Settings2 className="h-4 w-4" />
<span className="hidden sm:inline">Ayarlar</span>
</Button>
@@ -942,7 +940,7 @@ function ProjectSettingsDialog({ project }: { project: ProjectDetail }) {
</div>
<DialogFooter>
<Button type="submit" disabled={isSubmitting}>
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting}>
{isSubmitting ? "Kaydediliyor..." : "Kaydet"}
</Button>
</DialogFooter>
@@ -977,7 +975,7 @@ function ProjectTaskDialog({
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button className="h-9 gap-2 px-3">
<Button variant="default" effect="shine" className="gap-2 px-3">
<Plus className="h-4 w-4" />
Görev ekle
</Button>
@@ -1091,7 +1089,7 @@ function ProjectTaskDialog({
</div>
<DialogFooter>
<Button type="submit" disabled={isSubmitting} className="gap-2">
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting} className="gap-2">
<Plus className="h-4 w-4" />
{isSubmitting ? "Kaydediliyor" : "Görevi ekle"}
</Button>
@@ -1217,10 +1215,10 @@ function TabButton({
children: React.ReactNode;
}) {
return (
<Button
<Button effect="shine"
type="button"
variant={active ? "default" : "ghost"}
className="h-9 px-4"
variant={active ? "default" : "secondary"}
className="px-4"
onClick={onClick}
>
{children}
+20 -21
View File
@@ -119,9 +119,6 @@ export function ProjectsClient({ projects, clients }: ProjectsClientProps) {
<h1 className="text-3xl font-semibold tracking-normal text-foreground">
Projeler
</h1>
<p className="mt-1 max-w-2xl text-sm text-muted-foreground">
Müşteri işleri ve kişisel side projectleri aynı yerde takip et.
</p>
</div>
<div className="flex gap-2">
@@ -154,19 +151,19 @@ export function ProjectsClient({ projects, clients }: ProjectsClientProps) {
className="sm:w-80"
/>
<div className="flex rounded-sm border border-border p-1">
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "grid" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "grid" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("grid")}
>
<LayoutGrid className="h-4 w-4" />
Kart
</Button>
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "list" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "list" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("list")}
>
<List className="h-4 w-4" />
@@ -367,9 +364,10 @@ function ProjectActions({
>
{showDetail ? (
<Button
size="icon"
effect="shine"
asChild
variant="outline"
className="h-9 w-9 p-0"
variant="secondary"
title="Detaya git"
aria-label="Detaya git"
>
@@ -383,8 +381,8 @@ function ProjectActions({
<form action={completeProjectRecord}>
<input type="hidden" name="id" value={project.id} />
<PendingSubmitButton
variant="outline"
className="h-9 w-9 p-0"
size="icon"
variant="secondary"
title="Tamamla"
aria-label="Tamamla"
idleIcon={<CheckCircle2 className="h-4 w-4" />}
@@ -433,9 +431,10 @@ function ProjectDialog({
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button
variant={mode === "create" ? "default" : "outline"}
className={iconOnly ? "h-9 w-9 p-0" : "h-9 min-w-24 gap-2 px-3"}
<Button effect="shine"
variant={mode === "create" ? "default" : "secondary"}
size={iconOnly ? "icon" : "default"}
className={iconOnly ? undefined : "min-w-24 gap-2 px-3"}
title={mode === "create" ? "Proje ekle" : "Düzenle"}
aria-label={mode === "create" ? "Proje ekle" : "Düzenle"}
>
@@ -463,7 +462,7 @@ function ProjectDialog({
</div>
<DialogFooter className="shrink-0 border-t border-border bg-background p-5">
<Button type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{isSubmitting
? "Kaydediliyor"
@@ -787,7 +786,7 @@ function AIProjectRiskDialog({ projectId }: { projectId?: string }) {
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button variant="outline" className="gap-2 bg-indigo-50 text-indigo-700 border-indigo-200 hover:bg-indigo-100 hover:text-indigo-800">
<Button effect="shine" variant="secondary" className="gap-2">
<Brain className="h-4 w-4" />
AI Risk Analizi
</Button>
@@ -806,7 +805,7 @@ function AIProjectRiskDialog({ projectId }: { projectId?: string }) {
<div className="py-4">
{!result && !loading && (
<div className="text-center py-10">
<Button onClick={handleAnalyze} className="gap-2 bg-indigo-600 hover:bg-indigo-700 text-white">
<Button variant="default" effect="shine" onClick={handleAnalyze} className="gap-2">
<Brain className="h-4 w-4" />
Raporu Oluştur
</Button>
@@ -829,8 +828,8 @@ function AIProjectRiskDialog({ projectId }: { projectId?: string }) {
{result && (
<DialogFooter>
<Button variant="outline" onClick={() => setOpen(false)}>Kapat</Button>
<Button variant="default" onClick={handleAnalyze} className="gap-2">
<Button effect="shine" variant="secondary" onClick={() => setOpen(false)}>Kapat</Button>
<Button effect="shine" variant="default" onClick={handleAnalyze} className="gap-2">
<Brain className="h-4 w-4" />
Yeniden Oluştur
</Button>
+11 -16
View File
@@ -261,9 +261,6 @@ export default function SettingsPage() {
<h1 className="text-3xl font-semibold tracking-normal text-foreground">
Ayarlar
</h1>
<p className="mt-1 max-w-2xl text-sm text-muted-foreground">
Workspace markanızı, profilinizi, görünümü ve sistem tercihlerinizi yönetin.
</p>
</div>
</div>
@@ -273,18 +270,16 @@ export default function SettingsPage() {
{tabs.map((tab) => {
const Icon = tab.icon;
return (
<button
<Button effect="shine"
key={tab.name}
type="button"
variant={activeTab === tab.name ? "default" : "secondary"}
onClick={() => setActiveTab(tab.name)}
className={`flex shrink-0 items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors text-left ${
activeTab === tab.name
? "bg-primary/10 text-primary"
: "text-muted-foreground hover:bg-muted hover:text-foreground"
}`}
className="h-auto shrink-0 justify-start gap-3 px-4 py-3 text-left"
>
<Icon className="h-4 w-4" />
{tab.name}
</button>
</Button>
)
})}
</div>
@@ -448,7 +443,7 @@ export default function SettingsPage() {
</section>
<div className="flex items-center gap-3 border-t border-border pt-6">
<Button type="submit" loading={isSavingBranding} className="gap-2">
<Button variant="default" effect="shine" type="submit" loading={isSavingBranding} className="gap-2">
<Upload className="h-4 w-4" aria-hidden="true" />
Genel ayarları kaydet
</Button>
@@ -561,7 +556,7 @@ export default function SettingsPage() {
</div>
<div className="flex items-center gap-4 pt-4">
<Button type="submit" className="gap-2">
<Button variant="default" effect="shine" type="submit" className="gap-2">
<Save className="h-4 w-4" /> Profili Kaydet
</Button>
</div>
@@ -584,7 +579,7 @@ export default function SettingsPage() {
<Input id="password" name="password" type="password" minLength={8} placeholder="En az 8 karakter" required />
</div>
<div className="flex items-center gap-4 pt-4">
<Button type="submit" className="gap-2">
<Button variant="default" effect="shine" type="submit" className="gap-2">
<Save className="h-4 w-4" /> Şifreyi Güncelle
</Button>
</div>
@@ -644,7 +639,7 @@ export default function SettingsPage() {
)}
<div className="flex items-center gap-4 pt-4">
<Button onClick={handleSaveAI} className="gap-2">
<Button variant="default" effect="shine" onClick={handleSaveAI} className="gap-2">
<Save className="h-4 w-4" /> Ayarları Kaydet
</Button>
</div>
@@ -725,9 +720,9 @@ function BrandingAssetField({
className="cursor-pointer"
/>
{hasCustomAsset ? (
<Button
<Button effect="shine"
type="button"
variant="ghost"
variant="secondary"
size="sm"
disabled={disabled}
onClick={() => onRemove(asset)}
+16 -19
View File
@@ -184,9 +184,6 @@ export function TasksClient({ tasks, clients, projects }: TasksClientProps) {
<h1 className="text-3xl font-semibold tracking-normal text-foreground">
Görevler
</h1>
<p className="mt-1 max-w-2xl text-sm text-muted-foreground">
Proje ve müşteri bağlantılı işleri liste veya basit kanban ile takip et.
</p>
</div>
<TaskDialog mode="create" clients={clients} projects={projects} />
@@ -230,19 +227,19 @@ export function TasksClient({ tasks, clients, projects }: TasksClientProps) {
</SelectContent>
</Select>
<div className="flex rounded-sm border border-border p-1">
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "list" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "list" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("list")}
>
<LayoutList className="h-4 w-4" />
Liste
</Button>
<Button
<Button size="sm" effect="shine"
type="button"
variant={view === "kanban" ? "default" : "ghost"}
className="h-8 gap-2 px-3"
variant={view === "kanban" ? "default" : "secondary"}
className="gap-2 px-3"
onClick={() => setView("kanban")}
>
<KanbanSquare className="h-4 w-4" />
@@ -490,12 +487,12 @@ function TaskActions({
<div className={compact ? "flex justify-end gap-1" : "flex justify-start gap-2 lg:justify-end"}>
<TaskDialog mode="edit" task={task} clients={clients} projects={projects} />
{task.status !== "done" ? (
<Button
<Button effect="shine"
type="button"
variant="outline"
variant="secondary"
disabled={isPending}
aria-busy={isPending}
className="h-9 min-w-24 gap-2 px-3"
className="min-w-24 gap-2 px-3"
onClick={() => onTaskStatusChange(task.id, "done")}
>
{isPending ? (
@@ -506,12 +503,12 @@ function TaskActions({
{!compact ? (isPending ? "Tamamlanıyor" : "Tamamla") : null}
</Button>
) : null}
<Button
<Button effect="shine"
type="button"
variant="outline"
variant="secondary"
disabled={isPending}
aria-busy={isPending}
className="h-9 gap-2 px-3 text-rose-600"
className="gap-2 px-3 text-rose-600"
onClick={() => onTaskDelete(task.id)}
>
{isPending ? (
@@ -560,9 +557,9 @@ function TaskDialog({
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<Button
variant={mode === "create" ? "default" : "outline"}
className="h-9 min-w-24 gap-2 px-3"
<Button effect="shine"
variant={mode === "create" ? "default" : "secondary"}
className="min-w-24 gap-2 px-3"
>
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{mode === "create" ? "Görev ekle" : "Düzenle"}
@@ -583,7 +580,7 @@ function TaskDialog({
</div>
<DialogFooter className="shrink-0 border-t border-border bg-background p-5">
<Button type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
<Button variant="default" effect="shine" type="submit" disabled={isSubmitting} className="w-full gap-2 sm:w-auto">
{mode === "create" ? <Plus className="h-4 w-4" /> : <Pencil className="h-4 w-4" />}
{isSubmitting
? "Kaydediliyor"