diff --git a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.html b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.html
index 1c59d49..92ad170 100644
--- a/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.html
+++ b/src/app/features/componentes-test/pages/reutilizables-test-page/reutilizables-test-page.component.html
@@ -63,6 +63,57 @@
+
+
diff --git a/src/app/shared/components/cart-item/cart-item.component.scss b/src/app/shared/components/cart-item/cart-item.component.scss
index 7553a99..43ad442 100644
--- a/src/app/shared/components/cart-item/cart-item.component.scss
+++ b/src/app/shared/components/cart-item/cart-item.component.scss
@@ -96,10 +96,5 @@
.cart-item-remove-btn {
- width: 18px;
- height: 18px;
margin-left: 0.35rem;
- padding: 0;
- color: #b3b3b3;
- font-size: 12px;
}
diff --git a/src/app/shared/components/cart-item/cart-item.component.ts b/src/app/shared/components/cart-item/cart-item.component.ts
index 68465cb..15921e1 100644
--- a/src/app/shared/components/cart-item/cart-item.component.ts
+++ b/src/app/shared/components/cart-item/cart-item.component.ts
@@ -1,5 +1,6 @@
import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';
import { QuantitySelectorComponent } from '../quantity-selector/quantity-selector.component';
+import { IconButtonComponent } from '../icon-button/icon-button.component';
export interface CartItemAttribute {
label: string;
@@ -9,7 +10,7 @@ export interface CartItemAttribute {
@Component({
selector: 'app-cart-item',
standalone: true,
- imports: [QuantitySelectorComponent],
+ imports: [QuantitySelectorComponent, IconButtonComponent],
templateUrl: './cart-item.component.html',
styleUrl: './cart-item.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush
diff --git a/src/app/shared/components/icon-button/icon-button.component.html b/src/app/shared/components/icon-button/icon-button.component.html
new file mode 100644
index 0000000..c7318a3
--- /dev/null
+++ b/src/app/shared/components/icon-button/icon-button.component.html
@@ -0,0 +1,8 @@
+
+
+
diff --git a/src/app/shared/components/icon-button/icon-button.component.scss b/src/app/shared/components/icon-button/icon-button.component.scss
new file mode 100644
index 0000000..d4ef0dd
--- /dev/null
+++ b/src/app/shared/components/icon-button/icon-button.component.scss
@@ -0,0 +1,64 @@
+:host {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.icon-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ background: transparent;
+ border: none;
+ padding: 4px;
+ margin: 0;
+ color: #666666;
+ font-size: 20px;
+ cursor: pointer;
+ outline: none;
+ transition: color 0.15s ease-in-out, transform 0.1s ease-in-out;
+ border-radius: 4px;
+
+ i {
+ display: inline-block;
+ line-height: 1;
+ }
+
+ // Active state subtle scale down
+ &:active:not(:disabled) {
+ transform: scale(0.92);
+ }
+
+ // Focus ring for accessibility
+ &:focus-visible {
+ outline: 2px solid var(--tenant-primary);
+ outline-offset: 2px;
+ }
+
+ // Disabled state
+ &:disabled {
+ color: #A0A0A0;
+ cursor: not-allowed;
+ pointer-events: none;
+ }
+}
+
+// Hover/Active/Focus colors (non-disabled)
+.icon-btn:hover:not(:disabled),
+.icon-btn:focus-visible:not(:disabled),
+.icon-btn.hover-preview:not(:disabled),
+:host(.hover-preview) .icon-btn:not(:disabled) {
+ color: var(--tenant-primary);
+}
+
+// Trash is special (uses danger color for hover/active)
+.icon-btn--trash {
+ &:hover:not(:disabled),
+ &:focus-visible:not(:disabled),
+ &.hover-preview:not(:disabled) {
+ color: var(--tenant-danger);
+ }
+}
+
+:host(.hover-preview) .icon-btn--trash:not(:disabled) {
+ color: var(--tenant-danger);
+}
diff --git a/src/app/shared/components/icon-button/icon-button.component.ts b/src/app/shared/components/icon-button/icon-button.component.ts
new file mode 100644
index 0000000..140292f
--- /dev/null
+++ b/src/app/shared/components/icon-button/icon-button.component.ts
@@ -0,0 +1,41 @@
+import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
+import { NgClass } from '@angular/common';
+
+export type IconButtonVariant =
+ | 'user'
+ | 'trash'
+ | 'angle-right'
+ | 'angle-left'
+ | 'angle-up'
+ | 'angle-down'
+ | 'copy';
+
+@Component({
+ selector: 'app-icon-button',
+ imports: [NgClass],
+ templateUrl: './icon-button.component.html',
+ styleUrl: './icon-button.component.scss',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class IconButtonComponent {
+ readonly variant = input.required();
+ readonly disabled = input(false);
+ readonly ariaLabel = input('');
+
+ protected readonly iconClass = computed(() => {
+ const classes: Record = {
+ user: 'fa-regular fa-circle-user',
+ trash: 'fa-solid fa-trash',
+ 'angle-right': 'fa-solid fa-angle-right',
+ 'angle-left': 'fa-solid fa-angle-left',
+ 'angle-up': 'fa-solid fa-angle-up',
+ 'angle-down': 'fa-solid fa-angle-down',
+ copy: 'fa-solid fa-copy'
+ };
+ return classes[this.variant()];
+ });
+
+ protected readonly buttonClasses = computed(() => {
+ return ['icon-btn', `icon-btn--${this.variant()}`];
+ });
+}