Renames danish to english
This commit is contained in:
parent
754681059d
commit
5e0bd9db74
29 changed files with 405 additions and 438 deletions
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* Kasse (Cash Register) - Page Styling
|
||||
* Cash Register - Page Styling
|
||||
*
|
||||
* Filter bar, stats, table, forms, and difference box
|
||||
*/
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
/* ===========================================
|
||||
STICKY HEADER CONTAINER
|
||||
=========================================== */
|
||||
swp-kasse-sticky-header {
|
||||
swp-cash-sticky-header {
|
||||
display: block;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
|
|
@ -17,7 +17,7 @@ swp-kasse-sticky-header {
|
|||
}
|
||||
|
||||
/* Override tab-bar sticky when inside sticky header */
|
||||
swp-kasse-sticky-header swp-tab-bar {
|
||||
swp-cash-sticky-header swp-tab-bar {
|
||||
position: static;
|
||||
top: auto;
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@ swp-kasse-sticky-header swp-tab-bar {
|
|||
/* ===========================================
|
||||
KASSE HEADER (Stats above tabs)
|
||||
=========================================== */
|
||||
swp-kasse-header {
|
||||
swp-cash-header {
|
||||
display: block;
|
||||
background: var(--color-surface);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
|
|
@ -82,7 +82,7 @@ swp-filter-spacer {
|
|||
/* ===========================================
|
||||
KASSE STATS BAR
|
||||
=========================================== */
|
||||
swp-kasse-stats {
|
||||
swp-cash-stats {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: var(--spacing-8);
|
||||
|
|
@ -90,17 +90,17 @@ swp-kasse-stats {
|
|||
margin: 0 auto;
|
||||
}
|
||||
|
||||
swp-kasse-stats:not(.active) {
|
||||
swp-cash-stats:not(.active) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
swp-kasse-stat {
|
||||
swp-cash-stat {
|
||||
background: var(--color-background-alt);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: var(--spacing-6) var(--spacing-8);
|
||||
}
|
||||
|
||||
swp-kasse-stat-value {
|
||||
swp-cash-stat-value {
|
||||
display: block;
|
||||
font-size: var(--font-size-2xl);
|
||||
font-weight: var(--font-weight-semibold);
|
||||
|
|
@ -108,26 +108,26 @@ swp-kasse-stat-value {
|
|||
color: var(--color-text);
|
||||
}
|
||||
|
||||
swp-kasse-stat-label {
|
||||
swp-cash-stat-label {
|
||||
display: block;
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--color-text-secondary);
|
||||
margin-top: var(--spacing-2);
|
||||
}
|
||||
|
||||
swp-kasse-stat.highlight swp-kasse-stat-value {
|
||||
swp-cash-stat.highlight swp-cash-stat-value {
|
||||
color: var(--color-teal);
|
||||
}
|
||||
|
||||
swp-kasse-stat.warning swp-kasse-stat-value {
|
||||
swp-cash-stat.warning swp-cash-stat-value {
|
||||
color: var(--color-amber);
|
||||
}
|
||||
|
||||
swp-kasse-stat.negative swp-kasse-stat-value {
|
||||
swp-cash-stat.negative swp-cash-stat-value {
|
||||
color: var(--color-red);
|
||||
}
|
||||
|
||||
swp-kasse-stat.user swp-kasse-stat-value {
|
||||
swp-cash-stat.user swp-cash-stat-value {
|
||||
color: var(--color-blue);
|
||||
}
|
||||
|
||||
|
|
@ -153,7 +153,7 @@ swp-selection-info {
|
|||
/* ===========================================
|
||||
KASSE TABLE (Grid + Subgrid pattern)
|
||||
=========================================== */
|
||||
swp-kasse-table {
|
||||
swp-cash-table {
|
||||
display: grid;
|
||||
grid-template-columns: 50px 70px 60px minmax(140px, 1fr) 90px 100px 100px 110px 120px 40px;
|
||||
background: var(--color-surface);
|
||||
|
|
@ -162,28 +162,28 @@ swp-kasse-table {
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
swp-kasse-table-header,
|
||||
swp-kasse-table-body {
|
||||
swp-cash-table-header,
|
||||
swp-cash-table-body {
|
||||
display: grid;
|
||||
grid-column: 1 / -1;
|
||||
grid-template-columns: subgrid;
|
||||
}
|
||||
|
||||
swp-kasse-table-header {
|
||||
swp-cash-table-header {
|
||||
background: var(--color-background-alt);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
padding: var(--spacing-6) var(--spacing-10);
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
swp-kasse-table-row {
|
||||
swp-cash-table-row {
|
||||
display: grid;
|
||||
grid-column: 1 / -1;
|
||||
grid-template-columns: subgrid;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
swp-kasse-th {
|
||||
swp-cash-th {
|
||||
font-size: var(--font-size-xs);
|
||||
font-weight: var(--font-weight-semibold);
|
||||
text-transform: uppercase;
|
||||
|
|
@ -191,76 +191,76 @@ swp-kasse-th {
|
|||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
swp-kasse-th.right {
|
||||
swp-cash-th.right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
swp-kasse-th.checkbox,
|
||||
swp-kasse-td.checkbox {
|
||||
swp-cash-th.checkbox,
|
||||
swp-cash-td.checkbox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
swp-kasse-table input[type="checkbox"] {
|
||||
swp-cash-table input[type="checkbox"] {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
accent-color: var(--color-teal);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
swp-kasse-table-row {
|
||||
swp-cash-table-row {
|
||||
padding: var(--spacing-7) var(--spacing-10);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
cursor: pointer;
|
||||
transition: background var(--transition-fast);
|
||||
}
|
||||
|
||||
swp-kasse-table-row:last-child {
|
||||
swp-cash-table-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
swp-kasse-table-row:hover {
|
||||
swp-cash-table-row:hover {
|
||||
background: var(--color-background-hover);
|
||||
}
|
||||
|
||||
/* Draft row - clickable to go to Kasseafstemning */
|
||||
swp-kasse-table-row.draft-row {
|
||||
swp-cash-table-row.draft-row {
|
||||
background: color-mix(in srgb, var(--color-amber) 5%, transparent);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
swp-kasse-table-row.draft-row:hover {
|
||||
swp-cash-table-row.draft-row:hover {
|
||||
background: color-mix(in srgb, var(--color-amber) 12%, transparent);
|
||||
}
|
||||
|
||||
swp-kasse-td {
|
||||
swp-cash-td {
|
||||
font-size: var(--font-size-base);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
swp-kasse-td.right {
|
||||
swp-cash-td.right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
swp-kasse-td.mono {
|
||||
swp-cash-td.mono {
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
swp-kasse-td.muted {
|
||||
swp-cash-td.muted {
|
||||
color: var(--color-text-secondary);
|
||||
font-size: var(--font-size-sm);
|
||||
}
|
||||
|
||||
swp-kasse-td.negative {
|
||||
swp-cash-td.negative {
|
||||
color: var(--color-red);
|
||||
}
|
||||
|
||||
swp-kasse-td.positive {
|
||||
swp-cash-td.positive {
|
||||
color: var(--color-green);
|
||||
}
|
||||
|
||||
swp-kasse-td.id {
|
||||
swp-cash-td.id {
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--color-text-secondary);
|
||||
font-family: var(--font-mono);
|
||||
|
|
@ -301,7 +301,7 @@ swp-row-toggle i {
|
|||
}
|
||||
|
||||
/* Row detail - hidden by default */
|
||||
swp-kasse-row-detail {
|
||||
swp-cash-row-detail {
|
||||
grid-column: 1 / -1;
|
||||
display: none;
|
||||
overflow: hidden;
|
||||
|
|
@ -309,7 +309,7 @@ swp-kasse-row-detail {
|
|||
border-bottom: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
swp-kasse-row-detail.expanded {
|
||||
swp-cash-row-detail.expanded {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
|
@ -336,7 +336,7 @@ swp-row-arrow i {
|
|||
font-size: var(--font-size-lg);
|
||||
}
|
||||
|
||||
swp-kasse-table-footer {
|
||||
swp-cash-table-footer {
|
||||
grid-column: 1 / -1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -352,8 +352,8 @@ swp-kasse-table-footer {
|
|||
STATUS BADGE
|
||||
=========================================== */
|
||||
/* Center status column */
|
||||
swp-kasse-th:nth-child(9),
|
||||
swp-kasse-td:nth-child(9) {
|
||||
swp-cash-th:nth-child(9),
|
||||
swp-cash-td:nth-child(9) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
|
@ -388,19 +388,19 @@ swp-status-badge.draft {
|
|||
/* ===========================================
|
||||
TWO-COLUMN GRID (Detail View)
|
||||
=========================================== */
|
||||
swp-kasse-grid {
|
||||
swp-cash-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: var(--spacing-12);
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
swp-kasse-grid {
|
||||
swp-cash-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
swp-kasse-column {
|
||||
swp-cash-column {
|
||||
display: grid;
|
||||
gap: var(--spacing-10);
|
||||
align-content: start;
|
||||
|
|
@ -866,20 +866,20 @@ swp-system-note {
|
|||
RESPONSIVE
|
||||
=========================================== */
|
||||
@media (max-width: 1000px) {
|
||||
swp-kasse-stats {
|
||||
swp-cash-stats {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
/* Table columns defined on parent - subgrid inherits */
|
||||
swp-kasse-table {
|
||||
swp-cash-table {
|
||||
grid-template-columns: 50px 80px 1fr 100px 110px 120px 40px;
|
||||
}
|
||||
|
||||
/* Hide some columns on smaller screens */
|
||||
swp-kasse-th:nth-child(3),
|
||||
swp-kasse-td:nth-child(3),
|
||||
swp-kasse-th:nth-child(6),
|
||||
swp-kasse-td:nth-child(6) {
|
||||
swp-cash-th:nth-child(3),
|
||||
swp-cash-td:nth-child(3),
|
||||
swp-cash-th:nth-child(6),
|
||||
swp-cash-td:nth-child(6) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -9,7 +9,7 @@ import { DrawerController } from './modules/drawers';
|
|||
import { ThemeController } from './modules/theme';
|
||||
import { SearchController } from './modules/search';
|
||||
import { LockScreenController } from './modules/lockscreen';
|
||||
import { KasseController } from './modules/kasse';
|
||||
import { CashController } from './modules/cash';
|
||||
|
||||
/**
|
||||
* Main application class
|
||||
|
|
@ -20,7 +20,7 @@ export class App {
|
|||
readonly theme: ThemeController;
|
||||
readonly search: SearchController;
|
||||
readonly lockScreen: LockScreenController;
|
||||
readonly kasse: KasseController;
|
||||
readonly cash: CashController;
|
||||
|
||||
constructor() {
|
||||
// Initialize controllers
|
||||
|
|
@ -29,7 +29,7 @@ export class App {
|
|||
this.theme = new ThemeController();
|
||||
this.search = new SearchController();
|
||||
this.lockScreen = new LockScreenController(this.drawers);
|
||||
this.kasse = new KasseController();
|
||||
this.cash = new CashController();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/**
|
||||
* Kasse Controller
|
||||
* Cash Controller
|
||||
*
|
||||
* Handles tab switching, cash calculations, and form interactions
|
||||
* for the Kasse (Cash Register) page.
|
||||
* for the Cash Register page.
|
||||
*/
|
||||
|
||||
export class KasseController {
|
||||
export class CashController {
|
||||
// Base values (from system - would come from server in real app)
|
||||
private readonly startBalance = 2000;
|
||||
private readonly cashSales = 3540;
|
||||
|
|
@ -42,7 +42,7 @@ export class KasseController {
|
|||
private switchToTab(targetTab: string): void {
|
||||
const tabs = document.querySelectorAll<HTMLElement>('swp-tab[data-tab]');
|
||||
const contents = document.querySelectorAll<HTMLElement>('swp-tab-content[data-tab]');
|
||||
const statsBars = document.querySelectorAll<HTMLElement>('swp-kasse-stats[data-for-tab]');
|
||||
const statsBars = document.querySelectorAll<HTMLElement>('swp-cash-stats[data-for-tab]');
|
||||
|
||||
// Update tab states
|
||||
tabs.forEach(t => {
|
||||
|
|
@ -243,13 +243,13 @@ export class KasseController {
|
|||
* Setup row toggle for expandable details
|
||||
*/
|
||||
private setupRowToggle(): void {
|
||||
const rows = document.querySelectorAll<HTMLElement>('swp-kasse-table-row[data-id]:not(.draft-row)');
|
||||
const rows = document.querySelectorAll<HTMLElement>('swp-cash-table-row[data-id]:not(.draft-row)');
|
||||
|
||||
rows.forEach(row => {
|
||||
const rowId = row.getAttribute('data-id');
|
||||
if (!rowId) return;
|
||||
|
||||
const detail = document.querySelector<HTMLElement>(`swp-kasse-row-detail[data-for="${rowId}"]`);
|
||||
const detail = document.querySelector<HTMLElement>(`swp-cash-row-detail[data-for="${rowId}"]`);
|
||||
if (!detail) return;
|
||||
|
||||
row.addEventListener('click', (e) => {
|
||||
|
|
@ -260,11 +260,11 @@ export class KasseController {
|
|||
const isExpanded = row.classList.contains('expanded');
|
||||
|
||||
// Close other expanded rows
|
||||
document.querySelectorAll('swp-kasse-table-row.expanded').forEach(r => {
|
||||
document.querySelectorAll('swp-cash-table-row.expanded').forEach(r => {
|
||||
if (r !== row) {
|
||||
const otherId = r.getAttribute('data-id');
|
||||
if (otherId) {
|
||||
const otherDetail = document.querySelector<HTMLElement>(`swp-kasse-row-detail[data-for="${otherId}"]`);
|
||||
const otherDetail = document.querySelector<HTMLElement>(`swp-cash-row-detail[data-for="${otherId}"]`);
|
||||
const otherIcon = r.querySelector('swp-row-toggle i');
|
||||
if (otherDetail && otherIcon) {
|
||||
this.collapseRow(r, otherDetail, otherIcon as HTMLElement);
|
||||
|
|
@ -353,10 +353,10 @@ export class KasseController {
|
|||
}
|
||||
|
||||
/**
|
||||
* Setup draft row click to navigate to Kasseafstemning tab
|
||||
* Setup draft row click to navigate to reconciliation tab
|
||||
*/
|
||||
private setupDraftRowClick(): void {
|
||||
const draftRow = document.querySelector<HTMLElement>('swp-kasse-table-row.draft-row');
|
||||
const draftRow = document.querySelector<HTMLElement>('swp-cash-table-row.draft-row');
|
||||
if (!draftRow) return;
|
||||
|
||||
draftRow.style.cursor = 'pointer';
|
||||
Loading…
Add table
Add a link
Reference in a new issue