chore(dependencies): update Tailwind CSS and related packages for improved styling
- Added @tailwindcss/postcss as a new dependency. - Updated tailwindcss to version 4.1.11 for enhanced features and performance. - Upgraded prettier-plugin-tailwindcss to version 0.6.13 for better formatting support. - Adjusted postcss.config.js to use the new Tailwind CSS plugin structure. - Removed the obsolete tailwind.config.js file as it is no longer needed.
This commit is contained in:
1812
worklenz-frontend/package-lock.json
generated
1812
worklenz-frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -60,6 +60,7 @@
|
|||||||
"worklenz": "file:"
|
"worklenz": "file:"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@tailwindcss/postcss": "^4.1.11",
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
"@testing-library/jest-dom": "^6.6.3",
|
||||||
"@testing-library/react": "^16.3.0",
|
"@testing-library/react": "^16.3.0",
|
||||||
"@testing-library/user-event": "^14.6.1",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
@@ -73,11 +74,10 @@
|
|||||||
"@types/react-dom": "19.0.0",
|
"@types/react-dom": "19.0.0",
|
||||||
"@types/react-window": "^1.8.8",
|
"@types/react-window": "^1.8.8",
|
||||||
"@vitejs/plugin-react": "^4.3.4",
|
"@vitejs/plugin-react": "^4.3.4",
|
||||||
"autoprefixer": "^10.4.20",
|
|
||||||
"postcss": "^8.5.2",
|
"postcss": "^8.5.2",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.8",
|
"prettier-plugin-tailwindcss": "^0.6.13",
|
||||||
"rollup": "^4.40.2",
|
"rollup": "^4.40.2",
|
||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^4.1.11",
|
||||||
"terser": "^5.39.0",
|
"terser": "^5.39.0",
|
||||||
"typescript": "^5.7.3",
|
"typescript": "^5.7.3",
|
||||||
"vite": "^6.3.5",
|
"vite": "^6.3.5",
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: {
|
plugins: {
|
||||||
tailwindcss: {},
|
'@tailwindcss/postcss': {},
|
||||||
autoprefixer: {},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ const AssigneeSelector: React.FC<AssigneeSelectorProps> = ({
|
|||||||
<div
|
<div
|
||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed z-[9999] w-72 rounded-md shadow-lg border
|
fixed z-9999 w-72 rounded-md shadow-lg border
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-800 border-gray-600'
|
? 'bg-gray-800 border-gray-600'
|
||||||
: 'bg-white border-gray-200'
|
: 'bg-white border-gray-200'
|
||||||
@@ -252,7 +252,7 @@ const AssigneeSelector: React.FC<AssigneeSelectorProps> = ({
|
|||||||
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
||||||
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
||||||
}
|
}
|
||||||
focus:outline-none focus:ring-1 focus:ring-blue-500
|
focus:outline-hidden focus:ring-1 focus:ring-blue-500
|
||||||
`}
|
`}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const Avatar: React.FC<AvatarProps> = ({
|
|||||||
src={src}
|
src={src}
|
||||||
alt={name}
|
alt={name}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
className={`rounded-full object-cover shadow-sm cursor-pointer ${className}`}
|
className={`rounded-full object-cover shadow-xs cursor-pointer ${className}`}
|
||||||
style={avatarStyle}
|
style={avatarStyle}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
@@ -78,7 +78,7 @@ const Avatar: React.FC<AvatarProps> = ({
|
|||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
className={`rounded-full flex items-center justify-center text-white font-medium shadow-sm cursor-pointer ${className}`}
|
className={`rounded-full flex items-center justify-center text-white font-medium shadow-xs cursor-pointer ${className}`}
|
||||||
style={avatarStyle}
|
style={avatarStyle}
|
||||||
>
|
>
|
||||||
{name.charAt(0)?.toUpperCase() || '?'}
|
{name.charAt(0)?.toUpperCase() || '?'}
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ const AvatarGroup: React.FC<AvatarGroupProps> = ({
|
|||||||
isDarkMode={isDarkMode}
|
isDarkMode={isDarkMode}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className={`rounded-full flex items-center justify-center text-white font-medium shadow-sm border-2 cursor-pointer ${
|
className={`rounded-full flex items-center justify-center text-white font-medium shadow-xs border-2 cursor-pointer ${
|
||||||
isDarkMode
|
isDarkMode
|
||||||
? 'bg-gray-600 border-gray-700'
|
? 'bg-gray-600 border-gray-700'
|
||||||
: 'bg-gray-400 border-white'
|
: 'bg-gray-400 border-white'
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const Button: React.FC<ButtonProps & React.ButtonHTMLAttributes<HTMLButtonElemen
|
|||||||
type = 'button',
|
type = 'button',
|
||||||
...props
|
...props
|
||||||
}) => {
|
}) => {
|
||||||
const baseClasses = `inline-flex items-center justify-center font-medium transition-colors duration-200 focus:outline-none focus:ring-2 ${isDarkMode ? 'focus:ring-blue-400' : 'focus:ring-blue-500'} focus:ring-offset-1 ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`;
|
const baseClasses = `inline-flex items-center justify-center font-medium transition-colors duration-200 focus:outline-hidden focus:ring-2 ${isDarkMode ? 'focus:ring-blue-400' : 'focus:ring-blue-500'} focus:ring-offset-1 ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`;
|
||||||
|
|
||||||
const variantClasses = {
|
const variantClasses = {
|
||||||
text: isDarkMode
|
text: isDarkMode
|
||||||
@@ -42,7 +42,7 @@ const Button: React.FC<ButtonProps & React.ButtonHTMLAttributes<HTMLButtonElemen
|
|||||||
};
|
};
|
||||||
|
|
||||||
const sizeClasses = {
|
const sizeClasses = {
|
||||||
small: 'px-2 py-1 text-xs rounded',
|
small: 'px-2 py-1 text-xs rounded-sm',
|
||||||
default: 'px-3 py-2 text-sm rounded-md',
|
default: 'px-3 py-2 text-sm rounded-md',
|
||||||
large: 'px-4 py-3 text-base rounded-lg'
|
large: 'px-4 py-3 text-base rounded-lg'
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const CustomColordLabel: React.FC<CustomColordLabelProps> = ({
|
|||||||
return (
|
return (
|
||||||
<Tooltip title={label.name}>
|
<Tooltip title={label.name}>
|
||||||
<span
|
<span
|
||||||
className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium text-white flex-shrink-0 max-w-[120px]"
|
className="inline-flex items-center px-2 py-0.5 rounded-sm text-xs font-medium text-white shrink-0 max-w-[120px]"
|
||||||
style={{ backgroundColor: label.color }}
|
style={{ backgroundColor: label.color }}
|
||||||
>
|
>
|
||||||
<span className="truncate">{truncatedName}</span>
|
<span className="truncate">{truncatedName}</span>
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ const LabelsSelector: React.FC<LabelsSelectorProps> = ({
|
|||||||
<div
|
<div
|
||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed z-[9999] w-72 rounded-md shadow-lg border
|
fixed z-9999 w-72 rounded-md shadow-lg border
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-800 border-gray-600'
|
? 'bg-gray-800 border-gray-600'
|
||||||
: 'bg-white border-gray-200'
|
: 'bg-white border-gray-200'
|
||||||
@@ -206,7 +206,7 @@ const LabelsSelector: React.FC<LabelsSelectorProps> = ({
|
|||||||
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
||||||
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
||||||
}
|
}
|
||||||
focus:outline-none focus:ring-1 focus:ring-blue-500
|
focus:outline-hidden focus:ring-1 focus:ring-blue-500
|
||||||
`}
|
`}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -230,7 +230,7 @@ const LabelsSelector: React.FC<LabelsSelectorProps> = ({
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className="w-3 h-3 rounded-full flex-shrink-0"
|
className="w-3 h-3 rounded-full shrink-0"
|
||||||
style={{ backgroundColor: label.color_code }}
|
style={{ backgroundColor: label.color_code }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const Tag: React.FC<TagProps> = ({
|
|||||||
default: 'px-2 py-1 text-xs'
|
default: 'px-2 py-1 text-xs'
|
||||||
};
|
};
|
||||||
|
|
||||||
const baseClasses = `inline-flex items-center font-medium rounded ${sizeClasses[size]}`;
|
const baseClasses = `inline-flex items-center font-medium rounded-sm ${sizeClasses[size]}`;
|
||||||
|
|
||||||
if (variant === 'outlined') {
|
if (variant === 'outlined') {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
return (
|
return (
|
||||||
<div className={`relative group ${className}`}>
|
<div className={`relative group ${className}`}>
|
||||||
{children}
|
{children}
|
||||||
<div className={`absolute ${placementClasses[placement]} px-2 py-1 text-xs text-white ${isDarkMode ? 'bg-gray-700' : 'bg-gray-900'} rounded shadow-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 z-50 pointer-events-none min-w-max`}>
|
<div className={`absolute ${placementClasses[placement]} px-2 py-1 text-xs text-white ${isDarkMode ? 'bg-gray-700' : 'bg-gray-900'} rounded-sm shadow-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 z-50 pointer-events-none min-w-max`}>
|
||||||
{title}
|
{title}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ const EnhancedKanbanCreateTaskCard: React.FC<EnhancedKanbanCreateTaskCardProps>
|
|||||||
marginBottom: 8,
|
marginBottom: 8,
|
||||||
marginTop: 8,
|
marginTop: 8,
|
||||||
}}
|
}}
|
||||||
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline`}
|
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline-solid`}
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
ref={inputRef}
|
ref={inputRef}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ const GranttChart = React.forwardRef(({ type, date }: { type: string; date: Date
|
|||||||
style={{
|
style={{
|
||||||
background: themeWiseColor('#fff', '#141414', themeMode),
|
background: themeWiseColor('#fff', '#141414', themeMode),
|
||||||
}}
|
}}
|
||||||
className={`after:content relative z-10 after:absolute after:-right-1 after:top-0 after:-z-10 after:h-full after:w-1.5 after:bg-transparent after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent`}
|
className={`after:content relative z-10 after:absolute after:-right-1 after:top-0 after:-z-10 after:h-full after:w-1.5 after:bg-transparent after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent`}
|
||||||
>
|
>
|
||||||
<GranttMembersTable
|
<GranttMembersTable
|
||||||
members={teamData}
|
members={teamData}
|
||||||
@@ -266,7 +266,7 @@ const GranttChart = React.forwardRef(({ type, date }: { type: string; date: Date
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style={{ width: '100%', height: '100%' }}
|
style={{ width: '100%', height: '100%' }}
|
||||||
className={`rounded-sm outline-1 hover:outline ${themeMode === 'dark' ? 'outline-white/10' : 'outline-black/10'}`}
|
className={`rounded-xs outline-1 hover:outline-solid ${themeMode === 'dark' ? 'outline-white/10' : 'outline-black/10'}`}
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ const PriorityDropdown = ({ task, teamId }: PriorityDropdownProps) => {
|
|||||||
// Fallback rendering for raw priority values or when priority list is not loaded
|
// Fallback rendering for raw priority values or when priority list is not loaded
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="px-2 py-1 text-xs rounded"
|
className="px-2 py-1 text-xs rounded-sm"
|
||||||
style={{
|
style={{
|
||||||
backgroundColor: getPriorityColor(task.priority) + ALPHA_CHANNEL,
|
backgroundColor: getPriorityColor(task.priority) + ALPHA_CHANNEL,
|
||||||
borderRadius: 16,
|
borderRadius: 16,
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ const StatusDropdown = ({ task, teamId }: StatusDropdownProps) => {
|
|||||||
// Fallback rendering for raw status values or when status list is not loaded
|
// Fallback rendering for raw status values or when status list is not loaded
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="px-2 py-1 text-xs rounded"
|
className="px-2 py-1 text-xs rounded-sm"
|
||||||
style={{
|
style={{
|
||||||
backgroundColor: getStatusColor(task.status),
|
backgroundColor: getStatusColor(task.status),
|
||||||
borderRadius: 16,
|
borderRadius: 16,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ const TaskRowName = React.memo(
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClick={() => handleToggleExpansion(taskId)}
|
onClick={() => handleToggleExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54] transition duration-150"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54] transition duration-150"
|
||||||
>
|
>
|
||||||
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const HeavyAssigneeSelector = React.lazy(() =>
|
|||||||
new Promise<{ default: React.ComponentType }>((resolve) =>
|
new Promise<{ default: React.ComponentType }>((resolve) =>
|
||||||
setTimeout(() => resolve({
|
setTimeout(() => resolve({
|
||||||
default: () => (
|
default: () => (
|
||||||
<div className="p-4 border rounded bg-blue-50">
|
<div className="p-4 border rounded-sm bg-blue-50">
|
||||||
<Text strong>🚀 Heavy Assignee Selector Loaded!</Text>
|
<Text strong>🚀 Heavy Assignee Selector Loaded!</Text>
|
||||||
<br />
|
<br />
|
||||||
<Text type="secondary">This component contains:</Text>
|
<Text type="secondary">This component contains:</Text>
|
||||||
@@ -36,7 +36,7 @@ const HeavyDatePicker = React.lazy(() =>
|
|||||||
new Promise<{ default: React.ComponentType }>((resolve) =>
|
new Promise<{ default: React.ComponentType }>((resolve) =>
|
||||||
setTimeout(() => resolve({
|
setTimeout(() => resolve({
|
||||||
default: () => (
|
default: () => (
|
||||||
<div className="p-4 border rounded bg-green-50">
|
<div className="p-4 border rounded-sm bg-green-50">
|
||||||
<Text strong>📅 Heavy Date Picker Loaded!</Text>
|
<Text strong>📅 Heavy Date Picker Loaded!</Text>
|
||||||
<br />
|
<br />
|
||||||
<Text type="secondary">This component contains:</Text>
|
<Text type="secondary">This component contains:</Text>
|
||||||
@@ -57,7 +57,7 @@ const HeavyPrioritySelector = React.lazy(() =>
|
|||||||
new Promise<{ default: React.ComponentType }>((resolve) =>
|
new Promise<{ default: React.ComponentType }>((resolve) =>
|
||||||
setTimeout(() => resolve({
|
setTimeout(() => resolve({
|
||||||
default: () => (
|
default: () => (
|
||||||
<div className="p-4 border rounded bg-orange-50">
|
<div className="p-4 border rounded-sm bg-orange-50">
|
||||||
<Text strong>🔥 Heavy Priority Selector Loaded!</Text>
|
<Text strong>🔥 Heavy Priority Selector Loaded!</Text>
|
||||||
<br />
|
<br />
|
||||||
<Text type="secondary">This component contains:</Text>
|
<Text type="secondary">This component contains:</Text>
|
||||||
@@ -78,7 +78,7 @@ const HeavyLabelsSelector = React.lazy(() =>
|
|||||||
new Promise<{ default: React.ComponentType }>((resolve) =>
|
new Promise<{ default: React.ComponentType }>((resolve) =>
|
||||||
setTimeout(() => resolve({
|
setTimeout(() => resolve({
|
||||||
default: () => (
|
default: () => (
|
||||||
<div className="p-4 border rounded bg-purple-50">
|
<div className="p-4 border rounded-sm bg-purple-50">
|
||||||
<Text strong>🏷️ Heavy Labels Selector Loaded!</Text>
|
<Text strong>🏷️ Heavy Labels Selector Loaded!</Text>
|
||||||
<br />
|
<br />
|
||||||
<Text type="secondary">This component contains:</Text>
|
<Text type="secondary">This component contains:</Text>
|
||||||
@@ -163,7 +163,7 @@ const AsanaStyleLazyDemo: React.FC = () => {
|
|||||||
<Card className="max-w-4xl mx-auto">
|
<Card className="max-w-4xl mx-auto">
|
||||||
<Title level={3}>🎯 Asana-Style Lazy Loading Demo</Title>
|
<Title level={3}>🎯 Asana-Style Lazy Loading Demo</Title>
|
||||||
|
|
||||||
<div className="mb-4 p-4 bg-gray-50 rounded">
|
<div className="mb-4 p-4 bg-gray-50 rounded-sm">
|
||||||
<Text strong>Performance Benefits:</Text>
|
<Text strong>Performance Benefits:</Text>
|
||||||
<ul className="mt-2 text-sm">
|
<ul className="mt-2 text-sm">
|
||||||
<li>✅ <strong>Faster Initial Load:</strong> Only lightweight placeholders load initially</li>
|
<li>✅ <strong>Faster Initial Load:</strong> Only lightweight placeholders load initially</li>
|
||||||
@@ -220,25 +220,25 @@ const AsanaStyleLazyDemo: React.FC = () => {
|
|||||||
|
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
{showComponents.assignee && (
|
{showComponents.assignee && (
|
||||||
<Suspense fallback={<div className="p-4 border rounded bg-gray-100">Loading assignee selector...</div>}>
|
<Suspense fallback={<div className="p-4 border rounded-sm bg-gray-100">Loading assignee selector...</div>}>
|
||||||
<HeavyAssigneeSelector />
|
<HeavyAssigneeSelector />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{showComponents.date && (
|
{showComponents.date && (
|
||||||
<Suspense fallback={<div className="p-4 border rounded bg-gray-100">Loading date picker...</div>}>
|
<Suspense fallback={<div className="p-4 border rounded-sm bg-gray-100">Loading date picker...</div>}>
|
||||||
<HeavyDatePicker />
|
<HeavyDatePicker />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{showComponents.priority && (
|
{showComponents.priority && (
|
||||||
<Suspense fallback={<div className="p-4 border rounded bg-gray-100">Loading priority selector...</div>}>
|
<Suspense fallback={<div className="p-4 border rounded-sm bg-gray-100">Loading priority selector...</div>}>
|
||||||
<HeavyPrioritySelector />
|
<HeavyPrioritySelector />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{showComponents.labels && (
|
{showComponents.labels && (
|
||||||
<Suspense fallback={<div className="p-4 border rounded bg-gray-100">Loading labels selector...</div>}>
|
<Suspense fallback={<div className="p-4 border rounded-sm bg-gray-100">Loading labels selector...</div>}>
|
||||||
<HeavyLabelsSelector />
|
<HeavyLabelsSelector />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ const AssigneeDropdownContent: React.FC<AssigneeDropdownContentProps> = ({
|
|||||||
<div
|
<div
|
||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed z-[9999] w-72 rounded-md shadow-lg border
|
fixed z-9999 w-72 rounded-md shadow-lg border
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-800 border-gray-600'
|
? 'bg-gray-800 border-gray-600'
|
||||||
: 'bg-white border-gray-200'
|
: 'bg-white border-gray-200'
|
||||||
@@ -171,7 +171,7 @@ const AssigneeDropdownContent: React.FC<AssigneeDropdownContentProps> = ({
|
|||||||
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
? 'bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400 focus:border-blue-500'
|
||||||
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-500'
|
||||||
}
|
}
|
||||||
focus:outline-none focus:ring-1 focus:ring-blue-500
|
focus:outline-hidden focus:ring-1 focus:ring-blue-500
|
||||||
`}
|
`}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -367,7 +367,7 @@ const FilterDropdown: React.FC<{
|
|||||||
? (isDarkMode ? 'bg-blue-600 text-white border-blue-500' : 'bg-blue-50 text-blue-800 border-blue-300 font-semibold')
|
? (isDarkMode ? 'bg-blue-600 text-white border-blue-500' : 'bg-blue-50 text-blue-800 border-blue-300 font-semibold')
|
||||||
: `${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText}`
|
: `${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText}`
|
||||||
}
|
}
|
||||||
hover:shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1
|
hover:shadow-xs focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:ring-offset-1
|
||||||
${isDarkMode ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'}
|
${isDarkMode ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'}
|
||||||
`}
|
`}
|
||||||
aria-expanded={isOpen}
|
aria-expanded={isOpen}
|
||||||
@@ -397,7 +397,7 @@ const FilterDropdown: React.FC<{
|
|||||||
value={searchTerm}
|
value={searchTerm}
|
||||||
onChange={e => setSearchTerm(e.target.value)}
|
onChange={e => setSearchTerm(e.target.value)}
|
||||||
placeholder={`Search ${section.label.toLowerCase()}...`}
|
placeholder={`Search ${section.label.toLowerCase()}...`}
|
||||||
className={`w-full pl-8 pr-2 py-1 rounded border focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors duration-150 ${
|
className={`w-full pl-8 pr-2 py-1 rounded border focus:outline-hidden focus:ring-2 focus:ring-blue-500 transition-colors duration-150 ${
|
||||||
isDarkMode
|
isDarkMode
|
||||||
? 'bg-[#141414] text-[#d9d9d9] placeholder-gray-400 border-[#303030]'
|
? 'bg-[#141414] text-[#d9d9d9] placeholder-gray-400 border-[#303030]'
|
||||||
: 'bg-white text-gray-900 placeholder-gray-400 border-gray-300'
|
: 'bg-white text-gray-900 placeholder-gray-400 border-gray-300'
|
||||||
@@ -520,7 +520,7 @@ const SearchFilter: React.FC<{
|
|||||||
{!isExpanded ? (
|
{!isExpanded ? (
|
||||||
<button
|
<button
|
||||||
onClick={handleToggle}
|
onClick={handleToggle}
|
||||||
className={`inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium rounded-md border transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 ${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText} ${
|
className={`inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium rounded-md border transition-all duration-200 focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 ${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText} ${
|
||||||
themeClasses.containerBg === 'bg-gray-800' ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'
|
themeClasses.containerBg === 'bg-gray-800' ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
@@ -537,7 +537,7 @@ const SearchFilter: React.FC<{
|
|||||||
value={localValue}
|
value={localValue}
|
||||||
onChange={(e) => setLocalValue(e.target.value)}
|
onChange={(e) => setLocalValue(e.target.value)}
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
className={`w-full pr-4 pl-8 py-1 rounded border focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors duration-150 ${
|
className={`w-full pr-4 pl-8 py-1 rounded border focus:outline-hidden focus:ring-2 focus:ring-blue-500 transition-colors duration-150 ${
|
||||||
isDarkMode
|
isDarkMode
|
||||||
? 'bg-[#141414] text-[#d9d9d9] placeholder-gray-400 border-[#303030]'
|
? 'bg-[#141414] text-[#d9d9d9] placeholder-gray-400 border-[#303030]'
|
||||||
: 'bg-white text-gray-900 placeholder-gray-400 border-gray-300'
|
: 'bg-white text-gray-900 placeholder-gray-400 border-gray-300'
|
||||||
@@ -555,7 +555,7 @@ const SearchFilter: React.FC<{
|
|||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="px-2.5 py-1.5 text-xs font-medium text-white bg-blue-500 rounded-md hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 transition-colors duration-200"
|
className="px-2.5 py-1.5 text-xs font-medium text-white bg-blue-500 rounded-md hover:bg-blue-600 focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 transition-colors duration-200"
|
||||||
>
|
>
|
||||||
Search
|
Search
|
||||||
</button>
|
</button>
|
||||||
@@ -622,7 +622,7 @@ const FieldsDropdown: React.FC<{ themeClasses: any; isDarkMode: boolean }> = ({
|
|||||||
? (isDarkMode ? 'bg-blue-600 text-white border-blue-500' : 'bg-blue-50 text-blue-800 border-blue-300 font-semibold')
|
? (isDarkMode ? 'bg-blue-600 text-white border-blue-500' : 'bg-blue-50 text-blue-800 border-blue-300 font-semibold')
|
||||||
: `${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText}`
|
: `${themeClasses.buttonBg} ${themeClasses.buttonBorder} ${themeClasses.buttonText}`
|
||||||
}
|
}
|
||||||
hover:shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1
|
hover:shadow-xs focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:ring-offset-1
|
||||||
${isDarkMode ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'}
|
${isDarkMode ? 'focus:ring-offset-gray-900' : 'focus:ring-offset-white'}
|
||||||
`}
|
`}
|
||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
@@ -977,7 +977,7 @@ const ImprovedTaskFilters: React.FC<ImprovedTaskFiltersProps> = ({
|
|||||||
}, [dispatch, projectId, position, showArchived]);
|
}, [dispatch, projectId, position, showArchived]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`${themeClasses.containerBg} border ${themeClasses.containerBorder} rounded-md p-3 shadow-sm ${className}`}>
|
<div className={`${themeClasses.containerBg} border ${themeClasses.containerBorder} rounded-md p-3 shadow-xs ${className}`}>
|
||||||
<div className="flex flex-wrap items-center gap-2">
|
<div className="flex flex-wrap items-center gap-2">
|
||||||
{/* Left Section - Main Filters */}
|
{/* Left Section - Main Filters */}
|
||||||
<div className="flex flex-wrap items-center gap-2">
|
<div className="flex flex-wrap items-center gap-2">
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ const TaskPhaseDropdown: React.FC<TaskPhaseDropdownProps> = ({
|
|||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed min-w-[160px] max-w-[220px]
|
fixed min-w-[160px] max-w-[220px]
|
||||||
rounded border backdrop-blur-sm z-[9999]
|
rounded border backdrop-blur-xs z-9999
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
||||||
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
||||||
@@ -187,7 +187,7 @@ const TaskPhaseDropdown: React.FC<TaskPhaseDropdownProps> = ({
|
|||||||
|
|
||||||
{/* No Phase Color Indicator */}
|
{/* No Phase Color Indicator */}
|
||||||
<div
|
<div
|
||||||
className={`w-3 h-3 rounded-full shadow-sm border-2 ${
|
className={`w-3 h-3 rounded-full shadow-xs border-2 ${
|
||||||
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
||||||
}`}
|
}`}
|
||||||
style={{ backgroundColor: isDarkMode ? '#4b5563' : '#9ca3af' }}
|
style={{ backgroundColor: isDarkMode ? '#4b5563' : '#9ca3af' }}
|
||||||
@@ -234,7 +234,7 @@ const TaskPhaseDropdown: React.FC<TaskPhaseDropdownProps> = ({
|
|||||||
>
|
>
|
||||||
{/* Phase Color Indicator */}
|
{/* Phase Color Indicator */}
|
||||||
<div
|
<div
|
||||||
className={`w-3 h-3 rounded-full shadow-sm border-2 ${
|
className={`w-3 h-3 rounded-full shadow-xs border-2 ${
|
||||||
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
||||||
}`}
|
}`}
|
||||||
style={{ backgroundColor: getPhaseColor(phase) }}
|
style={{ backgroundColor: getPhaseColor(phase) }}
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ const TaskPriorityDropdown: React.FC<TaskPriorityDropdownProps> = ({
|
|||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed min-w-[160px] max-w-[220px]
|
fixed min-w-[160px] max-w-[220px]
|
||||||
rounded border backdrop-blur-sm z-[9999]
|
rounded border backdrop-blur-xs z-9999
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
||||||
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
||||||
@@ -193,7 +193,7 @@ const TaskPriorityDropdown: React.FC<TaskPriorityDropdownProps> = ({
|
|||||||
|
|
||||||
{/* Priority Color Indicator */}
|
{/* Priority Color Indicator */}
|
||||||
<div
|
<div
|
||||||
className={`w-3 h-3 rounded-full shadow-sm border-2 ${
|
className={`w-3 h-3 rounded-full shadow-xs border-2 ${
|
||||||
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
||||||
}`}
|
}`}
|
||||||
style={{ backgroundColor: getPriorityColor(priority) }}
|
style={{ backgroundColor: getPriorityColor(priority) }}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ const AssigneePlaceholder = React.memo<{ isDarkMode: boolean; memberCount?: numb
|
|||||||
) : (
|
) : (
|
||||||
<div className={`w-6 h-6 rounded-full ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
<div className={`w-6 h-6 rounded-full ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
||||||
)}
|
)}
|
||||||
<div className={`w-4 h-4 rounded ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
<div className={`w-4 h-4 rounded-sm ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
||||||
</div>
|
</div>
|
||||||
));
|
));
|
||||||
|
|
||||||
@@ -249,7 +249,7 @@ const LabelsPlaceholder = React.memo<{ labelCount?: number; isDarkMode: boolean
|
|||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
<div className={`w-4 h-4 rounded ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
<div className={`w-4 h-4 rounded-sm ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`} />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
));
|
));
|
||||||
@@ -257,7 +257,7 @@ const LabelsPlaceholder = React.memo<{ labelCount?: number; isDarkMode: boolean
|
|||||||
// PERFORMANCE OPTIMIZATION: Simplified placeholders without animations under memory pressure
|
// PERFORMANCE OPTIMIZATION: Simplified placeholders without animations under memory pressure
|
||||||
const SimplePlaceholder = React.memo<{ width: number; height: number; isDarkMode: boolean }>(({ width, height, isDarkMode }) => (
|
const SimplePlaceholder = React.memo<{ width: number; height: number; isDarkMode: boolean }>(({ width, height, isDarkMode }) => (
|
||||||
<div
|
<div
|
||||||
className={`rounded ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`}
|
className={`rounded-sm ${isDarkMode ? 'bg-gray-600' : 'bg-gray-200'}`}
|
||||||
style={{ width, height }}
|
style={{ width, height }}
|
||||||
/>
|
/>
|
||||||
));
|
));
|
||||||
@@ -614,7 +614,7 @@ const TaskRow: React.FC<TaskRowProps> = React.memo(({
|
|||||||
? (isDarkMode ? 'bg-blue-900/20' : 'bg-blue-50')
|
? (isDarkMode ? 'bg-blue-900/20' : 'bg-blue-50')
|
||||||
: '';
|
: '';
|
||||||
const overlay = isDragOverlay
|
const overlay = isDragOverlay
|
||||||
? `rounded shadow-lg border-2 ${isDarkMode ? 'border-gray-600 shadow-2xl' : 'border-gray-300 shadow-2xl'}`
|
? `rounded-sm shadow-lg border-2 ${isDarkMode ? 'border-gray-600 shadow-2xl' : 'border-gray-300 shadow-2xl'}`
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -643,7 +643,7 @@ const TaskRow: React.FC<TaskRowProps> = React.memo(({
|
|||||||
case 'drag':
|
case 'drag':
|
||||||
return (
|
return (
|
||||||
<div key={col.key} className={`flex items-center justify-center px-2 ${borderClasses}`} style={{ width: col.width }}>
|
<div key={col.key} className={`flex items-center justify-center px-2 ${borderClasses}`} style={{ width: col.width }}>
|
||||||
<div className="w-4 h-4 opacity-30 bg-gray-300 rounded"></div>
|
<div className="w-4 h-4 opacity-30 bg-gray-300 rounded-sm"></div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -689,7 +689,7 @@ const TaskRow: React.FC<TaskRowProps> = React.memo(({
|
|||||||
// For non-essential columns, show minimal placeholder
|
// For non-essential columns, show minimal placeholder
|
||||||
return (
|
return (
|
||||||
<div key={col.key} className={`flex items-center px-2 ${borderClasses}`} style={{ width: col.width }}>
|
<div key={col.key} className={`flex items-center px-2 ${borderClasses}`} style={{ width: col.width }}>
|
||||||
<div className={`w-6 h-3 rounded ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'}`}></div>
|
<div className={`w-6 h-3 rounded-sm ${isDarkMode ? 'bg-gray-700' : 'bg-gray-200'}`}></div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ const TaskStatusDropdown: React.FC<TaskStatusDropdownProps> = ({
|
|||||||
ref={dropdownRef}
|
ref={dropdownRef}
|
||||||
className={`
|
className={`
|
||||||
fixed min-w-[160px] max-w-[220px]
|
fixed min-w-[160px] max-w-[220px]
|
||||||
rounded border backdrop-blur-sm z-[9999]
|
rounded border backdrop-blur-xs z-9999
|
||||||
${isDarkMode
|
${isDarkMode
|
||||||
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
? 'bg-gray-900/95 border-gray-600 shadow-2xl shadow-black/50'
|
||||||
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
: 'bg-white/95 border-gray-200 shadow-2xl shadow-gray-500/20'
|
||||||
@@ -185,7 +185,7 @@ const TaskStatusDropdown: React.FC<TaskStatusDropdownProps> = ({
|
|||||||
>
|
>
|
||||||
{/* Status Color Indicator */}
|
{/* Status Color Indicator */}
|
||||||
<div
|
<div
|
||||||
className={`w-3 h-3 rounded-full shadow-sm border-2 ${
|
className={`w-3 h-3 rounded-full shadow-xs border-2 ${
|
||||||
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
isDarkMode ? 'border-gray-800/30' : 'border-white/20'
|
||||||
}`}
|
}`}
|
||||||
style={{ backgroundColor: getStatusColor(status) }}
|
style={{ backgroundColor: getStatusColor(status) }}
|
||||||
|
|||||||
@@ -1,10 +1,27 @@
|
|||||||
@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
|
@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap')
|
||||||
@import url("./styles/customOverrides.css");
|
layer(base);
|
||||||
@import url("./styles/task-management.css");
|
@import url('./styles/customOverrides.css') layer(base);
|
||||||
|
@import url('./styles/task-management.css') layer(base);
|
||||||
|
|
||||||
@tailwind base;
|
@import 'tailwindcss';
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
/*
|
||||||
|
The default border color has changed to `currentcolor` in Tailwind CSS v4,
|
||||||
|
so we've added these compatibility styles to make sure everything still
|
||||||
|
looks the same as it did with Tailwind CSS v3.
|
||||||
|
|
||||||
|
If we ever want to remove these styles, we need to add an explicit border
|
||||||
|
color utility to any element that depends on these defaults.
|
||||||
|
*/
|
||||||
|
@layer base {
|
||||||
|
*,
|
||||||
|
::after,
|
||||||
|
::before,
|
||||||
|
::backdrop,
|
||||||
|
::file-selector-button {
|
||||||
|
border-color: var(--color-gray-200, currentcolor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.app-loading-container {
|
.app-loading-container {
|
||||||
transition: none !important;
|
transition: none !important;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const TaskManagementDemo: React.FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout className="min-h-screen bg-gray-50">
|
<Layout className="min-h-screen bg-gray-50">
|
||||||
<Header className="bg-white shadow-sm">
|
<Header className="bg-white shadow-xs">
|
||||||
<div className="max-w-7xl mx-auto px-4">
|
<div className="max-w-7xl mx-auto px-4">
|
||||||
<Title level={2} className="mb-0 text-gray-800">
|
<Title level={2} className="mb-0 text-gray-800">
|
||||||
Enhanced Task Management System
|
Enhanced Task Management System
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const ProjectViewRoadmap = () => {
|
|||||||
|
|
||||||
<Flex>
|
<Flex>
|
||||||
{/* table */}
|
{/* table */}
|
||||||
<div className="after:content relative h-fit w-full max-w-[500px] after:absolute after:-right-3 after:top-0 after:z-10 after:min-h-full after:w-3 after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent">
|
<div className="after:content relative h-fit w-full max-w-[500px] after:absolute after:-right-3 after:top-0 after:z-10 after:min-h-full after:w-3 after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent">
|
||||||
<RoadmapTable />
|
<RoadmapTable />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -109,9 +109,9 @@ const RoadmapTable = () => {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Layout styles for table and columns
|
// Layout styles for table and columns
|
||||||
const customHeaderColumnStyles = `border px-2 h-[50px] text-left z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
const customHeaderColumnStyles = `border px-2 h-[50px] text-left z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
||||||
|
|
||||||
const customBodyColumnStyles = `border px-2 h-[50px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent ${themeMode === 'dark' ? 'bg-transparent border-[#303030]' : 'bg-transparent'}`;
|
const customBodyColumnStyles = `border px-2 h-[50px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent ${themeMode === 'dark' ? 'bg-transparent border-[#303030]' : 'bg-transparent'}`;
|
||||||
|
|
||||||
const rowBackgroundStyles =
|
const rowBackgroundStyles =
|
||||||
themeMode === 'dark' ? 'even:bg-[#1b1b1b] odd:bg-[#141414]' : 'even:bg-[#f4f4f4] odd:bg-white';
|
themeMode === 'dark' ? 'even:bg-[#1b1b1b] odd:bg-[#141414]' : 'even:bg-[#f4f4f4] odd:bg-white';
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const RoadmapTaskCell = ({ task, isSubtask = false }: RoadmapTaskCellProps) => {
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClick={() => dispatch(toggleTaskExpansion(id))}
|
onClick={() => dispatch(toggleTaskExpansion(id))}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{task.isExpanded ? <DownOutlined /> : <RightOutlined />}
|
{task.isExpanded ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
@@ -36,7 +36,7 @@ const RoadmapTaskCell = ({ task, isSubtask = false }: RoadmapTaskCellProps) => {
|
|||||||
return !isSubtask ? (
|
return !isSubtask ? (
|
||||||
<button
|
<button
|
||||||
onClick={() => dispatch(toggleTaskExpansion(id))}
|
onClick={() => dispatch(toggleTaskExpansion(id))}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{task.isExpanded ? <DownOutlined /> : <RightOutlined />}
|
{task.isExpanded ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ const TaskListTable = ({
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{activeTask && (
|
{activeTask && (
|
||||||
<div className="bg-white dark:bg-gray-800 shadow-lg rounded border">
|
<div className="bg-white dark:bg-gray-800 shadow-lg rounded-sm border">
|
||||||
<DraggableRow
|
<DraggableRow
|
||||||
task={activeTask}
|
task={activeTask}
|
||||||
visibleColumns={visibleColumns}
|
visibleColumns={visibleColumns}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ const TaskListInstantTaskInput = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`border-t border-b-[1px] border-r-[1px]`}
|
className={`border-t border-b border-r`}
|
||||||
style={{ borderColor: token.colorBorderSecondary }}
|
style={{ borderColor: token.colorBorderSecondary }}
|
||||||
>
|
>
|
||||||
{isEdit ? (
|
{isEdit ? (
|
||||||
|
|||||||
@@ -149,10 +149,10 @@ const TaskListTable = ({
|
|||||||
const customBorderColor = themeMode === 'dark' && ' border-[#303030]';
|
const customBorderColor = themeMode === 'dark' && ' border-[#303030]';
|
||||||
|
|
||||||
const customHeaderColumnStyles = (key: string) =>
|
const customHeaderColumnStyles = (key: string) =>
|
||||||
`border px-2 text-left ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
`border px-2 text-left ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
||||||
|
|
||||||
const customBodyColumnStyles = (key: string) =>
|
const customBodyColumnStyles = (key: string) =>
|
||||||
`border px-2 ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#141414] border-[#303030]' : 'bg-white'}`;
|
`border px-2 ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#141414] border-[#303030]' : 'bg-white'}`;
|
||||||
|
|
||||||
// function to render the column content based on column key
|
// function to render the column content based on column key
|
||||||
const renderColumnContent = (
|
const renderColumnContent = (
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ const TaskListTableWrapper = ({
|
|||||||
</Flex>
|
</Flex>
|
||||||
<Collapse
|
<Collapse
|
||||||
collapsible="header"
|
collapsible="header"
|
||||||
className="border-l-[4px]"
|
className="border-l-4"
|
||||||
bordered={false}
|
bordered={false}
|
||||||
ghost={true}
|
ghost={true}
|
||||||
expandIcon={() => null}
|
expandIcon={() => null}
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ const StatusGroupTables = ({ group }: { group: ITaskListGroup }) => {
|
|||||||
{/* bulk action container ==> used tailwind to recreate the animation */}
|
{/* bulk action container ==> used tailwind to recreate the animation */}
|
||||||
{createPortal(
|
{createPortal(
|
||||||
<div
|
<div
|
||||||
className={`absolute bottom-0 left-1/2 z-20 -translate-x-1/2 ${selectedTaskIdsList.length > 0 ? 'overflow-visible' : 'h-[1px] overflow-hidden'}`}
|
className={`absolute bottom-0 left-1/2 z-20 -translate-x-1/2 ${selectedTaskIdsList.length > 0 ? 'overflow-visible' : 'h-px overflow-hidden'}`}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className={`${selectedTaskIdsList.length > 0 ? 'bottom-4' : 'bottom-0'} absolute left-1/2 z-[999] -translate-x-1/2 transition-all duration-300`}
|
className={`${selectedTaskIdsList.length > 0 ? 'bottom-4' : 'bottom-0'} absolute left-1/2 z-999 -translate-x-1/2 transition-all duration-300`}
|
||||||
>
|
>
|
||||||
<BulkTasksActionContainer
|
<BulkTasksActionContainer
|
||||||
selectedTaskIds={selectedTaskIdsList}
|
selectedTaskIds={selectedTaskIdsList}
|
||||||
|
|||||||
@@ -133,10 +133,10 @@ const TaskListTable = ({
|
|||||||
const customBorderColor = themeMode === 'dark' && ' border-[#303030]';
|
const customBorderColor = themeMode === 'dark' && ' border-[#303030]';
|
||||||
|
|
||||||
const customHeaderColumnStyles = (key: string) =>
|
const customHeaderColumnStyles = (key: string) =>
|
||||||
`border px-2 text-left ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
`border px-2 text-left ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:h-[42px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#1d1d1d] border-[#303030]' : 'bg-[#fafafa]'}`;
|
||||||
|
|
||||||
const customBodyColumnStyles = (key: string) =>
|
const customBodyColumnStyles = (key: string) =>
|
||||||
`border px-2 ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#141414] border-[#303030]' : 'bg-white'}`;
|
`border px-2 ${key === 'selector' && 'sticky left-0 z-10'} ${key === 'task' && `sticky left-[33px] z-10 after:content after:absolute after:top-0 after:-right-1 after:-z-10 after:min-h-[40px] after:w-1.5 after:bg-transparent ${scrollingTables[tableId] ? 'after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent' : ''}`} ${themeMode === 'dark' ? 'bg-[#141414] border-[#303030]' : 'bg-white'}`;
|
||||||
|
|
||||||
// function to render the column content based on column key
|
// function to render the column content based on column key
|
||||||
const renderColumnContent = (
|
const renderColumnContent = (
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ const TaskListTableWrapper = ({
|
|||||||
</Flex>
|
</Flex>
|
||||||
<Collapse
|
<Collapse
|
||||||
collapsible="header"
|
collapsible="header"
|
||||||
className="border-l-[4px]"
|
className="border-l-4"
|
||||||
bordered={false}
|
bordered={false}
|
||||||
ghost={true}
|
ghost={true}
|
||||||
expandIcon={() => null}
|
expandIcon={() => null}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ const TaskCell = ({
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClick={() => toggleTaskExpansion(taskId)}
|
onClick={() => toggleTaskExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
@@ -51,7 +51,7 @@ const TaskCell = ({
|
|||||||
return !isSubTask ? (
|
return !isSubTask ? (
|
||||||
<button
|
<button
|
||||||
onClick={() => toggleTaskExpansion(taskId)}
|
onClick={() => toggleTaskExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
{expandedTasks.includes(taskId) ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ const BoardSectionCardContainer = ({
|
|||||||
<Flex
|
<Flex
|
||||||
gap={16}
|
gap={16}
|
||||||
align="flex-start"
|
align="flex-start"
|
||||||
className="max-w-screen max-h-[620px] min-h-[620px] overflow-x-scroll p-[1px]"
|
className="max-w-screen max-h-[620px] min-h-[620px] overflow-x-scroll p-px"
|
||||||
>
|
>
|
||||||
<SortableContext
|
<SortableContext
|
||||||
items={datasource?.map((section: any) => section.id)}
|
items={datasource?.map((section: any) => section.id)}
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ const BoardCreateSubtaskCard = ({
|
|||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
}}
|
}}
|
||||||
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline`}
|
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline-solid`}
|
||||||
onBlur={handleCancelNewCard}
|
onBlur={handleCancelNewCard}
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ const BoardViewCreateTaskCard = ({
|
|||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
}}
|
}}
|
||||||
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline`}
|
className={`outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline-solid`}
|
||||||
onBlur={handleCancelNewCard}
|
onBlur={handleCancelNewCard}
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ const BoardViewTaskCard = ({ task, sectionId }: IBoardViewTaskCardProps) => {
|
|||||||
cursor: 'grab',
|
cursor: 'grab',
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
}}
|
}}
|
||||||
className={`group outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline board-task-card`}
|
className={`group outline-1 ${themeWiseColor('outline-[#edeae9]', 'outline-[#6a696a]', themeMode)} hover:outline-solid board-task-card`}
|
||||||
data-id={task.id}
|
data-id={task.id}
|
||||||
data-dragging={isDragging ? "true" : "false"}
|
data-dragging={isDragging ? "true" : "false"}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ const TaskByMembersTable = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="memberList-container min-h-0 max-w-full overflow-x-auto">
|
<div className="memberList-container min-h-0 max-w-full overflow-x-auto">
|
||||||
<table className="w-full min-w-max border-collapse rounded">
|
<table className="w-full min-w-max border-collapse rounded-sm">
|
||||||
<thead
|
<thead
|
||||||
style={{
|
style={{
|
||||||
height: 42,
|
height: 42,
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ const TaskListTaskCell = ({
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClick={() => handleToggleExpansion(taskId)}
|
onClick={() => handleToggleExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
@@ -90,7 +90,7 @@ const TaskListTaskCell = ({
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClick={() => handleToggleExpansion(taskId)}
|
onClick={() => handleToggleExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54]"
|
||||||
>
|
>
|
||||||
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
@@ -100,7 +100,7 @@ const TaskListTaskCell = ({
|
|||||||
return !isSubTask ? (
|
return !isSubTask ? (
|
||||||
<button
|
<button
|
||||||
onClick={() => handleToggleExpansion(taskId)}
|
onClick={() => handleToggleExpansion(taskId)}
|
||||||
className="hover flex h-4 w-4 items-center justify-center rounded text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54] open-task-button"
|
className="hover flex h-4 w-4 items-center justify-center rounded-sm text-[12px] hover:border hover:border-[#5587f5] hover:bg-[#d0eefa54] open-task-button"
|
||||||
>
|
>
|
||||||
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
{task.show_sub_tasks ? <DownOutlined /> : <RightOutlined />}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -178,13 +178,13 @@ const CustomCell = React.memo(({
|
|||||||
switch (column.key) {
|
switch (column.key) {
|
||||||
case 'STATUS':
|
case 'STATUS':
|
||||||
return (
|
return (
|
||||||
<div className="px-2 py-1 text-xs rounded bg-gray-100 text-gray-600">
|
<div className="px-2 py-1 text-xs rounded-sm bg-gray-100 text-gray-600">
|
||||||
{task.status_name || task.status || 'To Do'}
|
{task.status_name || task.status || 'To Do'}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
case 'PRIORITY':
|
case 'PRIORITY':
|
||||||
return (
|
return (
|
||||||
<div className="px-2 py-1 text-xs rounded bg-gray-100 text-gray-600">
|
<div className="px-2 py-1 text-xs rounded-sm bg-gray-100 text-gray-600">
|
||||||
{task.priority_name || task.priority || 'Medium'}
|
{task.priority_name || task.priority || 'Medium'}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -213,13 +213,13 @@ const CustomCell = React.memo(({
|
|||||||
switch (column.key) {
|
switch (column.key) {
|
||||||
case 'STATUS':
|
case 'STATUS':
|
||||||
return (
|
return (
|
||||||
<div className="px-2 py-1 text-xs rounded bg-red-100 text-red-600">
|
<div className="px-2 py-1 text-xs rounded-sm bg-red-100 text-red-600">
|
||||||
{task.status_name || task.status || 'Error'}
|
{task.status_name || task.status || 'Error'}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
case 'PRIORITY':
|
case 'PRIORITY':
|
||||||
return (
|
return (
|
||||||
<div className="px-2 py-1 text-xs rounded bg-red-100 text-red-600">
|
<div className="px-2 py-1 text-xs rounded-sm bg-red-100 text-red-600">
|
||||||
{task.priority_name || task.priority || 'Error'}
|
{task.priority_name || task.priority || 'Error'}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -1483,7 +1483,7 @@ const TaskListTable: React.FC<TaskListTableProps> = ({ taskList, tableId, active
|
|||||||
case 'TASK':
|
case 'TASK':
|
||||||
return `sticky left-[48px] z-10 after:content after:absolute after:top-0 after:-right-1 after:h-full after:-z-10 after:w-1.5 after:bg-transparent ${
|
return `sticky left-[48px] z-10 after:content after:absolute after:top-0 after:-right-1 after:h-full after:-z-10 after:w-1.5 after:bg-transparent ${
|
||||||
scrollingTables[tableId]
|
scrollingTables[tableId]
|
||||||
? 'after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent'
|
? 'after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent'
|
||||||
: ''
|
: ''
|
||||||
}`;
|
}`;
|
||||||
default:
|
default:
|
||||||
@@ -1886,7 +1886,7 @@ const TaskListTable: React.FC<TaskListTableProps> = ({ taskList, tableId, active
|
|||||||
dropAnimation={null} // Disable drop animation
|
dropAnimation={null} // Disable drop animation
|
||||||
>
|
>
|
||||||
{dragActiveId ? (
|
{dragActiveId ? (
|
||||||
<div className="bg-white dark:bg-gray-800 shadow-lg rounded border p-2 opacity-90">
|
<div className="bg-white dark:bg-gray-800 shadow-lg rounded-sm border p-2 opacity-90">
|
||||||
<span className="text-sm font-medium">Moving task...</span>
|
<span className="text-sm font-medium">Moving task...</span>
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -409,7 +409,7 @@
|
|||||||
// i >= startOffset &&
|
// i >= startOffset &&
|
||||||
// i < startOffset + projectDuration
|
// i < startOffset + projectDuration
|
||||||
// ? 'empty-cell-hide'
|
// ? 'empty-cell-hide'
|
||||||
// : `empty-cell rounded-sm outline-1 hover:outline ${themeMode === 'dark' ? 'outline-white/25' : 'outline-black/25'}`
|
// : `empty-cell rounded-xs outline-1 hover:outline-solid ${themeMode === 'dark' ? 'outline-white/25' : 'outline-black/25'}`
|
||||||
// }
|
// }
|
||||||
// key={i}
|
// key={i}
|
||||||
// style={{
|
// style={{
|
||||||
@@ -687,7 +687,7 @@ export default Grant;
|
|||||||
// style={{
|
// style={{
|
||||||
// background: themeWiseColor('#fff', '#141414', themeMode),
|
// background: themeWiseColor('#fff', '#141414', themeMode),
|
||||||
// }}
|
// }}
|
||||||
// className={`after:content relative z-10 after:absolute after:-right-1 after:top-0 after:-z-10 after:h-full after:w-1.5 after:bg-transparent after:bg-gradient-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent`}
|
// className={`after:content relative z-10 after:absolute after:-right-1 after:top-0 after:-z-10 after:h-full after:w-1.5 after:bg-transparent after:bg-linear-to-r after:from-[rgba(0,0,0,0.12)] after:to-transparent`}
|
||||||
// >
|
// >
|
||||||
// <GranttMembersTable
|
// <GranttMembersTable
|
||||||
// members={members}
|
// members={members}
|
||||||
@@ -874,7 +874,7 @@ export default Grant;
|
|||||||
// i >= startOffset &&
|
// i >= startOffset &&
|
||||||
// i < startOffset + projectDuration
|
// i < startOffset + projectDuration
|
||||||
// ? 'empty-cell-hide'
|
// ? 'empty-cell-hide'
|
||||||
// : `empty-cell rounded-sm outline-1 hover:outline ${themeMode === 'dark' ? 'outline-white/10' : 'outline-black/10'}`
|
// : `empty-cell rounded-xs outline-1 hover:outline-solid ${themeMode === 'dark' ? 'outline-white/10' : 'outline-black/10'}`
|
||||||
// }
|
// }
|
||||||
// key={i}
|
// key={i}
|
||||||
// style={{
|
// style={{
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
/** @type {import('tailwindcss').Config} */
|
|
||||||
module.exports = {
|
|
||||||
content: ['./src/**/*.{js,jsx,ts,tsx}'],
|
|
||||||
theme: {
|
|
||||||
extend: {},
|
|
||||||
},
|
|
||||||
plugins: [],
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user