@mxtommy/kip 3.9.0-beta.30 → 3.9.0-beta.31

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.30",
3
+ "version": "3.9.0-beta.31",
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-L6IV3M2T.js";
6
+ } from "./chunk-OFG4OEIS.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-RUSRJ6XE.js.map
89
+ //# sourceMappingURL=chunk-2IRAP774.js.map
@@ -42,7 +42,7 @@ import {
42
42
  } from "./chunk-UQYTD5AC.js";
43
43
  import {
44
44
  AppService
45
- } from "./chunk-L6IV3M2T.js";
45
+ } from "./chunk-OFG4OEIS.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-ASPAEAIA.js.map
13727
+ //# sourceMappingURL=chunk-5NYGXVMX.js.map
@@ -39,7 +39,7 @@ import {
39
39
  } from "./chunk-U2DCSTRY.js";
40
40
  import {
41
41
  AppService
42
- } from "./chunk-L6IV3M2T.js";
42
+ } from "./chunk-OFG4OEIS.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-NDTHJTFL.js.map
5237
+ //# sourceMappingURL=chunk-HR2WMF3Q.js.map
@@ -12,7 +12,7 @@ import {
12
12
  MatListModule,
13
13
  TileLargeIconComponent,
14
14
  uiEventService
15
- } from "./chunk-ASPAEAIA.js";
15
+ } from "./chunk-5NYGXVMX.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-L6IV3M2T.js";
31
+ } from "./chunk-OFG4OEIS.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-YJ3FT26N.js.map
4752
+ //# sourceMappingURL=chunk-MMVERQLK.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.30",
21
+ version: "3.9.0-beta.31",
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-L6IV3M2T.js.map
343
+ //# sourceMappingURL=chunk-OFG4OEIS.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.30\",\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.31\",\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
  }
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-ASPAEAIA.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-5NYGXVMX.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-ASPAEAIA.js";
19
+ } from "./chunk-5NYGXVMX.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-L6IV3M2T.js";
97
+ } from "./chunk-OFG4OEIS.js";
98
98
  import {
99
99
  MatDivider
100
100
  } from "./chunk-MCEJWZB2.js";
@@ -13679,14 +13679,16 @@ var WidgetAutopilotComponent = class _WidgetAutopilotComponent extends BaseWidge
13679
13679
  const state2 = this.apState();
13680
13680
  const engaged = this.apEngaged();
13681
13681
  const apiVersion = this.widgetProperties.config.autopilot.apiVersion;
13682
+ console.log(`[Autopilot Widget] apEngageBtnDisabled apiVersion: ${apiVersion}, state: ${state2}, engaged: ${engaged}`);
13682
13683
  if (!apiVersion)
13683
13684
  return true;
13684
13685
  if (apiVersion === "v1") {
13685
13686
  return ["standby", "off-line"].includes(state2) ? true : false;
13686
13687
  }
13687
13688
  if (apiVersion === "v2") {
13688
- return true;
13689
+ return false;
13689
13690
  }
13691
+ console.log(`[Autopilot Widget] DEFAULT return`);
13690
13692
  return true;
13691
13693
  }, ...ngDevMode ? [{ debugName: "apEngageBtnDisabled" }] : []);
13692
13694
  apBtnDisabled = computed(() => {
@@ -28293,12 +28295,12 @@ var routes = [
28293
28295
  },
28294
28296
  {
28295
28297
  path: "home",
28296
- loadComponent: () => import("./chunk-YJ3FT26N.js").then((m) => m.HomeComponent),
28298
+ loadComponent: () => import("./chunk-MMVERQLK.js").then((m) => m.HomeComponent),
28297
28299
  title: "KIP - Home"
28298
28300
  },
28299
28301
  {
28300
28302
  path: "settings",
28301
- loadComponent: () => import("./chunk-NDTHJTFL.js").then((m) => m.AppSettingsComponent),
28303
+ loadComponent: () => import("./chunk-HR2WMF3Q.js").then((m) => m.AppSettingsComponent),
28302
28304
  title: "KIP - Settings"
28303
28305
  },
28304
28306
  {
@@ -28318,7 +28320,7 @@ var routes = [
28318
28320
  },
28319
28321
  {
28320
28322
  path: "login",
28321
- loadComponent: () => import("./chunk-RUSRJ6XE.js").then((m) => m.WidgetLoginComponent),
28323
+ loadComponent: () => import("./chunk-2IRAP774.js").then((m) => m.WidgetLoginComponent),
28322
28324
  title: "Login"
28323
28325
  },
28324
28326
  {