diff --git a/package-lock.json b/package-lock.json
index 0a05b92..0000198 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,8 +16,9 @@
"@angular/material": "^20.2.9",
"@angular/platform-browser": "^20.3.0",
"@angular/router": "^20.3.0",
- "@infinimotion/model-frontend": "^0.0.85",
+ "@infinimotion/model-frontend": "^0.0.89",
"@tailwindcss/postcss": "^4.1.14",
+ "ngx-mask": "^20.0.3",
"postcss": "^8.5.6",
"rxjs": "~7.8.0",
"tailwindcss": "^4.1.14",
@@ -440,6 +441,7 @@
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.2.12.tgz",
"integrity": "sha512-hz8GtiMy3N9/e8407ZfrByHD5GEC4SkWtxyUknWuTM9P88AOie0jDZ6CfQg9gQ0OJX+6BAbJV3RpYZA1uzNUqA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"parse5": "^8.0.0",
"tslib": "^2.3.0"
@@ -490,6 +492,7 @@
"resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.10.tgz",
"integrity": "sha512-12fEzvKbEqjqy1fSk9DMYlJz6dF1MJVXuC5BB+oWWJpd+2lfh4xJ62pkvvLGAICI89hfM5n9Cy5kWnXwnqPZsA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -506,6 +509,7 @@
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.10.tgz",
"integrity": "sha512-cW939Lr8GZjPSYfbQKIDNrUaHWmn2M+zBbERThfq5skLuY+xM60bJFv4NqBekfX6YqKLCY62ilUZlnImYIXaqA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -519,6 +523,7 @@
"integrity": "sha512-9BemvpFxA26yIVdu8ROffadMkEdlk/AQQ2Jb486w7RPkrvUQ0pbEJukhv9aryJvhbMopT66S5H/j4ipOUMzmzQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/core": "7.28.3",
"@jridgewell/sourcemap-codec": "^1.4.14",
@@ -551,6 +556,7 @@
"resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.10.tgz",
"integrity": "sha512-g99Qe+NOVo72OLxowVF9NjCckswWYHmvO7MgeiZTDJbTjF9tXH96dMx7AWq76/GUinV10sNzDysVW16NoAbCRQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -576,6 +582,7 @@
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.10.tgz",
"integrity": "sha512-9yWr51EUauTEINB745AaHwZNTHLpXIm4uxuykxzOg+g2QskEgVfH26uS8G2ogdNuwYpB8wnsXWr34qhM3qgOWw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -611,6 +618,7 @@
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.10.tgz",
"integrity": "sha512-UV8CGoB5P3FmJciI3/I/n3L7C3NVgGh7bIlZ1BaB/qJDtv0Wq0rRAGwmT/Z3gwmrRtfHZWme7/CeQ2CYJmMyUQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -677,6 +685,7 @@
"integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1",
@@ -1392,9 +1401,9 @@
}
},
"node_modules/@infinimotion/model-frontend": {
- "version": "0.0.85",
- "resolved": "https://git.infinimotion.de/api/packages/infinimotion/npm/%40infinimotion%2Fmodel-frontend/-/0.0.85/model-frontend-0.0.85.tgz",
- "integrity": "sha512-QPiZNl//Y1JdxtXk+VScc67h1K664z68PUCXRff9fRf4IHlYXtqutc+ainK8vxOVSqqL6EEmDAtbLsRwrG6kRg==",
+ "version": "0.0.89",
+ "resolved": "https://git.infinimotion.de/api/packages/infinimotion/npm/%40infinimotion%2Fmodel-frontend/-/0.0.89/model-frontend-0.0.89.tgz",
+ "integrity": "sha512-lvvQy8RWs41Bz52uBgsUKkwn8teGlgxlmG8Rvsgkh+v1IMVWFWVQmfMS7Rznd0lCZRgK1ByihH80X9eAN12idA==",
"license": "ISC"
},
"node_modules/@inquirer/ansi": {
@@ -1633,6 +1642,7 @@
"integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@inquirer/checkbox": "^4.2.1",
"@inquirer/confirm": "^5.1.14",
@@ -3865,6 +3875,7 @@
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -4198,6 +4209,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
@@ -5294,6 +5306,7 @@
"integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"accepts": "^2.0.0",
"body-parser": "^2.2.0",
@@ -6245,7 +6258,8 @@
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.9.0.tgz",
"integrity": "sha512-OMUvF1iI6+gSRYOhMrH4QYothVLN9C3EJ6wm4g7zLJlnaTl8zbaPOr0bTw70l7QxkoM7sVFOWo83u9B2Fe2Zng==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/jiti": {
"version": "2.6.1",
@@ -6339,6 +6353,7 @@
"integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@colors/colors": "1.5.0",
"body-parser": "^1.19.0",
@@ -7055,6 +7070,7 @@
"integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cli-truncate": "^4.0.0",
"colorette": "^2.0.20",
@@ -7693,6 +7709,20 @@
"node": ">= 0.6"
}
},
+ "node_modules/ngx-mask": {
+ "version": "20.0.3",
+ "resolved": "https://registry.npmjs.org/ngx-mask/-/ngx-mask-20.0.3.tgz",
+ "integrity": "sha512-5bmrgbFGudj0mFN6cPv/TI+cFJxT4l61mLIFskdvaXsJL/Oj7thRmWYqvqHXjCboOcx8gT6T/Zypl5u9l2J8Jg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "peerDependencies": {
+ "@angular/common": ">=14.0.0",
+ "@angular/core": ">=14.0.0",
+ "@angular/forms": ">=14.0.0"
+ }
+ },
"node_modules/node-addon-api": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
@@ -8712,6 +8742,7 @@
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"tslib": "^2.1.0"
}
@@ -8768,6 +8799,7 @@
"integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@@ -9616,7 +9648,8 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
+ "license": "0BSD",
+ "peer": true
},
"node_modules/tuf-js": {
"version": "3.1.0",
@@ -9654,6 +9687,7 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -9840,6 +9874,7 @@
"integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -10243,6 +10278,7 @@
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
@@ -10261,7 +10297,8 @@
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz",
"integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
}
}
}
diff --git a/package.json b/package.json
index 5027aa3..0a846b3 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,9 @@
"@angular/material": "^20.2.9",
"@angular/platform-browser": "^20.3.0",
"@angular/router": "^20.3.0",
- "@infinimotion/model-frontend": "^0.0.85",
+ "@infinimotion/model-frontend": "^0.0.89",
"@tailwindcss/postcss": "^4.1.14",
+ "ngx-mask": "^20.0.3",
"postcss": "^8.5.6",
"rxjs": "~7.8.0",
"tailwindcss": "^4.1.14",
diff --git a/src/_theme-colors.scss b/src/_theme-colors.scss
new file mode 100644
index 0000000..5c6e044
--- /dev/null
+++ b/src/_theme-colors.scss
@@ -0,0 +1,137 @@
+// This file was generated by running 'ng generate @angular/material:theme-color'.
+// Proceed with caution if making changes to this file.
+
+@use 'sass:map';
+@use '@angular/material' as mat;
+
+// Note: Color palettes are generated from primary: 6366f1, tertiary: dd2979
+$_palettes: (
+ primary: (
+ 0: #000000,
+ 10: #07006c,
+ 20: #1000a9,
+ 25: #201cb4,
+ 30: #2f2ebe,
+ 35: #3c3dca,
+ 40: #494bd6,
+ 50: #6366f1,
+ 60: #8083ff,
+ 70: #a0a3ff,
+ 80: #c0c1ff,
+ 90: #e1e0ff,
+ 95: #f2efff,
+ 98: #fcf8ff,
+ 99: #fffbff,
+ 100: #ffffff,
+ ),
+ secondary: (
+ 0: #000000,
+ 10: #13144a,
+ 20: #292a60,
+ 25: #34366c,
+ 30: #404178,
+ 35: #4b4d85,
+ 40: #575992,
+ 50: #7072ac,
+ 60: #8a8bc8,
+ 70: #a5a6e4,
+ 80: #c0c1ff,
+ 90: #e1e0ff,
+ 95: #f2efff,
+ 98: #fcf8ff,
+ 99: #fffbff,
+ 100: #ffffff,
+ ),
+ tertiary: (
+ 0: #000000,
+ 10: #3f001c,
+ 20: #650031,
+ 25: #79003d,
+ 30: #8e0048,
+ 35: #a40054,
+ 40: #ba0060,
+ 50: #dd2979,
+ 60: #ff4993,
+ 70: #ff84ad,
+ 80: #ffb1c7,
+ 90: #ffd9e2,
+ 95: #ffecef,
+ 98: #fff8f8,
+ 99: #fffbff,
+ 100: #ffffff,
+ ),
+ neutral: (
+ 0: #000000,
+ 10: #1b1b23,
+ 20: #303038,
+ 25: #3b3a44,
+ 30: #46464f,
+ 35: #52515b,
+ 40: #5e5d67,
+ 50: #777680,
+ 60: #918f9a,
+ 70: #acaab5,
+ 80: #c7c5d1,
+ 90: #e4e1ed,
+ 95: #f2effb,
+ 98: #fcf8ff,
+ 99: #fffbff,
+ 100: #ffffff,
+ 4: #0d0d15,
+ 6: #13131b,
+ 12: #1f1f27,
+ 17: #292932,
+ 22: #34343d,
+ 24: #393841,
+ 87: #dbd8e4,
+ 92: #e9e6f3,
+ 94: #efecf8,
+ 96: #f5f2fe,
+ ),
+ neutral-variant: (
+ 0: #000000,
+ 10: #1a1a28,
+ 20: #2f2f3d,
+ 25: #3a3a49,
+ 30: #464554,
+ 35: #515160,
+ 40: #5d5d6d,
+ 50: #767586,
+ 60: #908fa0,
+ 70: #aba9bb,
+ 80: #c7c4d7,
+ 90: #e3e0f3,
+ 95: #f2efff,
+ 98: #fcf8ff,
+ 99: #fffbff,
+ 100: #ffffff,
+ ),
+ error: (
+ 0: #000000,
+ 10: #410002,
+ 20: #690005,
+ 25: #7e0007,
+ 30: #93000a,
+ 35: #a80710,
+ 40: #ba1a1a,
+ 50: #de3730,
+ 60: #ff5449,
+ 70: #ff897d,
+ 80: #ffb4ab,
+ 90: #ffdad6,
+ 95: #ffedea,
+ 98: #fff8f7,
+ 99: #fffbff,
+ 100: #ffffff,
+ ),
+);
+
+$_rest: (
+ secondary: map.get($_palettes, secondary),
+ neutral: map.get($_palettes, neutral),
+ neutral-variant: map.get($_palettes, neutral-variant),
+ error: map.get($_palettes, error),
+);
+
+$primary-palette: map.merge(map.get($_palettes, primary), $_rest);
+$tertiary-palette: map.merge(map.get($_palettes, tertiary), $_rest);
\ No newline at end of file
diff --git a/src/app/app-module.ts b/src/app/app-module.ts
index 3df7d00..f692e72 100644
--- a/src/app/app-module.ts
+++ b/src/app/app-module.ts
@@ -3,15 +3,16 @@ import { NgModule, provideBrowserGlobalErrorListeners } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { provideHttpClient, withFetch } from '@angular/common/http';
-
-
import { AppRoutingModule } from './app-routing-module';
import { App } from './app';
+import { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';
+
import { MatIconModule } from '@angular/material/icon';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatProgressBarModule } from '@angular/material/progress-bar';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatInputModule } from '@angular/material/input';
@@ -20,6 +21,7 @@ import { MatButtonModule, MatIconButton } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatDialogClose, MatDialogTitle, MatDialogContent, MatDialogActions } from "@angular/material/dialog";
import { MatStepperModule } from '@angular/material/stepper';
+import { MatCheckboxModule } from '@angular/material/checkbox';
import { HeaderComponent } from './header/header.component';
import { HomeComponent } from './home/home.component';
@@ -28,7 +30,6 @@ import { MainLayoutComponent } from './layouts/main-layout/main-layout.component
import { NavbarComponent } from './navbar/navbar.component';
import { PocModelComponent } from './poc-model-component/poc-model-component';
import { ScheduleComponent } from './schedule/schedule.component';
-
import { MovieDurationComponent } from './movie-duration/movie-duration.component';
import { MoviePerformanceComponent } from './movie-performance/movie-performance.component';
import { MoviePosterComponent } from './movie-poster/movie-poster.component';
@@ -49,6 +50,11 @@ import { MovieImporterComponent } from './movie-importer/movie-importer.componen
import { MovieImportNoSearchResultComponent } from './movie-import-no-search-result/movie-import-no-search-result.component';
import { MovieImportSearchInfoComponent } from './movie-import-search-info/movie-import-search-info.component';
import { LoginDialog } from './login/login.dialog';
+import { PerformanceInfoComponent } from './performance-info/performance-info.component';
+import { ShoppingCartComponent } from './shopping-cart/shopping-cart.component';
+import { OrderComponent } from './order/order.component';
+import { SeatSelectionComponent } from './seat-selection/seat-selection.component';
+import { NoSeatsInHallComponent } from './no-seats-in-hall/no-seats-in-hall.component';
@NgModule({
@@ -81,6 +87,11 @@ import { LoginDialog } from './login/login.dialog';
MovieImportNoSearchResultComponent,
MovieImportSearchInfoComponent,
LoginDialog,
+ PerformanceInfoComponent,
+ ShoppingCartComponent,
+ OrderComponent,
+ SeatSelectionComponent,
+ NoSeatsInHallComponent,
],
imports: [
AppRoutingModule,
@@ -92,6 +103,7 @@ import { LoginDialog } from './login/login.dialog';
MatTabsModule,
MatToolbarModule,
MatProgressBarModule,
+ MatProgressSpinnerModule,
MatSnackBarModule,
MatAutocompleteModule,
MatInputModule,
@@ -103,13 +115,17 @@ import { LoginDialog } from './login/login.dialog';
MatDialogTitle,
MatDialogContent,
MatDialogActions,
- MatStepperModule
-],
+ MatCheckboxModule,
+ MatStepperModule,
+ NgxMaskDirective,
+ NgxMaskPipe,
+ ],
providers: [
provideBrowserGlobalErrorListeners(),
provideHttpClient(
withFetch(),
- )
+ ),
+ provideNgxMask(),
],
bootstrap: [App]
})
diff --git a/src/app/menu-header/menu-header.component.html b/src/app/menu-header/menu-header.component.html
index 1941a29..beb2792 100644
--- a/src/app/menu-header/menu-header.component.html
+++ b/src/app/menu-header/menu-header.component.html
@@ -10,5 +10,13 @@
@if ( searchBar() ) {
Huch?! Keine Sitzplätze?
+Hast du ein Glück, Stehplätze sind kostenlos.
++ Tickets gesamt: +
++ {{ getPriceDisplay(totalPrice()) }} +
+{{ getPriceDisplay(seatCategory().price) }}
+× {{ selectedSeatsByCategory() }}
+{{ getPriceDisplay(totalCategoryPrice()) }}
+shopping-cart works!
diff --git a/src/app/shopping-cart/shopping-cart.component.ts b/src/app/shopping-cart/shopping-cart.component.ts new file mode 100644 index 0000000..382aba1 --- /dev/null +++ b/src/app/shopping-cart/shopping-cart.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-shopping-cart', + standalone: false, + templateUrl: './shopping-cart.component.html', + styleUrl: './shopping-cart.component.css' +}) +export class ShoppingCartComponent { + +} diff --git a/src/app/theater-layout/theater-layout.component.css b/src/app/theater-layout/theater-layout.component.css index e69de29..055c8c8 100644 --- a/src/app/theater-layout/theater-layout.component.css +++ b/src/app/theater-layout/theater-layout.component.css @@ -0,0 +1,4 @@ +:host { +border-radius: 0.5rem; + background-color: white; +} diff --git a/src/app/theater-layout/theater-layout.component.html b/src/app/theater-layout/theater-layout.component.html index a864e27..cd0560d 100644 --- a/src/app/theater-layout/theater-layout.component.html +++ b/src/app/theater-layout/theater-layout.component.html @@ -1,3 +1,10 @@ -@for (row of seatsPerRow(); track $index) { -+ Leinwand +
+- Leinwand -
-