@mxtommy/kip 3.9.0-beta.22 → 3.9.0-beta.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mxtommy/kip",
3
- "version": "3.9.0-beta.22",
3
+ "version": "3.9.0-beta.24",
4
4
  "description": "An advanced and versatile marine instrumentation package to display Signal K data.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-U2DCSTRY.js";
4
4
  import {
5
5
  AppService
6
- } from "./chunk-VJDV2IQK.js";
6
+ } from "./chunk-G6SABQYF.js";
7
7
  import "./chunk-MCEJWZB2.js";
8
8
  import {
9
9
  AppSettingsService,
@@ -86,4 +86,4 @@ var WidgetLoginComponent = class _WidgetLoginComponent {
86
86
  export {
87
87
  WidgetLoginComponent
88
88
  };
89
- //# sourceMappingURL=chunk-PZNZAWVP.js.map
89
+ //# sourceMappingURL=chunk-2USMK6JX.js.map
@@ -42,7 +42,7 @@ import {
42
42
  } from "./chunk-UQYTD5AC.js";
43
43
  import {
44
44
  AppService
45
- } from "./chunk-VJDV2IQK.js";
45
+ } from "./chunk-G6SABQYF.js";
46
46
  import {
47
47
  MatDivider,
48
48
  MatDividerModule
@@ -13724,4 +13724,4 @@ export {
13724
13724
  MatListModule,
13725
13725
  TileLargeIconComponent
13726
13726
  };
13727
- //# sourceMappingURL=chunk-BQ6XGNOY.js.map
13727
+ //# sourceMappingURL=chunk-7SGYTKZA.js.map
@@ -18,7 +18,7 @@ import {
18
18
  // package.json
19
19
  var package_default = {
20
20
  name: "@mxtommy/kip",
21
- version: "3.9.0-beta.22",
21
+ version: "3.9.0-beta.24",
22
22
  description: "An advanced and versatile marine instrumentation package to display Signal K data.",
23
23
  license: "MIT",
24
24
  author: {
@@ -340,4 +340,4 @@ var AppService = class _AppService {
340
340
  export {
341
341
  AppService
342
342
  };
343
- //# sourceMappingURL=chunk-VJDV2IQK.js.map
343
+ //# sourceMappingURL=chunk-G6SABQYF.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["package.json", "src/app/core/services/app-service.ts"],
4
- "sourcesContent": ["{\n \"name\": \"@mxtommy/kip\",\n \"version\": \"3.9.0-beta.22\",\n \"description\": \"An advanced and versatile marine instrumentation package to display Signal K data.\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Thomas St.Pierre, David Godin\"\n },\n \"contributors\": [\n {\n \"name\": \"David Godin\",\n \"email\": \"godind@hotmail.com\"\n },\n {\n \"name\": \"Thomas St.Pierre\",\n \"email\": \"thomas@samoht.ca\"\n }\n ],\n \"homepage\": \"https://github.com/mxtommy/Kip\",\n \"bugs\": \"https://github.com/mxtommy/Kip/issues\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/mxtommy/Kip.git\"\n },\n \"keywords\": [\n \"signalk-webapp\",\n \"signalk-category-instruments\",\n \"signal k\",\n \"signalk\",\n \"instruments\",\n \"dashboard\",\n \"marine\",\n \"nmea\"\n ],\n \"signalk\": {\n \"appIcon\": \"assets/icon-72x72.png\",\n \"displayName\": \"KIP Instrument MFD\"\n },\n \"scripts\": {\n \"dev\": \"ng serve --configuration=dev --serve-path=/@mxtommy/kip/\",\n \"build-dev\": \"ng build --configuration=dev\",\n \"build-prod\": \"ng build --configuration=production\",\n \"test\": \"ng test\",\n \"lint\": \"ng lint\",\n \"e2e\": \"ng e2e\"\n },\n \"devDependencies\": {\n \"@angular-devkit/build-angular\": \"^20.1.6\",\n \"@angular/animations\": \"20.1.7\",\n \"@angular/build\": \"^20.1.6\",\n \"@angular/cdk\": \"20.1.6\",\n \"@angular/cli\": \"^20.1.6\",\n \"@angular/common\": \"20.1.7\",\n \"@angular/compiler\": \"20.1.7\",\n \"@angular/compiler-cli\": \"20.1.7\",\n \"@angular/core\": \"20.1.7\",\n \"@angular/forms\": \"20.1.7\",\n \"@angular/language-service\": \"20.1.7\",\n \"@angular/material\": \"20.1.6\",\n \"@angular/platform-browser\": \"20.1.7\",\n \"@angular/platform-browser-dynamic\": \"20.1.7\",\n \"@angular/router\": \"20.1.7\",\n \"@godind/ng-canvas-gauges\": \"^6.2.1\",\n \"@robloche/chartjs-plugin-streaming\": \"^3.1.0\",\n \"@types/canvas-gauges\": \"^2.1.8\",\n \"@types/howler\": \"^2.2.10\",\n \"@types/jasmine\": \"~3.6.0\",\n \"@types/jasminewd2\": \"^2.0.9\",\n \"@types/js-quantities\": \"^1.6.6\",\n \"@types/lodash-es\": \"^4.17.9\",\n \"@types/node\": \"^24.1.0\",\n \"@zakj/no-sleep\": \"^0.13.5\",\n \"angular-eslint\": \"20.1.1\",\n \"chart.js\": \"^4.4.9\",\n \"chartjs-adapter-date-fns\": \"^3.0.0\",\n \"chartjs-plugin-annotation\": \"^3.0.1\",\n \"codelyzer\": \"^6.0.0\",\n \"compare-versions\": \"^6.1.1\",\n \"core-js\": \"^3.13.1\",\n \"date-fns\": \"^2.30.0\",\n \"eslint\": \"^9.29.0\",\n \"gridstack\": \"^11.4.0\",\n \"howler\": \"^2.2.4\",\n \"jasmine-core\": \"~4.0.1\",\n \"jasmine-spec-reporter\": \"~5.0.0\",\n \"js-quantities\": \"^1.8.0\",\n \"karma\": \"^6.4.4\",\n \"karma-chrome-launcher\": \"~3.1.0\",\n \"karma-cli\": \"~2.0.0\",\n \"karma-coverage-istanbul-reporter\": \"^3.0.3\",\n \"karma-jasmine\": \"~4.0.0\",\n \"karma-jasmine-html-reporter\": \"^1.6.0\",\n \"lodash-es\": \"^4.17.21\",\n \"ng-packagr\": \"^20.0.1\",\n \"ngx-markdown\": \"^20.0.0\",\n \"ngx-resize-observer\": \"^3.1.0\",\n \"protractor\": \"~7.0.0\",\n \"pwa-asset-generator\": \"^8.0.4\",\n \"rxjs\": \"^7.8.2\",\n \"sass\": \"^1.49.9\",\n \"screenfull\": \"^6.0.2\",\n \"steelseries\": \"^2.0.9\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.6.2\",\n \"typescript\": \"^5.8.3\",\n \"zone.js\": \"^0.15.1\"\n }\n}\n", "import { effect, inject, Injectable, signal, untracked } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AppSettingsService } from './app-settings.service';\nimport { DataService } from './data.service';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport packageInfo from '../../../../package.json';\n\n/**\n * Snack-bar notification message interface.\n */\nexport interface AppNotification {\n message: string;\n action?: string;\n duration: number;\n silent: boolean;\n}\n\n\n/**\n * Kip theme hex colors\n *\n * @export\n * @interface ITheme\n */\nexport interface ITheme {\n blue: string,\n blueDim: string,\n blueDimmer: string,\n green: string,\n greenDim: string,\n greenDimmer: string,\n purple: string,\n purpleDim: string,\n purpleDimmer: string,\n yellow: string,\n yellowDim: string,\n yellowDimmer: string,\n pink: string,\n pinkDim: string,\n pinkDimmer: string,\n orange: string,\n orangeDim: string,\n orangeDimmer: string,\n contrast: string,\n contrastDim: string,\n contrastDimmer: string,\n grey: string,\n greyDim: string,\n greyDimmer: string,\n port: string,\n starboard: string,\n zoneNominal: string,\n zoneAlert: string,\n zoneWarn: string,\n zoneAlarm: string,\n zoneEmergency: string,\n background: string,\n cardColor: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n readonly MODE_PATH: string = 'self.environment.mode';\n public readonly configurableThemeColors: {label: string, value: string}[] = [\n {label: \"Contrast\", value: \"contrast\"},\n {label: \"Blue\", value: \"blue\"},\n {label: \"Green\", value: \"green\"},\n {label: \"Orange\", value: \"orange\"},\n {label: \"Yellow\", value: \"yellow\"},\n {label: \"Pink\", value: \"pink\"},\n {label: \"Purple\", value: \"purple\"},\n {label: \"Grey\", value: \"grey\"}\n ];\n public snackbarAppNotifications = new Subject<AppNotification>(); // for snackbar message\n public readonly cssThemeColorRoles$ = new BehaviorSubject<ITheme|null>(null);\n private _cssThemeColorRoles: ITheme = null;\n private _settings = inject(AppSettingsService);\n private _data = inject(DataService);\n public isNightMode = signal<boolean>(false);\n private _useAutoNightMode = toSignal(this._settings.getAutoNightModeAsO(), { requireSync: true });\n private _theme = toSignal(this._settings.getThemeNameAsO(), { requireSync: true });\n private _redNightMode = toSignal(this._settings.getRedNightModeAsO(), { requireSync: true });\n private _environmentMode = toSignal(this._data.subscribePath(this.MODE_PATH, 'default'));\n\n public readonly appVersion = signal<string>(packageInfo.version);\n public readonly browserVersion = signal<string>('Unknown');\n public readonly osVersion = signal<string>('Unknown');\n\n constructor() {\n effect(() => {\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n } else {\n // Remove the light theme class if it exists\n document.body.classList.remove('light-theme');\n }\n });\n\n effect(() => {\n const mode = this._environmentMode().data.value;\n if (this._useAutoNightMode()) {\n this.isNightMode.set(mode === \"night\");\n this.toggleDayNightMode();\n }\n });\n\n effect(() => {\n const redNightMode = this._redNightMode();\n\n untracked(() => {\n if (redNightMode) {\n this.toggleDayNightMode();\n } else {\n this.toggleDayNightMode();\n }\n });\n });\n\n this.readThemeCssRoleVariables();\n this._cssThemeColorRoles = this.cssThemeColorRoles$.getValue();\n\n this.browserVersion.set(this.getBrowserVersion());\n this.osVersion.set(this.getOSVersion());\n\n console.log(\"*********** KIP Version Information ***********\");\n console.log(`** App Version: ${this.appVersion()}`);\n console.log(`** Browser Version: ${this.browserVersion()}`);\n console.log(`** OS Version: ${this.osVersion()}`);\n console.log(\"***********************************************\");\n }\n\n /**\n * Display Kip Snackbar notification.\n *\n * @param message Text to be displayed.\n * @param duration Display duration in milliseconds before automatic dismissal.\n * Duration value of 0 is indefinite or until use clicks Dismiss button. Defaults\n * to 10000 of no value is provided.\n * @param silent A boolean that defines if the notification should make no sound.\n * Defaults false.\n */\n public sendSnackbarNotification(message: string, duration = 10000, silent = false, action = \"Dismiss\") {\n this.snackbarAppNotifications.next({ message: message, duration: duration, silent: silent, action: action });\n }\n\n /**\n * Observable to receive Kip app Snackbar notification. Use in app.component ONLY.\n *\n * @usageNotes To send a Snackbar notification, use sendSnackbarNotification().\n * Notifications are purely client side and have no relationship or\n * interactions with the Signal K server.\n */\n public getSnackbarAppNotifications() {\n return this.snackbarAppNotifications.asObservable();\n }\n\n private readThemeCssRoleVariables(): void {\n const root = document.body;\n const computedStyle = getComputedStyle(root);\n const cssThemeRolesColor: ITheme = {\n background: computedStyle.getPropertyValue('--mat-sys-background').trim(),\n cardColor: computedStyle.getPropertyValue('--kip-widget-card-background-color').trim(),\n blue: computedStyle.getPropertyValue('--kip-blue-color').trim(),\n blueDim: computedStyle.getPropertyValue('--kip-blue-dim-color').trim(),\n blueDimmer: computedStyle.getPropertyValue('--kip-blue-dimmer-color').trim(),\n green: computedStyle.getPropertyValue('--kip-green-color').trim(),\n greenDim: computedStyle.getPropertyValue('--kip-green-dim-color').trim(),\n greenDimmer: computedStyle.getPropertyValue('--kip-green-dimmer-color').trim(),\n grey: computedStyle.getPropertyValue('--kip-grey-color').trim(),\n greyDim: computedStyle.getPropertyValue('--kip-grey-dim-color').trim(),\n greyDimmer: computedStyle.getPropertyValue('--kip-grey-dimmer-color').trim(),\n orange: computedStyle.getPropertyValue('--kip-orange-color').trim(),\n orangeDim: computedStyle.getPropertyValue('--kip-orange-dim-color').trim(),\n orangeDimmer: computedStyle.getPropertyValue('--kip-orange-dimmer-color').trim(),\n pink: computedStyle.getPropertyValue('--kip-pink-color').trim(),\n pinkDim: computedStyle.getPropertyValue('--kip-pink-dim-color').trim(),\n pinkDimmer: computedStyle.getPropertyValue('--kip-pink-dimmer-color').trim(),\n purple: computedStyle.getPropertyValue('--kip-purple-color').trim(),\n purpleDim: computedStyle.getPropertyValue('--kip-purple-dim-color').trim(),\n purpleDimmer: computedStyle.getPropertyValue('--kip-purple-dimmer-color').trim(),\n contrast: computedStyle.getPropertyValue('--kip-contrast-color').trim(),\n contrastDim: computedStyle.getPropertyValue('--kip-contrast-dim-color').trim(),\n contrastDimmer: computedStyle.getPropertyValue('--kip-contrast-dimmer-color').trim(),\n yellow: computedStyle.getPropertyValue('--kip-yellow-color').trim(),\n yellowDim: computedStyle.getPropertyValue('--kip-yellow-dim-color').trim(),\n yellowDimmer: computedStyle.getPropertyValue('--kip-yellow-dimmer-color').trim(),\n port: computedStyle.getPropertyValue('--kip-port-color').trim(),\n starboard: computedStyle.getPropertyValue('--kip-starboard-color').trim(),\n zoneNominal: computedStyle.getPropertyValue('--kip-zone-nominal-color').trim(),\n zoneAlert: computedStyle.getPropertyValue('--kip-zone-alert-color').trim(),\n zoneWarn: computedStyle.getPropertyValue('--kip-zone-warn-color').trim(),\n zoneAlarm: computedStyle.getPropertyValue('--kip-zone-alarm-color').trim(),\n zoneEmergency: computedStyle.getPropertyValue('--kip-zone-emergency-color').trim(),\n };\n this.cssThemeColorRoles$.next(cssThemeRolesColor);\n }\n\n public get cssThemeColors() : ITheme {\n return this._cssThemeColorRoles;\n }\n\n public setBrightness(brightness: number, applyNightFilters = false): void {\n const appFilterWrapper = document.body;\n\n // Set the brightness level\n appFilterWrapper.style.setProperty('--kip-nightModeBrightness', `${brightness}`);\n\n // Apply sepia and hue-rotate filters if night mode is active\n const additionalFilters = applyNightFilters ? ' sepia(0.5) hue-rotate(-30deg)' : '';\n appFilterWrapper.style.setProperty('--kip-nightModeFilters', additionalFilters);\n }\n\n public toggleDayNightMode(): void {\n if (this.isNightMode()) {\n if (this._redNightMode()) {\n document.body.classList.toggle('night-theme', true);\n this.setBrightness(1, false);\n } else {\n this.setBrightness(this._settings.getNightModeBrightness(), true);\n document.body.classList.remove('night-theme');\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n } else {\n document.body.classList.remove('light-theme');\n }\n }\n\n } else {\n document.body.classList.remove('night-theme');\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n }\n this.setBrightness(1, false);\n }\n this.readThemeCssRoleVariables();\n this._cssThemeColorRoles = this.cssThemeColorRoles$.getValue();\n }\n\n /**\n * Helper method to get the browser version.\n */\n private getBrowserVersion(): string {\n const userAgent = navigator.userAgent;\n let browser = 'Unknown';\n\n if (userAgent.includes('Edg')) {\n browser = `Edge ${userAgent.match(/Edg\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Chrome') && !userAgent.includes('Edg') && !userAgent.includes('Chromium')) {\n browser = `Chrome ${userAgent.match(/Chrome\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Chromium')) {\n browser = `Chromium ${userAgent.match(/Chromium\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Firefox')) {\n browser = `Firefox ${userAgent.match(/Firefox\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Safari') && !userAgent.includes('Chrome') && !userAgent.includes('Chromium')) {\n browser = `Safari ${userAgent.match(/Version\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Opera') || userAgent.includes('OPR')) {\n browser = `Opera ${userAgent.match(/(Opera|OPR)\\/(\\d+)/)?.[2]}`;\n }\n\n return browser;\n }\n\n /**\n * Helper method to get the OS version.\n */\n private getOSVersion(): string {\n const platform = navigator.platform;\n const userAgent = navigator.userAgent;\n\n if (platform.startsWith('Mac')) {\n return 'macOS';\n } else if (platform.startsWith('Win')) {\n return 'Windows';\n } else if (/Linux/.test(platform)) {\n // Check for Raspberry Pi identifiers in the userAgent or platform\n if (\n userAgent.includes('ARM') ||\n userAgent.includes('aarch64') ||\n userAgent.includes('Raspberry') ||\n platform.includes('armv7l') ||\n platform.includes('armv8l')\n ) {\n return 'Raspberry Pi';\n }\n return 'Linux';\n } else {\n return 'Unknown OS';\n }\n }\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"@mxtommy/kip\",\n \"version\": \"3.9.0-beta.24\",\n \"description\": \"An advanced and versatile marine instrumentation package to display Signal K data.\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Thomas St.Pierre, David Godin\"\n },\n \"contributors\": [\n {\n \"name\": \"David Godin\",\n \"email\": \"godind@hotmail.com\"\n },\n {\n \"name\": \"Thomas St.Pierre\",\n \"email\": \"thomas@samoht.ca\"\n }\n ],\n \"homepage\": \"https://github.com/mxtommy/Kip\",\n \"bugs\": \"https://github.com/mxtommy/Kip/issues\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/mxtommy/Kip.git\"\n },\n \"keywords\": [\n \"signalk-webapp\",\n \"signalk-category-instruments\",\n \"signal k\",\n \"signalk\",\n \"instruments\",\n \"dashboard\",\n \"marine\",\n \"nmea\"\n ],\n \"signalk\": {\n \"appIcon\": \"assets/icon-72x72.png\",\n \"displayName\": \"KIP Instrument MFD\"\n },\n \"scripts\": {\n \"dev\": \"ng serve --configuration=dev --serve-path=/@mxtommy/kip/\",\n \"build-dev\": \"ng build --configuration=dev\",\n \"build-prod\": \"ng build --configuration=production\",\n \"test\": \"ng test\",\n \"lint\": \"ng lint\",\n \"e2e\": \"ng e2e\"\n },\n \"devDependencies\": {\n \"@angular-devkit/build-angular\": \"^20.1.6\",\n \"@angular/animations\": \"20.1.7\",\n \"@angular/build\": \"^20.1.6\",\n \"@angular/cdk\": \"20.1.6\",\n \"@angular/cli\": \"^20.1.6\",\n \"@angular/common\": \"20.1.7\",\n \"@angular/compiler\": \"20.1.7\",\n \"@angular/compiler-cli\": \"20.1.7\",\n \"@angular/core\": \"20.1.7\",\n \"@angular/forms\": \"20.1.7\",\n \"@angular/language-service\": \"20.1.7\",\n \"@angular/material\": \"20.1.6\",\n \"@angular/platform-browser\": \"20.1.7\",\n \"@angular/platform-browser-dynamic\": \"20.1.7\",\n \"@angular/router\": \"20.1.7\",\n \"@godind/ng-canvas-gauges\": \"^6.2.1\",\n \"@robloche/chartjs-plugin-streaming\": \"^3.1.0\",\n \"@types/canvas-gauges\": \"^2.1.8\",\n \"@types/howler\": \"^2.2.10\",\n \"@types/jasmine\": \"~3.6.0\",\n \"@types/jasminewd2\": \"^2.0.9\",\n \"@types/js-quantities\": \"^1.6.6\",\n \"@types/lodash-es\": \"^4.17.9\",\n \"@types/node\": \"^24.1.0\",\n \"@zakj/no-sleep\": \"^0.13.5\",\n \"angular-eslint\": \"20.1.1\",\n \"chart.js\": \"^4.4.9\",\n \"chartjs-adapter-date-fns\": \"^3.0.0\",\n \"chartjs-plugin-annotation\": \"^3.0.1\",\n \"codelyzer\": \"^6.0.0\",\n \"compare-versions\": \"^6.1.1\",\n \"core-js\": \"^3.13.1\",\n \"date-fns\": \"^2.30.0\",\n \"eslint\": \"^9.29.0\",\n \"gridstack\": \"^11.4.0\",\n \"howler\": \"^2.2.4\",\n \"jasmine-core\": \"~4.0.1\",\n \"jasmine-spec-reporter\": \"~5.0.0\",\n \"js-quantities\": \"^1.8.0\",\n \"karma\": \"^6.4.4\",\n \"karma-chrome-launcher\": \"~3.1.0\",\n \"karma-cli\": \"~2.0.0\",\n \"karma-coverage-istanbul-reporter\": \"^3.0.3\",\n \"karma-jasmine\": \"~4.0.0\",\n \"karma-jasmine-html-reporter\": \"^1.6.0\",\n \"lodash-es\": \"^4.17.21\",\n \"ng-packagr\": \"^20.0.1\",\n \"ngx-markdown\": \"^20.0.0\",\n \"ngx-resize-observer\": \"^3.1.0\",\n \"protractor\": \"~7.0.0\",\n \"pwa-asset-generator\": \"^8.0.4\",\n \"rxjs\": \"^7.8.2\",\n \"sass\": \"^1.49.9\",\n \"screenfull\": \"^6.0.2\",\n \"steelseries\": \"^2.0.9\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.6.2\",\n \"typescript\": \"^5.8.3\",\n \"zone.js\": \"^0.15.1\"\n }\n}\n", "import { effect, inject, Injectable, signal, untracked } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AppSettingsService } from './app-settings.service';\nimport { DataService } from './data.service';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport packageInfo from '../../../../package.json';\n\n/**\n * Snack-bar notification message interface.\n */\nexport interface AppNotification {\n message: string;\n action?: string;\n duration: number;\n silent: boolean;\n}\n\n\n/**\n * Kip theme hex colors\n *\n * @export\n * @interface ITheme\n */\nexport interface ITheme {\n blue: string,\n blueDim: string,\n blueDimmer: string,\n green: string,\n greenDim: string,\n greenDimmer: string,\n purple: string,\n purpleDim: string,\n purpleDimmer: string,\n yellow: string,\n yellowDim: string,\n yellowDimmer: string,\n pink: string,\n pinkDim: string,\n pinkDimmer: string,\n orange: string,\n orangeDim: string,\n orangeDimmer: string,\n contrast: string,\n contrastDim: string,\n contrastDimmer: string,\n grey: string,\n greyDim: string,\n greyDimmer: string,\n port: string,\n starboard: string,\n zoneNominal: string,\n zoneAlert: string,\n zoneWarn: string,\n zoneAlarm: string,\n zoneEmergency: string,\n background: string,\n cardColor: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n readonly MODE_PATH: string = 'self.environment.mode';\n public readonly configurableThemeColors: {label: string, value: string}[] = [\n {label: \"Contrast\", value: \"contrast\"},\n {label: \"Blue\", value: \"blue\"},\n {label: \"Green\", value: \"green\"},\n {label: \"Orange\", value: \"orange\"},\n {label: \"Yellow\", value: \"yellow\"},\n {label: \"Pink\", value: \"pink\"},\n {label: \"Purple\", value: \"purple\"},\n {label: \"Grey\", value: \"grey\"}\n ];\n public snackbarAppNotifications = new Subject<AppNotification>(); // for snackbar message\n public readonly cssThemeColorRoles$ = new BehaviorSubject<ITheme|null>(null);\n private _cssThemeColorRoles: ITheme = null;\n private _settings = inject(AppSettingsService);\n private _data = inject(DataService);\n public isNightMode = signal<boolean>(false);\n private _useAutoNightMode = toSignal(this._settings.getAutoNightModeAsO(), { requireSync: true });\n private _theme = toSignal(this._settings.getThemeNameAsO(), { requireSync: true });\n private _redNightMode = toSignal(this._settings.getRedNightModeAsO(), { requireSync: true });\n private _environmentMode = toSignal(this._data.subscribePath(this.MODE_PATH, 'default'));\n\n public readonly appVersion = signal<string>(packageInfo.version);\n public readonly browserVersion = signal<string>('Unknown');\n public readonly osVersion = signal<string>('Unknown');\n\n constructor() {\n effect(() => {\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n } else {\n // Remove the light theme class if it exists\n document.body.classList.remove('light-theme');\n }\n });\n\n effect(() => {\n const mode = this._environmentMode().data.value;\n if (this._useAutoNightMode()) {\n this.isNightMode.set(mode === \"night\");\n this.toggleDayNightMode();\n }\n });\n\n effect(() => {\n const redNightMode = this._redNightMode();\n\n untracked(() => {\n if (redNightMode) {\n this.toggleDayNightMode();\n } else {\n this.toggleDayNightMode();\n }\n });\n });\n\n this.readThemeCssRoleVariables();\n this._cssThemeColorRoles = this.cssThemeColorRoles$.getValue();\n\n this.browserVersion.set(this.getBrowserVersion());\n this.osVersion.set(this.getOSVersion());\n\n console.log(\"*********** KIP Version Information ***********\");\n console.log(`** App Version: ${this.appVersion()}`);\n console.log(`** Browser Version: ${this.browserVersion()}`);\n console.log(`** OS Version: ${this.osVersion()}`);\n console.log(\"***********************************************\");\n }\n\n /**\n * Display Kip Snackbar notification.\n *\n * @param message Text to be displayed.\n * @param duration Display duration in milliseconds before automatic dismissal.\n * Duration value of 0 is indefinite or until use clicks Dismiss button. Defaults\n * to 10000 of no value is provided.\n * @param silent A boolean that defines if the notification should make no sound.\n * Defaults false.\n */\n public sendSnackbarNotification(message: string, duration = 10000, silent = false, action = \"Dismiss\") {\n this.snackbarAppNotifications.next({ message: message, duration: duration, silent: silent, action: action });\n }\n\n /**\n * Observable to receive Kip app Snackbar notification. Use in app.component ONLY.\n *\n * @usageNotes To send a Snackbar notification, use sendSnackbarNotification().\n * Notifications are purely client side and have no relationship or\n * interactions with the Signal K server.\n */\n public getSnackbarAppNotifications() {\n return this.snackbarAppNotifications.asObservable();\n }\n\n private readThemeCssRoleVariables(): void {\n const root = document.body;\n const computedStyle = getComputedStyle(root);\n const cssThemeRolesColor: ITheme = {\n background: computedStyle.getPropertyValue('--mat-sys-background').trim(),\n cardColor: computedStyle.getPropertyValue('--kip-widget-card-background-color').trim(),\n blue: computedStyle.getPropertyValue('--kip-blue-color').trim(),\n blueDim: computedStyle.getPropertyValue('--kip-blue-dim-color').trim(),\n blueDimmer: computedStyle.getPropertyValue('--kip-blue-dimmer-color').trim(),\n green: computedStyle.getPropertyValue('--kip-green-color').trim(),\n greenDim: computedStyle.getPropertyValue('--kip-green-dim-color').trim(),\n greenDimmer: computedStyle.getPropertyValue('--kip-green-dimmer-color').trim(),\n grey: computedStyle.getPropertyValue('--kip-grey-color').trim(),\n greyDim: computedStyle.getPropertyValue('--kip-grey-dim-color').trim(),\n greyDimmer: computedStyle.getPropertyValue('--kip-grey-dimmer-color').trim(),\n orange: computedStyle.getPropertyValue('--kip-orange-color').trim(),\n orangeDim: computedStyle.getPropertyValue('--kip-orange-dim-color').trim(),\n orangeDimmer: computedStyle.getPropertyValue('--kip-orange-dimmer-color').trim(),\n pink: computedStyle.getPropertyValue('--kip-pink-color').trim(),\n pinkDim: computedStyle.getPropertyValue('--kip-pink-dim-color').trim(),\n pinkDimmer: computedStyle.getPropertyValue('--kip-pink-dimmer-color').trim(),\n purple: computedStyle.getPropertyValue('--kip-purple-color').trim(),\n purpleDim: computedStyle.getPropertyValue('--kip-purple-dim-color').trim(),\n purpleDimmer: computedStyle.getPropertyValue('--kip-purple-dimmer-color').trim(),\n contrast: computedStyle.getPropertyValue('--kip-contrast-color').trim(),\n contrastDim: computedStyle.getPropertyValue('--kip-contrast-dim-color').trim(),\n contrastDimmer: computedStyle.getPropertyValue('--kip-contrast-dimmer-color').trim(),\n yellow: computedStyle.getPropertyValue('--kip-yellow-color').trim(),\n yellowDim: computedStyle.getPropertyValue('--kip-yellow-dim-color').trim(),\n yellowDimmer: computedStyle.getPropertyValue('--kip-yellow-dimmer-color').trim(),\n port: computedStyle.getPropertyValue('--kip-port-color').trim(),\n starboard: computedStyle.getPropertyValue('--kip-starboard-color').trim(),\n zoneNominal: computedStyle.getPropertyValue('--kip-zone-nominal-color').trim(),\n zoneAlert: computedStyle.getPropertyValue('--kip-zone-alert-color').trim(),\n zoneWarn: computedStyle.getPropertyValue('--kip-zone-warn-color').trim(),\n zoneAlarm: computedStyle.getPropertyValue('--kip-zone-alarm-color').trim(),\n zoneEmergency: computedStyle.getPropertyValue('--kip-zone-emergency-color').trim(),\n };\n this.cssThemeColorRoles$.next(cssThemeRolesColor);\n }\n\n public get cssThemeColors() : ITheme {\n return this._cssThemeColorRoles;\n }\n\n public setBrightness(brightness: number, applyNightFilters = false): void {\n const appFilterWrapper = document.body;\n\n // Set the brightness level\n appFilterWrapper.style.setProperty('--kip-nightModeBrightness', `${brightness}`);\n\n // Apply sepia and hue-rotate filters if night mode is active\n const additionalFilters = applyNightFilters ? ' sepia(0.5) hue-rotate(-30deg)' : '';\n appFilterWrapper.style.setProperty('--kip-nightModeFilters', additionalFilters);\n }\n\n public toggleDayNightMode(): void {\n if (this.isNightMode()) {\n if (this._redNightMode()) {\n document.body.classList.toggle('night-theme', true);\n this.setBrightness(1, false);\n } else {\n this.setBrightness(this._settings.getNightModeBrightness(), true);\n document.body.classList.remove('night-theme');\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n } else {\n document.body.classList.remove('light-theme');\n }\n }\n\n } else {\n document.body.classList.remove('night-theme');\n if (this._theme() === 'light-theme') {\n document.body.classList.toggle('light-theme', this._theme() === 'light-theme');\n }\n this.setBrightness(1, false);\n }\n this.readThemeCssRoleVariables();\n this._cssThemeColorRoles = this.cssThemeColorRoles$.getValue();\n }\n\n /**\n * Helper method to get the browser version.\n */\n private getBrowserVersion(): string {\n const userAgent = navigator.userAgent;\n let browser = 'Unknown';\n\n if (userAgent.includes('Edg')) {\n browser = `Edge ${userAgent.match(/Edg\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Chrome') && !userAgent.includes('Edg') && !userAgent.includes('Chromium')) {\n browser = `Chrome ${userAgent.match(/Chrome\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Chromium')) {\n browser = `Chromium ${userAgent.match(/Chromium\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Firefox')) {\n browser = `Firefox ${userAgent.match(/Firefox\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Safari') && !userAgent.includes('Chrome') && !userAgent.includes('Chromium')) {\n browser = `Safari ${userAgent.match(/Version\\/(\\d+)/)?.[1]}`;\n } else if (userAgent.includes('Opera') || userAgent.includes('OPR')) {\n browser = `Opera ${userAgent.match(/(Opera|OPR)\\/(\\d+)/)?.[2]}`;\n }\n\n return browser;\n }\n\n /**\n * Helper method to get the OS version.\n */\n private getOSVersion(): string {\n const platform = navigator.platform;\n const userAgent = navigator.userAgent;\n\n if (platform.startsWith('Mac')) {\n return 'macOS';\n } else if (platform.startsWith('Win')) {\n return 'Windows';\n } else if (/Linux/.test(platform)) {\n // Check for Raspberry Pi identifiers in the userAgent or platform\n if (\n userAgent.includes('ARM') ||\n userAgent.includes('aarch64') ||\n userAgent.includes('Raspberry') ||\n platform.includes('armv7l') ||\n platform.includes('armv8l')\n ) {\n return 'Raspberry Pi';\n }\n return 'Linux';\n } else {\n return 'Unknown OS';\n }\n }\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -12,7 +12,7 @@ import {
12
12
  MatListModule,
13
13
  TileLargeIconComponent,
14
14
  uiEventService
15
- } from "./chunk-BQ6XGNOY.js";
15
+ } from "./chunk-7SGYTKZA.js";
16
16
  import "./chunk-D7ILNFDM.js";
17
17
  import "./chunk-63ILPRXC.js";
18
18
  import "./chunk-E24UNLSJ.js";
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-UQYTD5AC.js";
29
29
  import {
30
30
  AppService
31
- } from "./chunk-VJDV2IQK.js";
31
+ } from "./chunk-G6SABQYF.js";
32
32
  import {
33
33
  MatDividerModule
34
34
  } from "./chunk-MCEJWZB2.js";
@@ -4749,4 +4749,4 @@ var HomeComponent = class _HomeComponent {
4749
4749
  export {
4750
4750
  HomeComponent
4751
4751
  };
4752
- //# sourceMappingURL=chunk-RSULVHHY.js.map
4752
+ //# sourceMappingURL=chunk-LBKKHJCM.js.map
@@ -39,7 +39,7 @@ import {
39
39
  } from "./chunk-U2DCSTRY.js";
40
40
  import {
41
41
  AppService
42
- } from "./chunk-VJDV2IQK.js";
42
+ } from "./chunk-G6SABQYF.js";
43
43
  import {
44
44
  MatDivider
45
45
  } from "./chunk-MCEJWZB2.js";
@@ -5234,4 +5234,4 @@ var AppSettingsComponent = class _AppSettingsComponent {
5234
5234
  export {
5235
5235
  AppSettingsComponent
5236
5236
  };
5237
- //# sourceMappingURL=chunk-WDFQOPIX.js.map
5237
+ //# sourceMappingURL=chunk-ZDGETICS.js.map
package/public/index.html CHANGED
@@ -62,5 +62,5 @@
62
62
  </div>
63
63
  </app-root>
64
64
  </div>
65
- <link rel="modulepreload" href="chunk-BQ6XGNOY.js"><link rel="modulepreload" href="chunk-Y6N6O2IP.js"><link rel="modulepreload" href="chunk-D7ILNFDM.js"><link rel="modulepreload" href="chunk-63ILPRXC.js"><link rel="modulepreload" href="chunk-YZXYVP72.js"><link rel="modulepreload" href="chunk-E24UNLSJ.js"><link rel="modulepreload" href="chunk-3VR3EA35.js"><link rel="modulepreload" href="chunk-65ZWQBS6.js"><link rel="modulepreload" href="chunk-J42S2ELC.js"><link rel="modulepreload" href="chunk-UQYTD5AC.js"><script src="polyfills.js" type="module"></script><script src="main.js" type="module"></script></body>
65
+ <link rel="modulepreload" href="chunk-7SGYTKZA.js"><link rel="modulepreload" href="chunk-Y6N6O2IP.js"><link rel="modulepreload" href="chunk-D7ILNFDM.js"><link rel="modulepreload" href="chunk-63ILPRXC.js"><link rel="modulepreload" href="chunk-YZXYVP72.js"><link rel="modulepreload" href="chunk-E24UNLSJ.js"><link rel="modulepreload" href="chunk-3VR3EA35.js"><link rel="modulepreload" href="chunk-65ZWQBS6.js"><link rel="modulepreload" href="chunk-J42S2ELC.js"><link rel="modulepreload" href="chunk-UQYTD5AC.js"><script src="polyfills.js" type="module"></script><script src="main.js" type="module"></script></body>
66
66
  </html>
package/public/main.js CHANGED
@@ -16,7 +16,7 @@ import {
16
16
  MatListModule,
17
17
  TileLargeIconComponent,
18
18
  uiEventService
19
- } from "./chunk-BQ6XGNOY.js";
19
+ } from "./chunk-7SGYTKZA.js";
20
20
  import {
21
21
  Animations,
22
22
  CanvasService,
@@ -94,7 +94,7 @@ import {
94
94
  } from "./chunk-UQYTD5AC.js";
95
95
  import {
96
96
  AppService
97
- } from "./chunk-VJDV2IQK.js";
97
+ } from "./chunk-G6SABQYF.js";
98
98
  import {
99
99
  MatDivider
100
100
  } from "./chunk-MCEJWZB2.js";
@@ -14169,8 +14169,8 @@ var WidgetAutopilotComponent = class _WidgetAutopilotComponent extends BaseWidge
14169
14169
  }
14170
14170
  });
14171
14171
  this.observeDataStream("autopilotEngaged", (newValue) => {
14172
- if (newValue.data?.value) {
14173
- console.log("[Autopilot Widget] engaged value:", newValue.data.value);
14172
+ console.log("[Autopilot Widget] engaged value:", newValue.data.value);
14173
+ if (newValue.data?.value != null) {
14174
14174
  this.apEngaged.set(newValue.data.value);
14175
14175
  } else {
14176
14176
  this.apEngaged.set(false);
@@ -28295,12 +28295,12 @@ var routes = [
28295
28295
  },
28296
28296
  {
28297
28297
  path: "home",
28298
- loadComponent: () => import("./chunk-RSULVHHY.js").then((m) => m.HomeComponent),
28298
+ loadComponent: () => import("./chunk-LBKKHJCM.js").then((m) => m.HomeComponent),
28299
28299
  title: "KIP - Home"
28300
28300
  },
28301
28301
  {
28302
28302
  path: "settings",
28303
- loadComponent: () => import("./chunk-WDFQOPIX.js").then((m) => m.AppSettingsComponent),
28303
+ loadComponent: () => import("./chunk-ZDGETICS.js").then((m) => m.AppSettingsComponent),
28304
28304
  title: "KIP - Settings"
28305
28305
  },
28306
28306
  {
@@ -28320,7 +28320,7 @@ var routes = [
28320
28320
  },
28321
28321
  {
28322
28322
  path: "login",
28323
- loadComponent: () => import("./chunk-PZNZAWVP.js").then((m) => m.WidgetLoginComponent),
28323
+ loadComponent: () => import("./chunk-2USMK6JX.js").then((m) => m.WidgetLoginComponent),
28324
28324
  title: "Login"
28325
28325
  },
28326
28326
  {