-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: update icons and structure in automation carousel #32
base: main
Are you sure you want to change the base?
Conversation
WalkthroughThe changes in this pull request involve the modification of the Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (3)
apps/mkt/components/automation-carousel/automation-icon.tsx (2)
4-6
: Add JSDoc documentation for the interface.While the interface is well-defined, adding JSDoc documentation would improve code maintainability and developer experience.
+/** + * Props for the AutomationIcon component. + * @extends TablerIconsProps + */ interface AutomationIconProps extends TablerIconsProps { + /** The icon component to be rendered */ IconComponent: React.FC<TablerIconsProps>; }
8-19
: Consider making icon container dimensions configurable.The implementation is clean and follows React best practices. However, the fixed dimensions (28px) in the container div might limit reusability in different contexts.
Consider making the dimensions configurable through props:
interface AutomationIconProps extends TablerIconsProps { IconComponent: React.FC<TablerIconsProps>; + containerSize?: string; } const AutomationIcon: React.FC<AutomationIconProps> = ({ IconComponent, color = "#fff", stroke = 1.5, + containerSize = "28px", ...props }) => { return ( - <div className="rounded p-[4px] bg-dark-600 border border-dark-400 flex items-center justify-center w-[28px] h-[28px]"> + <div className={`rounded p-[4px] bg-dark-600 border border-dark-400 flex items-center justify-center`} style={{ width: containerSize, height: containerSize }}> <IconComponent color={color} stroke={stroke} {...props} /> </div> ); };apps/mkt/components/automation-carousel/automation-carousel.tsx (1)
72-73
: Consider reviewing icon choices for better semantic meaningThe IconBug is currently used for both "Label PR Size" and "Code Freeze" features, which might not provide the most intuitive visual representation. Consider using more semantically appropriate icons:
- For "Label PR Size": Consider using IconRuler or IconTag
- For "Code Freeze": Consider using IconSnowflake or IconLock
Also applies to: 157-157
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
apps/mkt/components/automation-carousel/automation-carousel.tsx
(5 hunks)apps/mkt/components/automation-carousel/automation-icon.tsx
(1 hunks)
🔇 Additional comments (4)
apps/mkt/components/automation-carousel/automation-icon.tsx (2)
1-2
: LGTM! Clean and minimal imports.
The imports are well-organized and include only the necessary dependencies.
21-21
: LGTM! Appropriate export statement.
The default export is correct for this single-component file.
apps/mkt/components/automation-carousel/automation-carousel.tsx (2)
9-9
: LGTM: Clean import of the new AutomationIcon component
The import statement is properly placed and aligns with the component restructuring mentioned in the PR objectives.
72-73
: LGTM: Clean implementation of AutomationIcon component
The AutomationIcon component is consistently implemented across all carousel slides, improving code maintainability and readability.
Also applies to: 101-101, 129-129, 157-157
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice :) good job getting it working.
I'm leaving a few comments on some small tweaks for us to do, let me know if you have any questions.
const AutomationIcon: React.FC<AutomationIconProps> = ({ | ||
IconComponent, | ||
color = "#fff", | ||
stroke = 1.5, | ||
...props | ||
}) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This way works, and it's fine, but just for standardization, we usually just declare the type like this:
const AutomationIcon: React.FC<AutomationIconProps> = ({ | |
IconComponent, | |
color = "#fff", | |
stroke = 1.5, | |
...props | |
}) => { | |
const AutomationIcon = ({ | |
IconComponent, | |
color = "#fff", | |
stroke = 1.5, | |
...props | |
}: AutomationIconProps) => { |
import { TablerIconsProps } from "@tabler/icons-react"; | ||
|
||
interface AutomationIconProps extends TablerIconsProps { | ||
IconComponent: React.FC<TablerIconsProps>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of receiving an icon component as a property, we want a string to indicate what kind of benefit the icon is about.
Would be something like this:
IconComponent: React.FC<TablerIconsProps>; | |
type: 'cycleTime' | 'failureRate' | 'compliance' | 'security' | 'techDebt'; |
then you'll need additional logic to display the correct icon. See the getIcon method in https://github.com/sweetr-dev/sweetr.dev/blob/main/apps/web/src/app/automations/components/icon-automation-benefit/icon-automation-benefit.tsx#L24
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's call this automation-benefit-icon.tsx
, as it's about the benefit the automation gives.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (3)
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx (3)
9-21
: Add JSDoc comments to improve type documentation.Consider adding JSDoc comments to explain the purpose and usage of each icon type, which would improve maintainability and developer experience.
+/** + * Types of automation icons available in the system + */ type IconType = | "cycleTime" | "failureRate" | "compliance" | "security" | "techDebt" | "prTitle"; +/** + * Props for the AutomationIcon component + * @property {IconType} type - The type of icon to display + * @property {string} [color] - Optional color for the icon + * @property {number} [stroke] - Optional stroke width for the icon + */ interface AutomationIconProps { type: IconType; color?: string; stroke?: number; }
23-40
: Consider using distinct icons for different purposes.The
IconHammer
is currently used for both "techDebt" and "prTitle", which might be confusing. Consider using different icons to better represent each concept.Consider memoizing the icon mapping for better performance.
The icon mapping could be memoized to avoid unnecessary re-renders.
+const iconMap = { + cycleTime: IconClock, + failureRate: IconBug, + compliance: IconAdjustments, + security: IconShield, + techDebt: IconHammer, + prTitle: IconHammer, // Consider using a different icon +} as const; + const getIcon = (type: IconType) => { - switch (type) { - case "cycleTime": - return IconClock; - case "failureRate": - return IconBug; - case "compliance": - return IconAdjustments; - case "security": - return IconShield; - case "techDebt": - return IconHammer; - case "prTitle": - return IconHammer; - default: - throw new Error(`Unknown icon type: ${type}`); - } + const IconComponent = iconMap[type]; + if (!IconComponent) { + throw new Error(`Unknown icon type: ${type}`); + } + return IconComponent; };
42-55
: Consider making the styling more configurable.The component currently has hardcoded styles for dimensions and colors. Consider making these configurable through props for better reusability.
interface AutomationIconProps { type: IconType; color?: string; stroke?: number; + size?: number; + className?: string; } const AutomationIcon = ({ type, color = "#fff", stroke = 1.5, + size = 28, + className = "", ...props }: AutomationIconProps) => { const IconComponent = getIcon(type); return ( <div - className="rounded p-[4px] bg-dark-600 border border-dark-400 flex items-center justify-center w-[28px] h-[28px]" + className={`rounded p-[4px] bg-dark-600 border border-dark-400 flex items-center justify-center ${className}`} + style={{ width: `${size}px`, height: `${size}px` }} > <IconComponent color={color} stroke={stroke} {...props} /> </div> ); };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx
(1 hunks)apps/mkt/components/automation-carousel/automation-carousel.tsx
(5 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- apps/mkt/components/automation-carousel/automation-carousel.tsx
🔇 Additional comments (2)
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx (2)
1-7
: LGTM! Imports are well-organized.
All imported icons are properly utilized in the component.
57-57
: LGTM! Export statement is appropriate.
Default export is suitable for a single component file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much better :) a few final details and we are ready to go
} | ||
}; | ||
|
||
const AutomationIcon = ({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const AutomationIcon = ({ | |
export const AutomationIcon = ({ |
); | ||
}; | ||
|
||
export default AutomationIcon; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We usually avoid doing export default
in components, so it's easier for VSCode to auto import when necessary.
const getIcon = (type: IconType) => { | ||
switch (type) { | ||
case "cycleTime": | ||
return IconClock; | ||
case "failureRate": | ||
return IconBug; | ||
case "compliance": | ||
return IconAdjustments; | ||
case "security": | ||
return IconShield; | ||
case "techDebt": | ||
return IconHammer; | ||
case "prTitle": | ||
return IconHammer; | ||
default: | ||
throw new Error(`Unknown icon type: ${type}`); | ||
} | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works well - I'll suggest to convert it to an object though, it's a bit less verbose :)
You can do something like
const icons: Record<IconType, ReactElement> = {
cycleTime: IconClock,
...
}
return icons[type];
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Outside diff range and nitpick comments (1)
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx (1)
64-70
: Consider improving tooltip content implementation
- Add missing tooltip content for "prTitle" type
- Consider moving tooltip content to a mapping object for better maintainability:
const tooltipContent: Record<IconType, string> = { cycleTime: "Improves cycle time", compliance: "Improves compliance", failureRate: "Improves failure rate", security: "Improves security", techDebt: "Improves tech debt", prTitle: "Improves PR title consistency" }; // Then in JSX: <TooltipContent> {tooltipContent[type]} </TooltipContent>🧰 Tools
🪛 Biome (1.9.4)
[error] 65-65: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment(lint/complexity/noUselessFragments)
[error] 66-66: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment(lint/complexity/noUselessFragments)
[error] 67-67: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment(lint/complexity/noUselessFragments)
[error] 68-68: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment(lint/complexity/noUselessFragments)
[error] 69-69: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment(lint/complexity/noUselessFragments)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
package-lock.json
is excluded by!**/package-lock.json
📒 Files selected for processing (10)
apps/mkt/app/css/style.css
(1 hunks)apps/mkt/components.json
(1 hunks)apps/mkt/components/automation-carousel/automation-benefit-icon.tsx
(1 hunks)apps/mkt/components/automation-carousel/automation-carousel.tsx
(5 hunks)apps/mkt/components/ui/tooltip.tsx
(1 hunks)apps/mkt/lib/utils.ts
(1 hunks)apps/mkt/package.json
(1 hunks)apps/mkt/shadcn.d.ts
(1 hunks)apps/mkt/tailwind.config.js
(1 hunks)apps/mkt/tsconfig.json
(2 hunks)
✅ Files skipped from review due to trivial changes (3)
- apps/mkt/shadcn.d.ts
- apps/mkt/components.json
- apps/mkt/package.json
🧰 Additional context used
🪛 Biome (1.9.4)
apps/mkt/app/css/style.css
[error] 4-4: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
[error] 5-5: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
[error] 8-8: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
[error] 9-9: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
[error] 11-11: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx
[error] 65-65: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 66-66: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 67-67: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 68-68: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 69-69: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
🔇 Additional comments (10)
apps/mkt/tailwind.config.js (2)
146-146
: Verify installation of tailwindcss-animate
plugin
Ensure that the tailwindcss-animate
plugin is installed in your project dependencies. If it's not installed, importing it in the Tailwind configuration will result in build errors.
Run the following script to check if tailwindcss-animate
is installed:
✅ Verification successful
tailwindcss-animate
plugin is properly installed
The plugin is correctly listed as a dependency in apps/mkt/package.json
with version ^1.0.7
.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check if 'tailwindcss-animate' is listed in package.json dependencies.
# Test: Search for 'tailwindcss-animate' in package.json. Expect: At least one occurrence indicating the plugin is installed.
grep '"tailwindcss-animate"' apps/mkt/package.json
Length of output: 89
3-4
:
Critical: Misplaced content
property in Tailwind configuration
The content
property is incorrectly nested under the darkMode
property. It should be at the root level of the configuration object. This misplacement can prevent Tailwind CSS from scanning your files for class names, leading to missing styles or purging necessary CSS.
Apply this diff to fix the issue:
module.exports = {
darkMode: ["class"],
+ content: [
+ "./app/**/*.{js,ts,jsx,tsx}",
+ "./pages/**/*.{js,ts,jsx,tsx}",
+ "./components/**/*.{js,ts,jsx,tsx}",
+ ],
theme: {
- content: [
- "./app/**/*.{js,ts,jsx,tsx}",
- "./pages/**/*.{js,ts,jsx,tsx}",
- "./components/**/*.{js,ts,jsx,tsx}",
- ],
extend: {
Likely invalid or redundant comment.
apps/mkt/lib/utils.ts (1)
4-6
: Utility function cn
is well-implemented
The cn
function effectively combines class names using clsx
and resolves Tailwind CSS class conflicts with twMerge
. This enhances class name management and ensures styles are applied correctly.
apps/mkt/tsconfig.json (1)
3-3
: Verify compatibility of updated TypeScript compiler options
The changes to "target": "esnext"
, "module": "Node16"
, "moduleResolution": "node16"
, and adding "allowSyntheticDefaultImports": true
enhance support for modern JavaScript features and Node.js module resolution. However, ensure that your development and deployment environments support these settings, especially if the code needs to run in browsers or environments not compatible with ESNext features or Node.js 16.
Also applies to: 11-12, 26-26
apps/mkt/components/ui/tooltip.tsx (1)
14-28
: TooltipContent
component is correctly implemented
The TooltipContent
component uses React.forwardRef
appropriately, enhancing reusability and ref forwarding. The usage of the cn
utility function for class name management improves readability, and the component is well-structured with proper type annotations.
apps/mkt/components/automation-carousel/automation-benefit-icon.tsx (3)
1-36
: LGTM! Well-structured types and imports
The type definitions and imports are well-organized, providing good type safety and clear component structure.
38-45
: LGTM! Clean implementation of icon mapping
The implementation follows the suggested pattern using Record type, providing a clean and type-safe mapping of icons.
47-62
: LGTM! Clean component implementation
The component implementation follows React best practices with proper props handling and defaults.
apps/mkt/components/automation-carousel/automation-carousel.tsx (2)
8-8
: LGTM! Clean import replacement
The replacement of individual icon imports with the new AutomationIcon component aligns well with the PR objectives.
Line range hint 71-156
: LGTM! Consistent implementation of AutomationIcon
The AutomationIcon component is used consistently throughout the carousel, with appropriate icon types chosen for each feature context.
@import "tailwindcss/base"; | ||
@import "tailwindcss/components"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reorder @import
statements to the top of the file
The @import
statements on lines 4-5, 8-9, and 11 should be placed at the very beginning of the CSS file, before any other declarations, including @tailwind
directives. According to CSS specifications, all @import
rules must precede all other at-rules and style rules (except @charset
and @layer
) to ensure they are correctly processed.
Apply this diff to correct the order:
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "additional-styles/utility-patterns.css";
+@import "additional-styles/theme.css";
+@import "tailwindcss/utilities";
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-@import "tailwindcss/base";
-@import "tailwindcss/components";
-@import "additional-styles/utility-patterns.css";
-@import "additional-styles/theme.css";
-@import "tailwindcss/utilities";
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
This rearranges the @import
statements to the top and retains the @tailwind
directives in the correct order.
Also applies to: 8-9, 11-11
🧰 Tools
🪛 Biome (1.9.4)
[error] 4-4: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
[error] 5-5: This @import is in the wrong position.
Any @import rules must precede all other valid at-rules and style rules in a stylesheet (ignoring @charset and @layer), or else the @import rule is invalid.
Consider moving import position.
(lint/correctness/noInvalidPositionAtImportRule)
<TooltipContent> | ||
{type === "cycleTime" && <>Improves cycle time</>} | ||
{type === "compliance" && <>Improves compliance</>} | ||
{type === "failureRate" && <>Improves failure rate</>} | ||
{type === "security" && <>Improves security</>} | ||
{type === "techDebt" && <>Improves tech debt</>} | ||
</TooltipContent> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove unnecessary Fragment usage
The Fragment wrappers around single text elements are redundant and can be removed.
- {type === "cycleTime" && <>Improves cycle time</>}
- {type === "compliance" && <>Improves compliance</>}
- {type === "failureRate" && <>Improves failure rate</>}
- {type === "security" && <>Improves security</>}
- {type === "techDebt" && <>Improves tech debt</>}
+ {type === "cycleTime" && "Improves cycle time"}
+ {type === "compliance" && "Improves compliance"}
+ {type === "failureRate" && "Improves failure rate"}
+ {type === "security" && "Improves security"}
+ {type === "techDebt" && "Improves tech debt"}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
<TooltipContent> | |
{type === "cycleTime" && <>Improves cycle time</>} | |
{type === "compliance" && <>Improves compliance</>} | |
{type === "failureRate" && <>Improves failure rate</>} | |
{type === "security" && <>Improves security</>} | |
{type === "techDebt" && <>Improves tech debt</>} | |
</TooltipContent> | |
<TooltipContent> | |
{type === "cycleTime" && "Improves cycle time"} | |
{type === "compliance" && "Improves compliance"} | |
{type === "failureRate" && "Improves failure rate"} | |
{type === "security" && "Improves security"} | |
{type === "techDebt" && "Improves tech debt"} | |
</TooltipContent> |
🧰 Tools
🪛 Biome (1.9.4)
[error] 65-65: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 66-66: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 67-67: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 68-68: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
[error] 69-69: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
This pull request updates the icons and structure of the automation carousel. A new automation-icon.tsx component has been created for better icon management. Layout adjustments were made to improve the display and organization of the component.
Summary by CodeRabbit
New Features
AutomationIcon
component to enhance the icon display in theAutomationCarousel
.Bug Fixes
Refactor
AutomationIcon
component.