diff --git a/frontend/app/angular.json b/frontend/app/angular.json index 62b16534..7af7d057 100644 --- a/frontend/app/angular.json +++ b/frontend/app/angular.json @@ -40,14 +40,16 @@ "glob": "CHANGELOG.md", "input": ".", "output": "assets" - } + }, + "src/manifest.webmanifest" ], "styles": [ { "input": "src/global.scss", "inject": true } - ] + ], + "serviceWorker": "ngsw-config.json" }, "configurations": { "production": { @@ -127,7 +129,8 @@ "glob": "**/*", "input": "src/assets", "output": "/assets" - } + }, + "src/manifest.webmanifest" ] } }, diff --git a/frontend/app/cypress/integration/app.spec.ts b/frontend/app/cypress/integration/app.spec.ts index 3f5d09f0..487813ab 100644 --- a/frontend/app/cypress/integration/app.spec.ts +++ b/frontend/app/cypress/integration/app.spec.ts @@ -26,7 +26,7 @@ describe('App', () => { it('should have a proper title', () => { cy.visit('/overview'); - cy.title().should('equal', 'StApps'); + cy.title().should('equal', 'Goethe-Uni'); }); it('should have a proper working navigation', () => { diff --git a/frontend/app/ngsw-config.json b/frontend/app/ngsw-config.json new file mode 100644 index 00000000..b4f5aa44 --- /dev/null +++ b/frontend/app/ngsw-config.json @@ -0,0 +1,21 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": ["/favicon.ico", "/index.html", "/manifest.webmanifest", "/*.css", "/*.js"] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": ["/assets/**", "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)"] + } + } + ] +} diff --git a/frontend/app/package.json b/frontend/app/package.json index d2fa6afe..e9f30d2c 100644 --- a/frontend/app/package.json +++ b/frontend/app/package.json @@ -55,6 +55,7 @@ "@angular/forms": "17.3.12", "@angular/platform-browser": "17.3.12", "@angular/router": "17.3.12", + "@angular/service-worker": "17.3.12", "@awesome-cordova-plugins/calendar": "6.6.0", "@awesome-cordova-plugins/core": "6.6.0", "@capacitor-community/screen-brightness": "6.0.0", @@ -97,7 +98,7 @@ "ionicons": "7.4.0", "jsonpath-plus": "10.3.0", "maplibre-gl": "4.0.2", - "material-symbols": "0.17.1", + "material-symbols": "0.27.2", "moment": "2.30.1", "ngx-date-fns": "11.0.0", "ngx-logger": "5.0.12", diff --git a/frontend/app/resources/logo_pwa.svg b/frontend/app/resources/logo_pwa.svg new file mode 100644 index 00000000..cc119dcf --- /dev/null +++ b/frontend/app/resources/logo_pwa.svg @@ -0,0 +1,73 @@ + + + + diff --git a/frontend/app/src/app/app.module.ts b/frontend/app/src/app/app.module.ts index 857a3712..7c4c8e59 100644 --- a/frontend/app/src/app/app.module.ts +++ b/frontend/app/src/app/app.module.ts @@ -15,7 +15,7 @@ import {CommonModule, LocationStrategy, PathLocationStrategy, registerLocaleData} from '@angular/common'; import {HTTP_INTERCEPTORS, HttpClient, provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; import localeDe from '@angular/common/locales/de'; -import {APP_INITIALIZER, NgModule} from '@angular/core'; +import {APP_INITIALIZER, NgModule, isDevMode} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; import {RouteReuseStrategy} from '@angular/router'; import {IonicRouteStrategy, Platform, provideIonicAngular, IonApp} from '@ionic/angular/standalone'; @@ -70,6 +70,7 @@ import {Capacitor} from '@capacitor/core'; import {SplashScreen} from '@capacitor/splash-screen'; import maplibregl from 'maplibre-gl'; import {Protocol} from 'pmtiles'; +import {ServiceWorkerModule} from '@angular/service-worker'; registerLocaleData(localeDe); @@ -182,6 +183,12 @@ export function createTranslateLoader(http: HttpClient) { level: environment.production ? NgxLoggerLevel.FATAL : NgxLoggerLevel.TRACE, }), IonApp, + ServiceWorkerModule.register('ngsw-worker.js', { + enabled: !isDevMode(), + // Register the ServiceWorker as soon as the application is stable + // or after 30 seconds (whichever comes first). + registrationStrategy: 'registerWhenStable:30000', + }), ], providers: [ { diff --git a/frontend/app/src/app/modules/data/data-icon.config.ts b/frontend/app/src/app/modules/data/data-icon.config.ts index 5cef5965..f25c60a0 100644 --- a/frontend/app/src/app/modules/data/data-icon.config.ts +++ b/frontend/app/src/app/modules/data/data-icon.config.ts @@ -33,7 +33,7 @@ export const DataIcons = { 'id card': SCIcon.badge, 'message': SCIcon.newspaper, 'organization': SCIcon.business_center, - 'periodical': SCIcon.feed, + 'periodical': SCIcon.news, 'person': SCIcon.person, 'point of interest': SCIcon.pin_drop, 'publication event': SCIcon.campaign, diff --git a/frontend/app/src/app/modules/data/elements/favorite-button.component.html b/frontend/app/src/app/modules/data/elements/favorite-button.component.html index a7d2b0b6..e971872d 100644 --- a/frontend/app/src/app/modules/data/elements/favorite-button.component.html +++ b/frontend/app/src/app/modules/data/elements/favorite-button.component.html @@ -19,6 +19,6 @@ [size]="24" [fill]="(isFavorite$ | async) || false" [class.selected]="isFavorite$ | async" - name="grade" + name="star" > diff --git a/frontend/app/src/app/modules/data/elements/rating.html b/frontend/app/src/app/modules/data/elements/rating.html index 3648a393..adb7d8eb 100644 --- a/frontend/app/src/app/modules/data/elements/rating.html +++ b/frontend/app/src/app/modules/data/elements/rating.html @@ -31,7 +31,7 @@ slot="icon-only" [size]="32" color="medium" - name="grade" + name="star" > } diff --git a/frontend/app/src/app/modules/data/elements/title-card.component.html b/frontend/app/src/app/modules/data/elements/title-card.component.html index abcca218..7d86041a 100644 --- a/frontend/app/src/app/modules/data/elements/title-card.component.html +++ b/frontend/app/src/app/modules/data/elements/title-card.component.html @@ -42,9 +42,11 @@ } @if (item.description && item.type !== 'job posting' && buttonShown) { - - - +
+ + READ_MORE... + +
} diff --git a/frontend/app/src/app/modules/data/elements/title-card.component.scss b/frontend/app/src/app/modules/data/elements/title-card.component.scss index 4d04ccda..bd7602f8 100644 --- a/frontend/app/src/app/modules/data/elements/title-card.component.scss +++ b/frontend/app/src/app/modules/data/elements/title-card.component.scss @@ -52,3 +52,21 @@ ion-card { --color: var(--ion-color-primary-contrast); } } + +.read-more-container { + position: relative; + + display: flex; + justify-content: flex-end; + + margin-top: -24px; + + background: linear-gradient(to bottom, transparent, var(--ion-color-primary)); + + ion-button { + --background: var(--ion-color-primary-contrast); + --color: var(--ion-color-primary); + + height: 8px; + } +} diff --git a/frontend/app/src/app/modules/data/elements/title-card.component.ts b/frontend/app/src/app/modules/data/elements/title-card.component.ts index df529895..7121555d 100644 --- a/frontend/app/src/app/modules/data/elements/title-card.component.ts +++ b/frontend/app/src/app/modules/data/elements/title-card.component.ts @@ -18,8 +18,8 @@ import {SCThings} from '@openstapps/core'; import {SCIcon} from '../../../util/ion-icon/icon'; const AccordionButtonState = { - collapsed: SCIcon.expand_more, - expanded: SCIcon.expand_less, + collapsed: SCIcon.unfold_more, + expanded: SCIcon.unfold_less, }; @Component({ @@ -44,7 +44,7 @@ export class TitleCardComponent implements OnInit, OnChanges { descriptionLinesTotal: number; - descriptionPreviewLines = 3; + descriptionPreviewLines = 4; descriptionLinesToDisplay = 0; diff --git a/frontend/app/src/app/modules/profile/page/my-courses.html b/frontend/app/src/app/modules/profile/page/my-courses.html index e320c933..384dd1b5 100644 --- a/frontend/app/src/app/modules/profile/page/my-courses.html +++ b/frontend/app/src/app/modules/profile/page/my-courses.html @@ -26,7 +26,7 @@ '_EVENT' | translate: {count: myCoursesDay[1].length} }} - + @if (myCoursesDay[1].length === 0) { diff --git a/frontend/app/src/app/modules/schedule/page/calendar-view.html b/frontend/app/src/app/modules/schedule/page/calendar-view.html index 9f1486f9..9c0d2145 100644 --- a/frontend/app/src/app/modules/schedule/page/calendar-view.html +++ b/frontend/app/src/app/modules/schedule/page/calendar-view.html @@ -14,10 +14,10 @@ -->
- + - +
- + - + {{ 'settings.resetSettings' | translate }} - +
diff --git a/frontend/app/src/app/modules/storage/encrypted-storage.provider.ts b/frontend/app/src/app/modules/storage/encrypted-storage.provider.ts index 7a88e592..82a22f05 100644 --- a/frontend/app/src/app/modules/storage/encrypted-storage.provider.ts +++ b/frontend/app/src/app/modules/storage/encrypted-storage.provider.ts @@ -14,10 +14,12 @@ export class EncryptedStorageProvider { * @returns The value of the resource, if found */ async get(key: string): Promise { - if (!Capacitor.isNativePlatform()) return undefined; - try { - const jwt = JSON.parse((await SecureStoragePlugin.get({key: `stapps:key:${key}`})).value); + const jwt = JSON.parse( + await (Capacitor.isNativePlatform() + ? SecureStoragePlugin.get({key: `stapps:key:${key}`}).then(it => it.value) + : this.storageProvider.get(`stapps:key:${key}`)), + ); const aesKey = await crypto.subtle.importKey('jwk', jwt, {name: 'AES-GCM'}, true, [ 'encrypt', 'decrypt', @@ -48,8 +50,6 @@ export class EncryptedStorageProvider { * @returns A promise that resolves when the value is stored */ async set(key: string, value: T): Promise { - if (!Capacitor.isNativePlatform()) return undefined; - try { const compressionStream = new CompressionStream('gzip'); const writer = compressionStream.writable.getWriter(); @@ -63,11 +63,14 @@ export class EncryptedStorageProvider { 'decrypt', ]); + const exportedKey = JSON.stringify(await crypto.subtle.exportKey('jwk', aesKey)); await Promise.all([ - SecureStoragePlugin.set({ - key: `stapps:key:${key}`, - value: JSON.stringify(await crypto.subtle.exportKey('jwk', aesKey)), - }), + Capacitor.isNativePlatform() + ? SecureStoragePlugin.set({ + key: `stapps:key:${key}`, + value: exportedKey, + }) + : this.storageProvider.put(`stapps:key:${key}`, exportedKey), this.storageProvider.put(`encrypted:${key}:iv`, iv), ]); @@ -81,10 +84,10 @@ export class EncryptedStorageProvider { } async delete(key: string): Promise { - if (!Capacitor.isNativePlatform()) return; - await Promise.all([ - SecureStoragePlugin.remove({key: `stapps:key:${key}`}), + Capacitor.isNativePlatform() + ? SecureStoragePlugin.remove({key: `stapps:key:${key}`}) + : this.storageProvider.delete(`stapps:key:${key}`), this.storageProvider.delete(`encrypted:${key}:iv`), this.storageProvider.delete(`encrypted:${key}`), ]); diff --git a/frontend/app/src/app/util/ion-icon/ion-icon-custom-component.ts b/frontend/app/src/app/util/ion-icon/ion-icon-custom-component.ts index e36ee9f1..6737c1a6 100644 --- a/frontend/app/src/app/util/ion-icon/ion-icon-custom-component.ts +++ b/frontend/app/src/app/util/ion-icon/ion-icon-custom-component.ts @@ -150,12 +150,12 @@ const iconMap = new Map([ [menuSharp, SCIcon.menu], [searchOutline, SCIcon.search], [searchSharp, SCIcon.search], - [chevronExpand, SCIcon.expand_more], - [caretDownSharp, SCIcon.expand_more], + [chevronExpand, SCIcon.keyboard_arrow_down], + [caretDownSharp, SCIcon.keyboard_arrow_down], [close, SCIcon.close], [closeSharp, SCIcon.close], [closeCircle, SCIcon.cancel], [ellipsisHorizontal, SCIcon.more_horiz], - ['chevron-down-outline', SCIcon.expand_more], + ['chevron-down-outline', SCIcon.keyboard_arrow_down], ['arrow_back', SCIcon.arrow_back], ]); diff --git a/frontend/app/src/assets/icons.min.woff2 b/frontend/app/src/assets/icons.min.woff2 index eb09213c..4f18716b 100644 Binary files a/frontend/app/src/assets/icons.min.woff2 and b/frontend/app/src/assets/icons.min.woff2 differ diff --git a/frontend/app/src/assets/icons/apple-touch-icon.png b/frontend/app/src/assets/icons/apple-touch-icon.png new file mode 100644 index 00000000..008cb255 Binary files /dev/null and b/frontend/app/src/assets/icons/apple-touch-icon.png differ diff --git a/frontend/app/src/assets/icons/icon_x128.png b/frontend/app/src/assets/icons/icon_x128.png new file mode 100644 index 00000000..f575187a Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x128.png differ diff --git a/frontend/app/src/assets/icons/icon_x192.png b/frontend/app/src/assets/icons/icon_x192.png new file mode 100644 index 00000000..12f35e7e Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x192.png differ diff --git a/frontend/app/src/assets/icons/icon_x384.png b/frontend/app/src/assets/icons/icon_x384.png new file mode 100644 index 00000000..41434b11 Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x384.png differ diff --git a/frontend/app/src/assets/icons/icon_x48.png b/frontend/app/src/assets/icons/icon_x48.png new file mode 100644 index 00000000..9709c2a3 Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x48.png differ diff --git a/frontend/app/src/assets/icons/icon_x512.png b/frontend/app/src/assets/icons/icon_x512.png new file mode 100644 index 00000000..c41fb872 Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x512.png differ diff --git a/frontend/app/src/assets/icons/icon_x72.png b/frontend/app/src/assets/icons/icon_x72.png new file mode 100644 index 00000000..327cf06b Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x72.png differ diff --git a/frontend/app/src/assets/icons/icon_x96.png b/frontend/app/src/assets/icons/icon_x96.png new file mode 100644 index 00000000..71841e44 Binary files /dev/null and b/frontend/app/src/assets/icons/icon_x96.png differ diff --git a/frontend/app/src/assets/icons/local_cafe_x192.png b/frontend/app/src/assets/icons/local_cafe_x192.png new file mode 100644 index 00000000..8f5aee2b Binary files /dev/null and b/frontend/app/src/assets/icons/local_cafe_x192.png differ diff --git a/frontend/app/src/assets/icons/map_x192.png b/frontend/app/src/assets/icons/map_x192.png new file mode 100644 index 00000000..5295b1e4 Binary files /dev/null and b/frontend/app/src/assets/icons/map_x192.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x128.png b/frontend/app/src/assets/icons/maskable_icon_x128.png new file mode 100644 index 00000000..fff4e58d Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x128.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x192.png b/frontend/app/src/assets/icons/maskable_icon_x192.png new file mode 100644 index 00000000..b8756e81 Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x192.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x384.png b/frontend/app/src/assets/icons/maskable_icon_x384.png new file mode 100644 index 00000000..47a02286 Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x384.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x48.png b/frontend/app/src/assets/icons/maskable_icon_x48.png new file mode 100644 index 00000000..dbaf06b7 Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x48.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x512.png b/frontend/app/src/assets/icons/maskable_icon_x512.png new file mode 100644 index 00000000..7adef79a Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x512.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x72.png b/frontend/app/src/assets/icons/maskable_icon_x72.png new file mode 100644 index 00000000..03b2d1ae Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x72.png differ diff --git a/frontend/app/src/assets/icons/maskable_icon_x96.png b/frontend/app/src/assets/icons/maskable_icon_x96.png new file mode 100644 index 00000000..15f0485f Binary files /dev/null and b/frontend/app/src/assets/icons/maskable_icon_x96.png differ diff --git a/frontend/app/src/assets/icons/school_x192.png b/frontend/app/src/assets/icons/school_x192.png new file mode 100644 index 00000000..53dfa9ab Binary files /dev/null and b/frontend/app/src/assets/icons/school_x192.png differ diff --git a/frontend/app/src/assets/icons/search_x192.png b/frontend/app/src/assets/icons/search_x192.png new file mode 100644 index 00000000..0ccf6478 Binary files /dev/null and b/frontend/app/src/assets/icons/search_x192.png differ diff --git a/frontend/app/src/assets/screenshots/canteens-wide.png b/frontend/app/src/assets/screenshots/canteens-wide.png new file mode 100644 index 00000000..c68242b2 Binary files /dev/null and b/frontend/app/src/assets/screenshots/canteens-wide.png differ diff --git a/frontend/app/src/assets/screenshots/canteens.png b/frontend/app/src/assets/screenshots/canteens.png new file mode 100644 index 00000000..5b9e8f42 Binary files /dev/null and b/frontend/app/src/assets/screenshots/canteens.png differ diff --git a/frontend/app/src/assets/screenshots/map-wide.png b/frontend/app/src/assets/screenshots/map-wide.png new file mode 100644 index 00000000..21b790de Binary files /dev/null and b/frontend/app/src/assets/screenshots/map-wide.png differ diff --git a/frontend/app/src/assets/screenshots/map.png b/frontend/app/src/assets/screenshots/map.png new file mode 100644 index 00000000..449be0ca Binary files /dev/null and b/frontend/app/src/assets/screenshots/map.png differ diff --git a/frontend/app/src/assets/screenshots/my-app-wide.png b/frontend/app/src/assets/screenshots/my-app-wide.png new file mode 100644 index 00000000..2f03c0ee Binary files /dev/null and b/frontend/app/src/assets/screenshots/my-app-wide.png differ diff --git a/frontend/app/src/assets/screenshots/my-app.png b/frontend/app/src/assets/screenshots/my-app.png new file mode 100644 index 00000000..65398f0a Binary files /dev/null and b/frontend/app/src/assets/screenshots/my-app.png differ diff --git a/frontend/app/src/assets/screenshots/overview-wide.png b/frontend/app/src/assets/screenshots/overview-wide.png new file mode 100644 index 00000000..995e53bc Binary files /dev/null and b/frontend/app/src/assets/screenshots/overview-wide.png differ diff --git a/frontend/app/src/assets/screenshots/overview.png b/frontend/app/src/assets/screenshots/overview.png new file mode 100644 index 00000000..14615cee Binary files /dev/null and b/frontend/app/src/assets/screenshots/overview.png differ diff --git a/frontend/app/src/assets/splash_screens/10.2__iPad_landscape.png b/frontend/app/src/assets/splash_screens/10.2__iPad_landscape.png new file mode 100644 index 00000000..29d06ddf Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.2__iPad_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/10.2__iPad_portrait.png b/frontend/app/src/assets/splash_screens/10.2__iPad_portrait.png new file mode 100644 index 00000000..80cf0423 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.2__iPad_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/10.5__iPad_Air_landscape.png b/frontend/app/src/assets/splash_screens/10.5__iPad_Air_landscape.png new file mode 100644 index 00000000..e548e59f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.5__iPad_Air_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/10.5__iPad_Air_portrait.png b/frontend/app/src/assets/splash_screens/10.5__iPad_Air_portrait.png new file mode 100644 index 00000000..24c01165 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.5__iPad_Air_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/10.9__iPad_Air_landscape.png b/frontend/app/src/assets/splash_screens/10.9__iPad_Air_landscape.png new file mode 100644 index 00000000..8884fd69 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.9__iPad_Air_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/10.9__iPad_Air_portrait.png b/frontend/app/src/assets/splash_screens/10.9__iPad_Air_portrait.png new file mode 100644 index 00000000..c6b0825b Binary files /dev/null and b/frontend/app/src/assets/splash_screens/10.9__iPad_Air_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_landscape.png b/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_landscape.png new file mode 100644 index 00000000..9a9d708f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_portrait.png b/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_portrait.png new file mode 100644 index 00000000..c7737d7c Binary files /dev/null and b/frontend/app/src/assets/splash_screens/11__iPad_Pro_M4_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png b/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png new file mode 100644 index 00000000..99c9394f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png b/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png new file mode 100644 index 00000000..c07257b6 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_landscape.png b/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_landscape.png new file mode 100644 index 00000000..35ef1cb5 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_portrait.png b/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_portrait.png new file mode 100644 index 00000000..03620fb2 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/12.9__iPad_Pro_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_landscape.png b/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_landscape.png new file mode 100644 index 00000000..4c1c9623 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_portrait.png b/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_portrait.png new file mode 100644 index 00000000..5b616c16 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/13__iPad_Pro_M4_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png b/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png new file mode 100644 index 00000000..f091f89a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png b/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png new file mode 100644 index 00000000..0c23fcab Binary files /dev/null and b/frontend/app/src/assets/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_landscape.png b/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_landscape.png new file mode 100644 index 00000000..eee6c34a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_portrait.png b/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_portrait.png new file mode 100644 index 00000000..600b129b Binary files /dev/null and b/frontend/app/src/assets/splash_screens/8.3__iPad_Mini_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png b/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png new file mode 100644 index 00000000..a8d37c8f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png b/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png new file mode 100644 index 00000000..b0844858 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png new file mode 100644 index 00000000..1acbea09 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png new file mode 100644 index 00000000..9a630d42 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_landscape.png new file mode 100644 index 00000000..c9558f5b Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_portrait.png new file mode 100644 index 00000000..cb96064f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_11__iPhone_XR_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png new file mode 100644 index 00000000..8b055e3a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png new file mode 100644 index 00000000..cb1f418d Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png new file mode 100644 index 00000000..cd254603 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png new file mode 100644 index 00000000..2638523c Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png new file mode 100644 index 00000000..9692719f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png new file mode 100644 index 00000000..8220fb6a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png new file mode 100644 index 00000000..c72d1ced Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png new file mode 100644 index 00000000..9b7ef619 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Plus__iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_landscape.png new file mode 100644 index 00000000..44a66521 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_portrait.png new file mode 100644 index 00000000..b8786b77 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_Max_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Pro_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_landscape.png new file mode 100644 index 00000000..32257d4a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16_Pro_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_portrait.png new file mode 100644 index 00000000..d12551dd Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16_Pro_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png new file mode 100644 index 00000000..6cd4d8d0 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png new file mode 100644 index 00000000..e80bc89a Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_16__iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png new file mode 100644 index 00000000..c71b991f Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png new file mode 100644 index 00000000..484c43a1 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png b/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png new file mode 100644 index 00000000..eeb67fbd Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png differ diff --git a/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png b/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png new file mode 100644 index 00000000..d7da5f44 Binary files /dev/null and b/frontend/app/src/assets/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png differ diff --git a/frontend/app/src/config/profile-page-sections.ts b/frontend/app/src/config/profile-page-sections.ts index 6b5f9845..74d80b3e 100644 --- a/frontend/app/src/config/profile-page-sections.ts +++ b/frontend/app/src/config/profile-page-sections.ts @@ -62,7 +62,7 @@ export const profilePageSections: SCSection[] = [ links: [ { name: 'Favorites', - icon: SCIcon.grade, + icon: SCIcon.star, link: ['/favorites'], translations: { de: { diff --git a/frontend/app/src/index.html b/frontend/app/src/index.html index cf3ded06..8bc4010c 100644 --- a/frontend/app/src/index.html +++ b/frontend/app/src/index.html @@ -1,9 +1,9 @@ - + - StApps + Goethe-Uni - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/app/src/main.ts b/frontend/app/src/main.ts index c7b912ea..a9c1785c 100644 --- a/frontend/app/src/main.ts +++ b/frontend/app/src/main.ts @@ -12,6 +12,7 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ +import '@capacitor/core'; import {enableProdMode} from '@angular/core'; import {platformBrowser} from '@angular/platform-browser'; import {AppModule} from './app/app.module'; diff --git a/frontend/app/src/manifest.webmanifest b/frontend/app/src/manifest.webmanifest new file mode 100644 index 00000000..9245a75e --- /dev/null +++ b/frontend/app/src/manifest.webmanifest @@ -0,0 +1,214 @@ +{ + "name": "Goethe-Uni", + "short_name": "Goethe-Uni", + "description": "Mit der Goethe-Uni App kannst dein Studium noch besser organisieren. Informationen über die Universität, Bibliotheken, Räumen, Veranstaltungen und Personen sind leicht über die Suche auffindbar.", + "theme_color": "#00618F", + "background_color": "#00618F", + "display": "standalone", + "display_override": ["standalone"], + "orientation": "portrait-primary", + "scope": "./", + "start_url": "./", + "categories": ["education"], + "prefer_related_applications": false, + "related_applications": [ + { + "platform": "play", + "id": "de.goetheuni" + } + ], + "shortcuts": [ + { + "name": "Suche", + "url": "/search", + "icons": [ + { + "src": "assets/icons/search_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + } + ] + }, + { + "name": "Mensa", + "url": "/canteen", + "icons": [ + { + "src": "assets/icons/local_cafe_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + } + ] + }, + { + "name": "Karte", + "url": "/map", + "icons": [ + { + "src": "assets/icons/map_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + } + ] + }, + { + "name": "Meine App", + "url": "/profile", + "icons": [ + { + "src": "assets/icons/school_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "monochrome any" + } + ] + } + ], + "icons": [ + { + "src": "assets/icons/maskable_icon_x48.png", + "sizes": "48x48", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/maskable_icon_x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "assets/icons/icon_x48.png", + "sizes": "48x48", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "any" + }, + { + "src": "assets/icons/icon_x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + } + ], + "screenshots": [ + { + "src": "/assets/screenshots/overview.png", + "type": "image/png", + "sizes": "664x1440", + "form_factor": "narrow", + "label": "Übersicht" + }, + { + "src": "/assets/screenshots/canteens.png", + "type": "image/png", + "sizes": "664x1440", + "form_factor": "narrow", + "label": "Mensen" + }, + { + "src": "/assets/screenshots/map.png", + "type": "image/png", + "sizes": "664x1440", + "form_factor": "narrow", + "label": "Karte" + }, + { + "src": "/assets/screenshots/my-app.png", + "type": "image/png", + "sizes": "664x1440", + "form_factor": "narrow", + "label": "Meine App" + }, + { + "src": "/assets/screenshots/overview-wide.png", + "type": "image/png", + "sizes": "2304x1440", + "form_factor": "wide", + "label": "Übersicht" + }, + { + "src": "/assets/screenshots/canteens-wide.png", + "type": "image/png", + "sizes": "2304x1440", + "form_factor": "wide", + "label": "Mensen" + }, + { + "src": "/assets/screenshots/map-wide.png", + "type": "image/png", + "sizes": "2304x1440", + "form_factor": "wide", + "label": "Karte" + }, + { + "src": "/assets/screenshots/my-app-wide.png", + "type": "image/png", + "sizes": "2304x1440", + "form_factor": "wide", + "label": "Meine App" + } + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6b45cc6..6aa512a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -721,6 +721,9 @@ importers: '@angular/router': specifier: 17.3.12 version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) + '@angular/service-worker': + specifier: 17.3.12 + version: 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)) '@awesome-cordova-plugins/calendar': specifier: 6.6.0 version: 6.6.0(@awesome-cordova-plugins/core@6.6.0(rxjs@7.8.1))(rxjs@7.8.1) @@ -848,8 +851,8 @@ importers: specifier: 4.0.2 version: 4.0.2 material-symbols: - specifier: 0.17.1 - version: 0.17.1 + specifier: 0.27.2 + version: 0.27.2 moment: specifier: 2.30.1 version: 2.30.1 @@ -895,7 +898,7 @@ importers: version: 0.1703.17(chokidar@3.6.0) '@angular-devkit/build-angular': specifier: 17.3.17 - version: 17.3.17(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.2))(@angular/platform-server@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))))(@types/express@4.17.17)(@types/node@22.15.31)(chokidar@3.6.0)(karma@6.4.3)(typescript@5.4.2) + version: 17.3.17(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.2))(@angular/platform-server@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))))(@angular/service-worker@17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@types/express@4.17.17)(@types/node@22.15.31)(chokidar@3.6.0)(karma@6.4.3)(typescript@5.4.2) '@angular-devkit/core': specifier: 17.3.17 version: 17.3.17(chokidar@3.6.0) @@ -2304,6 +2307,14 @@ packages: '@angular/platform-browser': 17.3.12 rxjs: ^6.5.3 || ^7.4.0 + '@angular/service-worker@17.3.12': + resolution: {integrity: sha512-Y83+oTZ2XPO7P2Yok78JNlXDDXbP7Qr+HN6ifpPXWmUS4MwFEyXByCl3Hlz9VMxnrKvPYWvzHKWfT0S20XZsvA==} + engines: {node: ^18.13.0 || >=20.9.0} + hasBin: true + peerDependencies: + '@angular/common': 17.3.12 + '@angular/core': 17.3.12 + '@awesome-cordova-plugins/calendar@6.6.0': resolution: {integrity: sha512-NobAl4xvmq2zBeOnLI+pqRVpC66p7OpCwd3jzrQ26h8kqhr0o5wqaNcWN6WBjmgD+/AInVnLUzsziL2QpcmD7g==} peerDependencies: @@ -8136,8 +8147,8 @@ packages: engines: {node: '>= 16'} hasBin: true - material-symbols@0.17.1: - resolution: {integrity: sha512-1kJan8t3U3Fmuu/YPu2MVsL/ODSja71o+J7ODROQfMaCzzal0izY4SATafEKgXUXU+jL0zIiBQdyzsno7vXBvA==} + material-symbols@0.27.2: + resolution: {integrity: sha512-3/p3V+UfAfeHrT2HMOBVGWyzsvpHZNxlJJ6jQ01XqqxCCQU+szIbrfpsXOHkZ5glMJi+IB/SMJIRt55l/gYWvQ==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -11286,7 +11297,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@17.3.17(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.2))(@angular/platform-server@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))))(@types/express@4.17.17)(@types/node@22.15.31)(chokidar@3.6.0)(karma@6.4.3)(typescript@5.4.2)': + '@angular-devkit/build-angular@17.3.17(@angular/compiler-cli@17.3.12(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.2))(@angular/platform-server@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))))(@angular/service-worker@17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@types/express@4.17.17)(@types/node@22.15.31)(chokidar@3.6.0)(karma@6.4.3)(typescript@5.4.2)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1703.17(chokidar@3.6.0) @@ -11354,6 +11365,7 @@ snapshots: webpack-subresource-integrity: 5.1.0(webpack@5.94.0(esbuild@0.20.1)) optionalDependencies: '@angular/platform-server': 17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@17.3.12(@angular/animations@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))) + '@angular/service-worker': 17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4)) esbuild: 0.20.1 karma: 6.4.3 transitivePeerDependencies: @@ -11611,6 +11623,12 @@ snapshots: rxjs: 7.8.1 tslib: 2.6.2 + '@angular/service-worker@17.3.12(@angular/common@17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))': + dependencies: + '@angular/common': 17.3.12(@angular/core@17.3.12(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 17.3.12(rxjs@7.8.1)(zone.js@0.14.4) + tslib: 2.6.2 + '@awesome-cordova-plugins/calendar@6.6.0(@awesome-cordova-plugins/core@6.6.0(rxjs@7.8.1))(rxjs@7.8.1)': dependencies: '@awesome-cordova-plugins/core': 6.6.0(rxjs@7.8.1) @@ -11654,7 +11672,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.26.10 + '@babel/generator': 7.27.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.10) '@babel/helpers': 7.27.6 @@ -12038,6 +12056,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) + '@babel/traverse': 7.27.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -12056,6 +12083,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -12698,8 +12734,8 @@ snapshots: '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.10) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.10) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.10) '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.26.10) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.10) @@ -16139,7 +16175,7 @@ snapshots: copy-webpack-plugin@11.0.0(webpack@5.94.0(esbuild@0.20.1)): dependencies: - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 globby: 13.2.2 normalize-path: 3.0.0 @@ -16220,7 +16256,7 @@ snapshots: dom-serializer: 2.0.0 domhandler: 5.0.3 htmlparser2: 8.0.2 - postcss: 8.4.35 + postcss: 8.5.6 postcss-media-query-parser: 0.2.3 cross-env@7.0.3: @@ -16249,12 +16285,12 @@ snapshots: css-loader@6.10.0(webpack@5.94.0(esbuild@0.20.1)): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.35) - postcss-modules-scope: 3.2.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 semver: 7.6.0 optionalDependencies: @@ -17880,7 +17916,7 @@ snapshots: globby@13.2.2: dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -18157,9 +18193,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.35): + icss-utils@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.35 + postcss: 8.5.6 ieee754@1.2.1: {} @@ -19121,7 +19157,7 @@ snapshots: marked@7.0.3: {} - material-symbols@0.17.1: {} + material-symbols@0.27.2: {} math-intrinsics@1.1.0: {} @@ -20270,26 +20306,26 @@ snapshots: postcss-media-query-parser@0.2.3: {} - postcss-modules-extract-imports@3.1.0(postcss@8.4.35): + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.35 + postcss: 8.5.6 - postcss-modules-local-by-default@4.2.0(postcss@8.4.35): + postcss-modules-local-by-default@4.2.0(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.4.35): + postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: - postcss: 8.4.35 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.4.35): + postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-resolve-nested-selector@0.1.6: {} @@ -20720,7 +20756,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.35 + postcss: 8.5.6 source-map: 0.6.1 resolve@1.22.10: