@mxtommy/kip 4.0.7 → 4.0.8
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 +24 -2
- package/package.json +7 -7
- package/plugin/index.js +64 -13
- package/plugin/openApi.json +104 -10
- package/public/3rdpartylicenses.txt +40 -26
- package/public/assets/help-docs/chartplotter.md +7 -5
- package/public/assets/help-docs/img/splitdeviderhandle.png +0 -0
- package/public/{chunk-OQULS6SV.js → chunk-25K5UKIG.js} +1 -1
- package/public/chunk-2RRFLW2A.js +6 -0
- package/public/{chunk-QZJKBIMY.js → chunk-3IHN3F2F.js} +1 -1
- package/public/{chunk-35577QTX.js → chunk-5J45GHJL.js} +8 -8
- package/public/chunk-7WYM6C2I.js +2 -0
- package/public/chunk-A4XOH2JB.js +2 -0
- package/public/{chunk-BMDGKBYM.js → chunk-D3HZY3RH.js} +26 -26
- package/public/{chunk-HIADZ4BV.js → chunk-EUOABORK.js} +1 -1
- package/public/chunk-EZBRSRC3.js +5 -0
- package/public/chunk-H2DHJL6G.js +1 -0
- package/public/chunk-K3PZVMR4.js +1 -0
- package/public/chunk-KOSE6NNC.js +2 -0
- package/public/chunk-N6VRQ7HL.js +1 -0
- package/public/chunk-NWLJFLDZ.js +1 -0
- package/public/chunk-OEN7LNCQ.js +1 -0
- package/public/{chunk-52M2PJJL.js → chunk-PBI4FJBK.js} +1 -1
- package/public/{chunk-QVCMARCU.js → chunk-Q75Q4FPK.js} +2 -2
- package/public/chunk-QX5JJUOQ.js +1 -0
- package/public/chunk-R6WZJ2K2.js +52 -0
- package/public/chunk-RLA7XOJJ.js +15 -0
- package/public/{chunk-RYHOAWDD.js → chunk-UO7XNPX3.js} +1 -1
- package/public/chunk-WI4OAWC5.js +3 -0
- package/public/chunk-X4QUO4GZ.js +1 -0
- package/public/chunk-XMBRLDKM.js +3 -0
- package/public/{chunk-SZ2GUIT5.js → chunk-ZE7TMIMY.js} +1 -1
- package/public/index.html +1 -1
- package/public/main-XLFXH5R4.js +5 -0
- package/public/{polyfills-HMJGV7SQ.js → polyfills-C5VXBGWL.js} +1 -1
- package/rm-npmjs-beta.sh +50 -0
- package/public/chunk-2DBQEP6W.js +0 -6
- package/public/chunk-4NJ3ZL5U.js +0 -1
- package/public/chunk-AB255PKD.js +0 -2
- package/public/chunk-BISZS3TE.js +0 -3
- package/public/chunk-D2CYLQZF.js +0 -1
- package/public/chunk-DADLXEYG.js +0 -1
- package/public/chunk-F5X5MWHG.js +0 -0
- package/public/chunk-IJ22WXFB.js +0 -1
- package/public/chunk-JCVEDDSQ.js +0 -2
- package/public/chunk-KZW5Z46K.js +0 -1
- package/public/chunk-NDOR4O4J.js +0 -1
- package/public/chunk-OB3QLUH6.js +0 -15
- package/public/chunk-PKKBBIJK.js +0 -3
- package/public/chunk-QLTN6G6E.js +0 -5
- package/public/chunk-ROD2YZ6L.js +0 -52
- package/public/chunk-TIWUK3AU.js +0 -1
- package/public/chunk-XDPHEQEO.js +0 -2
- package/public/main-NJAW6UFC.js +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
|
+
# v4.0.8
|
|
2
|
+
## Improvements
|
|
3
|
+
* Enhanced the Remote Control experience:
|
|
4
|
+
* Automatically selects the first available remote instance.
|
|
5
|
+
* Supports dashboard tile selection using the Enter and Spacebar keys.
|
|
6
|
+
* Better keyboard support with Enter/Spacebar actions on the:
|
|
7
|
+
* Dashboard selection in the sidebar navigation.
|
|
8
|
+
* Dashboard tiles configuration in the Settings page.
|
|
9
|
+
* Improved chart smoothness by reintroducing chart streaming in:
|
|
10
|
+
* Data Chart widget
|
|
11
|
+
* Numeric widget’s background chart.
|
|
12
|
+
* Added one-click path copy to clipboard in the Data Inspector, facilitating path pasting in widget configuration.
|
|
13
|
+
* Simplified widget development.
|
|
14
|
+
## Fixes
|
|
15
|
+
* Occasional dashboard jumping when using the Remote Control feature. Fixes #899
|
|
16
|
+
* Issue where switching remote-controlled dashboards while the target was in edit mode could overwrite the dashboard. Fixes #899
|
|
17
|
+
* Updated Windsteer widget “Next Waypoint” indicator path to use the course provider. Fixes #886
|
|
18
|
+
* Fixed Radial, Linear, and Compass widget rendering issues when smaller than 8px.
|
|
19
|
+
* Configurations page layout not fully expanding on large displays. Fixes #874
|
|
20
|
+
* Widgets overlapping others on creation when space was available but smaller than the widget’s minimum size. Fixes #843
|
|
21
|
+
* Fixed form submission required field validation on the Options page Display tab.
|
|
22
|
+
* Added “No configuration is required for this plugin.” to the KIP plugin configuration section to better set expectations.
|
|
1
23
|
# v 4.0.7
|
|
2
24
|
## Improvements
|
|
3
25
|
* Return to last active dashboard when leaving Options, Settings and Help
|
|
4
26
|
* Reduce minichart dataset storage churn
|
|
5
27
|
## Fixes
|
|
6
|
-
*
|
|
7
|
-
* More Switch Panel toggle control not responding to touch on Android and RPi Chromium
|
|
28
|
+
* Gauge zones not drawn in initial app load
|
|
29
|
+
* More Switch Panel toggle control not responding to touch on Android Chrome and RPi Chromium
|
|
8
30
|
* Widget Racesteer icon rendering is missing colors
|
|
9
31
|
# v 4.0.6
|
|
10
32
|
## Fixes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxtommy/kip",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.8",
|
|
4
4
|
"description": "An advanced and versatile marine instrumentation package to display Signal K data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"schematics": "tools/schematics/collection.json",
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@angular-devkit/schematics-cli": "^20.1.6",
|
|
59
58
|
"@angular-devkit/build-angular": "^20.1.6",
|
|
59
|
+
"@angular-devkit/schematics-cli": "^20.1.6",
|
|
60
60
|
"@angular/animations": "20.1.7",
|
|
61
61
|
"@angular/build": "^20.1.6",
|
|
62
62
|
"@angular/cdk": "20.1.6",
|
|
@@ -72,7 +72,6 @@
|
|
|
72
72
|
"@angular/platform-browser-dynamic": "20.1.7",
|
|
73
73
|
"@angular/router": "20.1.7",
|
|
74
74
|
"@godind/ng-canvas-gauges": "^6.2.1",
|
|
75
|
-
"@robloche/chartjs-plugin-streaming": "^3.1.0",
|
|
76
75
|
"@types/canvas-gauges": "^2.1.8",
|
|
77
76
|
"@types/howler": "^2.2.10",
|
|
78
77
|
"@types/jasmine": "~3.6.0",
|
|
@@ -82,9 +81,11 @@
|
|
|
82
81
|
"@types/node": "^24.1.0",
|
|
83
82
|
"@zakj/no-sleep": "^0.13.5",
|
|
84
83
|
"angular-eslint": "20.1.1",
|
|
85
|
-
"chart.js": "^4.
|
|
84
|
+
"chart.js": "^4.5.1",
|
|
85
|
+
"@aziham/chartjs-plugin-streaming": "^3.5.1",
|
|
86
86
|
"chartjs-adapter-date-fns": "^3.0.0",
|
|
87
87
|
"chartjs-plugin-annotation": "^3.0.1",
|
|
88
|
+
"clipboard": "^2.0.11",
|
|
88
89
|
"codelyzer": "^6.0.0",
|
|
89
90
|
"compare-versions": "^6.1.1",
|
|
90
91
|
"core-js": "^3.13.1",
|
|
@@ -96,18 +97,17 @@
|
|
|
96
97
|
"jasmine-spec-reporter": "~5.0.0",
|
|
97
98
|
"js-quantities": "^1.8.0",
|
|
98
99
|
"karma": "^6.4.4",
|
|
99
|
-
"karma-spec-reporter": "^0.0.36",
|
|
100
100
|
"karma-chrome-launcher": "~3.1.0",
|
|
101
101
|
"karma-cli": "~2.0.0",
|
|
102
102
|
"karma-coverage": "^2.2.0",
|
|
103
103
|
"karma-jasmine": "~4.0.0",
|
|
104
104
|
"karma-jasmine-html-reporter": "^1.6.0",
|
|
105
|
+
"karma-spec-reporter": "^0.0.36",
|
|
105
106
|
"lodash-es": "^4.17.21",
|
|
106
107
|
"ng-packagr": "^20.0.1",
|
|
107
108
|
"ngx-markdown": "^20.0.0",
|
|
108
|
-
"prismjs": "^1.30.0",
|
|
109
|
-
"clipboard": "^2.0.11",
|
|
110
109
|
"ngx-resize-observer": "^3.1.0",
|
|
110
|
+
"prismjs": "^1.30.0",
|
|
111
111
|
"protractor": "~7.0.0",
|
|
112
112
|
"pwa-asset-generator": "^8.1.1",
|
|
113
113
|
"rxjs": "^7.8.2",
|
package/plugin/index.js
CHANGED
|
@@ -39,7 +39,17 @@ const start = (server) => {
|
|
|
39
39
|
const API_PATHS = {
|
|
40
40
|
DISPLAYS: `/displays`,
|
|
41
41
|
INSTANCE: `/displays/:displayId`,
|
|
42
|
-
ACTIVE_SCREEN: `/displays/:displayId/
|
|
42
|
+
ACTIVE_SCREEN: `/displays/:displayId/screenIndex`,
|
|
43
|
+
CHANGE_SCREEN: `/displays/:displayId/activeScreen`
|
|
44
|
+
};
|
|
45
|
+
const CONFIG_SCHEMA = {
|
|
46
|
+
properties: {
|
|
47
|
+
notifications: {
|
|
48
|
+
type: 'object',
|
|
49
|
+
title: 'Remote Control',
|
|
50
|
+
description: 'This plugin requires no configuration.'
|
|
51
|
+
}
|
|
52
|
+
}
|
|
43
53
|
};
|
|
44
54
|
// Helpers
|
|
45
55
|
function getDisplaySelfPath(displayId, suffix) {
|
|
@@ -80,14 +90,9 @@ const start = (server) => {
|
|
|
80
90
|
const msg = 'Stopped.';
|
|
81
91
|
server.setPluginStatus(msg);
|
|
82
92
|
},
|
|
83
|
-
schema: () =>
|
|
84
|
-
return {
|
|
85
|
-
type: "object",
|
|
86
|
-
properties: {}
|
|
87
|
-
};
|
|
88
|
-
},
|
|
93
|
+
schema: () => CONFIG_SCHEMA,
|
|
89
94
|
registerWithRouter(router) {
|
|
90
|
-
server.debug(`Registering plugin routes: ${API_PATHS.DISPLAYS}, ${API_PATHS.INSTANCE}, ${API_PATHS.ACTIVE_SCREEN}`);
|
|
95
|
+
server.debug(`Registering plugin routes: ${API_PATHS.DISPLAYS}, ${API_PATHS.INSTANCE}, ${API_PATHS.ACTIVE_SCREEN}, ${API_PATHS.CHANGE_SCREEN}`);
|
|
91
96
|
// Validate/normalize :displayId where present
|
|
92
97
|
router.param('displayId', (req, res, next, displayId) => {
|
|
93
98
|
if (displayId == null)
|
|
@@ -179,8 +184,34 @@ const start = (server) => {
|
|
|
179
184
|
return sendFail(res, 400, error.message);
|
|
180
185
|
}
|
|
181
186
|
});
|
|
187
|
+
router.put(`${API_PATHS.CHANGE_SCREEN}`, async (req, res) => {
|
|
188
|
+
server.debug(`** PUT ${API_PATHS.CHANGE_SCREEN}. Params: ${JSON.stringify(req.params)} Body: ${JSON.stringify(req.body)}`);
|
|
189
|
+
try {
|
|
190
|
+
const dottedPath = pathToDotNotation(req.path);
|
|
191
|
+
server.debug(`Updating SK path ${dottedPath} with body.screenIdx`);
|
|
192
|
+
server.handleMessage(plugin.id, {
|
|
193
|
+
updates: [
|
|
194
|
+
{
|
|
195
|
+
values: [
|
|
196
|
+
{
|
|
197
|
+
path: dottedPath,
|
|
198
|
+
value: req.body.screenIdx !== undefined ? req.body.screenIdx : null
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
}, server_api_1.SKVersion.v1);
|
|
204
|
+
return res.status(200).json({ state: 'SUCCESS', statusCode: 200 });
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
const msg = `HandleMessage failed with errors!`;
|
|
208
|
+
server.setPluginError(msg);
|
|
209
|
+
server.error(`Error in HandleMessage: ${error}`);
|
|
210
|
+
return sendFail(res, 400, error.message);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
182
213
|
router.get(API_PATHS.DISPLAYS, (req, res) => {
|
|
183
|
-
server.debug(
|
|
214
|
+
server.debug(`*** GET DISPLAY ${API_PATHS.DISPLAYS}. Params: ${JSON.stringify(req.params)}`);
|
|
184
215
|
try {
|
|
185
216
|
const displays = getAvailableDisplays();
|
|
186
217
|
const items = displays && typeof displays === 'object'
|
|
@@ -202,7 +233,7 @@ const start = (server) => {
|
|
|
202
233
|
}
|
|
203
234
|
});
|
|
204
235
|
router.get(`${API_PATHS.INSTANCE}`, (req, res) => {
|
|
205
|
-
server.debug(
|
|
236
|
+
server.debug(`*** GET INSTANCE ${API_PATHS.INSTANCE}. Params: ${JSON.stringify(req.params)}`);
|
|
206
237
|
try {
|
|
207
238
|
const displayId = req.displayId;
|
|
208
239
|
if (!displayId) {
|
|
@@ -222,17 +253,17 @@ const start = (server) => {
|
|
|
222
253
|
}
|
|
223
254
|
});
|
|
224
255
|
router.get(`${API_PATHS.ACTIVE_SCREEN}`, (req, res) => {
|
|
225
|
-
server.debug(
|
|
256
|
+
server.debug(`*** GET ACTIVE_SCREEN ${API_PATHS.ACTIVE_SCREEN}. Params: ${JSON.stringify(req.params)}`);
|
|
226
257
|
try {
|
|
227
258
|
const displayId = req.displayId;
|
|
228
259
|
if (!displayId) {
|
|
229
260
|
return sendFail(res, 400, 'Missing displayId parameter');
|
|
230
261
|
}
|
|
231
|
-
const node = getDisplaySelfPath(displayId, '
|
|
262
|
+
const node = getDisplaySelfPath(displayId, 'screenIndex');
|
|
232
263
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
233
264
|
const idx = node?.value ?? null;
|
|
234
265
|
if (idx === undefined) {
|
|
235
|
-
return sendFail(res, 404, `Active screen for display ${displayId} not found`);
|
|
266
|
+
return sendFail(res, 404, `Active screen for display Id ${displayId} not found in path`);
|
|
236
267
|
}
|
|
237
268
|
return sendOk(res, idx);
|
|
238
269
|
}
|
|
@@ -241,6 +272,26 @@ const start = (server) => {
|
|
|
241
272
|
return sendFail(res, 400, error.message);
|
|
242
273
|
}
|
|
243
274
|
});
|
|
275
|
+
router.get(`${API_PATHS.CHANGE_SCREEN}`, (req, res) => {
|
|
276
|
+
server.debug(`*** GET CHANGE_SCREEN ${API_PATHS.CHANGE_SCREEN}. Params: ${JSON.stringify(req.params)}`);
|
|
277
|
+
try {
|
|
278
|
+
const changeId = req.changeId;
|
|
279
|
+
if (!changeId) {
|
|
280
|
+
return sendFail(res, 400, 'Missing changeId parameter');
|
|
281
|
+
}
|
|
282
|
+
const node = getDisplaySelfPath(changeId, 'activeScreen');
|
|
283
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
284
|
+
const idx = node?.value ?? null;
|
|
285
|
+
if (idx === undefined) {
|
|
286
|
+
return sendFail(res, 404, `Change display screen Id ${changeId} not found in path`);
|
|
287
|
+
}
|
|
288
|
+
return sendOk(res, idx);
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
server.error(`Error reading activeScreen for ${req.params?.changeId}: ${String(error.message || error)}`);
|
|
292
|
+
return sendFail(res, 400, error.message);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
244
295
|
// List all registered routes for debugging
|
|
245
296
|
if (router.stack) {
|
|
246
297
|
router.stack.forEach((layer) => {
|
package/plugin/openApi.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openapi": "3.0.0",
|
|
3
3
|
"info": {
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"title": "KIP Remote Displays API",
|
|
6
|
-
"description": "API endpoints to list KIP displays and control
|
|
6
|
+
"description": "API endpoints to list KIP displays and control dashboard for a given KIP instance via the Signal K self.displays tree.\n\nUsage:\n- List displays:\n curl -s http://localhost:3000/plugins/kip/displays\n- Read a display's screens:\n curl -s http://localhost:3000/plugins/kip/displays/{displayId}\n- Set a display entry:\n curl -s -X PUT -H 'Content-Type: application/json' -d '{\"displayName\":\"Mast\"}' http://localhost:3000/plugins/kip/displays/{displayId}\n- Get current screen index:\n curl -s http://localhost:3000/plugins/kip/displays/{displayId}/screenIndex\n- Set current screen index:\n curl -s -X PUT -H 'Content-Type: application/json' -d '{\"screenIdx\":1}' http://localhost:3000/plugins/kip/displays/{displayId}/screenIndex\n- Get requested screen change index:\n curl -s http://localhost:3000/plugins/kip/displays/{displayId}/activeScreen\n- Request a screen change:\n curl -s -X PUT -H 'Content-Type: application/json' -d '{\"screenIdx\":1}' http://localhost:3000/plugins/kip/displays/{displayId}/activeScreen",
|
|
7
7
|
"termsOfService": "http://signalk.org/terms/",
|
|
8
8
|
"license": {
|
|
9
9
|
"name": "Apache 2.0",
|
|
@@ -62,6 +62,19 @@
|
|
|
62
62
|
"icon"
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
|
+
"ScreenListOrNull": {
|
|
66
|
+
"oneOf": [
|
|
67
|
+
{
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"$ref": "#/components/schemas/ScreenItem"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "null"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
65
78
|
"SuccessResponse": {
|
|
66
79
|
"type": "object",
|
|
67
80
|
"properties": {
|
|
@@ -206,14 +219,11 @@
|
|
|
206
219
|
"summary": "List screens for a display (self.displays.{displayId}.value.screens)",
|
|
207
220
|
"responses": {
|
|
208
221
|
"200": {
|
|
209
|
-
"description": "Array of screen entries",
|
|
222
|
+
"description": "Array of screen entries (or null)",
|
|
210
223
|
"content": {
|
|
211
224
|
"application/json": {
|
|
212
225
|
"schema": {
|
|
213
|
-
"
|
|
214
|
-
"items": {
|
|
215
|
-
"$ref": "#/components/schemas/ScreenItem"
|
|
216
|
-
}
|
|
226
|
+
"$ref": "#/components/schemas/ScreenListOrNull"
|
|
217
227
|
}
|
|
218
228
|
}
|
|
219
229
|
}
|
|
@@ -279,6 +289,90 @@
|
|
|
279
289
|
}
|
|
280
290
|
}
|
|
281
291
|
},
|
|
292
|
+
"/plugins/kip/displays/{displayId}/screenIndex": {
|
|
293
|
+
"parameters": [
|
|
294
|
+
{
|
|
295
|
+
"$ref": "#/components/parameters/DisplayIdParam"
|
|
296
|
+
}
|
|
297
|
+
],
|
|
298
|
+
"get": {
|
|
299
|
+
"tags": [
|
|
300
|
+
"Displays"
|
|
301
|
+
],
|
|
302
|
+
"summary": "Get current screen index for display (self.displays.{displayId}.screenIndex)",
|
|
303
|
+
"responses": {
|
|
304
|
+
"200": {
|
|
305
|
+
"description": "Current screen index or null",
|
|
306
|
+
"content": {
|
|
307
|
+
"application/json": {
|
|
308
|
+
"schema": {
|
|
309
|
+
"type": "integer",
|
|
310
|
+
"nullable": true
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
"404": {
|
|
316
|
+
"description": "Not found",
|
|
317
|
+
"content": {
|
|
318
|
+
"application/json": {
|
|
319
|
+
"schema": {
|
|
320
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
"400": {
|
|
326
|
+
"description": "Bad request",
|
|
327
|
+
"content": {
|
|
328
|
+
"application/json": {
|
|
329
|
+
"schema": {
|
|
330
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"put": {
|
|
338
|
+
"tags": [
|
|
339
|
+
"Displays"
|
|
340
|
+
],
|
|
341
|
+
"summary": "Set current screen index for display (self.displays.{displayId}.screenIndex)",
|
|
342
|
+
"requestBody": {
|
|
343
|
+
"required": false,
|
|
344
|
+
"content": {
|
|
345
|
+
"application/json": {
|
|
346
|
+
"schema": {
|
|
347
|
+
"$ref": "#/components/schemas/ActiveScreenSetRequest"
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
"responses": {
|
|
353
|
+
"200": {
|
|
354
|
+
"description": "Updated",
|
|
355
|
+
"content": {
|
|
356
|
+
"application/json": {
|
|
357
|
+
"schema": {
|
|
358
|
+
"$ref": "#/components/schemas/SuccessResponse"
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
"400": {
|
|
364
|
+
"description": "Bad request",
|
|
365
|
+
"content": {
|
|
366
|
+
"application/json": {
|
|
367
|
+
"schema": {
|
|
368
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
},
|
|
282
376
|
"/plugins/kip/displays/{displayId}/activeScreen": {
|
|
283
377
|
"parameters": [
|
|
284
378
|
{
|
|
@@ -289,10 +383,10 @@
|
|
|
289
383
|
"tags": [
|
|
290
384
|
"Displays"
|
|
291
385
|
],
|
|
292
|
-
"summary": "Get
|
|
386
|
+
"summary": "Get requested screen change index (self.displays.{displayId}.activeScreen)",
|
|
293
387
|
"responses": {
|
|
294
388
|
"200": {
|
|
295
|
-
"description": "
|
|
389
|
+
"description": "Requested screen index or null",
|
|
296
390
|
"content": {
|
|
297
391
|
"application/json": {
|
|
298
392
|
"schema": {
|
|
@@ -328,7 +422,7 @@
|
|
|
328
422
|
"tags": [
|
|
329
423
|
"Displays"
|
|
330
424
|
],
|
|
331
|
-
"summary": "
|
|
425
|
+
"summary": "Request a screen change (sets self.displays.{displayId}.activeScreen)",
|
|
332
426
|
"requestBody": {
|
|
333
427
|
"required": false,
|
|
334
428
|
"content": {
|
|
@@ -179,6 +179,20 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
179
179
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
180
180
|
SOFTWARE.
|
|
181
181
|
|
|
182
|
+
--------------------------------------------------------------------------------
|
|
183
|
+
Package: @aziham/chartjs-plugin-streaming
|
|
184
|
+
License: "MIT"
|
|
185
|
+
|
|
186
|
+
The MIT License (MIT)
|
|
187
|
+
|
|
188
|
+
Copyright (c) 2017-2021 Akihiko Kusanagi
|
|
189
|
+
|
|
190
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
191
|
+
|
|
192
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
193
|
+
|
|
194
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
195
|
+
|
|
182
196
|
--------------------------------------------------------------------------------
|
|
183
197
|
Package: ngx-resize-observer
|
|
184
198
|
License: "MIT"
|
|
@@ -478,6 +492,32 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
478
492
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
479
493
|
SOFTWARE.
|
|
480
494
|
|
|
495
|
+
--------------------------------------------------------------------------------
|
|
496
|
+
Package: @angular/router
|
|
497
|
+
License: "MIT"
|
|
498
|
+
|
|
499
|
+
The MIT License
|
|
500
|
+
|
|
501
|
+
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
|
502
|
+
|
|
503
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
504
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
505
|
+
in the Software without restriction, including without limitation the rights
|
|
506
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
507
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
508
|
+
furnished to do so, subject to the following conditions:
|
|
509
|
+
|
|
510
|
+
The above copyright notice and this permission notice shall be included in
|
|
511
|
+
all copies or substantial portions of the Software.
|
|
512
|
+
|
|
513
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
514
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
515
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
516
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
517
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
518
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
519
|
+
THE SOFTWARE.
|
|
520
|
+
|
|
481
521
|
--------------------------------------------------------------------------------
|
|
482
522
|
Package: rxjs
|
|
483
523
|
License: "Apache-2.0"
|
|
@@ -857,32 +897,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
857
897
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
858
898
|
THE SOFTWARE.
|
|
859
899
|
|
|
860
|
-
--------------------------------------------------------------------------------
|
|
861
|
-
Package: @angular/router
|
|
862
|
-
License: "MIT"
|
|
863
|
-
|
|
864
|
-
The MIT License
|
|
865
|
-
|
|
866
|
-
Copyright (c) 2010-2025 Google LLC. https://angular.dev/license
|
|
867
|
-
|
|
868
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
869
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
870
|
-
in the Software without restriction, including without limitation the rights
|
|
871
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
872
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
873
|
-
furnished to do so, subject to the following conditions:
|
|
874
|
-
|
|
875
|
-
The above copyright notice and this permission notice shall be included in
|
|
876
|
-
all copies or substantial portions of the Software.
|
|
877
|
-
|
|
878
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
879
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
880
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
881
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
882
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
883
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
884
|
-
THE SOFTWARE.
|
|
885
|
-
|
|
886
900
|
--------------------------------------------------------------------------------
|
|
887
901
|
Package: core-js
|
|
888
902
|
License: "MIT"
|
|
@@ -44,6 +44,8 @@ The transition is automatic; no manual toggle is required. The per‑dashboard c
|
|
|
44
44
|
2. Drag the split divider and release.
|
|
45
45
|
3. Press **Save** (check icon) to persist globally, or **Cancel** (X) to revert to the previous ratio.
|
|
46
46
|
|
|
47
|
+
<img src="../../assets/help-docs/img/splitdeviderhandle.png" alt="Resize the split" title="Split handle" width="100%">
|
|
48
|
+
|
|
47
49
|
Notes:
|
|
48
50
|
- Width changes are only committed on Save (prevents accidental layout shifts).
|
|
49
51
|
- Cancel always restores the original ratio before the edit session began.
|
|
@@ -69,17 +71,17 @@ Change side via Settings → Display → “Freeboard‑SK panel side”. This u
|
|
|
69
71
|
## Chartplotter Mode vs Freeboard‑SK Widget
|
|
70
72
|
| Aspect | Chartplotter Mode | Freeboard‑SK Widget |
|
|
71
73
|
|--------|------------------|---------------------|
|
|
72
|
-
| Persistence across dashboard switches | Yes (never reloads) |
|
|
73
|
-
|
|
|
74
|
-
| Per‑dashboard full
|
|
75
|
-
| Remote dashboard switching continuity | Yes | Yes |
|
|
74
|
+
| Persistence across dashboard switches | Yes (never reloads) | No. (created and destroyed on entering and leaving dashboards containing the widget) |
|
|
75
|
+
| Size and position workflow | Drag split + Save/Cancel | Standard widget positionning and sizing |
|
|
76
|
+
| Per‑dashboard full screen data toggle | Via individal dashboard collapse setting | N/A |
|
|
77
|
+
| Remote dashboard chartplotter switching continuity | Yes | Yes |
|
|
76
78
|
| Memory footprint | Higher baseline (Freeboard-SK always resident) | Lower when dashboard lack the widget |
|
|
77
79
|
| Best for | Continuous nav + multi‑dashboard workflow (MFD) | Occasional chart reference |
|
|
78
80
|
|
|
79
81
|
---
|
|
80
82
|
|
|
81
83
|
## Remote Control Integration
|
|
82
|
-
When another KIP instance changes your active dashboard (Remote Control feature), the chartplotter mode and collapsed dashboard
|
|
84
|
+
When another KIP instance changes your active dashboard (Remote Control feature), the chartplotter mode and collapsed dashboard settings are respected. No special configuration is required.
|
|
83
85
|
|
|
84
86
|
---
|
|
85
87
|
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{$d as o,cc as v,hb as n,ib as s,je as a,oa as d,xb as l}from"./chunk-RLA7XOJJ.js";var u=(()=>{class t{get vertical(){return this._vertical}set vertical(i){this._vertical=a(i)}_vertical=!1;get inset(){return this._inset}set inset(i){this._inset=a(i)}_inset=!1;static \u0275fac=function(e){return new(e||t)};static \u0275cmp=n({type:t,selectors:[["mat-divider"]],hostAttrs:["role","separator",1,"mat-divider"],hostVars:7,hostBindings:function(e,r){e&2&&(l("aria-orientation",r.vertical?"vertical":"horizontal"),v("mat-divider-vertical",r.vertical)("mat-divider-horizontal",!r.vertical)("mat-divider-inset",r.inset))},inputs:{vertical:"vertical",inset:"inset"},decls:0,vars:0,template:function(e,r){},styles:[`.mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}
|
|
2
2
|
`],encapsulation:2,changeDetection:0})}return t})(),f=(()=>{class t{static \u0275fac=function(e){return new(e||t)};static \u0275mod=s({type:t});static \u0275inj=d({imports:[o,o]})}return t})();export{u as a,f as b};
|