@mxtommy/kip 4.8.0 → 4.8.1
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/CHANGELOG.md +22 -0
- package/README.md +19 -17
- package/package.json +24 -21
- package/plugin/history-series.service.js +3 -0
- package/plugin/index.js +1 -1
- package/plugin/sqlite-history-storage.service.js +4 -2
- package/plugin/src/history-series.service.js +634 -0
- package/plugin/src/index.js +1322 -0
- package/plugin/src/kip-series-contract.js +31 -0
- package/plugin/src/openApi.json +855 -0
- package/plugin/src/sqlite-history-storage.service.js +1122 -0
- package/public/3rdpartylicenses.txt +569 -727
- package/public/assets/help-docs/chartplotter.md +1 -1
- package/public/assets/help-docs/history-api.md +69 -71
- package/public/assets/help-docs/menu.json +25 -7
- package/public/assets/help-docs/time-series.md +81 -0
- package/public/assets/help-docs/welcome.md +1 -1
- package/public/chunk-00hwknVI.js +1 -0
- package/public/chunk-5U8d2Ygo.js +14 -0
- package/public/chunk-AANk-NXH.js +1015 -0
- package/public/chunk-B6bEhzNR.js +1 -0
- package/public/chunk-B82ADJSs.js +1 -0
- package/public/chunk-BJz7Ij9E.js +1 -0
- package/public/chunk-BKj60jdq.js +1 -0
- package/public/chunk-BOAD0N2a.js +2 -0
- package/public/chunk-BQr-tSkv.js +1 -0
- package/public/chunk-BX6skw5k.js +1 -0
- package/public/chunk-BdokyhBM.js +1 -0
- package/public/chunk-Blokg6Ds.js +1 -0
- package/public/chunk-BoNDCNGE.js +1 -0
- package/public/chunk-Bp0MQwPM.js +1 -0
- package/public/chunk-BwOIef42.js +1 -0
- package/public/chunk-By8ZVvDx.js +2 -0
- package/public/chunk-C2VQxCXa.js +1 -0
- package/public/chunk-C6UXF7BI.js +1 -0
- package/public/chunk-CA6RRaxd.js +1 -0
- package/public/chunk-CIlfzV9R.js +1 -0
- package/public/chunk-CL2xiH57.js +1 -0
- package/public/chunk-CNMFlw_H.js +1 -0
- package/public/chunk-CNNTuNlM.js +1 -0
- package/public/chunk-CQNVyz8q.js +1 -0
- package/public/chunk-CXvG8mMq.js +1 -0
- package/public/chunk-CaD3zVfK.js +1 -0
- package/public/chunk-CkXTl3su.js +1 -0
- package/public/chunk-CpMCBDvH.js +1 -0
- package/public/chunk-CpuB_ZZz.js +2 -0
- package/public/chunk-CrBxxZCe.js +1 -0
- package/public/chunk-CwSa_BNV.js +1 -0
- package/public/chunk-D4xZ2tGB.js +39 -0
- package/public/chunk-DDqeRiB0.js +1 -0
- package/public/chunk-DE4ylhpq.js +1 -0
- package/public/chunk-DNS-qsFC.js +1 -0
- package/public/chunk-DQnoPLyC.js +1 -0
- package/public/chunk-DWLISAZi.js +1 -0
- package/public/chunk-DXkKj21H.js +1 -0
- package/public/chunk-DchvLV_Y.js +1 -0
- package/public/chunk-DjZgzSiH.js +1 -0
- package/public/chunk-DumLX5k_.js +1 -0
- package/public/chunk-Dxlia2NE.js +1 -0
- package/public/chunk-DzTTqoF_.js +1 -0
- package/public/chunk-H9_eqTYx.js +1 -0
- package/public/chunk-Ii9n-oiL.js +1 -0
- package/public/chunk-JbEkcxJm.js +2 -0
- package/public/chunk-MjWuPUhu.js +1 -0
- package/public/chunk-PheXEqie.js +1 -0
- package/public/chunk-TakPRI3t.js +2 -0
- package/public/chunk-VgxMqRPk.js +3 -0
- package/public/chunk-dgaOX1wC.js +382 -0
- package/public/chunk-hd2_AKwt.js +1 -0
- package/public/chunk-nu4vZg-z.js +1 -0
- package/public/chunk-sNakMDHi.js +1 -0
- package/public/chunk-tAiV3ARh.js +1 -0
- package/public/chunk-y1imvaA-.js +1 -0
- package/public/index.html +4 -4
- package/public/main-BAV5VDOD.js +7109 -0
- package/public/polyfills-5MJXXCNC.js +1 -0
- package/public/styles-JZSMCSRO.css +1 -0
- package/public/assets/help-docs/widget-historical-series.md +0 -110
- package/public/chunk-2TP7C66X.js +0 -5
- package/public/chunk-3SJSLBCV.js +0 -6
- package/public/chunk-5SMHTIVS.js +0 -50
- package/public/chunk-6ISGIPNP.js +0 -1
- package/public/chunk-6ZR3M3IQ.js +0 -3
- package/public/chunk-ACY7HYMZ.js +0 -4
- package/public/chunk-C23GLDFH.js +0 -62
- package/public/chunk-CB4E7PPA.js +0 -4
- package/public/chunk-DNM5XUIF.js +0 -1
- package/public/chunk-GSM7FZE2.js +0 -2
- package/public/chunk-HF7V6XFA.js +0 -2
- package/public/chunk-HUCDJ6CS.js +0 -10
- package/public/chunk-ILQQCGMJ.js +0 -5
- package/public/chunk-IXUKD73N.js +0 -5
- package/public/chunk-JMZYPL54.js +0 -2
- package/public/chunk-KG4C6HZC.js +0 -1
- package/public/chunk-LEY6MANN.js +0 -16
- package/public/chunk-NS2OV2OW.js +0 -9
- package/public/chunk-O5BTKN5D.js +0 -1
- package/public/chunk-Q32FSCUX.js +0 -1
- package/public/chunk-SHJMXSDM.js +0 -1
- package/public/chunk-T4VTC6GW.js +0 -1
- package/public/chunk-VFJD3XKT.js +0 -1
- package/public/chunk-VFZSH4TC.js +0 -1
- package/public/chunk-W6MCE3GH.js +0 -6
- package/public/main-UBENKC2D.js +0 -1
- package/public/polyfills-BWA36QKG.js +0 -1
- package/public/scripts-M6PHZBML.js +0 -14
- package/public/styles-DYEO23GZ.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
# v4.9.0
|
|
2
|
+
## New Contributors
|
|
3
|
+
* Special thanks to @dillan for their first of many contributions.
|
|
4
|
+
* Special thanks to @macjl for their first of many contributions.
|
|
5
|
+
## Improvements
|
|
6
|
+
* Enhanced switch panel control states and sizing for clearer status visibility and easier interaction.
|
|
7
|
+
* Simplified and clarified Time-Series documentation for faster onboarding and fewer setup mistakes.
|
|
8
|
+
* Made the V2 autopilot mode menu provider-agnostic for broader compatibility.
|
|
9
|
+
* Hid the Action Sidebar Fullscreen button when hosted in AppDock for a cleaner, context-aware UI and to prevent browsers from being stuck in fullscreen. Fixes #1062.
|
|
10
|
+
* Multiple performance improvements increasing responsiveness and providing a smoother experience on low powered devices.
|
|
11
|
+
* Reduced startup bundle size to deliver faster app startup.
|
|
12
|
+
## Fixes
|
|
13
|
+
* Restored TTL reset to "--" after data timeouts to keep stale-state feedback accurate. Fixes #1069.
|
|
14
|
+
* Corrected layering so the autopilot SVG menu now appears above widget overlays. Fixes #1071.
|
|
15
|
+
* Fixed the autopilot static standby button label for clearer control feedback. Fixes #1072.
|
|
16
|
+
* Corrected the autopilot key map. Fixes #1073.
|
|
17
|
+
* Fixed Help image 404 errors when KIP is served under a base href. Fixes #1056.
|
|
18
|
+
* Resolved a test suite issue. Fixes #1074.
|
|
19
|
+
* Fixed remote storage request handling. Fixes #1075.
|
|
20
|
+
* Corrected Windsteer simple mode's True Wind Angle offset and simplified the interface to better match familiar, classic wind gauge features. Fixes #1066, #1063.
|
|
21
|
+
* Added circular directional angle support in the Data Charts widget using the Advancedwind wind shift path. Fixes #1070.
|
|
1
22
|
# v4.8.0
|
|
2
23
|
## New Features
|
|
3
24
|
* Solar Charger Widget: Get instant clarity on your solar system with a compact, purpose-built Solar Charger Widget. Track individual panels or full arrays in real time, including State of Charge, remaining capacity, remaining time, voltage, current, power flow, and temperature. Device discovery is automatic, and Zones support keeps warnings and alarms state highly visible.
|
|
@@ -5,6 +26,7 @@
|
|
|
5
26
|
## Improvements
|
|
6
27
|
* Battery Monitor Widget visual cleanup for better readability and tighter consistency with the electrical widget family.
|
|
7
28
|
* Framework upgrades and core refactoring to improve long-term maintainability and runtime performance.
|
|
29
|
+
* New Display Testing option allowing widgets with invalid paths to be saved.
|
|
8
30
|
## Fixes
|
|
9
31
|
* Improved Battery Monitor text contrast when color state is Alert (yellow), making critical values easier to read. Fixes #1027
|
|
10
32
|
* Restored Countdown Timer visibility in Add Widgets.
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ KIP is designed for sailors and boaters who want:
|
|
|
18
18
|
|
|
19
19
|
With KIP, you get the **familiar feel of professional Multi-Function Displays** combined with the flexibility of Signal K. It’s simple, reliable, and highly usable — the ultimate ready-to-go, modern, touch-first, Multi-Function Display for [Signal K](https://signalk.org) vessels.
|
|
20
20
|
|
|
21
|
-

|
|
22
22
|
|
|
23
23
|
## Table of Content
|
|
24
24
|
- [Installations Showcase](#installations-showcase)
|
|
@@ -35,7 +35,7 @@ With KIP, you get the **familiar feel of professional Multi-Function Displays**
|
|
|
35
35
|
- [Connect, Share, and Support](#connect-share-and-support) & [Features, Ideas, Bugs](#features-ideas-bugs)
|
|
36
36
|
|
|
37
37
|
## Installations Showcase
|
|
38
|
-

|
|
39
39
|
In addition to the obvious navstation, wall mounted instrument panel and autopilot remote control usecases using PCs, tablets and phones, users have taken KIP into the elements using Raspberry Pi, Pi Zero, rugged tablets and all kinds of low cost AliExpress screens and industry leading, high quality, sunlight readable marine touch screens. KIP's native remote control feature opens up all kinds of possibilities.
|
|
40
40
|
|
|
41
41
|
## Read the Help Introduction How-To
|
|
@@ -50,7 +50,7 @@ The goal is to replicate and enhance the functionality of modern marine instrume
|
|
|
50
50
|
- **Cross-Device Compatibility**: Guarantee a consistent and responsive experience across phones, tablets, computers, and other devices.
|
|
51
51
|
- **Modern Browser Support**: Include support for the latest versions of Chromium and other modern web browsers to ensure optimal performance and compatibility.
|
|
52
52
|
|
|
53
|
-

|
|
54
54
|
|
|
55
55
|
## User Experience
|
|
56
56
|
|
|
@@ -67,10 +67,10 @@ The goal is to replicate and enhance the functionality of modern marine instrume
|
|
|
67
67
|
- Easily switch between multiple user and device configurations profiles for different roles, formfactors or use cases.
|
|
68
68
|
|
|
69
69
|
Sidenav for quick access to all important features.
|
|
70
|
-

|
|
71
71
|
|
|
72
72
|
Chartplotter Mode with dashboards
|
|
73
|
-

|
|
74
74
|
|
|
75
75
|
## Dashboards and Configuration
|
|
76
76
|
|
|
@@ -80,19 +80,19 @@ Meant to build purposeful dashboards with however many widgets you want, whereve
|
|
|
80
80
|
Add, resize, and position the widgets of your choosing. Need more? Add as many additional dashboards as you wish to keep your display purposeful. Simply swipe up and down to quickly cycle through dashboards or effortlessly jump between dashboards with a single tap in the action sidenav, always knowing exactly where you are thanks to clear highlighting of your current dashboard.
|
|
81
81
|
|
|
82
82
|
Widget lists are sorted by category.
|
|
83
|
-

|
|
84
84
|
|
|
85
85
|
Intuitive widget configuration.
|
|
86
|
-

|
|
87
87
|
|
|
88
88
|
See what Signal K has to offer that you can leverage with widgets. Select it and tweak the display options to suit your purpose.
|
|
89
|
-

|
|
90
90
|
|
|
91
91
|
Many units are supported. Choose your preferred app defaults, then tweak them widget-by-widget as necessary. KIP will automatically convert the units for you.
|
|
92
|
-

|
|
93
93
|
|
|
94
94
|
Organize your dashboards and access tools.
|
|
95
|
-

|
|
96
96
|
|
|
97
97
|
## Widget Library
|
|
98
98
|
All KIP widgets are visual presentation controls that are very versatile, with multiple advanced configuration options available to suit your needs:
|
|
@@ -122,16 +122,16 @@ Get the latest version of KIP to see what's new!
|
|
|
122
122
|
|
|
123
123
|
### Widget Samples
|
|
124
124
|
Gauges sample
|
|
125
|
-

|
|
126
126
|
|
|
127
127
|
Various other types of widgets
|
|
128
|
-

|
|
129
129
|
|
|
130
130
|
Freeboard-SK Chartplotter integration with Autopilot widget
|
|
131
|
-

|
|
132
132
|
|
|
133
133
|
Grafana integration with other widgets
|
|
134
|
-

|
|
135
135
|
|
|
136
136
|
## Historical Data
|
|
137
137
|
Experience effortless insight into your vessel’s past with KIP’s Widget Historical Charts—automatically track, store, and visualize key data, unlocking instant access charts showing up to the last full day of performance. Whether you’re sailing or docked, simply two-finger tap or right-click widgets to reveal a seamless history dialog—no setup, no clutter, just the trends you need. When combining data visualisation using Data Driven widgets, live-to-history transitions, KIP puts your boat’s story at your fingertips—so you can make smarter decisions, spot patterns, and sail with confidence.
|
|
@@ -139,9 +139,9 @@ Experience effortless insight into your vessel’s past with KIP’s Widget Hist
|
|
|
139
139
|
## Night Modes
|
|
140
140
|
Keep your night vision with automatic or manual day and night switching to a color preserving dim mode or an all Red theme. The images below look very dark, but at night... they are perfect!
|
|
141
141
|
|
|
142
|
-

|
|
143
143
|
|
|
144
|
-

|
|
145
145
|
|
|
146
146
|
## Chartplotter Mode
|
|
147
147
|
Keep a live Freeboard‑SK chart visible while switching dashboards for an MFD‑style workflow. The chart persists (no reload or flicker), you can choose its side, collapse it per‑dashboard for full data pages, and drag resize the split. Layout auto‑stacks in portrait / narrow screens. See the dedicated Chartplotter Mode help page for setup, performance tips, and troubleshooting.
|
|
@@ -181,7 +181,9 @@ Stay informed with notifications about the state of the data you are interested
|
|
|
181
181
|
For example, Signal K will notify KIP when a water depth or temperature sensor reaches certain levels. In addition to KIP's centralized notification menu, individual widgets offer tailored visual representations appropriate to their design objectives, providing an optimal user experience.
|
|
182
182
|
|
|
183
183
|
# How To Contribute
|
|
184
|
-
KIP is under the MIT license and is built with Node and Angular using various open-source assets. All free!
|
|
184
|
+
KIP is under the MIT license and is built with Node and Angular using various open-source assets. All free! The project want's to insure your time is well invested by favouring discussion before submitting bug fixes and new features.
|
|
185
|
+
|
|
186
|
+
Please ensure you submit an issue (bug/feature) before submitting a pull request.
|
|
185
187
|
|
|
186
188
|
## Project Scope
|
|
187
189
|
What KIP IS about:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxtommy/kip",
|
|
3
|
-
"version": "4.8.
|
|
3
|
+
"version": "4.8.1",
|
|
4
4
|
"description": "An advanced and versatile marine instrumentation package to display Signal K data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -65,48 +65,51 @@
|
|
|
65
65
|
},
|
|
66
66
|
"schematics": "tools/schematics/collection.json",
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@angular-devkit/build-angular": "^21.2.3",
|
|
69
68
|
"@angular-devkit/schematics-cli": "^20.1.6",
|
|
70
|
-
"@angular/animations": "
|
|
71
|
-
"@angular/build": "^
|
|
72
|
-
"@angular/cdk": "
|
|
73
|
-
"@angular/cli": "^
|
|
74
|
-
"@angular/common": "
|
|
75
|
-
"@angular/compiler": "
|
|
76
|
-
"@angular/compiler-cli": "
|
|
77
|
-
"@angular/core": "
|
|
78
|
-
"@angular/forms": "
|
|
79
|
-
"@angular/language-service": "
|
|
80
|
-
"@angular/material": "
|
|
81
|
-
"@angular/platform-browser": "
|
|
82
|
-
"@angular/platform-browser-dynamic": "
|
|
83
|
-
"@angular/router": "
|
|
69
|
+
"@angular/animations": "22.0.5",
|
|
70
|
+
"@angular/build": "^22.0.5",
|
|
71
|
+
"@angular/cdk": "22.0.3",
|
|
72
|
+
"@angular/cli": "^22.0.5",
|
|
73
|
+
"@angular/common": "22.0.5",
|
|
74
|
+
"@angular/compiler": "22.0.5",
|
|
75
|
+
"@angular/compiler-cli": "22.0.5",
|
|
76
|
+
"@angular/core": "22.0.5",
|
|
77
|
+
"@angular/forms": "22.0.5",
|
|
78
|
+
"@angular/language-service": "22.0.5",
|
|
79
|
+
"@angular/material": "22.0.3",
|
|
80
|
+
"@angular/platform-browser": "22.0.5",
|
|
81
|
+
"@angular/platform-browser-dynamic": "22.0.5",
|
|
82
|
+
"@angular/router": "22.0.5",
|
|
84
83
|
"@aziham/chartjs-plugin-streaming": "^3.5.1",
|
|
85
84
|
"@godind/ng-canvas-gauges": "^6.2.1",
|
|
86
85
|
"@types/canvas-gauges": "^2.1.8",
|
|
87
86
|
"@types/d3": "^7.4.3",
|
|
87
|
+
"@types/d3-selection": "^3.0.11",
|
|
88
|
+
"@types/d3-shape": "^3.1.8",
|
|
89
|
+
"@types/express": "^5.0.6",
|
|
88
90
|
"@types/js-quantities": "^1.6.6",
|
|
89
91
|
"@types/lodash-es": "^4.17.9",
|
|
90
92
|
"@types/node": "^24.1.0",
|
|
91
93
|
"@vitest/coverage-v8": "^4.1.0",
|
|
92
94
|
"@zakj/no-sleep": "^0.13.5",
|
|
93
|
-
"angular-eslint": "
|
|
95
|
+
"angular-eslint": "^22.0.0",
|
|
94
96
|
"chart.js": "^4.5.1",
|
|
95
97
|
"chartjs-adapter-date-fns": "^3.0.0",
|
|
96
98
|
"chartjs-plugin-annotation": "^3.0.1",
|
|
97
99
|
"clipboard": "^2.0.11",
|
|
98
|
-
"codelyzer": "^6.0.0",
|
|
99
100
|
"compare-versions": "^6.1.1",
|
|
100
101
|
"core-js": "^3.13.1",
|
|
101
102
|
"d3": "^7.9.0",
|
|
103
|
+
"d3-selection": "^3.0.0",
|
|
104
|
+
"d3-shape": "^3.2.0",
|
|
102
105
|
"date-fns": "^2.30.0",
|
|
103
106
|
"eslint": "^9.29.0",
|
|
104
107
|
"gridstack": "^12.3.3",
|
|
105
108
|
"js-quantities": "^1.8.0",
|
|
106
109
|
"jsdom": "^26.1.0",
|
|
107
110
|
"lodash-es": "^4.17.23",
|
|
108
|
-
"ng-packagr": "^
|
|
109
|
-
"ngx-markdown": "^
|
|
111
|
+
"ng-packagr": "^22.0.1",
|
|
112
|
+
"ngx-markdown": "^22.0.0",
|
|
110
113
|
"prismjs": "^1.30.0",
|
|
111
114
|
"pwa-asset-generator": "^8.1.1",
|
|
112
115
|
"rxjs": "^7.8.2",
|
|
@@ -116,7 +119,7 @@
|
|
|
116
119
|
"steelseries": "^2.0.9",
|
|
117
120
|
"ts-node": "^10.9.2",
|
|
118
121
|
"tslib": "^2.6.2",
|
|
119
|
-
"typescript": "^
|
|
122
|
+
"typescript": "^6.0.3",
|
|
120
123
|
"vitest": "^4.1.0"
|
|
121
124
|
},
|
|
122
125
|
"dependencies": {
|
|
@@ -499,6 +499,9 @@ class HistorySeriesService {
|
|
|
499
499
|
reconcileTs: input.reconcileTs
|
|
500
500
|
};
|
|
501
501
|
if (expansionMode) {
|
|
502
|
+
if (!normalizedTemplateSelector) {
|
|
503
|
+
throw new Error(`Template series mode \"${expansionMode}\" must resolve a non-null ownerWidgetSelector`);
|
|
504
|
+
}
|
|
502
505
|
const templateSeries = {
|
|
503
506
|
...normalizedBase,
|
|
504
507
|
ownerWidgetSelector: normalizedTemplateSelector,
|
package/plugin/index.js
CHANGED
|
@@ -65,7 +65,7 @@ const start = (server) => {
|
|
|
65
65
|
const CONFIG_SCHEMA = {
|
|
66
66
|
type: 'object',
|
|
67
67
|
title: 'Remote Control and Data Series',
|
|
68
|
-
description: 'NOTE: All plugin settings are also managed from within KIP\'s Display Options panel. Changes made here will be overridden when KIP applies settings from the Display Options.',
|
|
68
|
+
description: 'NOTE: All plugin settings are also managed from within KIP\'s Display Options panel. Changes made here will be overridden when KIP applies settings from the Display Options. See the KIP Time-Series help documentation for details.',
|
|
69
69
|
properties: {
|
|
70
70
|
nodeSqliteAvailable: {
|
|
71
71
|
type: 'boolean',
|
|
@@ -709,7 +709,8 @@ class SqliteHistoryStorageService {
|
|
|
709
709
|
});
|
|
710
710
|
}
|
|
711
711
|
catch (err) {
|
|
712
|
-
|
|
712
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
713
|
+
this.logger.error(`[SERIES STORAGE] Prune failed: ${message}`);
|
|
713
714
|
}
|
|
714
715
|
}, SqliteHistoryStorageService.FOUR_HOURS_INTERVAL);
|
|
715
716
|
this.pruneJob.unref?.();
|
|
@@ -739,7 +740,8 @@ class SqliteHistoryStorageService {
|
|
|
739
740
|
});
|
|
740
741
|
}
|
|
741
742
|
catch (err) {
|
|
742
|
-
|
|
743
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
744
|
+
this.logger.error(`[SERIES STORAGE] Stale series cleanup failed: ${message}`);
|
|
743
745
|
}
|
|
744
746
|
}, SqliteHistoryStorageService.EIGHT_HOURS_INTERVAL);
|
|
745
747
|
this.staleSeriesCleanupJob.unref?.();
|