@mxtommy/kip 4.5.0-beta.1 → 4.5.0
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/.github/copilot-instructions.md +19 -6
- package/.github/instructions/project.instructions.md +42 -6
- package/CHANGELOG.md +13 -0
- package/README.md +11 -7
- package/package.json +8 -5
- package/plugin/duckdb-parquet-storage.service.js +1206 -0
- package/plugin/history-series.service.js +439 -0
- package/plugin/index.js +670 -15
- package/plugin/openApi.json +253 -3
- package/plugin/plugin-auth.service.js +75 -0
- package/plugin-config-data/kip/historicalData/kip-history.duckdb +0 -0
- package/plugin-config-data/kip/historicalData/parquet/chart-1/1772344583976-1772344583976.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584154-1772344584154.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584191-1772344584191.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584268-1772344584268.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-2/1771502400000-1771502400000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1772344584268-1772344584268.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-5/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-5/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-6/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584191-1772344584191.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584268-1772344584268.parquet +0 -0
- package/public/assets/help-docs/chartplotter.md +5 -18
- package/public/assets/help-docs/community.md +0 -3
- package/public/assets/help-docs/configuration.md +1 -1
- package/public/assets/help-docs/contact-us.md +0 -4
- package/public/assets/help-docs/dashboards.md +20 -18
- package/public/assets/help-docs/datainspector.md +7 -5
- package/public/assets/help-docs/history-api.md +116 -0
- package/public/assets/help-docs/menu.json +18 -6
- package/public/assets/help-docs/nodered-control-flows.md +125 -0
- package/public/assets/help-docs/putcontrols.md +101 -60
- package/public/assets/help-docs/welcome.md +6 -7
- package/public/assets/help-docs/widget-historical-series.md +66 -0
- package/public/assets/help-docs/zones.md +5 -10
- package/public/{chunk-KFFAA7DL.js → chunk-2ICAVOT2.js} +8 -8
- package/public/chunk-6XFWUUDD.js +3 -0
- package/public/chunk-A6DQJFP4.js +16 -0
- package/public/chunk-B75MT7ND.js +1 -0
- package/public/{chunk-T6TFVZVM.js → chunk-CEB42O2C.js} +1 -1
- package/public/chunk-CHGXAEKT.js +2 -0
- package/public/chunk-D7VDX7ZF.js +5 -0
- package/public/chunk-DD4F6F4S.js +9 -0
- package/public/{chunk-ZQER6AIQ.js → chunk-DEGYRCMI.js} +1 -1
- package/public/{chunk-M2B5OYGO.js → chunk-DEM56G4S.js} +1 -1
- package/public/chunk-DYTBBUMI.js +4 -0
- package/public/{chunk-YIYYVDFO.js → chunk-EDNYYQIZ.js} +2 -2
- package/public/chunk-FNF7M3AE.js +1 -0
- package/public/chunk-IHURI4IH.js +5 -0
- package/public/chunk-J3LDKVIS.js +50 -0
- package/public/{chunk-5FEX27I4.js → chunk-JB4YVVNW.js} +1 -1
- package/public/chunk-KPHICV76.js +5 -0
- package/public/{chunk-QZKCRH3H.js → chunk-KZ5DUKAX.js} +1 -1
- package/public/{chunk-HMOOTAEA.js → chunk-LQDSU4WS.js} +3 -3
- package/public/{chunk-IXQ7KIFY.js → chunk-MGPPVLZ7.js} +1 -1
- package/public/{chunk-QVCLOCEC.js → chunk-R7RQHWKJ.js} +1 -1
- package/public/chunk-S72JTJPN.js +6 -0
- package/public/chunk-UYIJND2R.js +1 -0
- package/public/chunk-YCEXTKGG.js +1 -0
- package/public/chunk-YKJKIWXO.js +6 -0
- package/public/index.html +1 -1
- package/public/main-EG2WF4EO.js +1 -0
- package/tools/schematics/create-host2-widget/files/readme/README.md.template +1 -1
- package/public/assets/help-docs/datasets.md +0 -95
- package/public/chunk-2OB7ZJBR.js +0 -3
- package/public/chunk-6GGJZDRE.js +0 -1
- package/public/chunk-6V4GGGXE.js +0 -2
- package/public/chunk-A5BW6BUM.js +0 -1
- package/public/chunk-DGE5YFPU.js +0 -5
- package/public/chunk-G6M3Z3BY.js +0 -53
- package/public/chunk-GMGZLXY7.js +0 -4
- package/public/chunk-GUZ3BDVZ.js +0 -2
- package/public/chunk-ICDGHQFP.js +0 -6
- package/public/chunk-JCNE4QHQ.js +0 -15
- package/public/chunk-K6XYUNG4.js +0 -8
- package/public/chunk-LGCQEN7V.js +0 -4
- package/public/chunk-O3JH7UTR.js +0 -1
- package/public/chunk-Q3USFT4F.js +0 -2
- package/public/chunk-VIKU7BH7.js +0 -1
- package/public/chunk-XMQPXXLW.js +0 -8
- package/public/main-4URMGBQS.js +0 -1
- package/rm-npmjs-beta.sh +0 -50
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# KIP – Copilot Instructions (for AI coding agents)
|
|
2
2
|
|
|
3
|
-
Use this quick-start map to be productive in this repo. Prefer these concrete patterns over generic Angular tips. For depth, see COPILOT.md (root) and
|
|
3
|
+
Use this quick-start map to be productive in this repo. Prefer these concrete patterns over generic Angular tips. For depth, see `COPILOT.md` (root entrypoint), this file, and `.github/instructions/angular.instructions.md`.
|
|
4
4
|
|
|
5
5
|
## Big picture
|
|
6
6
|
- Angular v20+ PWA served under base path /@mxtommy/kip/ (angular.json baseHref, package.json scripts).
|
|
@@ -8,6 +8,18 @@ Use this quick-start map to be productive in this repo. Prefer these concrete pa
|
|
|
8
8
|
- UI: Dashboard(s) with draggable/resizable widgets (gridstack). Themes: light/dark/night via SCSS roles + CSS variables.
|
|
9
9
|
- Storage: Config lives in Signal K when logged in, else local (StorageService). App init via APP_INITIALIZER (AppNetworkInitService).
|
|
10
10
|
|
|
11
|
+
## Final architecture (2026 Q1)
|
|
12
|
+
- Historical-series orchestration path: `DashboardService` → `DashboardHistorySeriesSyncService` → `KipSeriesApiClientService` → plugin `/plugins/kip/series/reconcile`.
|
|
13
|
+
- Dataset write ownership is centralized in `WidgetDatasetOrchestratorService`; avoid direct dataset create/edit/remove calls from widget/dashboard flows.
|
|
14
|
+
- Shared history mapping path: `HistoryToChartMapperService` performs history-values → chart datapoint adaptation; `DatasetStreamService` delegates to it.
|
|
15
|
+
- Widget delete cleanup uses owner UUID matching (`ownerUuid` and `ownerUuid-*`) through lifecycle service, replacing selector-specific cleanup.
|
|
16
|
+
|
|
17
|
+
### Migration guardrails
|
|
18
|
+
1. For chart/trend widgets, use lifecycle sync helpers (`syncDataChartDataset`, `syncNumericMiniChartDataset`, `syncWindTrendsDatasets`).
|
|
19
|
+
2. Keep widget UUIDs stable and unique; ownership drives both dataset cleanup and history-series reconciliation.
|
|
20
|
+
3. Route history response mapping changes through `HistoryToChartMapperService` only.
|
|
21
|
+
4. Do not reintroduce legacy selector-branch dataset cleanup in dashboard/widget code.
|
|
22
|
+
|
|
11
23
|
## Daily workflows
|
|
12
24
|
- Dev: npm run dev, then open http://localhost:4200/@mxtommy/kip/ (needs a running Signal K server).
|
|
13
25
|
- Build KIP app: npm run build:dev | npm run build:prod (outputs KIP to public/ and respects baseHref).
|
|
@@ -121,8 +133,9 @@ Template:
|
|
|
121
133
|
- SCSS: use variables from src/themes/_m3*.scss; avoid hardcoded hex.
|
|
122
134
|
|
|
123
135
|
## Datasets & charts
|
|
124
|
-
- Historical/trend data:
|
|
125
|
-
- Example: src/app/widgets/widget-windtrends-chart uses Chart.js + date-fns and
|
|
136
|
+
- Historical/trend data: DatasetStreamService (src/app/core/services/dataset-stream.service.ts). Create/update/remove in widget lifecycle.
|
|
137
|
+
- Example: src/app/widgets/widget-windtrends-chart uses Chart.js + date-fns and DatasetStreamService for batch-then-live streams.
|
|
138
|
+
- Preferred write path: `WidgetDatasetOrchestratorService` (centralized dataset orchestration for Data Chart / Numeric minichart / Windtrends and owner-based cleanup).
|
|
126
139
|
|
|
127
140
|
## Signal K PUT/requests
|
|
128
141
|
- Read via DataService; write via SignalKRequestsService. UI filters PUT-enabled paths (see src/assets/help-docs/putcontrols.md).
|
|
@@ -143,18 +156,18 @@ Template:
|
|
|
143
156
|
- Do: Use widget-embedded or inline directives for composites. Don’t: Reintroduce legacy host wrappers.
|
|
144
157
|
|
|
145
158
|
## Key files/dirs
|
|
146
|
-
- Core services: `src/app/core/services/` (DataService, SignalKConnectionService, SignalKDeltaService, AppNetworkInitService, UnitsService,
|
|
159
|
+
- Core services: `src/app/core/services/` (DataService, SignalKConnectionService, SignalKDeltaService, AppNetworkInitService, UnitsService, DatasetStreamService, NotificationsService)
|
|
147
160
|
- Plugin config foundation: `src/app/core/services/signalk-plugin-config.service.ts` (plugin-only detection, dependency validation, schema normalization metadata, and config persistence via `/plugins` endpoints)
|
|
148
161
|
- Directives: `src/app/core/directives/` (widget-runtime, widget-streams, widget-metadata)
|
|
149
162
|
- Widgets: `src/app/widgets/` (e.g., widget-numeric, widget-gauge-ng-*, widget-data-chart, widget-windtrends-chart, widget-autopilot)
|
|
150
163
|
- Embedded host: `src/app/core/components/widget-embedded/`
|
|
151
164
|
- Config UI: `src/app/widget-config/`
|
|
152
|
-
- Plugin management (server plugins) is handled separately through `
|
|
165
|
+
- Plugin management (server plugins) is handled separately through `PluginConfigClientService` and `/plugins` REST endpoints. Keep install/uninstall out of scope unless explicitly added.
|
|
153
166
|
- Build: `angular.json`, `package.json` scripts
|
|
154
167
|
|
|
155
168
|
## Debugging
|
|
156
169
|
- Use Data Inspector (src/app/core/components/data-inspector) to verify live paths/metadata.
|
|
157
|
-
- Dev with source maps: npm run dev. Watch console from DataService/
|
|
170
|
+
- Dev with source maps: npm run dev. Watch console from DataService/DatasetStreamService for timeouts/lifecycle logs.
|
|
158
171
|
- Embeds (widget-iframe): prefer same-origin or relative URLs to avoid CORS and input-injection limits (see embedwidget.md).
|
|
159
172
|
|
|
160
173
|
## SVG Animation Helpers (rAF)
|
|
@@ -22,6 +22,18 @@ KIP Instrument MFD is an advanced and versatile marine instrumentation package d
|
|
|
22
22
|
- The main configuration form logic is in `src/app/widget-config/modal-widget-config/`. For unique widget config needs, you may add a new config component (e.g., `modal-widget-<name>-config`).
|
|
23
23
|
- Widget logic/UI and widget configuration are separate concepts that work together.
|
|
24
24
|
|
|
25
|
+
### Finalized architecture (2026 Q1)
|
|
26
|
+
- **History series reconciliation pipeline:** Dashboard widget topology is normalized by `DashboardHistorySeriesSyncService` and reconciled through `KipSeriesApiClientService` into plugin-backed series definitions.
|
|
27
|
+
- **Dataset lifecycle centralization:** `WidgetDatasetOrchestratorService` is the write-owner for widget datasets (create/edit/remove and owner-based cleanup).
|
|
28
|
+
- **Shared history adaptation:** `HistoryToChartMapperService` centralizes History API values-to-chart datapoint mapping, including average aliases and circular-angle summary stats.
|
|
29
|
+
- **Delete-path cleanup simplification:** Dashboard delete flow now performs owner UUID dataset cleanup via lifecycle service instead of selector-specific branches.
|
|
30
|
+
|
|
31
|
+
### Architecture guardrails for contributors
|
|
32
|
+
- Replace direct widget/dashboard `DatasetStreamService` write calls with `WidgetDatasetOrchestratorService` sync/remove helpers.
|
|
33
|
+
- Preserve stable widget UUID ownership contracts; these IDs are used for dataset and series reconciliation behavior.
|
|
34
|
+
- Keep history response transformation logic in `HistoryToChartMapperService` to avoid divergence across chart consumers.
|
|
35
|
+
- Avoid reintroducing legacy widget-selector cleanup branches.
|
|
36
|
+
|
|
25
37
|
---
|
|
26
38
|
|
|
27
39
|
## 4. Conventions & Patterns
|
|
@@ -102,7 +114,7 @@ All major services in `src/app/core/services/` are summarized below for Copilot
|
|
|
102
114
|
- Key methods: Event emitters, hotkey handlers.
|
|
103
115
|
- Dependencies: Angular core, browser APIs.
|
|
104
116
|
|
|
105
|
-
- **
|
|
117
|
+
- **SettingsService (`settings.service.ts`)**
|
|
106
118
|
- Purpose: Manages persistent app settings, user preferences, and configuration storage.
|
|
107
119
|
- Key methods: `getSetting()`, `setSetting()`, config file management.
|
|
108
120
|
- Dependencies: StorageService.
|
|
@@ -114,12 +126,12 @@ All major services in `src/app/core/services/` are summarized below for Copilot
|
|
|
114
126
|
|
|
115
127
|
- **NotificationsService (`notifications.service.ts`)**
|
|
116
128
|
- Key methods: Notification state management, audio/visual alerts, muting.
|
|
117
|
-
- Dependencies:
|
|
129
|
+
- Dependencies: SettingsService, DataService, SignalkRequestsService.
|
|
118
130
|
|
|
119
131
|
- **ToastService (`toast.service.ts`)**
|
|
120
132
|
- Purpose: In-app snackbars using Angular Material.
|
|
121
133
|
- Key methods: `show(message, duration = 1500, silent = true, action = 'Dismiss', severity = 'message')`.
|
|
122
|
-
- Dependencies: MatSnackBar,
|
|
134
|
+
- Dependencies: MatSnackBar, SettingsService.
|
|
123
135
|
- Usage: Use for short, user-visible feedback (login errors, PUT failures, success confirmations). Sound is suppressed when `silent=true` or user sound settings disable audio.
|
|
124
136
|
|
|
125
137
|
- **CanvasService (`canvas.service.ts`)**
|
|
@@ -132,12 +144,36 @@ All major services in `src/app/core/services/` are summarized below for Copilot
|
|
|
132
144
|
- Key methods: Layout management, widget arrangement, dashboard state.
|
|
133
145
|
- Dependencies: StorageService, WidgetService.
|
|
134
146
|
|
|
135
|
-
- **
|
|
147
|
+
- **DatasetStreamService (`dataset-stream.service.ts`)**
|
|
136
148
|
- Purpose: Manages data sets, including loading, saving, and updating widget data sources.
|
|
137
149
|
- Key methods: Data set CRUD, data source updates.
|
|
138
150
|
- Dependencies: DataService, StorageService.
|
|
139
151
|
|
|
140
|
-
- **
|
|
152
|
+
- **WidgetDatasetOrchestratorService (`widget-dataset-orchestrator.service.ts`)**
|
|
153
|
+
- Purpose: Centralized dataset orchestration for widget lifecycle operations.
|
|
154
|
+
- Key methods: `syncDataChartDataset()`, `syncNumericMiniChartDataset()`, `syncWindTrendsDatasets()`, `removeOwnedDatasets()`.
|
|
155
|
+
- Dependencies: DatasetStreamService.
|
|
156
|
+
- Usage: Preferred write path for widget/dash dataset lifecycle actions.
|
|
157
|
+
|
|
158
|
+
- **HistoryToChartMapperService (`history-to-chart-mapper.service.ts`)**
|
|
159
|
+
- Purpose: Shared adapter for converting History API value responses into chart datapoints.
|
|
160
|
+
- Key methods: `mapValuesToChartDatapoints()`.
|
|
161
|
+
- Dependencies: None (core mapping service).
|
|
162
|
+
- Usage: Keeps chart history behavior consistent across all consumers.
|
|
163
|
+
|
|
164
|
+
- **DashboardHistorySeriesSyncService (`dashboard-history-series-sync.service.ts`)**
|
|
165
|
+
- Purpose: Derives desired historical-series definitions from current dashboard/widget state and reconciles with plugin backend.
|
|
166
|
+
- Key methods: Internal extraction + debounced reconcile scheduling.
|
|
167
|
+
- Dependencies: DashboardService, KipSeriesApiClientService, SignalKConnectionService.
|
|
168
|
+
- Usage: Single orchestration path for add/edit/delete/copy/paste/duplicate widget series convergence.
|
|
169
|
+
|
|
170
|
+
- **KipSeriesApiClientService (`kip-series-api-client.service.ts`)**
|
|
171
|
+
- Purpose: Frontend bridge to KIP plugin series reconcile endpoint.
|
|
172
|
+
- Key methods: `reconcileSeries()`.
|
|
173
|
+
- Dependencies: HttpClient, SignalKConnectionService.
|
|
174
|
+
- Usage: Posts full desired series definitions to plugin for canonical reconciliation.
|
|
175
|
+
|
|
176
|
+
- **PluginConfigClientService (`plugin-config-client.service.ts`)**
|
|
141
177
|
- Purpose: Plugin configuration foundation service for dependency checks and plugin state/config persistence via Signal K `/plugins` endpoints.
|
|
142
178
|
- Key methods: `listPlugins()`, `getPlugin()`, `getPluginConfig()`, `savePluginConfig()`, `setPluginEnabled()`, `validateDependency()`, `normalizePluginSchema()`.
|
|
143
179
|
- Dependencies: HttpClient, SignalKConnectionService.
|
|
@@ -156,7 +192,7 @@ All major services in `src/app/core/services/` are summarized below for Copilot
|
|
|
156
192
|
- **UnitsService (`units.service.ts`)**
|
|
157
193
|
- Purpose: Handles unit conversion and formatting for all displayed data.
|
|
158
194
|
- Key methods: `convert()`, `format()`, unit preference management.
|
|
159
|
-
- Dependencies:
|
|
195
|
+
- Dependencies: SettingsService.
|
|
160
196
|
|
|
161
197
|
- **WidgetService (`widget.service.ts`)**
|
|
162
198
|
- Purpose: Manages widget registration, configuration, and lifecycle.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# v4.5.0
|
|
2
|
+
## New Features
|
|
3
|
+
* Effortlessly review your vessel’s history with the new Widget Historical Charts—automatically track, store, and visualize key data. Instantly access up to the last full day of performance: just two-finger tap or right-click any widget to open a seamless history dialog—no setup, no clutter, just the trends you need. (Requires Signal K v2.22.1)
|
|
4
|
+
* Dashboards now start with fully populated Data Charts, powered by KIP’s managed Time-Series History-API provider or other compatible history providers. (Requires Signal K v2.22.1)
|
|
5
|
+
* Added internet availability detection for remote queries.
|
|
6
|
+
## Improvements
|
|
7
|
+
* Added "Days" as a selectable time scale in the Data Chart widget.
|
|
8
|
+
* Improved integration by validating server plugin presence, plugin state, and configuration.
|
|
9
|
+
* Added a Node-RED introduction guide to the Help section.
|
|
10
|
+
## Fixes
|
|
11
|
+
* Improved KIP plugin OpenAPI compatibility.
|
|
12
|
+
* Resolved slow Data Inspector performance caused by high resource usage in deep loop logic.
|
|
13
|
+
* Remote Control feature should not require Admin permission. Fixes #940
|
|
1
14
|
# v4.4.0
|
|
2
15
|
## New Features
|
|
3
16
|
* New AIS Radar widget: Turn AIS traffic into an instant tactical view with live targets, dynamic range rings, fast zoom controls, and smart filters—so you can spot nearby vessels quicker and make confident navigation decisions at a glance.
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ With KIP, you get the **familiar feel of professional Multi-Function Displays**
|
|
|
24
24
|
- [Installations Showcase](#installations-showcase)
|
|
25
25
|
- [Design Goal](#design-goal)
|
|
26
26
|
- [User Experience](#user-experience)
|
|
27
|
-
- [Dashboards and Configuration](#dashboards-and-configuration)
|
|
27
|
+
- [Dashboards and Configuration](#dashboards-and-configuration), [Widget Library](#widget-library) & [Historical Data](#historycal-data)
|
|
28
28
|
- [Night Modes](#night-modes)
|
|
29
29
|
- [Chartplotter Mode](#chartplotter-mode)
|
|
30
30
|
- [Remote Control](#remote-control-other-kip-displays)
|
|
@@ -54,12 +54,12 @@ The goal is to replicate and enhance the functionality of modern marine instrume
|
|
|
54
54
|
|
|
55
55
|
## User Experience
|
|
56
56
|
|
|
57
|
-
###
|
|
57
|
+
### Interactions
|
|
58
58
|
- Swipe up and down to navigate through your dashboards effortlessly.
|
|
59
59
|
- Swipe left and right to access notifications and other system features quickly.
|
|
60
60
|
- Use keyboard shortcuts for essential features, ensuring fast and efficient navigation across devices types.
|
|
61
61
|
|
|
62
|
-
###
|
|
62
|
+
### Customize
|
|
63
63
|
- Effortlessly create and customize dashboards using an intuitive grid layout system.
|
|
64
64
|
- Add, resize, and align widgets to design tailored displays for your specific needs.
|
|
65
65
|
- Duplicate widgets or entire dashboards, including their configurations, with a single click.
|
|
@@ -137,6 +137,9 @@ Freeboard-SK Chartplotter integration with Autopilot widget
|
|
|
137
137
|
Grafana integration with other widgets
|
|
138
138
|

|
|
139
139
|
|
|
140
|
+
## Historical Data
|
|
141
|
+
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 tap or right-click widgets to reveal a seamless history dialog—no setup, no clutter, just the trends you need. With full support for 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.
|
|
142
|
+
|
|
140
143
|
## Night Modes
|
|
141
144
|
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!
|
|
142
145
|
|
|
@@ -258,16 +261,17 @@ Once done with your work, from your fork's working branch, make a GitHub pull re
|
|
|
258
261
|
|
|
259
262
|
For comprehensive development guidance, please refer to these instruction files:
|
|
260
263
|
|
|
261
|
-
###
|
|
264
|
+
### Primary Instructions
|
|
262
265
|
- **[COPILOT.md](./COPILOT.md)**: Complete KIP project guidelines including architecture, services, widget development patterns, theming, and Signal K integration.
|
|
263
|
-
- **[Angular Instructions](./.github/instructions/angular.instructions.md)**: Modern Angular
|
|
266
|
+
- **[Angular Instructions](./.github/instructions/angular.instructions.md)**: Modern Angular v21+ coding standards, component patterns, and framework best practices.
|
|
267
|
+
- **[Copilot Agent Instructions](./.github/copilot-instructions.md)**: Architecture details and coding-agent guardrails for this repository.
|
|
264
268
|
|
|
265
|
-
###
|
|
269
|
+
### Development Workflow
|
|
266
270
|
1. **Start Here**: Read `COPILOT.md` for KIP-specific architecture and patterns.
|
|
267
271
|
2. **Angular Standards**: Follow `.github/instructions/angular.instructions.md` for modern Angular development.
|
|
268
272
|
3. **Setup & Build**: Use this README for project setup and build commands.
|
|
269
273
|
|
|
270
|
-
###
|
|
274
|
+
### Key Priorities
|
|
271
275
|
- **Widget Development**: Use the Host2 widget pattern (signals + directives) and scaffold new widgets with the `create-host2-widget` schematic (see `COPILOT.md`).
|
|
272
276
|
- **Angular Patterns**: Use signals, standalone components, and modern control flow.
|
|
273
277
|
- **Theming**: Follow KIP's theme system for consistent UI.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxtommy/kip",
|
|
3
|
-
"version": "4.5.0
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "An advanced and versatile marine instrumentation package to display Signal K data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"signalk-webapp",
|
|
27
27
|
"signalk-category-instruments",
|
|
28
28
|
"signalk-category-notifications",
|
|
29
|
+
"signalk-category-ais",
|
|
29
30
|
"signalk-node-server-plugin",
|
|
30
31
|
"signal k",
|
|
31
32
|
"signalk",
|
|
@@ -42,6 +43,7 @@
|
|
|
42
43
|
"signalk-plugin-enabled-by-default": true,
|
|
43
44
|
"scripts": {
|
|
44
45
|
"test": "CI=1 ng test --watch=false",
|
|
46
|
+
"test:plugin": "npm run build:plugin && node --test --test-concurrency=1 kip-plugin/tests/index.test.cjs",
|
|
45
47
|
"test:interactive": "ng test",
|
|
46
48
|
"test:headless": "CI=1 ng test --browsers=ChromeHeadless --watch=false",
|
|
47
49
|
"lint": "ng lint",
|
|
@@ -62,12 +64,12 @@
|
|
|
62
64
|
"@angular/compiler-cli": "21.1.4",
|
|
63
65
|
"@angular/language-service": "21.1.4",
|
|
64
66
|
"@types/canvas-gauges": "^2.1.8",
|
|
67
|
+
"@types/d3": "^7.4.3",
|
|
65
68
|
"@types/jasmine": "~3.6.0",
|
|
66
69
|
"@types/jasminewd2": "^2.0.9",
|
|
67
70
|
"@types/js-quantities": "^1.6.6",
|
|
68
71
|
"@types/lodash-es": "^4.17.9",
|
|
69
72
|
"@types/node": "^24.1.0",
|
|
70
|
-
"@types/d3": "^7.4.3",
|
|
71
73
|
"angular-eslint": "21.2.0",
|
|
72
74
|
"codelyzer": "^6.0.0",
|
|
73
75
|
"eslint": "^9.29.0",
|
|
@@ -100,6 +102,7 @@
|
|
|
100
102
|
"@angular/router": "21.1.4",
|
|
101
103
|
"@aziham/chartjs-plugin-streaming": "^3.5.1",
|
|
102
104
|
"@godind/ng-canvas-gauges": "^6.2.1",
|
|
105
|
+
"@signalk/server-api": "^2.22.0",
|
|
103
106
|
"@zakj/no-sleep": "^0.13.5",
|
|
104
107
|
"chart.js": "^4.5.1",
|
|
105
108
|
"chartjs-adapter-date-fns": "^3.0.0",
|
|
@@ -109,6 +112,7 @@
|
|
|
109
112
|
"core-js": "^3.13.1",
|
|
110
113
|
"d3": "^7.9.0",
|
|
111
114
|
"date-fns": "^2.30.0",
|
|
115
|
+
"duckdb": "^1.4.4",
|
|
112
116
|
"gridstack": "^12.3.3",
|
|
113
117
|
"js-quantities": "^1.8.0",
|
|
114
118
|
"lodash-es": "^4.17.23",
|
|
@@ -116,10 +120,9 @@
|
|
|
116
120
|
"prismjs": "^1.30.0",
|
|
117
121
|
"rxjs": "^7.8.2",
|
|
118
122
|
"screenfull": "^6.0.2",
|
|
123
|
+
"sk-ais-status-plugin": "^1.0.0",
|
|
119
124
|
"steelseries": "^2.0.9",
|
|
120
125
|
"tslib": "^2.6.2",
|
|
121
|
-
"zone.js": "^0.15.1"
|
|
122
|
-
"@signalk/server-api": "^2.7.2",
|
|
123
|
-
"sk-ais-status-plugin": "^1.0.0"
|
|
126
|
+
"zone.js": "^0.15.1"
|
|
124
127
|
}
|
|
125
128
|
}
|