diff --git a/frontend/App.tsx b/frontend/App.tsx index d498393..2d1940a 100755 --- a/frontend/App.tsx +++ b/frontend/App.tsx @@ -854,9 +854,9 @@ const App: React.FC = () => { // Show loading spinner during MSAL authentication interactions if (inProgress !== InteractionStatus.None) { return ( -
+
- + @@ -871,7 +871,7 @@ const App: React.FC = () => { } // Determine background color based on view to avoid grey bar on Home view - const mainBgColor = currentView === 'Home' ? 'bg-white' : 'bg-brand-gray'; + const mainBgColor = currentView === 'Home' ? 'bg-white' : 'bg-grey-100'; // Get user info from MSAL for sidebar display const userInfo = getUserInfo(msalInstance); diff --git a/frontend/components/Analytics.tsx b/frontend/components/Analytics.tsx index 716498d..2493b19 100755 --- a/frontend/components/Analytics.tsx +++ b/frontend/components/Analytics.tsx @@ -21,12 +21,12 @@ const StableLine = () => = ({ trend }) => { if (trend === 'up') { - return
Improving
; + return
Improving
; } if (trend === 'down') { - return
Declining
; + return
Declining
; } - return
Stable
; + return
Stable
; }; export const Analytics: React.FC = () => { @@ -65,10 +65,10 @@ export const Analytics: React.FC = () => { ]; return ( -
+
-

Performance Analytics

-

Overall usage and performance statistics for the tool.

+

Performance Analytics

+

Overall usage and performance statistics for the tool.

{/* Stats Cards */} @@ -77,13 +77,13 @@ export const Analytics: React.FC = () => { {stats.map((stat) => { const Icon = stat.icon; return ( -
-
- +
+
+
-

{stat.name}

-

{stat.value}

+

{stat.name}

+

{stat.value}

); @@ -93,45 +93,45 @@ export const Analytics: React.FC = () => { {/* AI Performance Summary */}
-

AI Performance Summary

-
+

AI Performance Summary

+
- +
-

Key Insight (Last 7 Days):

-

+

Key Insight (Last 7 Days):

+

A sharp decline in Best Practice adherence has been noted, primarily driven by proofs from the Barclays Q4 Social campaign. The Brand Guardian agent also shows a declining performance trend, suggesting a potential need for updated brand guideline training or proof review.

- + {/* Agent Performance Table */}
-

Agent Performance (Last 7 Days)

-
+

Agent Performance (Last 7 Days)

+
- - +
+ - - - - + + + + - - {agentPerformance.map((agent) => ( - - - + {agentPerformance.map((agent, index) => ( + + + - + diff --git a/frontend/components/Auditing.tsx b/frontend/components/Auditing.tsx index 51615c0..0129f54 100755 --- a/frontend/components/Auditing.tsx +++ b/frontend/components/Auditing.tsx @@ -22,41 +22,41 @@ const formatDate = (isoString: string) => { const FlagsTable: React.FC<{ items: FlaggedItem[], onNavigate: AuditingProps['onNavigate'] }> = ({ items, onNavigate }) => (
-
Agent NamePass RateAvg. Issues per ProofPerformance TrendAgent NamePass RateAvg. Issues per ProofPerformance Trend
{agent.name} +
{agent.name}
- = 80 ? 'bg-green-500' : agent.passRate < 70 ? 'bg-red-500' : 'bg-yellow-500'}`}> + = 80 ? 'bg-success' : agent.passRate < 70 ? 'bg-error' : 'bg-warning'}`}> {agent.passRate}%
{agent.avgIssues}{agent.avgIssues}
- +
+ - - - - - - - + + + + + + + - - {items.length > 0 ? items.map((item) => ( + + {items.length > 0 ? items.map((item, index) => ( onNavigate(item)} title={`Click to view Version ${item.version} of ${item.proofName}`} > - - - - - - + + + + + - + )) : ( - @@ -68,43 +68,43 @@ const FlagsTable: React.FC<{ items: FlaggedItem[], onNavigate: AuditingProps['on const ResolutionsTable: React.FC<{ items: ResolvedItem[], onNavigate: AuditingProps['onNavigate'] }> = ({ items, onNavigate }) => (
-
Proof NameProof VersionSubmitterSubmit AgencyAgent FlaggedUser CommentsDateProof NameProof VersionSubmitterSubmit AgencyAgent FlaggedUser CommentsDate
{item.proofName}Version {item.version}{item.submitter}{item.submitAgency}{item.agentFlagged} + {item.proofName}Version {item.version}{item.submitter}{item.submitAgency}{item.agentFlagged}
- {item.comments || No comment} + {item.comments || No comment}
{formatDate(item.timestamp)}{formatDate(item.timestamp)}
+ There are currently no flagged items to audit.
- +
+ - - - - - - - - + + + + + + + + - - {items.length > 0 ? items.map((item) => ( + + {items.length > 0 ? items.map((item, index) => ( onNavigate(item)} title={`Click to view Version ${item.version} of ${item.proofName}`} > - - - - - - + + + + + - - + )) : ( - @@ -116,39 +116,39 @@ const ResolutionsTable: React.FC<{ items: ResolvedItem[], onNavigate: AuditingPr const ErrorsTable: React.FC<{ items: ErrorItem[], onNavigate: AuditingProps['onNavigate'] }> = ({ items, onNavigate }) => (
-
Proof NameProof VersionSubmitterSubmit AgencyAgentAgent IssueUser CommentsDateProof NameProof VersionSubmitterSubmit AgencyAgentAgent IssueUser CommentsDate
{item.proofName}Version {item.version}{item.submitter}{item.submitAgency}{item.agent} + {item.proofName}Version {item.version}{item.submitter}{item.submitAgency}{item.agent}
{item.issue}
+
{item.resolution}
{formatDate(item.timestamp)}{formatDate(item.timestamp)}
+ There are currently no resolved items to audit.
- +
+ - - - - - - + + + + + + - - {items.length > 0 ? items.map((item) => ( + + {items.length > 0 ? items.map((item, index) => ( onNavigate(item)} title={`Click to view Version ${item.version} of ${item.proofName}`} > - - - - - + + + + - + )) : ( - @@ -163,20 +163,20 @@ export const Auditing: React.FC = ({ flaggedItems, resolvedItems, const [activeTab, setActiveTab] = useState<'Flags' | 'Resolutions' | 'Errors'>('Flags'); return ( -
+
-

Auditing

-

Review and investigate all user-flagged feedback.

+

Auditing

+

Review and investigate all user-flagged feedback.

-
+
-
+
{activeTab === 'Flags' && } {activeTab === 'Resolutions' && } {activeTab === 'Errors' && } diff --git a/frontend/components/Campaigns.tsx b/frontend/components/Campaigns.tsx index 915862b..f05f9e7 100755 --- a/frontend/components/Campaigns.tsx +++ b/frontend/components/Campaigns.tsx @@ -226,16 +226,16 @@ const StatusBadge: React.FC<{ status: string }> = ({ status }) => { let colorClasses = ''; switch (status) { case 'In Progress': - colorClasses = 'bg-blue-100 text-blue-800'; + colorClasses = 'bg-warning text-black-title'; break; case 'Completed': - colorClasses = 'bg-green-100 text-green-800'; + colorClasses = 'bg-success text-white'; break; case 'Needs Review': - colorClasses = 'bg-yellow-100 text-yellow-800'; + colorClasses = 'bg-warning-light text-black-title'; break; default: - colorClasses = 'bg-gray-100 text-gray-800'; + colorClasses = 'bg-grey-100 text-black-title'; } return ( @@ -248,19 +248,19 @@ const OverallStatusBadge: React.FC<{ status: OverallStatus }> = ({ status }) => let colorClasses = ''; switch (status) { case 'Passed': - colorClasses = 'bg-green-100 text-green-800'; + colorClasses = 'bg-success text-white'; break; case 'Failed': - colorClasses = 'bg-red-100 text-red-800'; + colorClasses = 'bg-error text-white'; break; case 'Requires Manual Legal Review': - colorClasses = 'bg-purple-100 text-purple-800'; + colorClasses = 'bg-warning text-black-title'; break; case 'Analysis Error': - colorClasses = 'bg-gray-200 text-gray-800'; + colorClasses = 'bg-grey-300 text-black-title'; break; } - + return ( {status} @@ -299,17 +299,17 @@ const CampaignList: React.FC<{ }, [filteredCampaigns]); const getStatusSelectClasses = (status: string) => { - let baseClasses = 'w-full text-center px-2.5 py-0.5 text-xs font-semibold rounded-full border border-transparent focus:outline-none focus:ring-2 focus:ring-brand-accent appearance-none cursor-pointer'; + let baseClasses = 'w-full text-center px-2.5 py-0.5 text-xs font-semibold rounded-full border border-transparent focus:outline-none focus:ring-2 focus:ring-active-blue appearance-none cursor-pointer'; let colorClasses = ''; switch (status) { case 'In Progress': - colorClasses = 'bg-blue-100 text-blue-800'; + colorClasses = 'bg-warning text-black-title'; break; case 'Completed': - colorClasses = 'bg-green-100 text-green-800'; + colorClasses = 'bg-success text-white'; break; default: - colorClasses = 'bg-gray-100 text-gray-800'; + colorClasses = 'bg-grey-100 text-black-title'; } return `${baseClasses} ${colorClasses}`; }; @@ -364,7 +364,7 @@ const CampaignList: React.FC<{ const isIndeterminate = selectedCampaigns.size > 0 && selectedCampaigns.size < filteredCampaigns.length; return ( -
+
setCampaignToDelete(null)} @@ -388,17 +388,17 @@ const CampaignList: React.FC<{
-

Campaigns

-

Manage your campaigns and proof collections.

+

Campaigns

+

Manage your campaigns and proof collections.

- +
@@ -425,7 +425,7 @@ const CampaignList: React.FC<{
)} -
+
-
Proof NameProof VersionSubmitterSubmit AgencyError SummaryDateProof NameProof VersionSubmitterSubmit AgencyError SummaryDate
{item.proofName}Version {item.version}{item.submitter}{item.submitAgency} + {item.proofName}Version {item.version}{item.submitter}{item.submitAgency}
{item.errorSummary}
{formatDate(item.timestamp)}{formatDate(item.timestamp)}
+ There are currently no analysis errors to audit.
- +
+ - - - - - - + + + + + + - - {filteredCampaigns.map((campaign) => { + + {filteredCampaigns.map((campaign, index) => { const isSelected = selectedCampaigns.has(campaign.name); return ( onSelectCampaign(campaign.name)} > - - + + - - - + + +
Campaign NameProofsStatusCreated ByOwning AgencyLast ModifiedCampaign NameProofsStatusCreated ByOwning AgencyLast Modified Actions
@@ -474,12 +474,12 @@ const CampaignList: React.FC<{ checked={isSelected} onChange={() => {}} // Handled by onClick onClick={(e) => handleSelectCampaign(campaign.name, e)} - className="h-4 w-4 text-brand-accent border-gray-300 rounded focus:ring-brand-accent cursor-pointer" + className="h-4 w-4 text-active-blue border-grey-300 rounded focus:ring-active-blue cursor-pointer" aria-label={`Select ${campaign.name}`} /> {campaign.name}{campaign.proofs}{campaign.name}{campaign.proofs}
- +
{campaign.agencyLead}{campaign.agency}{formatDate(campaign.lastModified)}{campaign.agencyLead}{campaign.agency}{formatDate(campaign.lastModified)}
- + setName(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md shadow-sm focus:ring-brand-accent focus:border-brand-accent transition bg-white text-gray-900" + className="mt-1 block w-full p-2 border-2 border-grey-700 rounded-[10px] shadow-sm focus:ring-active-blue focus:border-active-blue transition bg-white text-black-title" required />
- +
- + - {error &&

{error}

} + {error &&

{error}

}
- + setClientLead(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md shadow-sm focus:ring-brand-accent focus:border-brand-accent transition bg-white text-gray-900" + className="mt-1 block w-full p-2 border-2 border-grey-700 rounded-[10px] shadow-sm focus:ring-active-blue focus:border-active-blue transition bg-white text-black-title" required />
- +
- + setAgencyLead(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md shadow-sm focus:ring-brand-accent focus:border-brand-accent transition bg-white text-gray-900" + className="mt-1 block w-full p-2 border-2 border-grey-700 rounded-[10px] shadow-sm focus:ring-active-blue focus:border-active-blue transition bg-white text-black-title" required />
@@ -174,13 +174,13 @@ export const CreateCampaignModal: React.FC = ({ isOpen