Adds comprehensive customers list and management components

Introduces customer-related view components for table and row display
Implements mock data loading and customer list rendering
Adds localization support for customer-related text
Enhances UI with detailed customer information and interactions
This commit is contained in:
Janus C. H. Knudsen 2026-01-21 18:00:53 +01:00
parent cd7acaf490
commit 6ef001e35f
11 changed files with 869 additions and 675 deletions

View file

@ -18,9 +18,9 @@ swp-card.customers-list {
overflow: hidden;
}
/* Table columns: QuickView(40px) | Navn(1fr) | Tlf(120px) | Email(180px) | Besøg(70px) | Sidste(90px) | Frisør(100px) | Oprettet(90px) | Tags(140px) */
/* Table columns: Navn(1fr) | Tlf(120px) | Email(180px) | Besøg(70px) | Sidste(90px) | Frisør(100px) | Oprettet(90px) | Tags(140px) */
swp-card.customers-list swp-data-table {
grid-template-columns: 40px minmax(200px, 1fr) 120px 180px 70px 90px 100px 90px 140px;
grid-template-columns: minmax(200px, 1fr) 120px 180px 70px 90px 100px 90px 140px;
}
swp-card.customers-list swp-data-table-header,
@ -41,29 +41,22 @@ swp-card.customers-list swp-data-table-cell {
padding: var(--spacing-5) 0;
}
/* Quick-view cell (first column) */
/* Name cell with avatar and quick-view button */
swp-card.customers-list swp-data-table-cell:first-child {
display: flex;
align-items: center;
justify-content: center;
gap: var(--spacing-3);
}
/* Name cell with avatar (second column) */
swp-card.customers-list swp-data-table-cell:nth-child(2) {
display: flex;
align-items: center;
gap: var(--spacing-4);
}
/* Mono font for visits column (fifth column) */
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(5) {
/* Mono font for visits column */
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(4) {
font-family: var(--font-mono);
text-align: center;
}
/* Muted text for email and created columns (4th and 8th) */
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(4),
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(8) {
/* Muted text for email and created columns */
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(3),
swp-card.customers-list swp-data-table-row swp-data-table-cell:nth-child(7) {
color: var(--color-text-secondary);
}

View file

@ -233,7 +233,7 @@ swp-modules-badge {
display: inline-flex;
align-items: center;
padding: var(--spacing-1) var(--spacing-3);
font-size: var(--font-size-xs);
font-size: var(--font-size-sm);
font-weight: var(--font-weight-semibold);
border-radius: var(--radius-sm);
background: var(--bg-purple-strong);
@ -251,14 +251,17 @@ swp-modules-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: var(--spacing-24);
margin-bottom: var(--spacing-5);
padding-top: var(--spacing-12);
border-top: 1px solid var(--color-border);
}
swp-modules-title {
display: flex;
align-items: center;
gap: var(--spacing-3);
font-size: var(--font-size-lg);
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
@ -303,9 +306,9 @@ swp-module-card {
swp-module-header {
display: flex;
align-items: center;
align-items: flex-start;
gap: var(--spacing-5);
padding: var(--card-padding);
padding: var(--spacing-6);
}
swp-module-icon {
@ -350,21 +353,23 @@ swp-module-icon {
swp-module-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: var(--spacing-2);
}
swp-module-title {
display: block;
font-size: var(--font-size-md);
font-size: var(--font-size-lg);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
margin-bottom: var(--spacing-1);
}
swp-module-desc {
display: block;
font-size: var(--font-size-sm);
font-size: var(--font-size-md);
color: var(--color-text-secondary);
line-height: 1.4;
line-height: 1.6;
}
swp-module-toggle {
@ -390,7 +395,7 @@ swp-module-tag {
display: inline-flex;
align-items: center;
padding: var(--spacing-1) var(--spacing-3);
font-size: var(--font-size-xs);
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
border-radius: var(--radius-sm);
background: var(--color-background);
@ -440,8 +445,8 @@ swp-module-card.featured {
swp-module-features {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-2) var(--spacing-5);
flex-direction: column;
gap: var(--spacing-2);
padding: 0 var(--card-padding) var(--spacing-5);
}
@ -449,7 +454,7 @@ swp-module-feature {
display: flex;
align-items: center;
gap: var(--spacing-2);
font-size: var(--font-size-sm);
font-size: var(--font-size-md);
color: var(--color-text-secondary);
& i {
@ -487,7 +492,7 @@ swp-module-stat {
swp-module-stat-value {
display: block;
font-size: var(--font-size-xl);
font-size: var(--font-size-2xl);
font-weight: var(--font-weight-bold);
font-family: var(--font-mono);
color: var(--color-green);
@ -495,7 +500,7 @@ swp-module-stat-value {
swp-module-stat-label {
display: block;
font-size: var(--font-size-xs);
font-size: var(--font-size-sm);
color: var(--color-text-secondary);
margin-top: var(--spacing-1);
}
@ -530,8 +535,9 @@ swp-tracking-hint {
/* Modules tab max-width */
swp-tab-content[data-tab="modules"] swp-page-container {
max-width: 900px;
max-width: 1100px;
margin: 0 auto;
padding-bottom: var(--spacing-16);
}
/* Tracking tab uses 2-column grid layout */
@ -539,7 +545,7 @@ swp-tab-content[data-tab="tracking"] swp-page-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
max-width: 900px;
max-width: 1100px;
margin: 0 auto;
}