final ui of planner and writer
This commit is contained in:
@@ -11,6 +11,7 @@ export const HeaderMetrics: React.FC = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="igny8-header-metrics flex">
|
<div className="igny8-header-metrics flex">
|
||||||
{metrics.map((metric, index) => {
|
{metrics.map((metric, index) => {
|
||||||
|
const isCredits = metric.label.toLowerCase() === 'credits';
|
||||||
const metricElement = (
|
const metricElement = (
|
||||||
<div className={`igny8-header-metric ${metric.tooltip ? 'cursor-help' : ''}`}>
|
<div className={`igny8-header-metric ${metric.tooltip ? 'cursor-help' : ''}`}>
|
||||||
<div className={`igny8-header-metric-accent ${metric.accentColor}`}></div>
|
<div className={`igny8-header-metric-accent ${metric.accentColor}`}></div>
|
||||||
@@ -20,7 +21,7 @@ export const HeaderMetrics: React.FC = () => {
|
|||||||
<InfoIcon className="w-3 h-3 text-gray-400 dark:text-gray-500" />
|
<InfoIcon className="w-3 h-3 text-gray-400 dark:text-gray-500" />
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
<span className="igny8-header-metric-value">
|
<span className={`igny8-header-metric-value ${isCredits ? 'igny8-header-metric-value-credits' : ''}`}>
|
||||||
{typeof metric.value === 'number' ? metric.value.toLocaleString() : metric.value}
|
{typeof metric.value === 'number' ? metric.value.toLocaleString() : metric.value}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -105,10 +105,6 @@ const AppHeader: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Site and Sector Selector - Desktop */}
|
|
||||||
<div className="hidden lg:flex items-center gap-4 ml-auto">
|
|
||||||
<SiteAndSectorSelector />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Right side actions */}
|
{/* Right side actions */}
|
||||||
@@ -121,6 +117,11 @@ const AppHeader: React.FC = () => {
|
|||||||
{/* Header Metrics */}
|
{/* Header Metrics */}
|
||||||
<HeaderMetrics />
|
<HeaderMetrics />
|
||||||
|
|
||||||
|
{/* Site and Sector Selector - Desktop */}
|
||||||
|
<div className="hidden lg:flex items-center">
|
||||||
|
<SiteAndSectorSelector />
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Search Icon */}
|
{/* Search Icon */}
|
||||||
<button
|
<button
|
||||||
onClick={() => setIsSearchOpen(true)}
|
onClick={() => setIsSearchOpen(true)}
|
||||||
|
|||||||
@@ -704,45 +704,6 @@ export default function IndustriesSectorsKeywords() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Keyword Count Summary & Next Step CTA */}
|
|
||||||
{activeSite && activeSector && (
|
|
||||||
<div className="mx-6 mt-6 mb-4">
|
|
||||||
<div className="flex flex-wrap items-center justify-between gap-4 p-4 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm">
|
|
||||||
<div className="flex items-center gap-6">
|
|
||||||
<div className="flex items-center gap-2">
|
|
||||||
<span className="text-sm font-medium text-gray-700 dark:text-gray-300">
|
|
||||||
<span className="text-green-600 dark:text-green-400 font-bold">{addedCount}</span> keywords in your workflow
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div className="w-px h-5 bg-gray-300 dark:bg-gray-600 hidden sm:block" />
|
|
||||||
<div className="flex items-center gap-2">
|
|
||||||
<span className="text-sm font-medium text-gray-700 dark:text-gray-300">
|
|
||||||
<span className="text-blue-600 dark:text-blue-400 font-bold">{availableCount}</span> available to add
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{addedCount > 0 && (
|
|
||||||
<Button
|
|
||||||
variant="success"
|
|
||||||
size="sm"
|
|
||||||
onClick={() => navigate('/planner/keywords')}
|
|
||||||
endIcon={
|
|
||||||
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7l5 5m0 0l-5 5m5-5H6" />
|
|
||||||
</svg>
|
|
||||||
}
|
|
||||||
>
|
|
||||||
Next: Plan Your Content
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
{/* Coming Soon Teaser */}
|
|
||||||
<p className="text-xs text-gray-500 dark:text-gray-400 mt-2 text-center">
|
|
||||||
Looking for more keywords? Keyword Research coming soon!
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<TablePageTemplate
|
<TablePageTemplate
|
||||||
columns={pageConfig.columns}
|
columns={pageConfig.columns}
|
||||||
data={seedKeywords}
|
data={seedKeywords}
|
||||||
@@ -755,6 +716,34 @@ export default function IndustriesSectorsKeywords() {
|
|||||||
difficulty: difficultyFilter,
|
difficulty: difficultyFilter,
|
||||||
showNotAddedOnly: showNotAddedOnly ? 'true' : '',
|
showNotAddedOnly: showNotAddedOnly ? 'true' : '',
|
||||||
}}
|
}}
|
||||||
|
customActions={activeSite && activeSector ? (
|
||||||
|
<div className="flex items-center gap-3 px-3 py-1.5 bg-gray-50 dark:bg-gray-800/50 rounded-lg border border-gray-200 dark:border-gray-700">
|
||||||
|
<span className="text-xs font-medium text-gray-600 dark:text-gray-400">
|
||||||
|
<span className="text-green-600 dark:text-green-400 font-bold">{addedCount}</span> in workflow
|
||||||
|
</span>
|
||||||
|
<div className="w-px h-4 bg-gray-300 dark:bg-gray-600" />
|
||||||
|
<span className="text-xs font-medium text-gray-600 dark:text-gray-400">
|
||||||
|
<span className="text-blue-600 dark:text-blue-400 font-bold">{availableCount}</span> available
|
||||||
|
</span>
|
||||||
|
{addedCount > 0 && (
|
||||||
|
<>
|
||||||
|
<div className="w-px h-4 bg-gray-300 dark:bg-gray-600" />
|
||||||
|
<Button
|
||||||
|
variant="success"
|
||||||
|
size="sm"
|
||||||
|
onClick={() => navigate('/planner/keywords')}
|
||||||
|
endIcon={
|
||||||
|
<svg className="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7l5 5m0 0l-5 5m5-5H6" />
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Next: Plan Your Content
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
) : undefined}
|
||||||
onFilterChange={(key, value) => {
|
onFilterChange={(key, value) => {
|
||||||
const stringValue = value === null || value === undefined ? '' : String(value);
|
const stringValue = value === null || value === undefined ? '' : String(value);
|
||||||
|
|
||||||
|
|||||||
@@ -383,6 +383,11 @@ select.igny8-select-styled option:checked {
|
|||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Credits-specific value - 20% smaller than other metrics */
|
||||||
|
.igny8-header-metric-value-credits {
|
||||||
|
font-size: 13px; /* 16px * 0.8 = 12.8px ≈ 13px */
|
||||||
|
}
|
||||||
|
|
||||||
.dark .igny8-header-metric-value {
|
.dark .igny8-header-metric-value {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -545,7 +545,7 @@ export default function TablePageTemplate({
|
|||||||
return (
|
return (
|
||||||
<div className={className}>
|
<div className={className}>
|
||||||
{/* Bulk Actions and Action Buttons Row - Reduced padding */}
|
{/* Bulk Actions and Action Buttons Row - Reduced padding */}
|
||||||
<div className="flex flex-col gap-2.5">
|
<div className="flex flex-col gap-2.5 mb-2.5">
|
||||||
{/* Main row with buttons and metrics */}
|
{/* Main row with buttons and metrics */}
|
||||||
<div className="flex items-center justify-between py-1.5">
|
<div className="flex items-center justify-between py-1.5">
|
||||||
{/* Left side - Create Button, Primary Action, Bulk Actions, Filter Toggle */}
|
{/* Left side - Create Button, Primary Action, Bulk Actions, Filter Toggle */}
|
||||||
@@ -728,10 +728,10 @@ export default function TablePageTemplate({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Filters Row - Below action buttons, centered */}
|
{/* Filters Row - Below action buttons, left aligned with shadow */}
|
||||||
{showFilters && (renderFilters || filters.length > 0) && (
|
{showFilters && (renderFilters || filters.length > 0) && (
|
||||||
<div className="flex justify-center py-1.5">
|
<div className="flex justify-start py-1.5 mb-2.5">
|
||||||
<div className="bg-gray-50 dark:bg-gray-800/30 rounded-lg px-4 py-2 border border-gray-200 dark:border-gray-700">
|
<div className="bg-gray-50 dark:bg-gray-800/30 rounded-lg px-4 py-2 border border-gray-200 dark:border-gray-700 shadow-md">
|
||||||
<div className="flex gap-3 items-center flex-wrap">
|
<div className="flex gap-3 items-center flex-wrap">
|
||||||
{renderFilters ? (
|
{renderFilters ? (
|
||||||
renderFilters
|
renderFilters
|
||||||
|
|||||||
Reference in New Issue
Block a user