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 9084b46..b50f60b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
"@angular/platform-browser": "^21.2.0",
"@angular/router": "^21.2.0",
"@angular/service-worker": "^21.2.0",
- "@chatenium/chatenium-sdk": "^1.1.5",
+ "@chatenium/chatenium-sdk": "^1.1.7",
"@fortawesome/angular-fontawesome": "^4.0.0",
"@fortawesome/free-brands-svg-icons": "^7.1.0",
"@fortawesome/free-solid-svg-icons": "^7.1.0",
@@ -1011,9 +1011,9 @@
}
},
"node_modules/@chatenium/chatenium-sdk": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@chatenium/chatenium-sdk/-/chatenium-sdk-1.1.5.tgz",
- "integrity": "sha512-seEsxlRk96WHsE4h6oPPa5nGZioePIZpB5qk0Xs3CaKNbVJKH02/Q5HW2PIi6DHw+djAENWu5zVXIic+9DrqZw==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@chatenium/chatenium-sdk/-/chatenium-sdk-1.1.7.tgz",
+ "integrity": "sha512-8stVVjKwwWZvUfVeWzSK1WGIiSt95Yxr80nfltZSDmqMKQaEA1sL9/2V6pobM4mCs9nzjUQQiniEPVQ0uxPXAg==",
"dependencies": {
"@faker-js/faker": "^10.4.0",
"axios": "^1.14.0",
@@ -4969,9 +4969,9 @@
"optional": true
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.17",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz",
- "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==",
+ "version": "2.10.18",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz",
+ "integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -5045,9 +5045,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
- "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
+ "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -7854,9 +7854,9 @@
}
},
"node_modules/multimatch/node_modules/brace-expansion": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
- "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
+ "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
"license": "MIT",
"optional": true,
"dependencies": {
diff --git a/package.json b/package.json
index a2e181b..932c96c 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"@angular/platform-browser": "^21.2.0",
"@angular/router": "^21.2.0",
"@angular/service-worker": "^21.2.0",
- "@chatenium/chatenium-sdk": "^1.1.5",
+ "@chatenium/chatenium-sdk": "^1.1.7",
"@fortawesome/angular-fontawesome": "^4.0.0",
"@fortawesome/free-brands-svg-icons": "^7.1.0",
"@fortawesome/free-solid-svg-icons": "^7.1.0",
diff --git a/public/i18n/en.json b/public/i18n/en.json
index cd5f227..7c20186 100644
--- a/public/i18n/en.json
+++ b/public/i18n/en.json
@@ -1,5 +1,5 @@
{
- "version": "3.0 Beta 3 (April 11, 2026)",
+ "version": "3.0 Beta 4 (April 11, 2026)",
"ok": "Ok",
"back": "Back",
"aChatProgram": "A messaging platform that you can trust.",
@@ -104,9 +104,8 @@
"changeLogDialog": {
"label": "Chatenium has been updated",
"changeLog": {
- "1": "Fixed WebSocket connection issues",
- "2": "The web is now mobile-friendly",
- "3": "The web is now a PWA. You can now install it on your home screen"
+ "1": "Added support for text channels inside networks",
+ "2": "Bug fixes in message box"
}
},
"chatnav": {
@@ -117,6 +116,9 @@
"you": "You: "
}
}
+ },
+ "networkList": {
+ "newNetwork": "Start new network"
}
},
"elements": {
diff --git a/public/icons/icon-128x128.png b/public/icons/icon-128x128.png
new file mode 100644
index 0000000..655e6d5
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..8a76df6
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..12b4a8a
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..ca8446e
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..d55050f
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..a68e883
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..f974ddc
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..d24b3a3
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..8853bab
--- /dev/null
+++ b/public/manifest.webmanifest
@@ -0,0 +1,57 @@
+{
+ "name": "Chatenium",
+ "short_name": "Chtn",
+ "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 993171b..90601d0 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -1,16 +1,18 @@
import {provideTaiga} from '@taiga-ui/core';
import {ApplicationConfig, provideBrowserGlobalErrorListeners, isDevMode} from '@angular/core';
-import {provideRouter} from '@angular/router';
+import {provideRouter, withRouterConfig} from '@angular/router';
import {routes} from './app.routes';
import {provideTranslateService} from '@ngx-translate/core';
import {provideTranslateHttpLoader} from '@ngx-translate/http-loader';
-import { provideServiceWorker } from '@angular/service-worker';
+import {provideServiceWorker} from '@angular/service-worker';
export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(),
- provideRouter(routes),
+ provideRouter(routes, withRouterConfig({
+ paramsInheritanceStrategy: "always"
+ })),
provideTaiga(),
provideTranslateService({
fallbackLang: "en",
@@ -19,9 +21,10 @@ export const appConfig: ApplicationConfig = {
prefix: "/i18n/",
suffix: ".json"
})
- }), provideServiceWorker('ngsw-worker.js', {
- enabled: !isDevMode(),
- registrationStrategy: 'registerWhenStable:30000'
- })
+ }),
+ provideServiceWorker('ngsw-worker.js', {
+ enabled: !isDevMode(),
+ registrationStrategy: 'registerWhenStable:30000'
+ })
],
};
diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index f439905..4a9813b 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -7,6 +7,8 @@ import {authNeededGuard} from './guards/auth-needed-guard';
import {Homepage} from './homepage/homepage';
import {Privacy} from './privacy/privacy';
import {TOS} from './tos/tos';
+import {Network} from './chat/network/network';
+import {Text} from './chat/network/channel/text/text';
export const routes: Routes = [
{path: '', component: Homepage},
@@ -16,6 +18,11 @@ export const routes: Routes = [
{
path: 'chat', component: Chat, canActivate: [authNeededGuard], children: [
{path: 'dm/:chatid', component: Dm},
+ {
+ path: 'network/:networkId', component: Network, children: [
+ {path: ":categoryId/:channelId", component: Text}
+ ]
+ },
]
},
];
diff --git a/src/app/chat/chat.html b/src/app/chat/chat.html
index 7a375f0..29065ee 100644
--- a/src/app/chat/chat.html
+++ b/src/app/chat/chat.html
@@ -4,7 +4,6 @@
- {{ "chat.changeLogDialog.changeLog.1"|translate }}
- {{ "chat.changeLogDialog.changeLog.2"|translate }}
- - {{ "chat.changeLogDialog.changeLog.3"|translate }}