diff --git a/README.md b/README.md
index 69f59c8..a46c694 100644
--- a/README.md
+++ b/README.md
@@ -264,6 +264,75 @@ export class AppComponent {
}
```
+### Card Components
+
+**Selectors:** `ui-card`, `ui-card-title`, `ui-card-menu`, `ui-card-footer`
+**Description:** Zestaw komponentów do tworzenia kart z opcjonalnym nagłówkiem, menu i stopką.
+
+**CardComponent (`ui-card`) Properties:**
+- `title?: string` - Tytuł karty wyświetlany w nagłówku
+- `margin: 0.5rem` - Domyślny margin karty
+- Kolory jak ui-menu (--ui-color-menu-bg, --ui-color-menu-text)
+
+**Standalone Components:**
+- `ui-card-title` - Tytuł karty z własnymi stylami
+- `ui-card-menu` - Menu/przyciski w nagłówku
+- `ui-card-footer` - Stopka karty z własnymi stylami
+
+**Usage:**
+```html
+
+
+ Zawartość karty
+
+
+
+
+
+
+
+
+
+
+
+ 123
+ Użytkownicy
+
+
+
+
+ Ostatnia aktualizacja: dziś
+
+
+
+
+
+
+
+
+ Raporty sprzedaży
+
+
+
+
+ +12%
+
+
+
+
+
+
+```
+
+**CSS Variables:**
+- `--ui-color-card-bg` - tło karty
+- `--ui-color-card-border` - kolor obramowania
+- `--ui-color-card-title` - kolor tytułu
+- `--ui-color-card-text` - kolor tekstu
+- `--ui-color-card-footer-bg` - tło stopki
+- `--ui-shadow-card` - standardowy cień karty
+- `--ui-shadow-card-hover` - cień przy hover
+
## Development
### Building
diff --git a/src/lib/components/card/README.md b/src/lib/components/card/README.md
new file mode 100644
index 0000000..73b46ee
--- /dev/null
+++ b/src/lib/components/card/README.md
@@ -0,0 +1,186 @@
+# Card Components
+
+Zestaw komponentów do tworzenia kart z opcjonalnym nagłówkiem, menu i stopką.
+
+## Komponenty
+
+- `ui-card` - główny kontener karty
+- `ui-card-title` - tytuł karty (standalone komponent)
+- `ui-card-menu` - menu/przyciski w nagłówku (standalone komponent)
+- `ui-card-footer` - stopka karty (standalone komponent)
+
+## Użycie
+
+### Podstawowe użycie z tytułem jako Input
+
+```html
+
+ Zawartość karty
+
+```
+
+### Użycie z komponentem ui-card-title
+
+```html
+
+
+ Niestandardowy tytuł
+ Nowy
+
+ Zawartość karty
+
+```
+
+### Pełne użycie z wszystkimi komponentami
+
+```html
+
+
+
+
+
+
+
+
+ 123
+ Użytkownicy
+
+
+ 456
+ Zamówienia
+
+
+
+
+ Ostatnia aktualizacja: dziś
+
+
+```
+
+### Użycie z komponentami ui-card-title i ui-card-menu
+
+```html
+
+
+
+
+ Raporty sprzedaży
+
+
+
+
+
+ +12%
+
+
+
+
+
+
+
+
+
+
+
Okres: ostatnie 30 dni
+
Zobacz więcej
+
+
+
+```
+
+## API
+
+### CardComponent (`ui-card`)
+
+**Inputs:**
+| Właściwość | Typ | Domyślna | Opis |
+|------------|-----|----------|------|
+| `title` | `string` | `undefined` | Tytuł karty wyświetlany w nagłówku |
+
+**Content Projection:**
+| Selektor | Opis |
+|----------|------|
+| `ui-card-title` | Komponent tytułu karty |
+| `ui-card-menu` | Komponent menu w nagłówku |
+| (default) | Główna zawartość karty |
+| `ui-card-footer` | Komponent stopki karty |
+
+### CardTitleComponent (`ui-card-title`)
+
+**Opis:** Standalone komponent do wyświetlania tytułu karty z własnymi stylami.
+
+### CardMenuComponent (`ui-card-menu`)
+
+**Opis:** Standalone komponent do wyświetlania menu/przycisków w nagłówku karty.
+
+### CardFooterComponent (`ui-card-footer`)
+
+**Opis:** Standalone komponent do wyświetlania stopki karty z własnymi stylami.
+
+## Zmienne CSS
+
+Komponent używa następujących zmiennych CSS z systemu motywów:
+
+### Kolory
+- `--ui-color-card-bg` - tło karty
+- `--ui-color-card-border` - kolor obramowania
+- `--ui-color-card-title` - kolor tytułu
+- `--ui-color-card-text` - kolor tekstu
+- `--ui-color-card-footer-bg` - tło stopki
+
+### Spacing
+- `--ui-spacing-xs` (4px) - małe odstępy
+- `--ui-spacing-sm` (8px) - średnie odstępy
+- `--ui-spacing-md` (16px) - standardowe padding
+- `--ui-spacing-lg` (24px) - duże odstępy
+
+### Layout
+- `--ui-border-radius` (8px) - zaokrąglenie rogów
+- `--ui-font-size-lg` (18px) - rozmiar czcionki tytułu
+- `--ui-font-weight-semibold` (600) - grubość czcionki tytułu
+- `--ui-card-header-min-height` (40px) - minimalna wysokość nagłówka
+
+### Cienie
+- `--ui-shadow-card` - standardowy cień karty
+- `--ui-shadow-card-hover` - cień przy hover
+
+## Responsywność
+
+Na urządzeniach mobilnych (max-width: 768px):
+- Nagłówek karty zmienia się na układ kolumnowy
+- Menu wyrównuje się do prawej strony
+- Zachowane są wszystkie funkcjonalności
+
+## Przykłady stylizacji
+
+### Karta z kolorowym nagłówkiem
+
+```scss
+.custom-card {
+ .ui-card-header {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ margin: -16px -16px 0;
+ padding: 16px;
+ }
+
+ .ui-card-title {
+ color: white;
+ }
+}
+```
+
+### Karta z ikoną
+
+```html
+
+
+
+
+ Ustawienia
+
+
+
+
+
+```
diff --git a/src/lib/components/card/card-footer/card-footer.component.scss b/src/lib/components/card/card-footer/card-footer.component.scss
new file mode 100644
index 0000000..74fcf37
--- /dev/null
+++ b/src/lib/components/card/card-footer/card-footer.component.scss
@@ -0,0 +1,11 @@
+:host {
+ display: block;
+ padding: 0 var(--ui-spacing-md, 16px) var(--ui-spacing-md, 16px);
+ border-top: 1px solid var(--ui-color-menu-border, #d0d0d0);
+ background: var(--ui-color-menu-active, rgba(0, 0, 0, 0.1));
+ color: var(--ui-color-menu-text, #ffffff);
+
+ &:empty {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/src/lib/components/card/card-footer/card-footer.component.ts b/src/lib/components/card/card-footer/card-footer.component.ts
new file mode 100644
index 0000000..774a523
--- /dev/null
+++ b/src/lib/components/card/card-footer/card-footer.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'ui-card-footer',
+ standalone: true,
+ imports: [],
+ template: '',
+ styleUrl: './card-footer.component.scss'
+})
+export class CardFooterComponent {
+
+}
diff --git a/src/lib/components/card/card-menu/card-menu.component.scss b/src/lib/components/card/card-menu/card-menu.component.scss
new file mode 100644
index 0000000..6d2116a
--- /dev/null
+++ b/src/lib/components/card/card-menu/card-menu.component.scss
@@ -0,0 +1,7 @@
+:host {
+ display: flex;
+ gap: var(--ui-spacing-sm, 8px);
+ align-items: flex-start;
+ flex-shrink: 0;
+ padding: 1rem;
+}
diff --git a/src/lib/components/card/card-menu/card-menu.component.ts b/src/lib/components/card/card-menu/card-menu.component.ts
new file mode 100644
index 0000000..a1b8508
--- /dev/null
+++ b/src/lib/components/card/card-menu/card-menu.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'ui-card-menu',
+ standalone: true,
+ imports: [],
+ template: '',
+ styleUrl: './card-menu.component.scss'
+})
+export class CardMenuComponent {
+
+}
diff --git a/src/lib/components/card/card-title/card-title.component.scss b/src/lib/components/card/card-title/card-title.component.scss
new file mode 100644
index 0000000..f86a8a5
--- /dev/null
+++ b/src/lib/components/card/card-title/card-title.component.scss
@@ -0,0 +1,9 @@
+:host {
+ display: block;
+ margin: 0;
+ font-size: var(--ui-font-size-lg, 18px);
+ font-weight: var(--ui-font-weight-semibold, 600);
+ color: var(--ui-color-menu-text, #ffffff);
+ line-height: 1.2;
+ padding: 1rem;
+}
diff --git a/src/lib/components/card/card-title/card-title.component.ts b/src/lib/components/card/card-title/card-title.component.ts
new file mode 100644
index 0000000..ce9a928
--- /dev/null
+++ b/src/lib/components/card/card-title/card-title.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'ui-card-title',
+ standalone: true,
+ imports: [],
+ template: ``,
+ styleUrl: './card-title.component.scss'
+})
+export class CardTitleComponent {
+
+}
diff --git a/src/lib/components/card/card.component.html b/src/lib/components/card/card.component.html
index f2fda25..dc2607b 100644
--- a/src/lib/components/card/card.component.html
+++ b/src/lib/components/card/card.component.html
@@ -1 +1,15 @@
-
card works!
+
+
+
+
+
+
+
diff --git a/src/lib/components/card/card.component.scss b/src/lib/components/card/card.component.scss
index e69de29..344988a 100644
--- a/src/lib/components/card/card.component.scss
+++ b/src/lib/components/card/card.component.scss
@@ -0,0 +1,23 @@
+:host {
+ display: block;
+ margin: var(--ui-spacing-sm, 0.5rem);
+ background: var(--ui-color-menu-bg, #343a40);
+ border: 1px solid var(--ui-color-menu-border, #d0d0d0);
+ border-radius: var(--ui-border-radius, 8px);
+ box-shadow: var(--ui-shadow-card, 0 2px 4px rgba(0, 0, 0, 0.1));
+ overflow: hidden;
+ transition: box-shadow 0.2s ease;
+}
+
+.content {
+ padding: var(--ui-spacing-md, 16px);
+ color: var(--ui-color-menu-text, #ffffff);
+ line-height: 1.5;
+}
+.header{
+ display: flex;
+ .title,
+ ::ng-deep ui-card-title{
+ flex-grow: 1;
+ }
+}
diff --git a/src/lib/components/card/card.component.ts b/src/lib/components/card/card.component.ts
index 2d4f2e6..f04a8b1 100644
--- a/src/lib/components/card/card.component.ts
+++ b/src/lib/components/card/card.component.ts
@@ -1,11 +1,13 @@
-import { Component } from '@angular/core';
+import { Component, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
@Component({
selector: 'ui-card',
- imports: [],
+ standalone: true,
+ imports: [CommonModule],
templateUrl: './card.component.html',
styleUrl: './card.component.scss'
})
export class CardComponent {
-
+ @Input() title?: string;
}
diff --git a/src/lib/styles/_theme-mixins.scss b/src/lib/styles/_theme-mixins.scss
index ff7ce50..aaa2ea9 100644
--- a/src/lib/styles/_theme-mixins.scss
+++ b/src/lib/styles/_theme-mixins.scss
@@ -41,6 +41,27 @@
--ui-color-icon-primary: #{$primary};
--ui-color-icon-secondary: #{$secondary};
--ui-color-icon-muted: color-mix(in srgb, #{$text} 60%, transparent 40%);
+
+ /* Card component variables */
+ --ui-color-card-bg: #{if($background == #343a40, #ffffff, color-mix(in srgb, #{$background} 95%, white 5%))};
+ --ui-color-card-border: #{$border};
+ --ui-color-card-title: #{$primary};
+ --ui-color-card-text: #{if($text == #ffffff, #333333, $text)};
+ --ui-color-card-footer-bg: #{if($background == #343a40, #f8f9fa, color-mix(in srgb, #{$background} 90%, white 10%))};
+
+ /* Card spacing and layout variables */
+ --ui-spacing-xs: 4px;
+ --ui-spacing-sm: 8px;
+ --ui-spacing-md: 16px;
+ --ui-spacing-lg: 24px;
+ --ui-border-radius: 8px;
+ --ui-font-size-lg: 18px;
+ --ui-font-weight-semibold: 600;
+ --ui-card-header-min-height: 40px;
+
+ /* Card shadows */
+ --ui-shadow-card: 0 2px 4px rgba(0, 0, 0, 0.1);
+ --ui-shadow-card-hover: 0 4px 8px rgba(0, 0, 0, 0.15);
}
/**
@@ -83,4 +104,31 @@
}
}
+/**
+ * Mixin that applies theme-aware styles to card components
+ */
+@mixin ui-card-theme() {
+ background: var(--ui-color-card-bg);
+ border: 1px solid var(--ui-color-card-border);
+ border-radius: var(--ui-border-radius);
+ box-shadow: var(--ui-shadow-card);
+
+ &:hover {
+ box-shadow: var(--ui-shadow-card-hover);
+ }
+
+ .ui-card-title {
+ color: var(--ui-color-card-title);
+ }
+
+ .ui-card-content {
+ color: var(--ui-color-card-text);
+ }
+
+ .ui-card-footer {
+ background: var(--ui-color-card-footer-bg);
+ border-top-color: var(--ui-color-card-border);
+ }
+}
+
diff --git a/src/public-api.ts b/src/public-api.ts
index 0d7c441..42b5eb7 100644
--- a/src/public-api.ts
+++ b/src/public-api.ts
@@ -17,3 +17,6 @@ export * from './lib/modules/form/components/input/input.component';
// Components
export * from './lib/components/button/button.component';
export * from './lib/components/card/card.component';
+export * from './lib/components/card/card-title/card-title.component';
+export * from './lib/components/card/card-menu/card-menu.component';
+export * from './lib/components/card/card-footer/card-footer.component';