diff --git a/angular.json b/angular.json
index 766c605..fee2ce7 100644
--- a/angular.json
+++ b/angular.json
@@ -44,7 +44,8 @@
"maximumError": "8kB"
}
],
- "outputHashing": "all"
+ "outputHashing": "all",
+ "serviceWorker": "ngsw-config.json"
},
"development": {
"optimization": false,
diff --git a/ngsw-config.json b/ngsw-config.json
new file mode 100644
index 0000000..69edd28
--- /dev/null
+++ b/ngsw-config.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "./node_modules/@angular/service-worker/config/schema.json",
+ "index": "/index.html",
+ "assetGroups": [
+ {
+ "name": "app",
+ "installMode": "prefetch",
+ "resources": {
+ "files": [
+ "/favicon.ico",
+ "/index.csr.html",
+ "/index.html",
+ "/manifest.webmanifest",
+ "/*.css",
+ "/*.js"
+ ]
+ }
+ },
+ {
+ "name": "assets",
+ "installMode": "lazy",
+ "updateMode": "prefetch",
+ "resources": {
+ "files": [
+ "/**/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)"
+ ]
+ }
+ }
+ ]
+}
diff --git a/package-lock.json b/package-lock.json
index 2d7b3f3..853e7ea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"@angular/platform-browser": "^19.0.0",
"@angular/platform-browser-dynamic": "^19.0.0",
"@angular/router": "^19.0.0",
+ "@angular/service-worker": "^19.0.5",
"exifr": "^7.1.3",
"flowbite": "^2.5.2",
"leaflet": "^1.9.4",
@@ -542,6 +543,24 @@
"rxjs": "^6.5.3 || ^7.4.0"
}
},
+ "node_modules/@angular/service-worker": {
+ "version": "19.0.5",
+ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-19.0.5.tgz",
+ "integrity": "sha512-qU5lgx1WJ+feCOV/EhkN9m20xFdIslpEQcSZZC+VJnEwcG6VTbofg1dRaHWZ9HAjS1uP7bFoK0HUYu4el0bHGA==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "bin": {
+ "ngsw-config": "ngsw-config.js"
+ },
+ "engines": {
+ "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": "19.0.5",
+ "@angular/core": "19.0.5"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
diff --git a/package.json b/package.json
index 9ce97d2..36afca4 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"@angular/platform-browser": "^19.0.0",
"@angular/platform-browser-dynamic": "^19.0.0",
"@angular/router": "^19.0.0",
+ "@angular/service-worker": "^19.0.5",
"exifr": "^7.1.3",
"flowbite": "^2.5.2",
"leaflet": "^1.9.4",
diff --git a/public/icons/icon-128x128.png b/public/icons/icon-128x128.png
new file mode 100644
index 0000000..95a4187
Binary files /dev/null and b/public/icons/icon-128x128.png differ
diff --git a/public/icons/icon-144x144.png b/public/icons/icon-144x144.png
new file mode 100644
index 0000000..00c4cd4
Binary files /dev/null and b/public/icons/icon-144x144.png differ
diff --git a/public/icons/icon-152x152.png b/public/icons/icon-152x152.png
new file mode 100644
index 0000000..b9bf3b5
Binary files /dev/null and b/public/icons/icon-152x152.png differ
diff --git a/public/icons/icon-192x192.png b/public/icons/icon-192x192.png
new file mode 100644
index 0000000..1df51b1
Binary files /dev/null and b/public/icons/icon-192x192.png differ
diff --git a/public/icons/icon-384x384.png b/public/icons/icon-384x384.png
new file mode 100644
index 0000000..87c9f6a
Binary files /dev/null and b/public/icons/icon-384x384.png differ
diff --git a/public/icons/icon-512x512.png b/public/icons/icon-512x512.png
new file mode 100644
index 0000000..1f7e491
Binary files /dev/null and b/public/icons/icon-512x512.png differ
diff --git a/public/icons/icon-72x72.png b/public/icons/icon-72x72.png
new file mode 100644
index 0000000..2c646b8
Binary files /dev/null and b/public/icons/icon-72x72.png differ
diff --git a/public/icons/icon-96x96.png b/public/icons/icon-96x96.png
new file mode 100644
index 0000000..465bad8
Binary files /dev/null and b/public/icons/icon-96x96.png differ
diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest
new file mode 100644
index 0000000..1b26054
--- /dev/null
+++ b/public/manifest.webmanifest
@@ -0,0 +1,59 @@
+{
+ "name": "Memory Map",
+ "short_name": "Memory Map",
+ "theme_color": "#1976d2",
+ "background_color": "#fafafa",
+ "display": "standalone",
+ "scope": "./",
+ "start_url": "./",
+ "icons": [
+ {
+ "src": "icons/icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-128x128.png",
+ "sizes": "128x128",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-152x152.png",
+ "sizes": "152x152",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-384x384.png",
+ "sizes": "384x384",
+ "type": "image/png",
+ "purpose": "maskable any"
+ },
+ {
+ "src": "icons/icon-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable any"
+ }
+ ]
+}
diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index 8766d64..95c08d2 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -1,7 +1,11 @@
import { provideHttpClient } from '@angular/common/http';
-import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
+import {
+ ApplicationConfig,
+ isDevMode,
+ provideZoneChangeDetection,
+} from '@angular/core';
import { provideRouter } from '@angular/router';
-
+import { provideServiceWorker } from '@angular/service-worker';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
@@ -9,5 +13,13 @@ export const appConfig: ApplicationConfig = {
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes),
provideHttpClient(),
+ provideServiceWorker('ngsw-worker.js', {
+ enabled: !isDevMode(),
+ registrationStrategy: 'registerWhenStable:30000',
+ }),
+ provideServiceWorker('ngsw-worker.js', {
+ enabled: !isDevMode(),
+ registrationStrategy: 'registerWhenStable:30000',
+ }),
],
};
diff --git a/src/index.html b/src/index.html
index 1cb0e4c..eb386f5 100644
--- a/src/index.html
+++ b/src/index.html
@@ -6,8 +6,15 @@