From b158eddbcbbad4696927898a8b90e2d34d4df202 Mon Sep 17 00:00:00 2001 From: Michael Chihlas Date: Sat, 7 Mar 2026 22:53:20 -0500 Subject: [PATCH] refactor: adopt shared Button component in 18 modal components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace raw - + Create Category + } > diff --git a/frontend/src/components/admin/EditCategoryModal.tsx b/frontend/src/components/admin/EditCategoryModal.tsx index c51d6f0c..fb586940 100644 --- a/frontend/src/components/admin/EditCategoryModal.tsx +++ b/frontend/src/components/admin/EditCategoryModal.tsx @@ -2,6 +2,7 @@ import { useState } from 'react' import { cn } from '@/lib/utils' import type { StepCategoryListItem } from '@/types' import { Modal } from '@/components/common/Modal' +import { Button } from '@/components/ui/Button' interface EditCategoryModalProps { isOpen: boolean @@ -74,28 +75,22 @@ export function EditCategoryModal({ size="sm" footer={
- - + Save Changes +
} > diff --git a/frontend/src/components/library/ExportFlowModal.tsx b/frontend/src/components/library/ExportFlowModal.tsx index 5d044dce..e241491c 100644 --- a/frontend/src/components/library/ExportFlowModal.tsx +++ b/frontend/src/components/library/ExportFlowModal.tsx @@ -2,6 +2,7 @@ import { useState, useEffect } from 'react' import { Download, X } from 'lucide-react' import { flowTransferApi } from '@/api/flowTransfer' import { toast } from '@/lib/toast' +import { Button } from '@/components/ui/Button' interface ExportFlowModalProps { treeId: string @@ -79,20 +80,16 @@ export function ExportFlowModal({ treeId, treeName, onClose }: ExportFlowModalPr {/* Footer */}
- - + Download .rfflow +
diff --git a/frontend/src/components/library/FolderEditModal.tsx b/frontend/src/components/library/FolderEditModal.tsx index 63b8415c..25a3c596 100644 --- a/frontend/src/components/library/FolderEditModal.tsx +++ b/frontend/src/components/library/FolderEditModal.tsx @@ -4,6 +4,7 @@ import { foldersApi } from '@/api/folders' import type { FolderListItem, FolderCreate, FolderUpdate } from '@/types' import { cn } from '@/lib/utils' import { toast } from '@/lib/toast' +import { Button } from '@/components/ui/Button' // Predefined color options const FOLDER_COLORS = [ @@ -259,24 +260,19 @@ export function FolderEditModal({ {/* Actions */}
- - + {isEditMode ? 'Save Changes' : 'Create Folder'} +
diff --git a/frontend/src/components/library/ForkModal.tsx b/frontend/src/components/library/ForkModal.tsx index c56b532e..7e7f1f31 100644 --- a/frontend/src/components/library/ForkModal.tsx +++ b/frontend/src/components/library/ForkModal.tsx @@ -4,6 +4,7 @@ import { treesApi } from '@/api/trees' import { toast } from '@/lib/toast' import { cn } from '@/lib/utils' import { useNavigate } from 'react-router-dom' +import { Button } from '@/components/ui/Button' interface ForkModalProps { treeId: string @@ -116,20 +117,20 @@ export function ForkModal({ treeId, treeName, onClose }: ForkModalProps) { {/* Footer */}
- - + Fork Flow +
diff --git a/frontend/src/components/library/ImportFlowModal.tsx b/frontend/src/components/library/ImportFlowModal.tsx index ec44fe46..45f6aad0 100644 --- a/frontend/src/components/library/ImportFlowModal.tsx +++ b/frontend/src/components/library/ImportFlowModal.tsx @@ -7,6 +7,7 @@ import { toast } from '@/lib/toast' import { cn } from '@/lib/utils' import { useNavigate } from 'react-router-dom' import { getTreeEditorPath } from '@/lib/routing' +import { Button } from '@/components/ui/Button' interface ImportFlowModalProps { onClose: () => void @@ -227,28 +228,26 @@ export function ImportFlowModal({ onClose }: ImportFlowModalProps) { {/* Footer */}
{step === 'preview' && ( - + )} - + {step === 'preview' && ( - + Import as Draft + )}
diff --git a/frontend/src/components/library/ShareTreeModal.tsx b/frontend/src/components/library/ShareTreeModal.tsx index 3fab9b62..cc97b08f 100644 --- a/frontend/src/components/library/ShareTreeModal.tsx +++ b/frontend/src/components/library/ShareTreeModal.tsx @@ -4,6 +4,7 @@ import type { TreeListItem, TreeShare, TreeVisibility } from '@/types' import { treesApi } from '@/api/trees' import { cn } from '@/lib/utils' import { toast } from '@/lib/toast' +import { Button } from '@/components/ui/Button' interface ShareTreeModalProps { tree: TreeListItem @@ -201,16 +202,13 @@ export function ShareTreeModal({ tree, isOpen, onClose }: ShareTreeModalProps) { {/* Generate Button */} {!activeShare && ( - + Generate Share Link + )} {/* Active Share Link */} @@ -263,15 +261,9 @@ export function ShareTreeModal({ tree, isOpen, onClose }: ShareTreeModalProps) { {/* Footer */}
- +
diff --git a/frontend/src/components/procedural/IntakeFormModal.tsx b/frontend/src/components/procedural/IntakeFormModal.tsx index d3b09355..19fae7ff 100644 --- a/frontend/src/components/procedural/IntakeFormModal.tsx +++ b/frontend/src/components/procedural/IntakeFormModal.tsx @@ -2,6 +2,7 @@ import { useState } from 'react' import type { IntakeFormField } from '@/types' import { PasswordInput } from '@/components/common/PasswordInput' import { cn } from '@/lib/utils' +import { Button } from '@/components/ui/Button' interface IntakeFormModalProps { isOpen: boolean @@ -240,19 +241,16 @@ export function IntakeFormModal({ isOpen, fields, treeName, onSubmit, onCancel } {/* Footer */}
- - + +
diff --git a/frontend/src/components/session/ForkTreeModal.tsx b/frontend/src/components/session/ForkTreeModal.tsx index 34a1d210..a5dba031 100644 --- a/frontend/src/components/session/ForkTreeModal.tsx +++ b/frontend/src/components/session/ForkTreeModal.tsx @@ -1,7 +1,8 @@ import { useState } from 'react' import { Modal } from '@/components/common/Modal' -import { GitFork, Loader2 } from 'lucide-react' +import { GitFork } from 'lucide-react' import { cn } from '@/lib/utils' +import { Button } from '@/components/ui/Button' interface ForkTreeModalProps { isOpen: boolean @@ -44,38 +45,21 @@ export function ForkTreeModal({ const footer = (
- - + + Save as Personal Tree +
) diff --git a/frontend/src/components/session/SaveSessionAsTreeModal.tsx b/frontend/src/components/session/SaveSessionAsTreeModal.tsx index aceaa836..11f5635b 100644 --- a/frontend/src/components/session/SaveSessionAsTreeModal.tsx +++ b/frontend/src/components/session/SaveSessionAsTreeModal.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { X } from 'lucide-react' import { cn } from '@/lib/utils' +import { Button } from '@/components/ui/Button' interface SaveSessionAsTreeModalProps { isOpen: boolean @@ -130,27 +131,20 @@ export function SaveSessionAsTreeModal({ {/* Actions */}
- - + Save as Tree +
diff --git a/frontend/src/components/session/SessionOutcomeModal.tsx b/frontend/src/components/session/SessionOutcomeModal.tsx index ac5e1f31..b011444e 100644 --- a/frontend/src/components/session/SessionOutcomeModal.tsx +++ b/frontend/src/components/session/SessionOutcomeModal.tsx @@ -2,6 +2,7 @@ import { useRef } from 'react' import { Modal } from '@/components/common/Modal' import { cn } from '@/lib/utils' import type { SessionOutcome } from '@/types' +import { Button } from '@/components/ui/Button' interface SessionOutcomeModalProps { isOpen: boolean @@ -46,28 +47,21 @@ export function SessionOutcomeModal({ title="Session Outcome" footer={(
- - + Complete Session +
)} > diff --git a/frontend/src/components/session/ShareSessionModal.tsx b/frontend/src/components/session/ShareSessionModal.tsx index 338875b3..d3ebd42b 100644 --- a/frontend/src/components/session/ShareSessionModal.tsx +++ b/frontend/src/components/session/ShareSessionModal.tsx @@ -7,6 +7,7 @@ import { cn } from '@/lib/utils' import { toast } from '@/lib/toast' import { Spinner } from '@/components/common/Spinner' import { Modal } from '@/components/common/Modal' +import { Button } from '@/components/ui/Button' interface ShareSessionModalProps { sessionId: string @@ -180,15 +181,9 @@ export function ShareSessionModal({ sessionId, sessionLabel, isOpen, onClose }: size="lg" footer={
- +
} > @@ -300,17 +295,15 @@ export function ShareSessionModal({ sessionId, sessionLabel, isOpen, onClose }: {/* Generate Button */} - + Generate Link + {/* Existing Shares */} diff --git a/frontend/src/components/session/StepRatingModal.tsx b/frontend/src/components/session/StepRatingModal.tsx index 1d1b604f..06966d72 100644 --- a/frontend/src/components/session/StepRatingModal.tsx +++ b/frontend/src/components/session/StepRatingModal.tsx @@ -3,6 +3,7 @@ import { X, ThumbsUp, ThumbsDown } from 'lucide-react' import { StarRating } from '@/components/common/StarRating' import { cn } from '@/lib/utils' import type { Step } from '@/types' +import { Button } from '@/components/ui/Button' interface StepRatingData { rating: number @@ -190,28 +191,21 @@ export function StepRatingModal({ {/* Footer */}
- - + Submit Ratings +
diff --git a/frontend/src/components/session/VariablePromptModal.tsx b/frontend/src/components/session/VariablePromptModal.tsx index 9182b9aa..8467548b 100644 --- a/frontend/src/components/session/VariablePromptModal.tsx +++ b/frontend/src/components/session/VariablePromptModal.tsx @@ -1,5 +1,6 @@ import { useState } from 'react' import { cn } from '@/lib/utils' +import { Button } from '@/components/ui/Button' interface VariablePromptModalProps { /** The prompt text from [USER_INPUT:prompt] */ @@ -45,26 +46,20 @@ export function VariablePromptModal({ prompt, onSubmit, onCancel }: VariableProm />
- - +
diff --git a/frontend/src/components/step-library/StepDetailModal.tsx b/frontend/src/components/step-library/StepDetailModal.tsx index 56fe83c2..2b13975e 100644 --- a/frontend/src/components/step-library/StepDetailModal.tsx +++ b/frontend/src/components/step-library/StepDetailModal.tsx @@ -4,6 +4,7 @@ import { cn } from '@/lib/utils' import { MarkdownContent } from '@/components/ui/MarkdownContent' import { stepsApi } from '@/api/steps' import type { Step, Review } from '@/types/step' +import { Button } from '@/components/ui/Button' interface StepDetailModalProps { stepId: string @@ -318,22 +319,20 @@ export function StepDetailModal({ stepId, onClose, onInsert }: StepDetailModalPr {/* Footer - Actions */}
- - +
diff --git a/frontend/src/components/step-library/StepForm.tsx b/frontend/src/components/step-library/StepForm.tsx index df73d3fa..5dc01dd9 100644 --- a/frontend/src/components/step-library/StepForm.tsx +++ b/frontend/src/components/step-library/StepForm.tsx @@ -3,6 +3,7 @@ import { Plus, X, HelpCircle, Zap, CheckCircle } from 'lucide-react' import { cn } from '@/lib/utils' import { stepCategoriesApi } from '@/api/stepCategories' import type { StepCreate, StepCategory, StepCommand } from '@/types/step' +import { Button } from '@/components/ui/Button' interface StepFormProps { onSubmit: (data: StepCreate) => void @@ -369,20 +370,21 @@ export function StepForm({ onSubmit, onCancel, initialData, submitLabel, isSubmi {/* Actions */}
- - + {submitLabel ?? 'Insert Step'} +
) diff --git a/frontend/src/components/tree-editor/AIFixReviewModal.tsx b/frontend/src/components/tree-editor/AIFixReviewModal.tsx index 1f3a096e..17f21a64 100644 --- a/frontend/src/components/tree-editor/AIFixReviewModal.tsx +++ b/frontend/src/components/tree-editor/AIFixReviewModal.tsx @@ -2,6 +2,7 @@ import { useState } from 'react' import { X, Check, SkipForward, Sparkles, ChevronDown, ChevronUp } from 'lucide-react' import { cn } from '@/lib/utils' import type { AIFixProposal } from '@/types' +import { Button } from '@/components/ui/Button' interface AIFixReviewModalProps { fixes: AIFixProposal[] @@ -125,20 +126,21 @@ export function AIFixReviewModal({ fixes, onApply, onApplyAll, onClose }: AIFixR {/* Action buttons */}
- - +
)} @@ -149,19 +151,13 @@ export function AIFixReviewModal({ fixes, onApply, onApplyAll, onClose }: AIFixR {/* Footer */}
- + {!allHandled && ( - + )}
diff --git a/frontend/src/components/tree-editor/NodeEditorModal.tsx b/frontend/src/components/tree-editor/NodeEditorModal.tsx index 96fbc31e..43312d96 100644 --- a/frontend/src/components/tree-editor/NodeEditorModal.tsx +++ b/frontend/src/components/tree-editor/NodeEditorModal.tsx @@ -5,6 +5,7 @@ import { NodeFormDecision } from './NodeFormDecision' import { NodeFormAction } from './NodeFormAction' import { NodeFormResolution } from './NodeFormResolution' import type { TreeStructure } from '@/types' +import { Button } from '@/components/ui/Button' interface NodeEditorModalProps { node: TreeStructure @@ -65,20 +66,19 @@ export function NodeEditorModal({ node, onClose, isNewNode = false }: NodeEditor const footerContent = (
- - +
)