@mxtommy/kip 3.9.0-beta.11 → 3.9.0-beta.15
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/instructions/angular.instructions.md +46 -0
- package/README.md +49 -12
- package/package.json +2 -2
- package/public/3rdpartylicenses.txt +77 -77
- package/public/assets/help-docs/configuration.md +4 -4
- package/public/assets/help-docs/dashboards.md +4 -2
- package/public/assets/svg/icons.svg +1 -1
- package/public/chunk-3PHQNZHK.js +3 -0
- package/public/{chunk-35L7BBBD.js → chunk-4BZUNPAS.js} +12 -12
- package/public/{chunk-HCXH72CD.js → chunk-4TXMPFLE.js} +1 -1
- package/public/{chunk-4JJLPUET.js → chunk-5ZFD7GS7.js} +1 -1
- package/public/{chunk-CQXWGD3T.js → chunk-7ROSR534.js} +1 -1
- package/public/chunk-A7JAKUEN.js +2 -0
- package/public/{chunk-ZBCOJLI4.js → chunk-AWECVMCK.js} +5 -5
- package/public/{chunk-KKHPIFEB.js → chunk-B2TLSQTS.js} +1 -1
- package/public/chunk-BAGWY54D.js +11 -0
- package/public/chunk-DSUPPAGD.js +1 -0
- package/public/chunk-E44UUOOY.js +1 -0
- package/public/chunk-EURN6O7T.js +1 -0
- package/public/chunk-FI56NUZD.js +2 -0
- package/public/chunk-IQFEZZ5Q.js +6 -0
- package/public/chunk-JGYVOFIW.js +1 -0
- package/public/{chunk-2YVW3TBK.js → chunk-JRXB4H3R.js} +1 -1
- package/public/chunk-KH2LYQ34.js +1 -0
- package/public/chunk-L4UIO6KZ.js +3 -0
- package/public/{chunk-PKNLASTF.js → chunk-NMRNE6VS.js} +1 -1
- package/public/chunk-PECKIPUO.js +1 -0
- package/public/{chunk-VYUMZVH2.js → chunk-SOVSVBLY.js} +1 -1
- package/public/chunk-UE2C4S42.js +4 -0
- package/public/chunk-UYHYM4HU.js +9 -0
- package/public/{chunk-KTDDP73O.js → chunk-WQ6UD7J4.js} +1 -1
- package/public/index.html +18 -16
- package/public/main-IMSYBGZF.js +53 -0
- package/public/{styles-GMXUNVLC.css → styles-PDNHT2L2.css} +1 -1
- package/public/chunk-3LEMFOCV.js +0 -3
- package/public/chunk-53YH6WHF.js +0 -1
- package/public/chunk-65LQUQJE.js +0 -2
- package/public/chunk-7O6MKSQ3.js +0 -1
- package/public/chunk-AS4F4I3P.js +0 -6
- package/public/chunk-CBUY7NMR.js +0 -2
- package/public/chunk-JNFARXLF.js +0 -11
- package/public/chunk-JY3WVS7C.js +0 -2
- package/public/chunk-NMEZOCU2.js +0 -1
- package/public/chunk-NS2FPVWM.js +0 -4
- package/public/chunk-Q2Y75POI.js +0 -1
- package/public/chunk-RRTCHHRC.js +0 -3
- package/public/chunk-TA4GACKT.js +0 -4
- package/public/chunk-TXPLRBW5.js +0 -2
- package/public/chunk-VHFBF47T.js +0 -1
- package/public/main-5BGEDP4B.js +0 -53
|
@@ -54,6 +54,10 @@ https://angular.dev/essentials/components
|
|
|
54
54
|
https://angular.dev/essentials/signals
|
|
55
55
|
https://angular.dev/essentials/templates
|
|
56
56
|
https://angular.dev/essentials/dependency-injection
|
|
57
|
+
https://angular.dev/guide/components/queries
|
|
58
|
+
|
|
59
|
+
viewChild('tileContainer', { static: false }) tileContainer!: ElementRef<HTMLDivElement>;
|
|
60
|
+
viewChildren('tile', { read: ElementRef }) tiles!: QueryList<ElementRef<HTMLElement>>;
|
|
57
61
|
|
|
58
62
|
## Best practices & Style guide
|
|
59
63
|
Here are the best practices and the style guide information.
|
|
@@ -100,6 +104,15 @@ Here is a link to the most recent Angular style guide https://angular.dev/style-
|
|
|
100
104
|
- Use the `providedIn: 'root'` option for singleton services
|
|
101
105
|
- Use the `inject()` function instead of constructor injection
|
|
102
106
|
|
|
107
|
+
### Dashboards
|
|
108
|
+
- Dashboards are managed via `DashboardService` and support custom names and icons for easy identification
|
|
109
|
+
- Use `DashboardService.add(name, configuration, icon?)` to create dashboards with optional icons
|
|
110
|
+
- Use `DashboardService.update(index, name, icon?)` to modify existing dashboards
|
|
111
|
+
- Use `DashboardService.duplicate(index, newName, newIcon?)` to duplicate dashboards with optional icon override
|
|
112
|
+
- Icons are Material Icons (e.g., 'dashboard', 'navigation') and can be selected via the `select-icon` component
|
|
113
|
+
- The `select-icon` component loads SVG icons from configurable files (default: 'assets/svg/icons.svg'), displays them in a grid, and outputs the selected icon name
|
|
114
|
+
- Integrate icon selection in dialogs by including `<select-icon [iconFile]="'assets/svg/icons.svg'" (selectedIcon)="onIconSelected($event)"></select-icon>`
|
|
115
|
+
|
|
103
116
|
---
|
|
104
117
|
|
|
105
118
|
## Cross-Reference Instructions
|
|
@@ -118,3 +131,36 @@ Here is a link to the most recent Angular style guide https://angular.dev/style-
|
|
|
118
131
|
- Use signals, standalone components, and modern control flow from this file within the KIP architecture from `COPILOT.md`
|
|
119
132
|
- For theming and colors, always use the KIP theme system described in `COPILOT.md`, not generic CSS approaches
|
|
120
133
|
- All services should follow both the Angular DI patterns here AND the KIP service architecture in `COPILOT.md`
|
|
134
|
+
|
|
135
|
+
## Referencing component children with queries (Angular 17+)
|
|
136
|
+
|
|
137
|
+
Use the modern signal-based query API for referencing elements, components, or directives in your template:
|
|
138
|
+
|
|
139
|
+
- Use `viewChild()` and `viewChildren()` from `@angular/core` (not the old decorators).
|
|
140
|
+
- These return signals or arrays, not QueryList.
|
|
141
|
+
- Example usage:
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
import { viewChild, viewChildren, ElementRef } from '@angular/core';
|
|
145
|
+
|
|
146
|
+
// In your component class:
|
|
147
|
+
tileContainer = viewChild('tileContainer')();
|
|
148
|
+
tiles = viewChildren('tile', { read: ElementRef });
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
- In your template, add template reference variables:
|
|
152
|
+
|
|
153
|
+
```html
|
|
154
|
+
<div #tileContainer>
|
|
155
|
+
@for (item of items; let i = $index) {
|
|
156
|
+
<tile-large-icon #tile ...></tile-large-icon>
|
|
157
|
+
}
|
|
158
|
+
</div>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
- Access the element/component directly via the property (e.g., `this.tileContainer`, `this.tiles[0]`).
|
|
162
|
+
- `viewChildren()` returns a readonly array that updates automatically as the view changes.
|
|
163
|
+
- No need for `ngAfterViewInit` to access queries; they are available as soon as the view is rendered.
|
|
164
|
+
|
|
165
|
+
**Summary:**
|
|
166
|
+
Use `viewChild()` and `viewChildren()` for modern, reactive, and type-safe access to elements/components in your template. Avoid the legacy `@ViewChild`/`@ViewChildren` decorators and `QueryList` in new code.
|
package/README.md
CHANGED
|
@@ -16,20 +16,9 @@ Key features include:
|
|
|
16
16
|
- **Multiple User Profiles**: Tailor configurations for different roles, devices, or use cases.
|
|
17
17
|
- **Cross-Device Compatibility**: Access KIP remotely on any device by navigating to `http://<Signal K Server URL>:<port>/@mxtommy/kip`.
|
|
18
18
|
|
|
19
|
-
Typical complementary components you may install (many are often bundled with Signal K distributions):
|
|
20
|
-
|
|
21
|
-
**Navigation & Charting**
|
|
22
|
-
- **Freeboard‑SK** – Multi‑station, web chart plotter dedicated to Signal K: routes, waypoints, charts, alarms, weather layers, and instrument overlays.
|
|
23
|
-
|
|
24
|
-
**Visual Flow / Automation**
|
|
25
|
-
- **Node‑RED** – Low‑code, flow‑based wiring of devices, APIs, online services, and custom logic (alert escalation, device control automation, data enrichment, protocol bridging).
|
|
26
|
-
|
|
27
|
-
**Data Storage & Analytics**
|
|
28
|
-
- **InfluxDB / other TSDB** – High‑resolution historical storage of sensor & performance metrics beyond what lightweight widget charts should retain.
|
|
29
|
-
- **Grafana** – Rich exploratory / comparative dashboards, ad‑hoc queries, alert rules on stored metrics, correlation across heterogeneous data sources.
|
|
30
|
-
|
|
31
19
|
KIP is open-source under the MIT license, built by the community and 100% free. Join the community on Discord or contribute to the project on GitHub!
|
|
32
20
|
|
|
21
|
+
## Read the Help introduction How-to
|
|
33
22
|
## Read the Help introduction How-to
|
|
34
23
|
Read the [Introduction](https://github.com/mxtommy/Kip/blob/master/src/assets/help-docs/welcome.md) help file.
|
|
35
24
|
|
|
@@ -134,6 +123,32 @@ For example, Signal K will notify KIP when a water depth or temperature sensor r
|
|
|
134
123
|
## Multiple User Profiles
|
|
135
124
|
If you have different roles on board: captain, skipper, tactician, navigator, engineer—or simply different people with different needs, each can tailor KIP as they wish. The use of profiles also allows you to tie specific configuration arrangements to use cases or device form factors.
|
|
136
125
|
|
|
126
|
+
## Complementary Components
|
|
127
|
+
Typical complementary components you may install (many are often bundled with Signal K distributions):
|
|
128
|
+
|
|
129
|
+
**Navigation & Charting**
|
|
130
|
+
- **Freeboard‑SK** – Multi‑station, web chart plotter dedicated to Signal K: routes, waypoints, charts, alarms, weather layers, and instrument overlays.
|
|
131
|
+
|
|
132
|
+
**Visual Flow / Automation**
|
|
133
|
+
- **Node‑RED** – Low‑code, flow‑based wiring of devices, APIs, online services, and custom logic (alert escalation, device control automation, data enrichment, protocol bridging).
|
|
134
|
+
|
|
135
|
+
**Data Storage & Analytics**
|
|
136
|
+
- **InfluxDB / other TSDB** – High‑resolution historical storage of sensor & performance metrics beyond what lightweight widget charts should retain.
|
|
137
|
+
- **Grafana** – Rich exploratory / comparative dashboards, ad‑hoc queries, alert rules on stored metrics, correlation across heterogeneous data sources.
|
|
138
|
+
|
|
139
|
+
## Complementary Components
|
|
140
|
+
Typical complementary components you may install (many are often bundled with Signal K distributions):
|
|
141
|
+
|
|
142
|
+
**Navigation & Charting**
|
|
143
|
+
- **Freeboard‑SK** – Multi‑station, web chart plotter dedicated to Signal K: routes, waypoints, charts, alarms, weather layers, and instrument overlays.
|
|
144
|
+
|
|
145
|
+
**Visual Flow / Automation**
|
|
146
|
+
- **Node‑RED** – Low‑code, flow‑based wiring of devices, APIs, online services, and custom logic (alert escalation, device control automation, data enrichment, protocol bridging).
|
|
147
|
+
|
|
148
|
+
**Data Storage & Analytics**
|
|
149
|
+
- **InfluxDB / other TSDB** – High‑resolution historical storage of sensor & performance metrics beyond what lightweight widget charts should retain.
|
|
150
|
+
- **Grafana** – Rich exploratory / comparative dashboards, ad‑hoc queries, alert rules on stored metrics, correlation across heterogeneous data sources.
|
|
151
|
+
|
|
137
152
|
# Connect, Share, and Support
|
|
138
153
|
KIP has its own Discord Signal K channel for getting in touch. Join us at https://discord.gg/AMDYT2DQga
|
|
139
154
|
|
|
@@ -166,6 +181,28 @@ Keeping KIP focused preserves responsiveness (lower CPU / memory), reduces UI cl
|
|
|
166
181
|
|
|
167
182
|
In short: use KIP to see & act on live sailing information; use the complementary tools to store it long‑term, analyze it deeply, automate decisions, or build advanced integrations.
|
|
168
183
|
|
|
184
|
+
## Project Scope
|
|
185
|
+
What KIP IS about:
|
|
186
|
+
- Real‑time presentation of vessel & environment data (navigation, performance, systems) pulled from Signal K.
|
|
187
|
+
- Fast, legible, touchscreen‑friendly dashboards for underway decision making.
|
|
188
|
+
- Configurable widgets (gauges, charts, timers, controls) tuned for sailing operations.
|
|
189
|
+
|
|
190
|
+
What KIP deliberately IS NOT trying to become:
|
|
191
|
+
- A full data lake / long‑term time‑series historian.
|
|
192
|
+
- A general purpose automation / rules / orchestration engine.
|
|
193
|
+
- A universal external web‑app embedding or mash‑up framework.
|
|
194
|
+
- A low‑code integration hub for arbitrarily wiring protocols and services.
|
|
195
|
+
|
|
196
|
+
Those domains already have excellent, specialized open‑source tools. Instead of re‑implementing them, KIP plays nicely alongside them within a Signal K based onboard stack.
|
|
197
|
+
|
|
198
|
+
**Processing & Extensions**
|
|
199
|
+
- **Signal K Plugins** – Domain‑specific enrichment (polars, performance calculations, derived environmental data, routing aids) published directly into the Signal K data model that KIP can then display.
|
|
200
|
+
|
|
201
|
+
**Why this separation matters**
|
|
202
|
+
Keeping KIP focused preserves responsiveness (lower CPU / memory), reduces UI clutter, and accelerates iteration on core sailing UX. Heavy analytics, complex workflow logic, and broad third‑party embedding stay where they are strongest—outside—but still feed KIP through the common Signal K data fabric.
|
|
203
|
+
|
|
204
|
+
In short: use KIP to see & act on live sailing information; use the complementary tools to store it long‑term, analyze it deeply, automate decisions, or build advanced integrations.
|
|
205
|
+
|
|
169
206
|
**Tools**
|
|
170
207
|
Linux, Mac, RPi, or Windows dev platform supported
|
|
171
208
|
1. Install the latest Node version (v16+, v18 recommended)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxtommy/kip",
|
|
3
|
-
"version": "3.9.0-beta.
|
|
3
|
+
"version": "3.9.0-beta.15",
|
|
4
4
|
"description": "An advanced and versatile marine instrumentation package to display Signal K data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"@types/js-quantities": "^1.6.6",
|
|
70
70
|
"@types/lodash-es": "^4.17.9",
|
|
71
71
|
"@types/node": "^24.1.0",
|
|
72
|
+
"@zakj/no-sleep": "^0.13.5",
|
|
72
73
|
"angular-eslint": "20.1.1",
|
|
73
74
|
"chart.js": "^4.4.9",
|
|
74
75
|
"chartjs-adapter-date-fns": "^3.0.0",
|
|
@@ -98,7 +99,6 @@
|
|
|
98
99
|
"rxjs": "^7.8.2",
|
|
99
100
|
"sass": "^1.49.9",
|
|
100
101
|
"screenfull": "^6.0.2",
|
|
101
|
-
"@zakj/no-sleep": "^0.13.5",
|
|
102
102
|
"steelseries": "^2.0.9",
|
|
103
103
|
"ts-node": "^10.9.2",
|
|
104
104
|
"tslib": "^2.6.2",
|
|
@@ -1,28 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
--------------------------------------------------------------------------------
|
|
3
|
-
Package: howler
|
|
4
|
-
License: "MIT"
|
|
5
|
-
|
|
6
|
-
Copyright (c) 2013-2020 James Simpson and GoldFire Studios, Inc.
|
|
7
|
-
|
|
8
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
9
|
-
a copy of this software and associated documentation files (the
|
|
10
|
-
"Software"), to deal in the Software without restriction, including
|
|
11
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
12
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
13
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
14
|
-
the following conditions:
|
|
15
|
-
|
|
16
|
-
The above copyright notice and this permission notice shall be
|
|
17
|
-
included in all copies or substantial portions of the Software.
|
|
18
|
-
|
|
19
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
20
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
21
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
22
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
23
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
24
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
25
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
2
|
--------------------------------------------------------------------------------
|
|
27
3
|
Package: @godind/canvas-gauges
|
|
28
4
|
License: "MIT"
|
|
@@ -49,6 +25,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
49
25
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
50
26
|
SOFTWARE.
|
|
51
27
|
|
|
28
|
+
--------------------------------------------------------------------------------
|
|
29
|
+
Package: howler
|
|
30
|
+
License: "MIT"
|
|
31
|
+
|
|
32
|
+
Copyright (c) 2013-2020 James Simpson and GoldFire Studios, Inc.
|
|
33
|
+
|
|
34
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
35
|
+
a copy of this software and associated documentation files (the
|
|
36
|
+
"Software"), to deal in the Software without restriction, including
|
|
37
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
38
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
39
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
40
|
+
the following conditions:
|
|
41
|
+
|
|
42
|
+
The above copyright notice and this permission notice shall be
|
|
43
|
+
included in all copies or substantial portions of the Software.
|
|
44
|
+
|
|
45
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
46
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
47
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
48
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
49
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
50
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
51
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
52
52
|
--------------------------------------------------------------------------------
|
|
53
53
|
Package: gridstack
|
|
54
54
|
License: "MIT"
|
|
@@ -102,12 +102,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
102
102
|
THE SOFTWARE.
|
|
103
103
|
|
|
104
104
|
--------------------------------------------------------------------------------
|
|
105
|
-
Package:
|
|
105
|
+
Package: ngx-resize-observer
|
|
106
106
|
License: "MIT"
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
Copyright (c) 2025 Google LLC.
|
|
108
|
+
Copyright (c) 2017 Tyler Akins
|
|
111
109
|
|
|
112
110
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
113
111
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -116,22 +114,24 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
116
114
|
copies of the Software, and to permit persons to whom the Software is
|
|
117
115
|
furnished to do so, subject to the following conditions:
|
|
118
116
|
|
|
119
|
-
The above copyright notice and this permission notice shall be included in
|
|
120
|
-
|
|
117
|
+
The above copyright notice and this permission notice shall be included in all
|
|
118
|
+
copies or substantial portions of the Software.
|
|
121
119
|
|
|
122
120
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
123
121
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
124
122
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
125
123
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
126
124
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
127
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
128
|
-
|
|
125
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
126
|
+
SOFTWARE.
|
|
129
127
|
|
|
130
128
|
--------------------------------------------------------------------------------
|
|
131
|
-
Package:
|
|
129
|
+
Package: @angular/material
|
|
132
130
|
License: "MIT"
|
|
133
131
|
|
|
134
|
-
|
|
132
|
+
The MIT License
|
|
133
|
+
|
|
134
|
+
Copyright (c) 2025 Google LLC.
|
|
135
135
|
|
|
136
136
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
137
137
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -140,16 +140,16 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
140
140
|
copies of the Software, and to permit persons to whom the Software is
|
|
141
141
|
furnished to do so, subject to the following conditions:
|
|
142
142
|
|
|
143
|
-
The above copyright notice and this permission notice shall be included in
|
|
144
|
-
copies or substantial portions of the Software.
|
|
143
|
+
The above copyright notice and this permission notice shall be included in
|
|
144
|
+
all copies or substantial portions of the Software.
|
|
145
145
|
|
|
146
146
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
147
147
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
148
148
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
149
149
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
150
150
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
151
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
152
|
-
SOFTWARE.
|
|
151
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
152
|
+
THE SOFTWARE.
|
|
153
153
|
|
|
154
154
|
--------------------------------------------------------------------------------
|
|
155
155
|
Package: chartjs-plugin-annotation
|
|
@@ -243,6 +243,45 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
243
243
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
244
244
|
THE SOFTWARE.
|
|
245
245
|
|
|
246
|
+
--------------------------------------------------------------------------------
|
|
247
|
+
Package: screenfull
|
|
248
|
+
License: "MIT"
|
|
249
|
+
|
|
250
|
+
MIT License
|
|
251
|
+
|
|
252
|
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
253
|
+
|
|
254
|
+
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:
|
|
255
|
+
|
|
256
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
257
|
+
|
|
258
|
+
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.
|
|
259
|
+
|
|
260
|
+
--------------------------------------------------------------------------------
|
|
261
|
+
Package: @zakj/no-sleep
|
|
262
|
+
License: "MIT"
|
|
263
|
+
|
|
264
|
+
The MIT License (MIT)
|
|
265
|
+
|
|
266
|
+
Copyright (c) Zak Johnson Copyright (c) 2015-2020 Rich Tibbett
|
|
267
|
+
|
|
268
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
269
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
270
|
+
the Software without restriction, including without limitation the rights to
|
|
271
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
272
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
273
|
+
subject to the following conditions:
|
|
274
|
+
|
|
275
|
+
The above copyright notice and this permission notice shall be included in all
|
|
276
|
+
copies or substantial portions of the Software.
|
|
277
|
+
|
|
278
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
279
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
280
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
281
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
282
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
283
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
284
|
+
|
|
246
285
|
--------------------------------------------------------------------------------
|
|
247
286
|
Package: chart.js
|
|
248
287
|
License: "MIT"
|
|
@@ -413,45 +452,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
413
452
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
414
453
|
SOFTWARE.
|
|
415
454
|
|
|
416
|
-
--------------------------------------------------------------------------------
|
|
417
|
-
Package: screenfull
|
|
418
|
-
License: "MIT"
|
|
419
|
-
|
|
420
|
-
MIT License
|
|
421
|
-
|
|
422
|
-
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
423
|
-
|
|
424
|
-
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:
|
|
425
|
-
|
|
426
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
427
|
-
|
|
428
|
-
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.
|
|
429
|
-
|
|
430
|
-
--------------------------------------------------------------------------------
|
|
431
|
-
Package: @zakj/no-sleep
|
|
432
|
-
License: "MIT"
|
|
433
|
-
|
|
434
|
-
The MIT License (MIT)
|
|
435
|
-
|
|
436
|
-
Copyright (c) Zak Johnson Copyright (c) 2015-2020 Rich Tibbett
|
|
437
|
-
|
|
438
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
439
|
-
this software and associated documentation files (the "Software"), to deal in
|
|
440
|
-
the Software without restriction, including without limitation the rights to
|
|
441
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
442
|
-
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
443
|
-
subject to the following conditions:
|
|
444
|
-
|
|
445
|
-
The above copyright notice and this permission notice shall be included in all
|
|
446
|
-
copies or substantial portions of the Software.
|
|
447
|
-
|
|
448
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
449
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
450
|
-
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
451
|
-
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
452
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
453
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
454
|
-
|
|
455
455
|
--------------------------------------------------------------------------------
|
|
456
456
|
Package: js-quantities
|
|
457
457
|
License: "MIT"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Configuration Management
|
|
2
2
|
|
|
3
|
-
KIP provides a "Login to Server" option that determines where your configuration is stored. It is **strongly recommended** to enable server login in the **Settings** under the **Connectivity** tab. This ensures your configurations are stored remotely on the Signal K server. See the "Creating a Signal K user" section below for
|
|
3
|
+
KIP provides a "Login to Server" option that determines where your configuration is stored. It is **strongly recommended** to enable server login in the **Settings** under the **Connectivity** tab. This ensures your configurations are stored remotely on the Signal K server and allows automatic loading of configuration from any device. See the "Creating a Signal K user" section below for information on how to create a user.
|
|
4
4
|
|
|
5
|
-
- **Login to Server Enabled** (recommended setting): Configuration is stored remotely on the Signal K server.
|
|
6
|
-
- **Login to Server Disabled** (default value): Configuration is saved
|
|
5
|
+
- **Login to Server Enabled** (recommended setting): Configuration is stored remotely on the Signal K server. This mode allow automatic loading of your configuration from any device (also known as configuration sharing).
|
|
6
|
+
- **Login to Server Disabled** (default value): Configuration is saved on your computer/device, in the browser's private storage. In this mode, the configuration is per browser.
|
|
7
7
|
|
|
8
8
|
You can manage your configurations using the **Configurations** page, accessible from the right menu. Depending on your login mode, different management options are available.
|
|
9
9
|
|
|
@@ -54,4 +54,4 @@ Use advanced operations with caution. All changes affect your active configurati
|
|
|
54
54
|
|
|
55
55
|
KIP separates configuration into two parts:
|
|
56
56
|
1. **Server Connection**: This configuration is always stored locally in your browser and is never shared. It is used in the **Connectivity** tab of the **Settings** page.
|
|
57
|
-
2. **Application Settings**: This includes the configuration you can back up, delete, and restore
|
|
57
|
+
2. **Application Settings**: This includes the configuration settings you can back up, delete, and restore with the **Configurations** page. It contains all dashboards, widgets and other configuration settings.
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
You can organize your dashboards from the Dashboards page. To edit a dashboard layout, first visualize the dashboard and unlock it.
|
|
3
3
|
|
|
4
4
|
## Dashboard Pages
|
|
5
|
-
On the Dashboards page, you can add, reorder, delete, rename, and duplicate dashboards. The dashboard name is briefly visible when you cycle through dashboards. Available actions include:
|
|
5
|
+
On the Dashboards page, you can add, reorder, delete, rename, and duplicate dashboards. Each dashboard can have a custom name and icon for easy identification. The dashboard name is briefly visible when you cycle through dashboards. Available actions include:
|
|
6
6
|
- **Long press** a dashboard to delete or duplicate it.
|
|
7
|
-
- **Double tap** a dashboard to rename it.
|
|
7
|
+
- **Double tap** a dashboard to rename it and select an icon.
|
|
8
8
|
- **Touch and drag** to reorder dashboards.
|
|
9
9
|
- Use the **(+)** button to add a new dashboard.
|
|
10
10
|
|
|
11
|
+
When renaming or creating a dashboard, you can choose from a variety of icons to visually represent the dashboard's purpose (e.g., navigation, engine monitoring, weather). Icons are displayed in the dashboard menu for quick recognition.
|
|
12
|
+
|
|
11
13
|
## Editing Layout
|
|
12
14
|
To edit a dashboard's widgets and arrangement, you need to unlock its layout. View the desired dashboard, access the **Actions menu** on the right-hand side, and tap the bottom **unlock button**. The widgets will become surrounded by dashed borders, indicating you are in edit mode. Actions you can perform while editing a layout include:
|
|
13
15
|
- **Long press** an empty area of the dashboard to add a widget (you may need to free up space first).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<svg>
|
|
2
|
-
<
|
|
2
|
+
<defs id="defs1">
|
|
3
3
|
<svg id="dashboard" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
4
4
|
<path fill="currentColor" d="M5 5h4v6H5zm10 8h4v6h-4zM5 17h4v2H5zM15 5h4v2h-4z" opacity="0.3" />
|
|
5
5
|
<path fill="currentColor" d="M3 13h8V3H3zm2-8h4v6H5zm8 16h8V11h-8zm2-8h4v6h-4zM13 3v6h8V3zm6 4h-4V5h4zM3 21h8v-6H3zm2-4h4v2H5z" />
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as kt,e as Ot,f as Pt}from"./chunk-L4UIO6KZ.js";import{a as Rt,b as zt,c as Ft,d as At,e as Lt,f as Ht,g as Vt,h as Nt,i as Bt,j as Qt,k as jt,m as $t,n as pe,p as de,q as qt}from"./chunk-4TXMPFLE.js";import{f as It,n as Tt}from"./chunk-AWECVMCK.js";import{g as pt}from"./chunk-FI56NUZD.js";import{a as we}from"./chunk-JRXB4H3R.js";import{D as yt,G as St,I as Ct,J as ve,M as be,P as xt,Q as ye,R as Dt,X as Mt,Y as wt,Z as Et,aa as Se,da as Ce,k as Je,ka as xe,ma as De,oa as Me,p as Xe,t as ft,u as _t,w as gt,y as vt,z as bt}from"./chunk-IQFEZZ5Q.js";import{$b as s,A as Re,Aa as _,Ab as Ne,Ac as p,Bb as P,Bc as k,Cc as I,Ce as ct,Db as g,De as mt,Eb as Be,Fc as G,Gb as N,Gc as K,Ge as ge,Hb as Qe,Hc as U,Ja as x,Le as ut,Mc as qe,Na as Le,Nc as ue,Oa as X,Oc as We,Pc as he,Pe as ht,Qa as ee,Qc as Ge,Ra as te,Rc as Ke,Sb as B,Tb as D,Tc as Ue,Ub as M,Uc as Ze,Vd as et,Wb as R,Xb as z,Xc as le,Xd as tt,Yb as F,Zb as h,_b as r,ac as S,ae as it,cd as fe,ce as at,de as nt,ec as Q,fa as O,fc as j,fd as Z,g as Oe,ga as ze,gc as A,ha as T,hc as $,ic as q,jc as C,jd as Y,kd as Ye,lc as u,m as oe,mb as l,mc as ie,me as rt,nc as ae,ne as ot,oa as Fe,ob as V,oc as w,pc as ne,pe as st,qb as He,qc as v,ra as Ae,rc as b,t as Pe,ta as c,tb as Ve,tc as me,te as lt,uc as je,vc as W,wc as $e,xb as E,xc as L,xe as dt,za as f,zb as y,zc as se,zd as _e}from"./chunk-4BZUNPAS.js";var Wt=(()=>{class t{transform(e,i){return!e||!e.length?[]:i?e.filter(a=>a.includes("self")):e}static \u0275fac=function(i){return new(i||t)};static \u0275pipe=Ne({name:"filterSelf",type:t,pure:!0})}return t})();var ri=["*"];function oi(t,o){t&1&&ae(0)}var Ie=(()=>{class t{_elementRef=c(ee);constructor(){}focus(){this._elementRef.nativeElement.focus()}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["","cdkStepHeader",""]],hostAttrs:["role","tab"]})}return t})(),Te=(()=>{class t{template=c(V);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["","cdkStepLabel",""]]})}return t})();var H={NUMBER:"number",EDIT:"edit",DONE:"done",ERROR:"error"},si=new Ae("STEPPER_GLOBAL_OPTIONS"),ce=(()=>{class t{_stepperOptions;_stepper=c(J);_displayDefaultIndicatorType;stepLabel;_childForms;content;stepControl;get interacted(){return this._interacted()}set interacted(e){this._interacted.set(e)}_interacted=x(!1);interactedStream=new N;label;errorMessage;ariaLabel;ariaLabelledby;get state(){return this._state()}set state(e){this._state.set(e)}_state=x(void 0);get editable(){return this._editable()}set editable(e){this._editable.set(e)}_editable=x(!0);optional=!1;get completed(){let e=this._completedOverride(),i=this._interacted();return e??(i&&(!this.stepControl||this.stepControl.valid))}set completed(e){this._completedOverride.set(e)}_completedOverride=x(null);index=x(-1);isSelected=le(()=>this._stepper.selectedIndex===this.index());indicatorType=le(()=>{let e=this.isSelected(),i=this.completed,a=this._state()??H.NUMBER,n=this._editable();return this._showError()&&this.hasError&&!e?H.ERROR:this._displayDefaultIndicatorType?!i||e?H.NUMBER:n?H.EDIT:H.DONE:i&&!e?H.DONE:i&&e?a:n&&e?H.EDIT:a});isNavigable=le(()=>{let e=this.isSelected();return this.completed||e||!this._stepper.linear});get hasError(){let e=this._customError();return e??this._getDefaultError()}set hasError(e){this._customError.set(e)}_customError=x(null);_getDefaultError(){return this.interacted&&!!this.stepControl?.invalid}constructor(){let e=c(si,{optional:!0});this._stepperOptions=e||{},this._displayDefaultIndicatorType=this._stepperOptions.displayDefaultIndicatorType!==!1}select(){this._stepper.selected=this}reset(){this._interacted.set(!1),this._completedOverride()!=null&&this._completedOverride.set(!1),this._customError()!=null&&this._customError.set(!1),this.stepControl&&(this._childForms?.forEach(e=>e.resetForm?.()),this.stepControl.reset())}ngOnChanges(){this._stepper._stateChanged()}_markAsInteracted(){this._interacted()||(this._interacted.set(!0),this.interactedStream.emit(this))}_showError(){return this._stepperOptions.showError??this._customError()!=null}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=E({type:t,selectors:[["cdk-step"]],contentQueries:function(i,a,n){if(i&1&&(w(n,Te,5),w(n,St,5)),i&2){let d;v(d=b())&&(a.stepLabel=d.first),v(d=b())&&(a._childForms=d)}},viewQuery:function(i,a){if(i&1&&ne(V,7),i&2){let n;v(n=b())&&(a.content=n.first)}},inputs:{stepControl:"stepControl",label:"label",errorMessage:"errorMessage",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],state:"state",editable:[2,"editable","editable",Y],optional:[2,"optional","optional",Y],completed:[2,"completed","completed",Y],hasError:[2,"hasError","hasError",Y]},outputs:{interactedStream:"interacted"},exportAs:["cdkStep"],features:[Le],ngContentSelectors:ri,decls:1,vars:0,template:function(i,a){i&1&&(ie(),Be(0,oi,1,0,"ng-template"))},encapsulation:2,changeDetection:0})}return t})(),J=(()=>{class t{_dir=c(lt,{optional:!0});_changeDetectorRef=c(Z);_elementRef=c(ee);_destroyed=new oe;_keyManager;_steps;steps=new te;_stepHeader;_sortedHeaders=new te;linear=!1;get selectedIndex(){return this._selectedIndex()}set selectedIndex(e){this._steps?(this._isValidIndex(e),this.selectedIndex!==e&&(this.selected?._markAsInteracted(),!this._anyControlsInvalidOrPending(e)&&(e>=this.selectedIndex||this.steps.toArray()[e].editable)&&this._updateSelectedItemIndex(e))):this._selectedIndex.set(e)}_selectedIndex=x(0);get selected(){return this.steps?this.steps.toArray()[this.selectedIndex]:void 0}set selected(e){this.selectedIndex=e&&this.steps?this.steps.toArray().indexOf(e):-1}selectionChange=new N;selectedIndexChange=new N;_groupId=c(rt).getId("cdk-stepper-");get orientation(){return this._orientation}set orientation(e){this._orientation=e,this._keyManager&&this._keyManager.withVerticalOrientation(e==="vertical")}_orientation="horizontal";constructor(){}ngAfterContentInit(){this._steps.changes.pipe(O(this._steps),T(this._destroyed)).subscribe(e=>{this.steps.reset(e.filter(i=>i._stepper===this)),this.steps.forEach((i,a)=>i.index.set(a)),this.steps.notifyOnChanges()})}ngAfterViewInit(){if(this._stepHeader.changes.pipe(O(this._stepHeader),T(this._destroyed)).subscribe(e=>{this._sortedHeaders.reset(e.toArray().sort((i,a)=>i._elementRef.nativeElement.compareDocumentPosition(a._elementRef.nativeElement)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1)),this._sortedHeaders.notifyOnChanges()}),this._keyManager=new st(this._sortedHeaders).withWrap().withHomeAndEnd().withVerticalOrientation(this._orientation==="vertical"),this._keyManager.updateActiveItem(this.selectedIndex),(this._dir?this._dir.change:Pe()).pipe(O(this._layoutDirection()),T(this._destroyed)).subscribe(e=>this._keyManager?.withHorizontalOrientation(e)),this._keyManager.updateActiveItem(this.selectedIndex),this.steps.changes.subscribe(()=>{this.selected||this._selectedIndex.set(Math.max(this.selectedIndex-1,0))}),this._isValidIndex(this.selectedIndex)||this._selectedIndex.set(0),this.linear&&this.selectedIndex>0){let e=this.steps.toArray().slice(0,this._selectedIndex());for(let i of e)i._markAsInteracted()}}ngOnDestroy(){this._keyManager?.destroy(),this.steps.destroy(),this._sortedHeaders.destroy(),this._destroyed.next(),this._destroyed.complete()}next(){this.selectedIndex=Math.min(this._selectedIndex()+1,this.steps.length-1)}previous(){this.selectedIndex=Math.max(this._selectedIndex()-1,0)}reset(){this._updateSelectedItemIndex(0),this.steps.forEach(e=>e.reset()),this._stateChanged()}_getStepLabelId(e){return`${this._groupId}-label-${e}`}_getStepContentId(e){return`${this._groupId}-content-${e}`}_stateChanged(){this._changeDetectorRef.markForCheck()}_getAnimationDirection(e){let i=e-this._selectedIndex();return i<0?this._layoutDirection()==="rtl"?"next":"previous":i>0?this._layoutDirection()==="rtl"?"previous":"next":"current"}_getFocusIndex(){return this._keyManager?this._keyManager.activeItemIndex:this._selectedIndex()}_updateSelectedItemIndex(e){let i=this.steps.toArray(),a=this._selectedIndex();this.selectionChange.emit({selectedIndex:e,previouslySelectedIndex:a,selectedStep:i[e],previouslySelectedStep:i[a]}),this._keyManager&&(this._containsFocus()?this._keyManager.setActiveItem(e):this._keyManager.updateActiveItem(e)),this._selectedIndex.set(e),this.selectedIndexChange.emit(e),this._stateChanged()}_onKeydown(e){let i=ot(e),a=e.keyCode,n=this._keyManager;n?.activeItemIndex!=null&&!i&&(a===32||a===13)?(this.selectedIndex=n.activeItemIndex,e.preventDefault()):n?.setFocusOrigin("keyboard").onKeydown(e)}_anyControlsInvalidOrPending(e){return this.linear&&e>=0?this.steps.toArray().slice(0,e).some(i=>{let a=i.stepControl;return(a?a.invalid||a.pending||!i.interacted:!i.completed)&&!i.optional&&!i._completedOverride()}):!1}_layoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_containsFocus(){let e=this._elementRef.nativeElement,i=et();return e===i||e.contains(i)}_isValidIndex(e){return e>-1&&(!this.steps||e<this.steps.length)}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["","cdkStepper",""]],contentQueries:function(i,a,n){if(i&1&&(w(n,ce,5),w(n,Ie,5)),i&2){let d;v(d=b())&&(a._steps=d),v(d=b())&&(a._stepHeader=d)}},inputs:{linear:[2,"linear","linear",Y],selectedIndex:[2,"selectedIndex","selectedIndex",Ye],selected:"selected",orientation:"orientation"},outputs:{selectionChange:"selectionChange",selectedIndexChange:"selectedIndexChange"},exportAs:["cdkStepper"]})}return t})(),Gt=(()=>{class t{_stepper=c(J);type="submit";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["button","cdkStepperNext",""]],hostVars:1,hostBindings:function(i,a){i&1&&C("click",function(){return a._stepper.next()}),i&2&&q("type",a.type)},inputs:{type:"type"}})}return t})(),Kt=(()=>{class t{_stepper=c(J);type="button";constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["button","cdkStepperPrevious",""]],hostVars:1,hostBindings:function(i,a){i&1&&C("click",function(){return a._stepper.previous()}),i&2&&q("type",a.type)},inputs:{type:"type"}})}return t})();var li=(t,o,e)=>({index:t,active:o,optional:e});function pi(t,o){if(t&1&&A(0,2),t&2){let e=u();h("ngTemplateOutlet",e.iconOverrides[e.state])("ngTemplateOutletContext",Ge(2,li,e.index,e.active,e.optional))}}function di(t,o){if(t&1&&(r(0,"span",7),p(1),s()),t&2){let e=u(2);l(),k(e._getDefaultTextForState(e.state))}}function ci(t,o){if(t&1&&(r(0,"span",8),p(1),s()),t&2){let e=u(3);l(),k(e._intl.completedLabel)}}function mi(t,o){if(t&1&&(r(0,"span",8),p(1),s()),t&2){let e=u(3);l(),k(e._intl.editableLabel)}}function ui(t,o){if(t&1&&(D(0,ci,2,1,"span",8)(1,mi,2,1,"span",8),r(2,"mat-icon",7),p(3),s()),t&2){let e=u(2);M(e.state==="done"?0:e.state==="edit"?1:-1),l(3),k(e._getDefaultTextForState(e.state))}}function hi(t,o){if(t&1&&D(0,di,2,1,"span",7)(1,ui,4,2),t&2){let e,i=u();M((e=i.state)==="number"?0:1)}}function fi(t,o){t&1&&(r(0,"div",4),A(1,9),s()),t&2&&(l(),h("ngTemplateOutlet",o.template))}function _i(t,o){if(t&1&&(r(0,"div",4),p(1),s()),t&2){let e=u();l(),k(e.label)}}function gi(t,o){if(t&1&&(r(0,"div",5),p(1),s()),t&2){let e=u();l(),k(e._intl.optionalLabel)}}function vi(t,o){if(t&1&&(r(0,"div",6),p(1),s()),t&2){let e=u();l(),k(e.errorMessage)}}var Zt=["*"];function bi(t,o){}function yi(t,o){if(t&1&&(ae(0),g(1,bi,0,0,"ng-template",0)),t&2){let e=u();l(),h("cdkPortalOutlet",e._portal)}}var Si=["animatedContainer"],Yt=t=>({step:t});function Ci(t,o){t&1&&ae(0)}function xi(t,o){t&1&&S(0,"div",7)}function Di(t,o){if(t&1&&(A(0,6),D(1,xi,1,0,"div",7)),t&2){let e=o.$implicit,i=o.$index,a=o.$count;u(2);let n=W(4);h("ngTemplateOutlet",n)("ngTemplateOutletContext",he(3,Yt,e)),l(),M(i!==a-1?1:-1)}}function Mi(t,o){if(t&1&&(r(0,"div",8,1),A(2,9),s()),t&2){let e=o.$implicit,i=o.$index,a=u(2);se("mat-horizontal-stepper-content-"+a._getAnimationDirection(i)),h("id",a._getStepContentId(i)),B("aria-labelledby",a._getStepLabelId(i))("inert",a.selectedIndex===i?null:""),l(2),h("ngTemplateOutlet",e.content)}}function wi(t,o){if(t&1&&(r(0,"div",2)(1,"div",3),z(2,Di,2,5,null,null,R),s(),r(4,"div",4),z(5,Mi,3,6,"div",5,R),s()()),t&2){let e=u();l(2),F(e.steps),l(3),F(e.steps)}}function Ei(t,o){if(t&1&&(r(0,"div",10),A(1,6),r(2,"div",11,1)(4,"div",12)(5,"div",13),A(6,9),s()()()()),t&2){let e=o.$implicit,i=o.$index,a=o.$index,n=o.$count,d=u(2),m=W(4);l(),h("ngTemplateOutlet",m)("ngTemplateOutletContext",he(10,Yt,e)),l(),L("mat-stepper-vertical-line",a!==n-1)("mat-vertical-content-container-active",d.selectedIndex===i),B("inert",d.selectedIndex===i?null:""),l(2),h("id",d._getStepContentId(i)),B("aria-labelledby",d._getStepLabelId(i)),l(2),h("ngTemplateOutlet",e.content)}}function Ii(t,o){if(t&1&&z(0,Ei,7,12,"div",10,R),t&2){let e=u();F(e.steps)}}function Ti(t,o){if(t&1){let e=$();r(0,"mat-step-header",14),C("click",function(){let a=f(e).step;return _(a.select())})("keydown",function(a){f(e);let n=u();return _(n._onKeydown(a))}),s()}if(t&2){let e=o.step,i=u();L("mat-horizontal-stepper-header",i.orientation==="horizontal")("mat-vertical-stepper-header",i.orientation==="vertical"),h("tabIndex",i._getFocusIndex()===e.index()?0:-1)("id",i._getStepLabelId(e.index()))("index",e.index())("state",e.indicatorType())("label",e.stepLabel||e.label)("selected",e.isSelected())("active",e.isNavigable())("optional",e.optional)("errorMessage",e.errorMessage)("iconOverrides",i._iconOverrides)("disableRipple",i.disableRipple||!e.isNavigable())("color",e.color||i.color),B("aria-posinset",e.index()+1)("aria-setsize",i.steps.length)("aria-controls",i._getStepContentId(e.index()))("aria-selected",e.isSelected())("aria-label",e.ariaLabel||null)("aria-labelledby",!e.ariaLabel&&e.ariaLabelledby?e.ariaLabelledby:null)("aria-disabled",e.isNavigable()?null:!0)}}var re=(()=>{class t extends Te{static \u0275fac=(()=>{let e;return function(a){return(e||(e=X(t)))(a||t)}})();static \u0275dir=y({type:t,selectors:[["","matStepLabel",""]],features:[P]})}return t})(),ki=(()=>{class t{changes=new oe;optionalLabel="Optional";completedLabel="Completed";editableLabel="Editable";static \u0275fac=function(i){return new(i||t)};static \u0275prov=Fe({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Ut=(()=>{class t extends Ie{_intl=c(ki);_focusMonitor=c(it);_intlSubscription;state;label;errorMessage;iconOverrides;index;selected;active;optional;disableRipple;color;constructor(){super();let e=c(at);e.load(mt),e.load(nt);let i=c(Z);this._intlSubscription=this._intl.changes.subscribe(()=>i.markForCheck())}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._intlSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._elementRef)}focus(e,i){e?this._focusMonitor.focusVia(this._elementRef,e,i):this._elementRef.nativeElement.focus(i)}_stringLabel(){return this.label instanceof re?null:this.label}_templateLabel(){return this.label instanceof re?this.label:null}_getHostElement(){return this._elementRef.nativeElement}_getDefaultTextForState(e){return e=="number"?`${this.index+1}`:e=="edit"?"create":e=="error"?"warning":e}_hasEmptyLabel(){return!this._stringLabel()&&!this._templateLabel()&&!this._hasOptionalLabel()&&!this._hasErrorLabel()}_hasOptionalLabel(){return this.optional&&this.state!=="error"}_hasErrorLabel(){return this.state==="error"}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=E({type:t,selectors:[["mat-step-header"]],hostAttrs:["role","tab",1,"mat-step-header"],hostVars:4,hostBindings:function(i,a){i&2&&(se("mat-"+(a.color||"primary")),L("mat-step-header-empty-label",a._hasEmptyLabel()))},inputs:{state:"state",label:"label",errorMessage:"errorMessage",iconOverrides:"iconOverrides",index:"index",selected:"selected",active:"active",optional:"optional",disableRipple:"disableRipple",color:"color"},features:[P],decls:10,vars:17,consts:[["matRipple","",1,"mat-step-header-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled"],[1,"mat-step-icon-content"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-step-label"],[1,"mat-step-text-label"],[1,"mat-step-optional"],[1,"mat-step-sub-label-error"],["aria-hidden","true"],[1,"cdk-visually-hidden"],[3,"ngTemplateOutlet"]],template:function(i,a){if(i&1&&(S(0,"div",0),r(1,"div")(2,"div",1),D(3,pi,1,6,"ng-container",2)(4,hi,2,1),s()(),r(5,"div",3),D(6,fi,2,1,"div",4)(7,_i,2,1,"div",4),D(8,gi,2,1,"div",5),D(9,vi,2,1,"div",6),s()),i&2){let n;h("matRippleTrigger",a._getHostElement())("matRippleDisabled",a.disableRipple),l(),se(qe("mat-step-icon-state-",a.state," mat-step-icon")),L("mat-step-icon-selected",a.selected),l(2),M(a.iconOverrides&&a.iconOverrides[a.state]?3:4),l(2),L("mat-step-label-active",a.active)("mat-step-label-selected",a.selected)("mat-step-label-error",a.state=="error"),l(),M((n=a._templateLabel())?6:a._stringLabel()?7:-1,n),l(2),M(a._hasOptionalLabel()?8:-1),l(),M(a._hasErrorLabel()?9:-1)}},dependencies:[ct,_e,pt],styles:[`.mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:""}.mat-step-header:hover[aria-disabled=true]{cursor:default}.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:var(--mat-stepper-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent));border-radius:var(--mat-stepper-header-hover-state-layer-shape, var(--mat-sys-corner-medium))}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused{background-color:var(--mat-stepper-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent));border-radius:var(--mat-stepper-header-focus-state-layer-shape, var(--mat-sys-corner-medium))}@media(hover: none){.mat-step-header:hover{background:none}}@media(forced-colors: active){.mat-step-header{outline:solid 1px}.mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-header[aria-disabled=true]{outline-color:GrayText}.mat-step-header[aria-disabled=true] .mat-step-label,.mat-step-header[aria-disabled=true] .mat-step-icon,.mat-step-header[aria-disabled=true] .mat-step-optional{color:GrayText}}.mat-step-optional{font-size:12px;color:var(--mat-stepper-header-optional-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-sub-label-error{font-size:12px;font-weight:normal}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative;color:var(--mat-stepper-header-icon-foreground-color, var(--mat-sys-surface));background-color:var(--mat-stepper-header-icon-background-color, var(--mat-sys-on-surface-variant))}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error{background-color:var(--mat-stepper-header-error-state-icon-background-color, transparent);color:var(--mat-stepper-header-error-state-icon-foreground-color, var(--mat-sys-error))}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle;font-family:var(--mat-stepper-header-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-stepper-header-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-stepper-header-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-stepper-header-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-label.mat-step-label-active{color:var(--mat-stepper-header-selected-state-label-text-color, var(--mat-sys-on-surface-variant))}.mat-step-label.mat-step-label-error{color:var(--mat-stepper-header-error-state-label-text-color, var(--mat-sys-error));font-size:var(--mat-stepper-header-error-state-label-text-size, var(--mat-sys-title-small-size))}.mat-step-label.mat-step-label-selected{font-size:var(--mat-stepper-header-selected-state-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-stepper-header-selected-state-label-text-weight, var(--mat-sys-title-small-weight))}.mat-step-header-empty-label .mat-step-label{min-width:0}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-step-icon-selected{background-color:var(--mat-stepper-header-selected-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-selected-state-icon-foreground-color, var(--mat-sys-on-primary))}.mat-step-icon-state-done{background-color:var(--mat-stepper-header-done-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-done-state-icon-foreground-color, var(--mat-sys-on-primary))}.mat-step-icon-state-edit{background-color:var(--mat-stepper-header-edit-state-icon-background-color, var(--mat-sys-primary));color:var(--mat-stepper-header-edit-state-icon-foreground-color, var(--mat-sys-on-primary))}
|
|
2
|
+
`],encapsulation:2,changeDetection:0})}return t})(),Oi=(()=>{class t{templateRef=c(V);name;constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["ng-template","matStepperIcon",""]],inputs:{name:[0,"matStepperIcon","name"]}})}return t})(),Pi=(()=>{class t{_template=c(V);constructor(){}static \u0275fac=function(i){return new(i||t)};static \u0275dir=y({type:t,selectors:[["ng-template","matStepContent",""]]})}return t})(),ke=(()=>{class t extends ce{_errorStateMatcher=c(De,{skipSelf:!0});_viewContainerRef=c(Ve);_isSelected=Oe.EMPTY;stepLabel=void 0;color;_lazyContent;_portal;ngAfterContentInit(){this._isSelected=this._stepper.steps.changes.pipe(ze(()=>this._stepper.selectionChange.pipe(Re(e=>e.selectedStep===this),O(this._stepper.selected===this)))).subscribe(e=>{e&&this._lazyContent&&!this._portal&&(this._portal=new ut(this._lazyContent._template,this._viewContainerRef))})}ngOnDestroy(){this._isSelected.unsubscribe()}isErrorState(e,i){let a=this._errorStateMatcher.isErrorState(e,i),n=!!(e&&e.invalid&&this.interacted);return a||n}static \u0275fac=(()=>{let e;return function(a){return(e||(e=X(t)))(a||t)}})();static \u0275cmp=E({type:t,selectors:[["mat-step"]],contentQueries:function(i,a,n){if(i&1&&(w(n,re,5),w(n,Pi,5)),i&2){let d;v(d=b())&&(a.stepLabel=d.first),v(d=b())&&(a._lazyContent=d.first)}},hostAttrs:["hidden",""],inputs:{color:"color"},exportAs:["matStep"],features:[ue([{provide:De,useExisting:t},{provide:ce,useExisting:t}]),P],ngContentSelectors:Zt,decls:1,vars:0,consts:[[3,"cdkPortalOutlet"]],template:function(i,a){i&1&&(ie(),g(0,yi,2,1,"ng-template"))},dependencies:[ht],encapsulation:2,changeDetection:0})}return t})(),Jt=(()=>{class t extends J{_ngZone=c(Qe);_renderer=c(He);_animationsDisabled=dt();_cleanupTransition;_isAnimating=x(!1);_stepHeader=void 0;_animatedContainers;_steps=void 0;steps=new te;_icons;animationDone=new N;disableRipple;color;labelPosition="end";headerPosition="top";_iconOverrides={};get animationDuration(){return this._animationDuration}set animationDuration(e){this._animationDuration=/^\d+$/.test(e)?e+"ms":e}_animationDuration="";_isServer=!c(tt).isBrowser;constructor(){super();let i=c(ee).nativeElement.nodeName.toLowerCase();this.orientation=i==="mat-vertical-stepper"?"vertical":"horizontal"}ngAfterContentInit(){super.ngAfterContentInit(),this._icons.forEach(({name:e,templateRef:i})=>this._iconOverrides[e]=i),this.steps.changes.pipe(T(this._destroyed)).subscribe(()=>this._stateChanged()),this.selectedIndexChange.pipe(T(this._destroyed)).subscribe(()=>{let e=this._getAnimationDuration();e==="0ms"||e==="0s"?this._onAnimationDone():this._isAnimating.set(!0)}),this._ngZone.runOutsideAngular(()=>{this._animationsDisabled||setTimeout(()=>{this._elementRef.nativeElement.classList.add("mat-stepper-animations-enabled"),this._cleanupTransition=this._renderer.listen(this._elementRef.nativeElement,"transitionend",this._handleTransitionend)},200)})}ngAfterViewInit(){if(super.ngAfterViewInit(),typeof queueMicrotask=="function"){let e=!1;this._animatedContainers.changes.pipe(O(null),T(this._destroyed)).subscribe(()=>queueMicrotask(()=>{e||(e=!0,this.animationDone.emit()),this._stateChanged()}))}}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransition?.()}_getAnimationDuration(){return this._animationsDisabled?"0ms":this.animationDuration?this.animationDuration:this.orientation==="horizontal"?"500ms":"225ms"}_handleTransitionend=e=>{let i=e.target;if(!i)return;let a=this.orientation==="horizontal"&&e.propertyName==="transform"&&i.classList.contains("mat-horizontal-stepper-content-current"),n=this.orientation==="vertical"&&e.propertyName==="grid-template-rows"&&i.classList.contains("mat-vertical-content-container-active");(a||n)&&this._animatedContainers.find(m=>m.nativeElement===i)&&this._onAnimationDone()};_onAnimationDone(){this._isAnimating.set(!1),this.animationDone.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=E({type:t,selectors:[["mat-stepper"],["mat-vertical-stepper"],["mat-horizontal-stepper"],["","matStepper",""]],contentQueries:function(i,a,n){if(i&1&&(w(n,ke,5),w(n,Oi,5)),i&2){let d;v(d=b())&&(a._steps=d),v(d=b())&&(a._icons=d)}},viewQuery:function(i,a){if(i&1&&(ne(Ut,5),ne(Si,5)),i&2){let n;v(n=b())&&(a._stepHeader=n),v(n=b())&&(a._animatedContainers=n)}},hostAttrs:["role","tablist"],hostVars:15,hostBindings:function(i,a){i&2&&(B("aria-orientation",a.orientation),$e("--mat-stepper-animation-duration",a._getAnimationDuration()),L("mat-stepper-horizontal",a.orientation==="horizontal")("mat-stepper-vertical",a.orientation==="vertical")("mat-stepper-label-position-end",a.orientation==="horizontal"&&a.labelPosition=="end")("mat-stepper-label-position-bottom",a.orientation==="horizontal"&&a.labelPosition=="bottom")("mat-stepper-header-position-bottom",a.headerPosition==="bottom")("mat-stepper-animating",a._isAnimating()))},inputs:{disableRipple:"disableRipple",color:"color",labelPosition:"labelPosition",headerPosition:"headerPosition",animationDuration:"animationDuration"},outputs:{animationDone:"animationDone"},exportAs:["matStepper","matVerticalStepper","matHorizontalStepper"],features:[ue([{provide:J,useExisting:t}]),P],ngContentSelectors:Zt,decls:5,vars:2,consts:[["stepTemplate",""],["animatedContainer",""],[1,"mat-horizontal-stepper-wrapper"],[1,"mat-horizontal-stepper-header-container"],[1,"mat-horizontal-content-container"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id","class"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"mat-stepper-horizontal-line"],["role","tabpanel",1,"mat-horizontal-stepper-content",3,"id"],[3,"ngTemplateOutlet"],[1,"mat-step"],[1,"mat-vertical-content-container"],["role","tabpanel",1,"mat-vertical-stepper-content",3,"id"],[1,"mat-vertical-content"],[3,"click","keydown","tabIndex","id","index","state","label","selected","active","optional","errorMessage","iconOverrides","disableRipple","color"]],template:function(i,a){if(i&1&&(ie(),D(0,Ci,1,0),D(1,wi,7,0,"div",2)(2,Ii,2,0),g(3,Ti,1,23,"ng-template",null,0,Ze)),i&2){let n;M(a._isServer?0:-1),l(),M((n=a.orientation)==="horizontal"?1:n==="vertical"?2:-1)}},dependencies:[_e,Ut],styles:[`.mat-stepper-vertical,.mat-stepper-horizontal{display:block;font-family:var(--mat-stepper-container-text-font, var(--mat-sys-body-medium-font));background:var(--mat-stepper-container-color, var(--mat-sys-surface))}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px;border-top-color:var(--mat-stepper-line-color, var(--mat-sys-outline))}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:"";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;overflow:hidden;align-items:center;padding:0 24px;height:var(--mat-stepper-header-height, 72px)}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-horizontal-stepper-header.mat-step-header-empty-label .mat-step-icon{margin:0}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after{border-top-color:var(--mat-stepper-line-color, var(--mat-sys-outline))}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{padding:calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after{top:calc(calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px;padding:calc((var(--mat-stepper-header-height, 72px) - 24px) / 2) 24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{visibility:hidden;overflow:hidden;outline:0;height:0}.mat-stepper-animations-enabled .mat-horizontal-stepper-content{transition:transform var(--mat-stepper-animation-duration, 0) cubic-bezier(0.35, 0, 0.25, 1)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-previous{transform:translate3d(-100%, 0, 0)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-next{transform:translate3d(100%, 0, 0)}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-current{visibility:visible;transform:none;height:auto}.mat-stepper-horizontal:not(.mat-stepper-animating) .mat-horizontal-stepper-content.mat-horizontal-stepper-content-current{overflow:visible}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}@media(forced-colors: active){.mat-horizontal-content-container{outline:solid 1px}}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{display:grid;grid-template-rows:0fr;grid-template-columns:100%;margin-left:36px;border:0;position:relative}.mat-stepper-animations-enabled .mat-vertical-content-container{transition:grid-template-rows var(--mat-stepper-animation-duration, 0) cubic-bezier(0.4, 0, 0.2, 1)}.mat-vertical-content-container.mat-vertical-content-container-active{grid-template-rows:1fr}.mat-step:last-child .mat-vertical-content-container{border:none}@media(forced-colors: active){.mat-vertical-content-container{outline:solid 1px}}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}@supports not (grid-template-rows: 0fr){.mat-vertical-content-container{height:0}.mat-vertical-content-container.mat-vertical-content-container-active{height:auto}}.mat-stepper-vertical-line::before{content:"";position:absolute;left:0;border-left-width:1px;border-left-style:solid;border-left-color:var(--mat-stepper-line-color, var(--mat-sys-outline));top:calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2));bottom:calc(8px - calc((var(--mat-stepper-header-height, 72px) - 24px) / 2))}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0;visibility:hidden}.mat-stepper-animations-enabled .mat-vertical-stepper-content{transition:visibility var(--mat-stepper-animation-duration, 0) linear}.mat-vertical-content-container-active>.mat-vertical-stepper-content{visibility:visible}.mat-vertical-content{padding:0 24px 24px 24px}
|
|
3
|
+
`],encapsulation:2,changeDetection:0})}return t})(),Xt=(()=>{class t extends Gt{static \u0275fac=(()=>{let e;return function(a){return(e||(e=X(t)))(a||t)}})();static \u0275dir=y({type:t,selectors:[["button","matStepperNext",""]],hostAttrs:[1,"mat-stepper-next"],hostVars:1,hostBindings:function(i,a){i&2&&q("type",a.type)},features:[P]})}return t})(),ei=(()=>{class t extends Kt{static \u0275fac=(()=>{let e;return function(a){return(e||(e=X(t)))(a||t)}})();static \u0275dir=y({type:t,selectors:[["button","matStepperPrevious",""]],hostAttrs:[1,"mat-stepper-previous"],hostVars:1,hostBindings:function(i,a){i&2&&q("type",a.type)},features:[P]})}return t})();var Ri=()=>[5,10,25,100];function zi(t,o){t&1&&(r(0,"mat-header-cell",29),p(1," Path "),s())}function Fi(t,o){if(t&1&&(r(0,"mat-cell",30),p(1),s()),t&2){let e=o.$implicit;l(),I(" ",e.path," ")}}function Ai(t,o){t&1&&(r(0,"mat-header-cell",31),p(1," Source "),s())}function Li(t,o){if(t&1&&(r(0,"mat-cell",32),p(1),s()),t&2){let e=o.$implicit;l(),I(" ",e.pathSource," ")}}function Hi(t,o){t&1&&(r(0,"mat-header-cell",31),p(1," Time Scale "),s())}function Vi(t,o){if(t&1&&(r(0,"mat-cell",33),p(1),s()),t&2){let e=o.$implicit;l(),I(" ",e.timeScaleFormat," ")}}function Ni(t,o){t&1&&(r(0,"mat-header-cell",31),p(1," Duration "),s())}function Bi(t,o){if(t&1&&(r(0,"mat-cell",33),p(1),s()),t&2){let e=o.$implicit;l(),I(" ",e.period," ")}}function Qi(t,o){t&1&&S(0,"mat-header-cell",34)}function ji(t,o){if(t&1){let e=$();r(0,"mat-cell",35)(1,"button",36),C("click",function(){let a=f(e).$implicit,n=u();return _(n.openDatasetModal(a.uuid))}),p(2,"Edit"),s(),r(3,"button",36),C("click",function(){let a=f(e).$implicit,n=u();return _(n.deleteDataset(a.uuid))}),p(4,"Delete"),s()()}}function $i(t,o){t&1&&S(0,"mat-header-row",37)}function qi(t,o){t&1&&S(0,"mat-row",38)}function Wi(t,o){if(t&1&&(r(0,"mat-row"),p(1),s()),t&2){u();let e=W(9);l(),I(' No data matching the filter "',e.value,'" ')}}function Gi(t,o){t&1&&p(0,"Source Data")}function Ki(t,o){if(t&1&&(r(0,"mat-option",7),p(1),s()),t&2){let e=o.$implicit;h("value",e),l(),I(" ",e," ")}}function Ui(t,o){if(t&1&&(r(0,"mat-option",7),p(1),s()),t&2){let e=o.$implicit;h("value",e),l(),I(" ",e," ")}}function Zi(t,o){t&1&&p(0,"Sampling")}var ii="[_nghost-%COMP%]{display:block;height:100%;width:100%}.content-area[_ngcontent-%COMP%]{height:calc(100% - 63px);overflow-y:auto;width:100%;scroll-behavior:smooth}.filter[_ngcontent-%COMP%]{margin-bottom:10px}.buttons[_ngcontent-%COMP%]{margin-top:10px}.mat-column-actions[_ngcontent-%COMP%]{text-align:end}.buttons[_ngcontent-%COMP%]{margin-right:5px}.pathCell[_ngcontent-%COMP%], .pathHeader[_ngcontent-%COMP%]{flex:1 1 50%}.dataHeader[_ngcontent-%COMP%], .dataCell[_ngcontent-%COMP%]{flex:1 1 10%;justify-content:center}.actionHeader[_ngcontent-%COMP%]{flex:1 1 20%}.actionCell[_ngcontent-%COMP%]{flex:1 1 20%;justify-content:end}@media screen and (max-width: 750px){.pathHeader[_ngcontent-%COMP%], .dataHeader[_ngcontent-%COMP%]{flex:1 1 30%}.actionHeader[_ngcontent-%COMP%]{display:none}.mat-mdc-table[_ngcontent-%COMP%] .mat-mdc-cell[_ngcontent-%COMP%]:before{content:attr(data-label);float:left;padding-right:5px}mat-row[_ngcontent-%COMP%]:after{min-height:auto;padding-bottom:10px}.dataRow[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.dataCell[_ngcontent-%COMP%], .actionCell[_ngcontent-%COMP%]{margin-left:24px}}",bn=(()=>{class t{paginator=fe(pe);sort=fe(de);pageTitle="Datasets";selectedDataset;tableData=new $t([]);displayedColumns=["path","pathSource","timeScaleFormat","period","actions"];dialog=c(gt);cdRef=c(Z);dsService=c(Pt);ngOnInit(){this.loadDatasets()}loadDatasets(){this.tableData.data=this.dsService.list().filter(e=>e.editable!==!1)}ngAfterViewInit(){this.tableData.paginator=this.paginator(),this.tableData.sort=this.sort(),this.tableData.filter="",this.cdRef.detectChanges()}openDatasetModal(e){let i;if(e){let a=Je(this.tableData.data.find(n=>n.uuid===e));a&&(i=this.dialog.open(ti,{data:a,disableClose:!1}))}else i=this.dialog.open(ti,{disableClose:!1});i.afterClosed().subscribe(a=>{a===void 0||!a||(a.label=`${a.path}, Source: ${a.pathSource}, Scale: ${a.timeScaleFormat}, Period: ${a.period} `,a.uuid?this.editDataset(a):this.addDataset(a),this.loadDatasets())})}addDataset(e){this.dsService.create(e.path,e.pathSource,e.timeScaleFormat,e.period,e.label,!0,!0),this.loadDatasets()}editDataset(e){this.dsService.edit(e),this.loadDatasets()}deleteDataset(e){this.dsService.remove(e),this.loadDatasets()}trackByUuid(e,i){return`${i.uuid}`}applyFilter(e){let i=e.target.value;this.tableData.filter=i.trim().toLowerCase(),this.tableData.paginator&&this.tableData.paginator.firstPage()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=E({type:t,selectors:[["settings-datasets"]],viewQuery:function(i,a){i&1&&(me(a.paginator,pe,5),me(a.sort,de,5)),i&2&&je(2)},decls:36,vars:7,consts:[["existingDataSet","ngForm"],["input",""],[1,"content-area"],["name","existingDataSet",1,"page-content-wrapper","content-area"],[1,"mat-card-subtitle","description-text"],[1,"filter"],["matInput","","placeholder","Ex: navigation","value","",3,"keyup"],[1,"mat-elevation-z8","full-width","table-container"],["matSort","","matSortActive","path","matSortDirection","asc",1,"full-display",3,"dataSource","trackBy"],["matColumnDef","path"],["class","pathHeader","mat-sort-header","",4,"matHeaderCellDef"],["class","pathCell","data-label","Path: ",4,"matCellDef"],["matColumnDef","pathSource"],["class","dataHeader","mat-sort-header","",4,"matHeaderCellDef"],["class","dataCell","data-label","Source: ",4,"matCellDef"],["matColumnDef","timeScaleFormat"],["class","dataCell","data-label","Scale: ",4,"matCellDef"],["matColumnDef","period"],["matColumnDef","actions"],["class","actionHeader","mat-sort-header","",4,"matHeaderCellDef"],["class","actionCell",4,"matCellDef"],["class","headerRow",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","dataRow",4,"matRowDef","matRowDefColumns"],[4,"matNoDataRow"],[1,"paginator"],["pageSize","5",3,"pageSizeOptions"],[1,"formActionFooter"],[1,"formActionDivider"],["mat-flat-button","",1,"formActionButton",3,"click"],["mat-sort-header","",1,"pathHeader"],["data-label","Path: ",1,"pathCell"],["mat-sort-header","",1,"dataHeader"],["data-label","Source: ",1,"dataCell"],["data-label","Scale: ",1,"dataCell"],["mat-sort-header","",1,"actionHeader"],[1,"actionCell"],["mat-raised-button","","color","accent",1,"small-button","buttons",3,"click"],[1,"headerRow"],[1,"dataRow"]],template:function(i,a){if(i&1){let n=$();r(0,"div",2)(1,"form",3,0)(3,"p",4),p(4,"Datasets are background processes that record path values over time. Combine with the Data Chart widget they offer data visualization graphs. Care should be applied to manage Datasets and evaluate system resources usage. "),s(),r(5,"mat-form-field",5)(6,"mat-label"),p(7,"Filter"),s(),r(8,"input",6,1),C("keyup",function(m){return f(n),_(a.applyFilter(m))}),s()(),r(10,"div",7)(11,"mat-table",8),Q(12,9),g(13,zi,2,0,"mat-header-cell",10)(14,Fi,2,1,"mat-cell",11),j(),Q(15,12),g(16,Ai,2,0,"mat-header-cell",13)(17,Li,2,1,"mat-cell",14),j(),Q(18,15),g(19,Hi,2,0,"mat-header-cell",13)(20,Vi,2,1,"mat-cell",16),j(),Q(21,17),g(22,Ni,2,0,"mat-header-cell",13)(23,Bi,2,1,"mat-cell",16),j(),Q(24,18),g(25,Qi,1,0,"mat-header-cell",19)(26,ji,5,0,"mat-cell",20),j(),g(27,$i,1,0,"mat-header-row",21)(28,qi,1,0,"mat-row",22)(29,Wi,2,1,"mat-row",23),s()(),r(30,"div",24),S(31,"mat-paginator",25),s(),r(32,"div",26),S(33,"mat-divider",27),r(34,"button",28),C("click",function(){return f(n),_(a.openDatasetModal())}),p(35,"Add"),s()()()()}i&2&&(l(11),h("dataSource",a.tableData)("trackBy",a.trackByUuid),l(16),h("matHeaderRowDef",a.displayedColumns)("matHeaderRowDefSticky",!0),l(),h("matRowDefColumns",a.displayedColumns),l(3),h("pageSizeOptions",We(6,Ri)))},dependencies:[Se,ye,ve,be,xe,Ce,Me,Rt,de,At,Ft,Lt,qt,zt,Ht,ge,Vt,Bt,Nt,Qt,jt,pe,we],styles:[ii]})}return t})(),ti=(()=>{class t{SignalKDataService=c(Xe);dialogRef=c(ft);dataset=c(_t);titleDialog=null;newDataset={uuid:null,path:null,pathSource:null,baseUnit:null,timeScaleFormat:"second",period:10,label:null};formDataset=null;availablePaths=[];availableSources=[];filterSelfPaths=!0;ngOnInit(){if(this.dataset){this.titleDialog="Edit Dataset",this.formDataset=this.dataset;let e=this.SignalKDataService.getPathObject(this.formDataset.path);e!==null&&(this.availableSources=["default"].concat(Object.keys(e.sources)))}else this.titleDialog="Add Dataset",this.formDataset=this.newDataset;this.availablePaths=this.SignalKDataService.getPathsByType("number").sort()}changePath(){let e=this.SignalKDataService.getPathObject(this.formDataset.path);e!==null&&(this.availableSources=["default"].concat(Object.keys(e.sources)),this.formDataset.pathSource="default")}closeForm(){this.dialogRef.close(this.formDataset)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=E({type:t,selectors:[["settings-datasets-modal"]],decls:67,vars:11,consts:[["datasetForm","ngForm"],["mat-dialog-title",""],["name","datasetForm",3,"ngSubmit"],["matStepLabel",""],[1,"tab-content"],[1,"full-width"],["placeholder","Select data path","name","selectedPath","required","",3,"ngModelChange","ngModel"],[3,"value"],["name","filterSelfPaths",3,"ngModelChange","ngModel"],["placeholder","Select data source","name","selectedSource","required","",3,"ngModelChange","ngModel"],[1,"buttons"],["type","button","mat-raised-button","","color","accent","matStepperNext","",3,"disabled"],[1,"mat-subtitle-1"],[1,"flex-container",2,"margin-top","10px"],[1,"flex-field-50"],["placeholder","Select dataset time scale","name","timeScaleFormat","required","",3,"ngModelChange","ngModel"],["value","hour"],["value","minute"],["value","second"],["matInput","","type","number","min","1","max","60","step","1","placeholder","Enter or select number...","name","period","required","",3,"ngModelChange","ngModel"],[2,"margin-top","10px"],["type","button","mat-raised-button","","color","accent","matStepperPrevious","",1,"buttons"],["mat-raised-button","","type","submit","color","accent",1,"buttons",3,"disabled"]],template:function(i,a){if(i&1){let n=$();r(0,"h6",1),p(1),s(),r(2,"mat-dialog-content")(3,"form",2,0),C("ngSubmit",function(){return f(n),_(a.closeForm())}),r(5,"mat-horizontal-stepper")(6,"mat-step"),g(7,Gi,1,0,"ng-template",3),r(8,"div",4)(9,"mat-form-field",5)(10,"mat-label"),p(11,"Signal K Path"),s(),r(12,"mat-select",6),U("ngModelChange",function(m){return f(n),K(a.formDataset.path,m)||(a.formDataset.path=m),_(m)}),C("ngModelChange",function(){return f(n),_(a.changePath())}),z(13,Ki,2,2,"mat-option",7,R),Ke(15,"filterSelf"),s()(),r(16,"mat-checkbox",8),U("ngModelChange",function(m){return f(n),K(a.filterSelfPaths,m)||(a.filterSelfPaths=m),_(m)}),p(17," Restrict to own vessel "),s(),S(18,"br")(19,"br"),r(20,"mat-form-field",5)(21,"mat-label"),p(22,"Source"),s(),r(23,"mat-select",9),U("ngModelChange",function(m){return f(n),K(a.formDataset.pathSource,m)||(a.formDataset.pathSource=m),_(m)}),z(24,Ui,2,2,"mat-option",7,R),s()()(),S(26,"mat-divider"),r(27,"div",10)(28,"button",11),p(29," Next "),s()()(),r(30,"mat-step"),g(31,Zi,1,0,"ng-template",3),r(32,"div",4)(33,"span",12),p(34,"Time Scales"),s(),r(35,"div",13)(36,"div",14)(37,"mat-form-field",5)(38,"mat-label"),p(39,"Scale"),s(),r(40,"mat-select",15),U("ngModelChange",function(m){return f(n),K(a.formDataset.timeScaleFormat,m)||(a.formDataset.timeScaleFormat=m),_(m)}),r(41,"mat-option",16),p(42,"Hours"),s(),r(43,"mat-option",17),p(44,"Minutes"),s(),r(45,"mat-option",18),p(46,"Seconds"),s()()()(),r(47,"div",14)(48,"mat-form-field",5)(49,"mat-label"),p(50,"Duration"),s(),r(51,"input",19),U("ngModelChange",function(m){return f(n),K(a.formDataset.period,m)||(a.formDataset.period=m),_(m)}),s()()()(),r(52,"p",20),p(53,"Time scales define the data sampling rate and overall Dataset level of precision. Select a Time Scale that is targeted to your intended usage. Shorter Time Scales have higher system resources costs, for both the data capture and widget rendering process. "),s(),r(54,"ul")(55,"li"),p(56,"Hours: per minute sampling rate. Intended for long sampling periods when slow refresh rate is acceptable and system resource usage should be minimized. Grafana is the perfect alternative to this Time Scale. "),s(),r(57,"li"),p(58,"Minutes: per second sampling rate. Meant for trends observations such wind speed, depth, solar power, voltage, etc. "),s(),r(59,"li"),p(60,"Secondes: 200ms sampling rate. Intended for use cases where user may act upon realtime information such as when racing. "),s()()(),S(61,"mat-divider"),r(62,"div",10)(63,"button",21),p(64," Back "),s(),r(65,"button",22),p(66," Save "),s()()()()()()}if(i&2){let n=W(4);l(),I(" ",a.titleDialog," "),l(11),G("ngModel",a.formDataset.path),l(),F(Ue(15,8,a.availablePaths,a.filterSelfPaths)),l(3),G("ngModel",a.filterSelfPaths),l(7),G("ngModel",a.formDataset.pathSource),l(),F(a.availableSources),l(4),h("disabled",!a.formDataset.path),l(12),G("ngModel",a.formDataset.timeScaleFormat),l(11),G("ngModel",a.formDataset.period),l(14),h("disabled",!n.valid)}},dependencies:[Ot,vt,bt,Se,ye,yt,Dt,Ct,ve,Et,wt,Mt,xt,be,Jt,ke,re,xe,Ce,Tt,It,kt,we,ge,Xt,Me,ei,Wt],styles:[ii]})}return t})();export{bn as a,ti as b};
|