@signalk/freeboard-sk 3.0.0-beta.4 → 3.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -2
- package/public/3rdpartylicenses.txt +204 -89
- package/public/assets/features/chart-image-adjustment-1.jpg +0 -0
- package/public/assets/features/cursor-eta-1.jpg +0 -0
- package/public/assets/features/custom-map-symbols-1.jpg +0 -0
- package/public/assets/features/extension-panels-1.jpg +0 -0
- package/public/assets/features/extension-panels-2.jpg +0 -0
- package/public/assets/features/route-planning-1.jpg +0 -0
- package/public/assets/features/screen-widgets-1.jpg +0 -0
- package/public/assets/features/vessel-tracks-1.jpg +0 -0
- package/public/assets/features/weather-overlays-1.jpg +0 -0
- package/public/assets/features/weather-overlays-2.jpg +0 -0
- package/public/assets/features/weather-station-wind-barbs-1.jpg +0 -0
- package/public/assets/features-corpus.json +1 -0
- package/public/chunk-3BQ5RDDM.js +1 -0
- package/public/chunk-3CRIFTHA.js +106 -0
- package/public/chunk-4BSA3TDQ.js +1709 -0
- package/public/{chunk-E3NU2HIR.js → chunk-4BXCQ655.js} +2 -2
- package/public/chunk-4JHNLGK4.js +1 -0
- package/public/{chunk-2E6LEX6X.js → chunk-5YCNPW7M.js} +1 -1
- package/public/chunk-BJM4SVXD.js +3 -0
- package/public/chunk-BT4IAQBW.js +181 -0
- package/public/chunk-BUZHYJBN.js +1 -0
- package/public/chunk-CATOWZ7J.js +1 -0
- package/public/chunk-FPX76ANK.js +1 -0
- package/public/chunk-GHN3L3U7.js +1 -0
- package/public/chunk-I3OUN6B4.js +35 -0
- package/public/chunk-I52SSF5D.js +1 -0
- package/public/chunk-ISSYYBS2.js +4147 -0
- package/public/chunk-IURS3QQO.js +83 -0
- package/public/chunk-IYNTZMNB.js +824 -0
- package/public/chunk-LXTM3LEN.js +779 -0
- package/public/chunk-OXZNIUU4.js +1 -0
- package/public/chunk-QJ6KIYPA.js +1 -0
- package/public/chunk-UF7LOYCE.js +107 -0
- package/public/{chunk-PEC6ZGZT.js → chunk-WX7YZB5N.js} +3 -37
- package/public/chunk-XHEJEIFO.js +1 -0
- package/public/index.html +2 -2
- package/public/main-4WEWE6IY.js +466 -0
- package/public/{styles-FMJMFQ5P.css → styles-4PTRKEMS.css} +1 -1
- package/public/chunk-25YKCA66.js +0 -1145
- package/public/chunk-5EMYKEQQ.js +0 -1
- package/public/chunk-6OLNESWL.js +0 -929
- package/public/chunk-6U267SFF.js +0 -1
- package/public/chunk-74KWRC7R.js +0 -1
- package/public/chunk-CP3JNVJQ.js +0 -3874
- package/public/chunk-DI2Z6WN4.js +0 -1
- package/public/chunk-J7PBTBQW.js +0 -1
- package/public/chunk-MDMA57E3.js +0 -1
- package/public/chunk-PD24DQFJ.js +0 -1
- package/public/chunk-QYCAVSMC.js +0 -107
- package/public/chunk-W672EMFZ.js +0 -1
- package/public/chunk-WILLX6Y3.js +0 -1
- package/public/chunk-XKSYGWTR.js +0 -1709
- package/public/main-OEZGVDMV.js +0 -466
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signalk/freeboard-sk",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-rc.2",
|
|
4
4
|
"description": "Openlayers chart plotter implementation for Signal K",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"signalk-webapp",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"signalk-plugin-enabled-by-default": true,
|
|
38
38
|
"scripts": {
|
|
39
39
|
"ng": "ng",
|
|
40
|
+
"prestart": "node scripts/build-features.mjs",
|
|
40
41
|
"start": "ng serve",
|
|
41
42
|
"build": "ng build",
|
|
42
43
|
"test": "ng test",
|
|
@@ -45,12 +46,16 @@
|
|
|
45
46
|
"format:helper": "prettier --ignore-path .gitignore --write \"helper/**/*.+(ts|html)\"",
|
|
46
47
|
"format:all": "npm run format && npm run format:helper",
|
|
47
48
|
"build:helper": "tsc -p tsconfig-helper.json",
|
|
49
|
+
"build:features": "node scripts/build-features.mjs",
|
|
50
|
+
"prebuild:web": "node scripts/build-features.mjs",
|
|
48
51
|
"build:web": "node scripts/build-web.mjs",
|
|
49
52
|
"build:sit": "ng build -c development --aot",
|
|
50
53
|
"build:all": "npm run build:helper && npm run build:web",
|
|
51
54
|
"build:prod": "npm run build:all",
|
|
52
55
|
"prepack": "npm run build:all",
|
|
53
|
-
"test:ci": "node scripts/test-ci.mjs"
|
|
56
|
+
"test:ci": "node scripts/test-ci.mjs",
|
|
57
|
+
"test:tools": "vitest run --config dev-tools/changelog/vitest.config.mjs",
|
|
58
|
+
"version": "node dev-tools/changelog/index.mjs stamp && git add features/changelog.json"
|
|
54
59
|
},
|
|
55
60
|
"author": "AdrianP",
|
|
56
61
|
"contributors": [
|
|
@@ -66,8 +71,11 @@
|
|
|
66
71
|
"@signalk/server-api": "^2.24.0",
|
|
67
72
|
"geolib": "^3.3.3",
|
|
68
73
|
"google-protobuf": "^4.0.1",
|
|
74
|
+
"remark-gfm": "^4.0.1",
|
|
75
|
+
"remark-parse": "^11.0.0",
|
|
69
76
|
"signalk-plotterext-bus": "^0.10.0",
|
|
70
77
|
"tslib": "^2.0.0",
|
|
78
|
+
"unified": "^11.0.5",
|
|
71
79
|
"uuid": "^14.0.1"
|
|
72
80
|
},
|
|
73
81
|
"devDependencies": {
|
|
@@ -1,4 +1,56 @@
|
|
|
1
1
|
|
|
2
|
+
--------------------------------------------------------------------------------
|
|
3
|
+
Package: @angular/cdk
|
|
4
|
+
License: "MIT"
|
|
5
|
+
|
|
6
|
+
The MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Google LLC.
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in
|
|
18
|
+
all copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
26
|
+
THE SOFTWARE.
|
|
27
|
+
|
|
28
|
+
--------------------------------------------------------------------------------
|
|
29
|
+
Package: @angular/material
|
|
30
|
+
License: "MIT"
|
|
31
|
+
|
|
32
|
+
The MIT License
|
|
33
|
+
|
|
34
|
+
Copyright (c) 2026 Google LLC.
|
|
35
|
+
|
|
36
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
37
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
38
|
+
in the Software without restriction, including without limitation the rights
|
|
39
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
40
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
41
|
+
furnished to do so, subject to the following conditions:
|
|
42
|
+
|
|
43
|
+
The above copyright notice and this permission notice shall be included in
|
|
44
|
+
all copies or substantial portions of the Software.
|
|
45
|
+
|
|
46
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
47
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
48
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
49
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
50
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
51
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
52
|
+
THE SOFTWARE.
|
|
53
|
+
|
|
2
54
|
--------------------------------------------------------------------------------
|
|
3
55
|
Package: lerc
|
|
4
56
|
License: "Apache-2.0"
|
|
@@ -110,32 +162,6 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
110
162
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
111
163
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
112
164
|
|
|
113
|
-
--------------------------------------------------------------------------------
|
|
114
|
-
Package: @angular/material
|
|
115
|
-
License: "MIT"
|
|
116
|
-
|
|
117
|
-
The MIT License
|
|
118
|
-
|
|
119
|
-
Copyright (c) 2026 Google LLC.
|
|
120
|
-
|
|
121
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
122
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
123
|
-
in the Software without restriction, including without limitation the rights
|
|
124
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
125
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
126
|
-
furnished to do so, subject to the following conditions:
|
|
127
|
-
|
|
128
|
-
The above copyright notice and this permission notice shall be included in
|
|
129
|
-
all copies or substantial portions of the Software.
|
|
130
|
-
|
|
131
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
132
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
133
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
134
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
135
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
136
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
137
|
-
THE SOFTWARE.
|
|
138
|
-
|
|
139
165
|
--------------------------------------------------------------------------------
|
|
140
166
|
Package: geolib
|
|
141
167
|
License: "MIT"
|
|
@@ -349,60 +375,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
349
375
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
350
376
|
SOFTWARE.
|
|
351
377
|
|
|
352
|
-
--------------------------------------------------------------------------------
|
|
353
|
-
Package: extend
|
|
354
|
-
License: "MIT"
|
|
355
|
-
|
|
356
|
-
The MIT License (MIT)
|
|
357
|
-
|
|
358
|
-
Copyright (c) 2014 Stefan Thomas
|
|
359
|
-
|
|
360
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
361
|
-
a copy of this software and associated documentation files (the
|
|
362
|
-
"Software"), to deal in the Software without restriction, including
|
|
363
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
364
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
365
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
366
|
-
the following conditions:
|
|
367
|
-
|
|
368
|
-
The above copyright notice and this permission notice shall be
|
|
369
|
-
included in all copies or substantial portions of the Software.
|
|
370
|
-
|
|
371
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
372
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
373
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
374
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
375
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
376
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
377
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
--------------------------------------------------------------------------------
|
|
381
|
-
Package: @angular/cdk
|
|
382
|
-
License: "MIT"
|
|
383
|
-
|
|
384
|
-
The MIT License
|
|
385
|
-
|
|
386
|
-
Copyright (c) 2026 Google LLC.
|
|
387
|
-
|
|
388
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
389
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
390
|
-
in the Software without restriction, including without limitation the rights
|
|
391
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
392
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
393
|
-
furnished to do so, subject to the following conditions:
|
|
394
|
-
|
|
395
|
-
The above copyright notice and this permission notice shall be included in
|
|
396
|
-
all copies or substantial portions of the Software.
|
|
397
|
-
|
|
398
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
399
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
400
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
401
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
402
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
403
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
404
|
-
THE SOFTWARE.
|
|
405
|
-
|
|
406
378
|
--------------------------------------------------------------------------------
|
|
407
379
|
Package: ol
|
|
408
380
|
License: "BSD-2-Clause"
|
|
@@ -886,6 +858,69 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
886
858
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
887
859
|
SOFTWARE.
|
|
888
860
|
|
|
861
|
+
--------------------------------------------------------------------------------
|
|
862
|
+
Package: extend
|
|
863
|
+
License: "MIT"
|
|
864
|
+
|
|
865
|
+
The MIT License (MIT)
|
|
866
|
+
|
|
867
|
+
Copyright (c) 2014 Stefan Thomas
|
|
868
|
+
|
|
869
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
870
|
+
a copy of this software and associated documentation files (the
|
|
871
|
+
"Software"), to deal in the Software without restriction, including
|
|
872
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
873
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
874
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
875
|
+
the following conditions:
|
|
876
|
+
|
|
877
|
+
The above copyright notice and this permission notice shall be
|
|
878
|
+
included in all copies or substantial portions of the Software.
|
|
879
|
+
|
|
880
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
881
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
882
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
883
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
884
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
885
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
886
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
--------------------------------------------------------------------------------
|
|
890
|
+
Package: bail
|
|
891
|
+
License: "MIT"
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
--------------------------------------------------------------------------------
|
|
895
|
+
Package: unified
|
|
896
|
+
License: "MIT"
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
--------------------------------------------------------------------------------
|
|
900
|
+
Package: is-plain-obj
|
|
901
|
+
License: "MIT"
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
--------------------------------------------------------------------------------
|
|
905
|
+
Package: trough
|
|
906
|
+
License: "MIT"
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
--------------------------------------------------------------------------------
|
|
910
|
+
Package: unist-util-stringify-position
|
|
911
|
+
License: "MIT"
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
--------------------------------------------------------------------------------
|
|
915
|
+
Package: vfile-message
|
|
916
|
+
License: "MIT"
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
--------------------------------------------------------------------------------
|
|
920
|
+
Package: vfile
|
|
921
|
+
License: "MIT"
|
|
922
|
+
|
|
923
|
+
|
|
889
924
|
--------------------------------------------------------------------------------
|
|
890
925
|
Package: mdast-util-to-string
|
|
891
926
|
License: "MIT"
|
|
@@ -982,47 +1017,127 @@ License: "MIT"
|
|
|
982
1017
|
|
|
983
1018
|
|
|
984
1019
|
--------------------------------------------------------------------------------
|
|
985
|
-
Package:
|
|
1020
|
+
Package: mdast-util-from-markdown
|
|
986
1021
|
License: "MIT"
|
|
987
1022
|
|
|
988
1023
|
|
|
989
1024
|
--------------------------------------------------------------------------------
|
|
990
|
-
Package:
|
|
1025
|
+
Package: remark-parse
|
|
991
1026
|
License: "MIT"
|
|
992
1027
|
|
|
993
1028
|
|
|
994
1029
|
--------------------------------------------------------------------------------
|
|
995
|
-
Package:
|
|
1030
|
+
Package: ccount
|
|
996
1031
|
License: "MIT"
|
|
997
1032
|
|
|
998
1033
|
|
|
999
1034
|
--------------------------------------------------------------------------------
|
|
1000
|
-
Package:
|
|
1035
|
+
Package: escape-string-regexp
|
|
1001
1036
|
License: "MIT"
|
|
1002
1037
|
|
|
1003
1038
|
|
|
1004
1039
|
--------------------------------------------------------------------------------
|
|
1005
|
-
Package:
|
|
1040
|
+
Package: unist-util-is
|
|
1006
1041
|
License: "MIT"
|
|
1007
1042
|
|
|
1008
1043
|
|
|
1009
1044
|
--------------------------------------------------------------------------------
|
|
1010
|
-
Package:
|
|
1045
|
+
Package: unist-util-visit-parents
|
|
1011
1046
|
License: "MIT"
|
|
1012
1047
|
|
|
1013
1048
|
|
|
1014
1049
|
--------------------------------------------------------------------------------
|
|
1015
|
-
Package:
|
|
1050
|
+
Package: mdast-util-find-and-replace
|
|
1016
1051
|
License: "MIT"
|
|
1017
1052
|
|
|
1018
1053
|
|
|
1019
1054
|
--------------------------------------------------------------------------------
|
|
1020
|
-
Package:
|
|
1055
|
+
Package: mdast-util-gfm-autolink-literal
|
|
1021
1056
|
License: "MIT"
|
|
1022
1057
|
|
|
1023
1058
|
|
|
1024
1059
|
--------------------------------------------------------------------------------
|
|
1025
|
-
Package:
|
|
1060
|
+
Package: mdast-util-gfm-footnote
|
|
1061
|
+
License: "MIT"
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
--------------------------------------------------------------------------------
|
|
1065
|
+
Package: mdast-util-gfm-strikethrough
|
|
1066
|
+
License: "MIT"
|
|
1067
|
+
|
|
1068
|
+
|
|
1069
|
+
--------------------------------------------------------------------------------
|
|
1070
|
+
Package: markdown-table
|
|
1071
|
+
License: "MIT"
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
--------------------------------------------------------------------------------
|
|
1075
|
+
Package: mdast-util-to-markdown
|
|
1076
|
+
License: "MIT"
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
--------------------------------------------------------------------------------
|
|
1080
|
+
Package: longest-streak
|
|
1081
|
+
License: "MIT"
|
|
1082
|
+
|
|
1083
|
+
|
|
1084
|
+
--------------------------------------------------------------------------------
|
|
1085
|
+
Package: unist-util-visit
|
|
1086
|
+
License: "MIT"
|
|
1087
|
+
|
|
1088
|
+
|
|
1089
|
+
--------------------------------------------------------------------------------
|
|
1090
|
+
Package: mdast-util-phrasing
|
|
1091
|
+
License: "MIT"
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
--------------------------------------------------------------------------------
|
|
1095
|
+
Package: mdast-util-gfm-table
|
|
1096
|
+
License: "MIT"
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
--------------------------------------------------------------------------------
|
|
1100
|
+
Package: mdast-util-gfm-task-list-item
|
|
1101
|
+
License: "MIT"
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
--------------------------------------------------------------------------------
|
|
1105
|
+
Package: mdast-util-gfm
|
|
1106
|
+
License: "MIT"
|
|
1107
|
+
|
|
1108
|
+
|
|
1109
|
+
--------------------------------------------------------------------------------
|
|
1110
|
+
Package: micromark-extension-gfm-autolink-literal
|
|
1111
|
+
License: "MIT"
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
--------------------------------------------------------------------------------
|
|
1115
|
+
Package: micromark-extension-gfm-footnote
|
|
1116
|
+
License: "MIT"
|
|
1117
|
+
|
|
1118
|
+
|
|
1119
|
+
--------------------------------------------------------------------------------
|
|
1120
|
+
Package: micromark-extension-gfm-strikethrough
|
|
1121
|
+
License: "MIT"
|
|
1122
|
+
|
|
1123
|
+
|
|
1124
|
+
--------------------------------------------------------------------------------
|
|
1125
|
+
Package: micromark-extension-gfm-table
|
|
1126
|
+
License: "MIT"
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
--------------------------------------------------------------------------------
|
|
1130
|
+
Package: micromark-extension-gfm-task-list-item
|
|
1131
|
+
License: "MIT"
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
--------------------------------------------------------------------------------
|
|
1135
|
+
Package: micromark-extension-gfm
|
|
1136
|
+
License: "MIT"
|
|
1137
|
+
|
|
1138
|
+
|
|
1139
|
+
--------------------------------------------------------------------------------
|
|
1140
|
+
Package: remark-gfm
|
|
1026
1141
|
License: "MIT"
|
|
1027
1142
|
|
|
1028
1143
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"docs":[{"id":"buddy-list","raw":"---\nid: buddy-list\ntitle: Buddy List\ncategory: AIS & Vessels\n---\n\nKeep track of boats you know — friends, other boats in your flotilla — by\nmarking them as **buddies**, then filter the vessel list down to just them\nwhen you want to find one quickly.\n\nThis requires the [signalk-buddylist-plugin](https://www.npmjs.com/package/signalk-buddylist-plugin)\ninstalled on your Signal K server. Without it, Freeboard behaves as before —\nthere's no buddy marking or filtering available.\n\n**To mark a vessel as a buddy**, tap it on the chart to open its popover and\ntap the **Is Buddy** button. Tap it again to remove the mark.\n\n**To see just your buddies**, open **Vessels** from the main menu and switch\non the **Buddies Only** toggle in the filter row. The list narrows to the\nvessels you've marked. Buddies Only can be combined with the list's other\nfilters — Ship Type and IMO Only — to narrow things down further.\n"},{"id":"chart-image-adjustment","raw":"---\nid: chart-image-adjustment\ntitle: Chart Image Adjustment\ncategory: Charts\n---\n\n\n\nAerial and satellite chart imagery is usually exposed for the land, which\ncan leave the water — where the hazards are — looking crushed and nearly\nblack. Adjusting the brightness and contrast can pull submerged rocks,\nshallows, and reefs back into view, which is handy when you're scouting an\nanchorage.\n\n**To adjust a chart's image**, open the chart list and tap the **tune**\nicon next to a chart (it appears alongside the existing opacity control,\nfor image-based charts only). A dialog offers **Brightness** and\n**Contrast** sliders with a live preview on the chart as you drag them, a\n**RESET** button to put both back to neutral, and **SAVE** to keep your\nchanges.\n\nYour adjustment is saved with that chart, alongside its opacity, so it's\nstill applied the next time you open Freeboard. Left untouched, a chart\nlooks exactly as it always has — the neutral default makes no visible\nchange.\n\nThis applies to raster, tile, WMS, and WMTS image charts. Vector charts\n(like S-57) don't have an image to adjust, so the control doesn't appear\nfor them.\n"},{"id":"chart-zoom-limits","raw":"---\nid: chart-zoom-limits\ntitle: Chart Zoom Limits\ncategory: Charts\n---\n\nEvery chart holds detail down to a certain resolution and no further. Zoom in past that\npoint and you aren't shown more information — you're shown the last real chart data\nmagnified, which looks sharper than it is. Freeboard gives you two controls over what\nhappens at that boundary.\n\n## Constrain map zoom\n\nThe **Constrain map zoom** button (the `zoom_in_map` icon on the right-hand toolbar) stops\nthe map at the edge of your chart data. Turn it on and you simply cannot zoom in — or out —\nbeyond the range your selected charts actually cover. The button highlights while active,\nand the zoom **+** / **−** buttons grey out once you reach a limit.\n\nThe limits are taken from the **widest** range across all currently selected charts: the\nlowest minimum zoom and the highest maximum zoom of any of them. Selecting or deselecting\ncharts recalculates it, so the constraint always reflects what you have switched on. Charts\nthat don't declare their own zoom range fall back to a 0–24 range. With the setting off,\nthe map is free to move between zoom 2 and 28 regardless of what your charts hold.\n\nThis is off by default. It matters most when you're working from downloaded or offline\nchart sets — a cached raster or MBTiles collection on a boat with no internet — where\nzooming past the data can't be rescued by fetching better tiles, and where a magnified\ntile can read as detail that was never surveyed.\n\n## Keep tiles visible on max zoom\n\nThe companion setting, **Keep tiles visible on max zoom** (Settings → Map), decides what a\nchart layer does once you pass *its* maximum zoom. Leave it on — it is on by default — and\nthe chart keeps drawing, stretched, instead of disappearing. Turn it off and each layer\nstops rendering beyond the resolution it genuinely has, leaving the chart blank there.\n\nIt also matters when charts of different resolutions are stacked. In a selection mixing a\nwide-area chart with a detailed harbour chart, the lower-resolution one keeps rendering\n(stretched) up to the map's maximum rather than dropping out as you zoom in.\n\nThe two settings answer different questions: *Constrain map zoom* decides **whether you can\nget there at all**, while *Keep tiles visible on max zoom* decides **what you see if you\ndo**. With the defaults — constrain off, keep-tiles on — you can zoom freely and charts\nstay visible but progressively blurrier past their real detail.\n"},{"id":"cursor-eta","raw":"---\nid: cursor-eta\ntitle: Live ETA at Cursor\ncategory: Display\n---\n\n\n\nGet a quick bearing, distance, and time estimate to any point on the chart,\njust by pointing at it — without setting a destination first.\n\n**To turn it on**, go to **Settings → Display → Status Bar Options** and\ncheck **Live ETA at cursor**. As you move the mouse over the chart, the\nstatus bar adds the bearing, distance, and ETA from your boat to the cursor,\nalongside the existing latitude/longitude readout. It's off by default and\nonly updates as the mouse moves, so it's a planning aid for anyone at a\ndesktop or laptop rather than something you'll see on a touchscreen at the\nhelm.\n\nThe ETA uses your boat's current speed over ground. If you're stopped — at\nanchor, hove to — there's no speed to estimate from, so Freeboard falls back\nto a **Reference Boat Speed** you set alongside the checkbox, keeping the\nETA useful even when you're not moving.\n"},{"id":"custom-map-symbols","raw":"---\nid: custom-map-symbols\ntitle: Custom Map Symbols\ncategory: Charts\n---\n\n\n\nFreeboard normally marks notes, waypoints, your boat, AIS traffic, aids to\nnavigation, and route points with its own built-in icons. If you'd rather use\nyour own artwork — a personal marker for a favorite dive site, a custom boat\nicon for your own vessel, a branded buoy — you can, once you install a\n**symbol provider** app on your Signal K server. Freeboard picks up whatever\nicons the provider offers and uses them automatically — there's nothing to\nturn on.\n\nThe reference app for this is\n[signalk-symbol-manager](https://www.npmjs.com/package/signalk-symbol-manager),\nwhich gives you a simple web page for uploading and organizing your own icons.\nAny similar app that publishes icons the standard way works too.\n\n## Two ways to use a custom icon\n\n**Replace one of Freeboard's built-in icons.** Give your icon the same name\nas the built-in you want to replace (for example `dive-site`) and mark it as\nbelonging to Freeboard's icon set. Your version then shows up everywhere that\nicon is normally used — on the chart and in the icon pickers — without you\nhaving to touch any existing notes or waypoints. See the reference list below\nfor which built-in names you can replace.\n\n**Add a brand-new icon.** Give your icon a new name of your choosing and it\nshows up as an extra option in the icon pickers, alongside the built-ins.\n\nWhen you've replaced a built-in, the picker shows only your version — not\nboth — so the list doesn't get cluttered. Flip the **\"Show all symbols\"**\ntoggle in a note or waypoint's icon picker to see everything at once,\nbuilt-ins included, in case you ever want to go back to the original. If you\ndeliberately pick the original built-in this way, Freeboard remembers your\nchoice and won't swap your custom icon back in later.\n\n## Where custom icons show up\n\n| Area | Custom icons? |\n|------|:---:|\n| Notes | Yes |\n| Waypoints | Yes |\n| Your own vessel | Yes |\n| AIS vessels | Yes |\n| Aids to navigation | Yes |\n| Route start / turn / end points | Yes |\n| Special waypoint markers (start pin, start boat, sightings, alarms) | No |\n| Shaded chart areas | No |\n| Dots for moored vessels | No |\n\nIcons that normally rotate to a heading or bearing — your vessel, AIS\ntargets, aids to navigation, route turn points — keep rotating correctly even\nwhen you've replaced them with your own artwork.\n\n## Built-in icon names you can replace\n\nTo replace one of these, give your icon the matching name below.\n\n**Note and waypoint markers:**\n\n```\nanchorage boatramp bridge business dam\ndive-site ferry hazard inlet lock\nmarina dock turning-basin radio-call-point\ntranshipment-dock notice-to-mariners diver-down\nnavigation-structure fuel tunnel waterway-guage\n```\n\n**Generic waypoint marker:** `waypoint`\n\n**Your own vessel:** `vessel-self`\n\n**AIS vessels** (by type):\n\n```\nais_active ais_highspeed ais_special ais_passenger ais_cargo\nais_tanker ais_other ais_inactive ais_buddy ais_self\n```\n\n(`ais_self` is whichever AIS target you currently have selected — not your\nown boat, which is `vessel-self`.)\n\n**Aids to navigation** — each comes in a physical (`real-…`) and an AIS-only\n(`virtual-…`) version:\n\n```\nreal-north / virtual-north real-east / virtual-east\nreal-south / virtual-south real-west / virtual-west\nreal-port / virtual-port real-starboard / virtual-starboard\nreal-danger / virtual-danger real-safe / virtual-safe\nreal-special / virtual-special real-basestation / virtual-basestation\nreal-weatherStation / virtual-weatherStation\nreal-aton / virtual-aton\n```\n\n**Route points:** `route-start`, `route-waypoint`, `route-end`\n\nYour own vessel, AIS, aids-to-navigation, and route icons apply everywhere at\nonce — Freeboard picks these automatically rather than letting you choose\nthem per marker, so one custom icon covers every marker of that kind.\n\n## Keeping icons through GPX import and export\n\nIf your icon declares a matching GPX symbol name, Freeboard will recognize it\nwhen you import a GPX file — a waypoint tagged with that symbol picks up your\ncustom icon instead of the default marker. Exporting a waypoint that uses a\ncustom icon writes the same information back into the GPX file, so the icon\nsurvives a round trip: export, re-import elsewhere, and your custom icon is\nstill there.\n\n## Without a symbol provider\n\nIf you haven't installed a symbol provider — or it isn't publishing any\nicons — Freeboard looks and behaves exactly as it always has: built-in icons\neverywhere, and \"Show all symbols\" just shows the built-ins.\n"},{"id":"extension-panels","raw":"---\nid: extension-panels\ntitle: Extension Panels\ncategory: Extensions\n---\n\n\n\nPanel extensions let a Signal K server plugin add a completely new feature to\nFreeboard, without waiting on a Freeboard code change to get it. You can pick\nand choose which of these tools you want installed on your boat. Each one\nadds its own new button to Freeboard's toolbar — for example, a proximity\nsearch for nearby points of interest, or an automatic route planner that\nroutes around land.\n\n\n\n**To use one**, tap the grid icon in the top-right corner of the chart to\nreveal the toolbar, then tap the plugin's button. Its panel slides in from\nthe right-hand side of the screen. Tap the button again, or use the panel's\nown close button, to put it away.\n\nA panel can also narrow down what's shown on the chart — for example,\nfiltering the waypoints list to just the ones matching your search. When a\npanel does this, a small chip appears near the top of the screen describing\nthe filter; tap its **×** to clear it and show everything again.\n\nIf you haven't installed any plugins that add a panel, the extension toolbar\nbutton doesn't appear — Freeboard looks and works exactly as it always has.\n"},{"id":"feature-browser","raw":"---\nid: feature-browser\ntitle: Feature Browser\ncategory: Display\n---\n\nThis very window you're looking at right now is the **Feature Browser** — a\nsearchable \"What's New\" window covering everything Freeboard can do. Curious\nwhat a feature does, how to use it, or when it was added? Open it any time\nfrom the **⋯ (More actions)** menu, no matter what you're doing on the\nchart.\n\nEach entry shows a screenshot, a plain description of what the feature does\nand how to use it, and the release it last changed in — click a screenshot\nto view it larger. Search narrows the list by name, and you can sort the\ntable by category, feature, status, or release.\n\nA small lightbulb button also appears on the left toolbar whenever there's\nsomething new or changed you haven't seen yet — click it to jump straight\ninto the Feature Browser. It only shows up when there's something to tell\nyou about, and disappears once you've opened the browser. Freeboard no\nlonger interrupts you with a welcome screen or a \"what's new\" popup when it\nstarts — this lightbulb is the quiet, opt-in replacement.\n"},{"id":"notes","raw":"---\nid: notes\ntitle: Notes\ncategory: Notes\n---\n\nDrop a note anywhere on the chart to mark something worth remembering — a\ngood anchorage, a hazard, a spot to check next time you're through.\n\n**To add a note**, open the edit menu (pencil icon) and choose **Add Note**,\nthen tap the chart where you want it.\n\n**To work with an existing note**, tap it on the chart. By default this\nopens a quick popover with **Move**, **Edit**, **Delete**, and **Info**\n(the info panel or a details dialog, depending on your **Prefer Info-Panel**\nsetting under **Settings → Display**). If you'd rather skip that popover and\ngo straight to the note's details, turn on **Single Click for Note Details**\nin the same settings section — a single tap then opens the details directly,\nand the details view itself offers **Move**, **Edit**, and **Delete**, so\nyou don't lose anything by skipping the popover.\n\nA note with rich content — an embedded image, or a graph like the one on a\ntide-station note — resizes its details dialog to fit, instead of clipping\nthe content or forcing you to scroll in two directions.\n"},{"id":"route-planning","raw":"---\nid: route-planning\ntitle: Route Planning\ncategory: Routes\n---\n\n\n\nDraw a route on the chart, review and adjust it, then save it for later —\nor skip saving and just use it right away.\n\n**To draw a route**, open the edit menu (pencil icon) and choose **Draw\nRoute**. Tap each point along your intended route, then double-tap (or\npress Enter) to finish. Your new route appears on the chart in amber to\nshow it hasn't been saved yet.\n\n**Unsaved and saved routes now work the same way.** Tap any route on the\nchart — freshly drawn or previously saved — to bring up its actions:\n**Modify** to drag its points into shape, **Delete** to remove it, **Points**\nto see its point list, and more. An unsaved route also offers **Save**\nright there, so turning a quick sketch into a permanent route is one tap.\nSaving keeps the route right where it is on the chart — it won't disappear\non you.\n\nThe route's info panel offers the same actions — **Save**, **Edit**,\n**Delete** — plus the point list, distance, and a description you can write\nfor the route. A route that hasn't been saved yet is labelled **(unsaved)**\nso you always know its status at a glance.\n\nIf you have an extension plugin installed that helps you plan routes — an\nauto-router that fits a route around land, for instance — it can work with\nyour route while it's still a draft, before you decide to save it.\n"},{"id":"screen-widgets","raw":"---\nid: screen-widgets\ntitle: Screen Widgets\ncategory: Extensions\n---\n\n\n\nIf you've installed a Signal K server plugin that provides a screen widget,\nyou can place it directly onto the chart screen — a compact readout like a\nspeed dial, a wind gauge, or anything else the plugin offers. Two examples\nare [signalk-instrument-widgets](https://www.npmjs.com/package/signalk-instrument-widgets),\na set of boat instrument gauges, and\n[signalk-basic-tide-widgets](https://www.npmjs.com/package/signalk-basic-tide-widgets),\nwhich shows upcoming tides.\n\nWidgets sit in the corners of the screen and at the centre of the top and\nbottom edges *(the top-left corner is reserved for Freeboard's own menu)*.\n\n**To add a widget**, press and hold an empty spot in one of these areas for\nabout a second and a half (or right-click there if you're using a mouse and\nkeyboard). A short list of the widgets that fit there appears — choose one\nand it's added to your screen. As you place more, widgets stack neatly from\nthe edge inward.\n\n**To change or remove a widget**, press and hold the widget itself. This\nopens its settings, where you can adjust it (if it has any options) or\nremove it from the screen.\n\nYour layout is remembered, so the widgets you place are still there the next\ntime you open Freeboard-SK.\n\nSome widgets can also narrow down what's shown elsewhere on the chart — for\nexample, showing only certain waypoints. When a widget does this, a small\nchip appears near the top of the screen describing the filter; tap its **×**\nto clear it and show everything again.\n\nIf you haven't installed any plugins that provide screen widgets, none of\nthis is visible — Freeboard looks and works exactly as it always has.\n"},{"id":"vessel-tracks","raw":"---\nid: vessel-tracks\ntitle: Vessel Tracks\ncategory: Tracks\n---\n\n\n\nSee where another AIS vessel has been by showing its recent track (trail) on\nthe chart.\n\n**To show every vessel's track at once**, turn on **Show Track** under\n**Settings → Vessels → Other Vessels**. Every AIS vessel's track then draws\non the chart.\n\n**To follow just one or two vessels** instead of cluttering the chart with\neveryone's track, leave that setting off and pick vessels individually: tap\na vessel on the chart to open its popover, or find it in the AIS vessel\nlist, and use the **track** button (labelled **TRACK** in the list) to turn\nits track on or off. Your picks apply for the current session only — they\naren't saved between visits.\n\nThe per-vessel picker is only available while **Show Track** is off; with it\non, every vessel is already shown, so there's nothing to pick.\n\nTrack data comes from your Signal K server, so no extra setup is needed\nbeyond what tracking already requires on the server side.\n"},{"id":"weather-overlays","raw":"---\nid: weather-overlays\ntitle: Wind, Currents & Tides\ncategory: Weather\n---\n\n\n\nGrid overlays sample live weather and current data across the visible chart\narea, each toggled independently from the **Weather** panel (opened from the\nresources list):\n\n- **Wind** — \"Enable wind layer\" toggle. Requires a Signal K Weather Provider\n plugin installed on the server. Freeboard samples a 5×4 grid of points across\n the current view and refreshes them shortly after you pan or zoom. Each point\n renders as a **wind barb** by default (half feather = 5 kn, full = 10 kn,\n pennant = 50 kn, staff pointing into the wind) or, with the\n **Display → Weather → \"Wind indicator\"** setting set to Arrow, an arrow\n pointing where the wind flows to. Either glyph always shows the sampled wind\n speed as a label. The glyph choice is shared with the wind barbs shown on\n weather-station targets — switching the Wind indicator setting changes both\n at once. The arrow glyph can be replaced with custom artwork through a symbol\n provider plugin by publishing a symbol with the well-known id\n `windIndicator-arrow`.\n\n- **Ocean Currents** — \"Enable ocean currents layer\" toggle. No server plugin\n needed — Freeboard queries the Open-Meteo Marine API directly. It samples a\n denser 10×8 grid; each arrow points in the current's flow direction, is\n colour-graded from blue (slow) to red (fast), sized by speed, and labelled\n with the current's velocity in knots.\n\n\n\n- **Tidal Currents** — appears in the Weather panel as **\"Enable tidal\n currents layer\"**, but only when a `signalk-tidal-currents` plugin is\n installed on the server; otherwise this option doesn't show up at all.\n Arrows are colour-graded and labelled with speed, the same as Ocean\n Currents. What sets it apart is a **24-hour time bar** underneath the\n toggle: drag it, click anywhere on it, or use the step buttons (±1h, ±6h)\n to see how currents shift through the day, with **Play** to animate\n through time and **Now** to jump back to the current moment.\n\nAll three overlays refresh automatically as you pan or zoom, and can be\nshown together or independently.\n"},{"id":"weather-station-wind-barbs","raw":"---\nid: weather-station-wind-barbs\ntitle: Weather Station Wind Barbs\ncategory: Weather\n---\n\n\n\nWeather-station (`meteo`) targets — AIS Met/Hydro buoys and plugin-published shore\nstations such as signalk-viva — show wind as a standard **wind barb**: half\nfeather = 5 kn, full = 10 kn, pennant = 50 kn. The barb is picked from the\nstation's reported wind speed in 5-knot buckets (5–75 kn, clamped) and its staff\nrotates to point into the reported wind direction. Below 5 kn, or when no wind is\nreported, the target falls back to the plain windsock icon, unrotated.\n\nThe wind speed is always shown as a label next to the glyph, in your configured\nwind-speed units.\n\nAll 15 barb glyphs ship with Freeboard, so this works with no setup. Any bucket\ncan be replaced with custom artwork through a symbol provider plugin by\npublishing a symbol whose id matches the well-known bucket id —\n`real-weatherStation-<kts>` for real stations, `virtual-weatherStation-<kts>` for\nvirtual ones, where `<kts>` is one of the buckets 5–75 (e.g.\n`real-weatherStation-25`).\n\nA **Display → Weather → \"Wind indicator\"** setting can switch the glyph to a\nplain arrow instead of a barb for every weather-station target on the chart.\n"}],"ledger":[{"feature":"weather-station-wind-barbs","pr":495,"kind":"new","since":"v3.0.0-beta.3","date":"2026-07-10","title":"feat(map): render meteo targets as wind barbs"},{"feature":"weather-overlays","pr":413,"kind":"new","since":"v3.0.0-beta.1","date":"2026-07-03","title":"feat(weather): add wind and ocean current overlays"},{"feature":"weather-overlays","pr":520,"kind":"enhanced","since":"v3.0.0-rc.1","date":"2026-07-14","title":"feat(weather): unify wind indicator rendering across overlays"},{"feature":"weather-station-wind-barbs","pr":520,"kind":"enhanced","since":"v3.0.0-rc.1","date":"2026-07-14","title":"feat(weather): unify wind indicator rendering across overlays"},{"feature":null,"pr":520,"kind":"skip","reason":"internal UI fix — settings dialog fixed sizing/scrolling, not a distinct feature"},{"feature":"custom-map-symbols","pr":394,"kind":"new","since":"v3.0.0-beta.0","date":"2026-06-25","title":"feat(charts): Custom map symbols via symbol providers"},{"feature":"screen-widgets","pr":395,"kind":"new","since":"v3.0.0-beta.0","date":"2026-06-26","title":"feat: Add plotter extension host: widgets, panels, buttons, resource filters & background runtimes"},{"feature":"extension-panels","pr":395,"kind":"new","since":"v3.0.0-beta.0","date":"2026-06-26","title":"feat: Add plotter extension host: widgets, panels, buttons, resource filters & background runtimes"},{"feature":"route-planning","pr":432,"kind":"enhanced","since":"v3.0.0-beta.0","date":"2026-06-29","title":"feat(routes): live route editing — editable drafts + plotter-extension route API"},{"feature":null,"pr":432,"kind":"skip","reason":"adds the routes capability to the Plotter Extensions API for extension plugins (e.g. auto-routing); no direct end-user surface in Freeboard itself"},{"feature":"vessel-tracks","pr":448,"kind":"enhanced","since":"v3.0.0-beta.0","date":"2026-07-02","title":"feat(map): add per-vessel AIS track display"},{"feature":"cursor-eta","pr":455,"kind":"new","since":"v3.0.0-beta.0","date":"2026-07-03","title":"feat(map): show live bearing, distance and ETA at cursor"},{"feature":"buddy-list","pr":484,"kind":"enhanced","since":"v3.0.0-beta.2","date":"2026-07-07","title":"feat(ais): add \"Buddies only\" option to the vessel filter"},{"feature":"chart-image-adjustment","pr":489,"kind":"new","since":"v3.0.0-beta.2","date":"2026-07-07","title":"feat(charts): add brightness/contrast adjustment for raster image layers"},{"feature":"weather-overlays","pr":491,"kind":"enhanced","since":"v3.0.0-beta.3","date":"2026-07-11","title":"feat(weather): add tidal currents overlay with time-stepping controls"},{"feature":"notes","pr":485,"kind":"enhanced","since":"v3.0.0-beta.2","date":"2026-07-07","title":"feat(notes): size Note Details dialog to fit its content"},{"feature":"notes","pr":512,"kind":"enhanced","since":"v3.0.0-beta.4","date":"2026-07-12","title":"feat(notes): add option to open note details on single click"},{"feature":"feature-browser","pr":528,"kind":"new","since":"v3.0.0-rc.1","date":"2026-07-16","title":"feat(features): add a searchable \"What's New\" feature browser"},{"feature":"feature-browser","pr":530,"kind":"enhanced","since":"v3.0.0-rc.1","date":"2026-07-17","title":"feat(features): replace forced onboarding modals with a passive What's New indicator"},{"feature":"chart-zoom-limits","kind":"new","since":"v2.1.0","date":"2023-07-06","title":"limit zoom to selected maps"}],"categories":[{"name":"Charts","hue":215},{"name":"Waypoints","hue":30},{"name":"Routes","hue":140},{"name":"Tracks","hue":170},{"name":"Notes","hue":50},{"name":"Navigation","hue":265},{"name":"Autopilot","hue":300},{"name":"Weather","hue":200},{"name":"Radar","hue":110},{"name":"AIS & Vessels","hue":240},{"name":"Alarms & Notifications","hue":5},{"name":"Import/Export","hue":80},{"name":"Extensions","hue":325},{"name":"Display","hue":185}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Fa as $,o as Y,x as Z}from"./chunk-ISSYYBS2.js";import{a as N,b as Q,c as X}from"./chunk-IURS3QQO.js";import"./chunk-4BXCQ655.js";import{i as K,k as W}from"./chunk-LXTM3LEN.js";import{a as J,b as U,d as q}from"./chunk-IYNTZMNB.js";import{a as B}from"./chunk-3CRIFTHA.js";import"./chunk-UF7LOYCE.js";import"./chunk-XHEJEIFO.js";import"./chunk-I3OUN6B4.js";import{b as H,i as z,o as G}from"./chunk-WX7YZB5N.js";import{Dd as P,Ea as u,Ed as R,Fa as g,Ha as C,Hd as k,Ia as M,Ja as I,Jd as T,Ka as _,La as i,Ma as t,Na as b,Q as d,R as p,Rd as V,Td as A,Ua as h,Wa as f,Wd as F,Ya as c,Yd as O,Zd as j,ja as r,lb as n,mb as w,nb as v,oa as m,pb as D,pe as L,qb as S,ra as y,rb as E}from"./chunk-4BSA3TDQ.js";import"./chunk-EQVTEUXC.js";function te(o,a){if(o&1&&(i(0,"mat-option",10),n(1),t()),o&2){let e=a.$implicit;_("value",e),r(),w(e)}}function ie(o,a){if(o&1){let e=h();i(0,"div")(1,"ap-file-input",17),f("chosen",function(l){d(e);let x=c(2);return p(x.parseFile(l))}),i(2,"div",18)(3,"div",19),n(4," Click or Drop file "),t()()()()}o&2&&(r(),_("astext",!0))}function ne(o,a){if(o&1){let e=h();i(0,"div")(1,"div")(2,"b"),n(3,"Invalid Resource Data:"),t(),b(4,"br")(5,"br"),i(6,"i"),n(7,"Selected file does not contain valid data. "),t(),b(8,"br"),t(),i(9,"div",20)(10,"button",21),f("click",function(){d(e);let l=c(2);return p(l.app.showHelp("resource"))}),i(11,"mat-icon"),n(12,"help"),t(),n(13," Help "),t()()()}}function oe(o,a){o&1&&(i(0,"div",16),n(1," Note: Data will not be validated when uploaded to server! "),t())}function ae(o,a){if(o&1){let e=h();i(0,"div",7)(1,"div")(2,"mat-form-field",8)(3,"mat-label"),n(4,"Select Destination Path"),t(),i(5,"mat-select",9,0),E("valueChange",function(l){d(e);let x=c();return S(x.targetPath,l)||(x.targetPath=l),p(l)}),M(7,te,2,2,"mat-option",10,C),t()()(),u(9,ie,5,1,"div"),u(10,ne,14,0,"div"),i(11,"div")(12,"div",11)(13,"div",12)(14,"div")(15,"span",13),n(16,"Name:"),t(),n(17),t(),i(18,"div")(19,"span",13),n(20,"Type:"),t(),n(21),t()()(),i(22,"div",14)(23,"button",15),f("click",function(){d(e);let l=c();return p(l.load())}),i(24,"mat-icon"),n(25,"file_upload"),t(),n(26," \xA0Load\xA0 "),t(),b(27,"br"),n(28,"\xA0 "),u(29,oe,2,0,"div",16),t()()()}if(o&2){let e=c();r(5),_("disabled",!e.resPaths),D("value",e.targetPath),r(2),I(e.resPaths),r(2),g(e.source.name?-1:9),r(),g(e.display.notValid?10:-1),r(7),v(" ",e.source.name," "),r(4),v(" ",e.source.type," "),r(2),_("disabled",!e.targetPath||!e.source.name),r(6),g(e.targetPath&&e.source.name?29:-1)}}var ee=class o{constructor(a,e,s,l){this.app=a;this.skclient=e;this.dialogRef=s;this.data=l}resPaths=[];targetPath=null;source={type:null,name:null,data:null};display={notValid:!1};unsubscribe=[];ngOnInit(){this.skclient.api.get(this.app.skApiVersion,"/resources").subscribe(a=>{this.resPaths=[],this.targetPath=null,this.resPaths=Object.keys(a).filter(e=>!["routes","waypoints","notes","regions","charts","tracks"].includes(e))},()=>{this.resPaths=[],this.targetPath=null})}ngOnDestroy(){this.unsubscribe.forEach(a=>a.unsubscribe())}load(){this.dialogRef.close({path:this.targetPath,data:this.source.data})}parseFile(a){this.source=a,this.source.type="Unknown";try{let e=JSON.parse(a.data);this.source.type=e.type?e.type:this.source.type}catch(e){console.log("Error parsing resource file!")}}static \u0275fac=function(e){return new(e||o)(m(Z),m(Y),m(P),m(R))};static \u0275cmp=y({type:o,selectors:[["resource-upload-dialog"]],decls:13,vars:1,consts:[["respaths",""],[1,"resourceload-dialog"],[2,"background-color","transparent"],[2,"flex","1 1 auto","text-align","center"],[2,"text-align","right"],["mat-icon-button","",3,"click"],["mat-dialog-content",""],[1,"card-group"],["floatLabel","always",2,"width","100%"],["id","respaths",3,"valueChange","disabled","value"],[3,"value"],[2,"display","flex","flex-wrap","wrap"],[2,"flex","1 1 auto","padding","5px","font-size","smaller"],[2,"font-weight","bold"],[2,"text-align","center","padding-top","15px"],["mat-raised-button","","matTooltip","Load features","matTooltipPosition","below",3,"click","disabled"],[2,"padding","10px","border","gray 1px dashed","font-style","italic"],[3,"chosen","astext"],[2,"width","200px"],[2,"padding","25%","border","gray 1px dashed"],[2,"width","100%","text-align","center"],["mat-raised-button","",3,"click"]],template:function(e,s){e&1&&(i(0,"div",1)(1,"mat-toolbar",2)(2,"span")(3,"mat-icon"),n(4,"category"),t()(),i(5,"span",3),n(6,"Load Resource"),t(),i(7,"span",4)(8,"button",5),f("click",function(){return s.dialogRef.close()}),i(9,"mat-icon"),n(10,"close"),t()()()(),i(11,"div",6),u(12,ae,30,8,"div",7),t()()),e&2&&(r(12),g(s.display.notValid?-1:12))},dependencies:[L,G,z,H,q,U,J,N,B,j,O,K,F,A,V,X,Q,W,T,k,$],styles:[".resourceload-dialog[_ngcontent-%COMP%]{font-family:roboto;position:relative;width:100%}.card-group[_ngcontent-%COMP%]{padding:5px 5%}@media only screen and (min-width:800px){.card-group[_ngcontent-%COMP%]{padding:5px 5%}}"]})};export{ee as ResourceImportDialog};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import{Cd as Z,I as r,Ic as z,N as _,Oa as f,P as n,Pa as R,Pc as G,Rc as j,U as p,Uc as F,V as T,Vb as H,Wa as A,Xa as O,Y as w,Yc as U,ab as M,bb as x,c,ca as h,cb as S,cd as B,fd as $,ib as u,ja as D,ka as m,kb as L,lb as k,lc as V,mb as N,na as P,qa as C,ra as I,rc as g,rd as y,ta as E,tc as Y,vd as v,zc as X}from"./chunk-4BSA3TDQ.js";import{a as l}from"./chunk-EQVTEUXC.js";var q=["tooltip"],K=20;var J=new _("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let a=n(p);return()=>j(a,{scrollThrottle:K})}}),tt=new _("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var Q="tooltip-panel",et={passive:!0},it=8,ot=8,st=24,nt=200,It=(()=>{class a{_elementRef=n(h);_ngZone=n(w);_platform=n(V);_ariaDescriber=n(Z);_focusMonitor=n(B);_dir=n(Y);_injector=n(p);_viewContainerRef=n(C);_mediaMatcher=n($);_document=n(T);_renderer=n(P);_animationsDisabled=v();_defaultOptions=n(tt,{optional:!0});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=at;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=!1;_dirSubscribed=!1;get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(t){this._positionAtOrigin=y(t),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(t){let e=y(t);this._disabled!==e&&(this._disabled=e,e?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(t){this._showDelay=g(t)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(t){this._hideDelay=g(t),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(t){let e=this._message;this._message=t!=null?String(t).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(e)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_eventCleanups=[];_touchstartTimeout=null;_destroyed=new c;_isDestroyed=!1;constructor(){let t=this._defaultOptions;t&&(this._showDelay=t.showDelay,this._hideDelay=t.hideDelay,t.position&&(this.position=t.position),t.positionAtOrigin&&(this.positionAtOrigin=t.positionAtOrigin),t.touchGestures&&(this.touchGestures=t.touchGestures),t.tooltipClass&&(this.tooltipClass=t.tooltipClass)),this._viewportMargin=it}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(r(this._destroyed)).subscribe(t=>{t?t==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let t=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._eventCleanups.forEach(e=>e()),this._eventCleanups.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(t,this.message,"tooltip"),this._focusMonitor.stopMonitoring(t)}show(t=this.showDelay,e){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let i=this._createOverlay(e);this._detach(),this._portal=this._portal||new z(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=i.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(r(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(t)}hide(t=this.hideDelay){let e=this._tooltipInstance;e&&(e.isVisible()?e.hide(t):(e._cancelPendingAnimations(),this._detach()))}toggle(t){this._isTooltipVisible()?this.hide():this.show(void 0,t)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(t){if(this._overlayRef){let s=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!t)&&s._origin instanceof h)return this._overlayRef;this._detach()}let e=this._injector.get(X).getAncestorScrollContainers(this._elementRef),i=`${this._cssClassPrefix}-${Q}`,o=F(this._injector,this.positionAtOrigin?t||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(e).withPopoverLocation("global");return o.positionChanges.pipe(r(this._destroyed)).subscribe(s=>{this._updateCurrentPositionClass(s.connectionPair),this._tooltipInstance&&s.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=U(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,i]:i,scrollStrategy:this._injector.get(J)(),disableAnimations:this._animationsDisabled,eventPredicate:this._overlayEventPredicate}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(r(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(r(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(r(this._destroyed)).subscribe(s=>{s.preventDefault(),s.stopPropagation(),this._ngZone.run(()=>this.hide(0))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(r(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(t){let e=t.getConfig().positionStrategy,i=this._getOrigin(),o=this._getOverlayPosition();e.withPositions([this._addOffset(l(l({},i.main),o.main)),this._addOffset(l(l({},i.fallback),o.fallback))])}_addOffset(t){let e=ot,i=!this._dir||this._dir.value=="ltr";return t.originY==="top"?t.offsetY=-e:t.originY==="bottom"?t.offsetY=e:t.originX==="start"?t.offsetX=i?-e:e:t.originX==="end"&&(t.offsetX=i?e:-e),t}_getOrigin(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"||e=="below"?i={originX:"center",originY:e=="above"?"top":"bottom"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={originX:"start",originY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={originX:"end",originY:"center"});let{x:o,y:s}=this._invertPosition(i.originX,i.originY);return{main:i,fallback:{originX:o,originY:s}}}_getOverlayPosition(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"?i={overlayX:"center",overlayY:"bottom"}:e=="below"?i={overlayX:"center",overlayY:"top"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={overlayX:"end",overlayY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={overlayX:"start",overlayY:"center"});let{x:o,y:s}=this._invertPosition(i.overlayX,i.overlayY);return{main:i,fallback:{overlayX:o,overlayY:s}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),m(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t instanceof Set?Array.from(t):t,this._tooltipInstance._markForCheck())}_invertPosition(t,e){return this.position==="above"||this.position==="below"?e==="top"?e="bottom":e==="bottom"&&(e="top"):t==="end"?t="start":t==="start"&&(t="end"),{x:t,y:e}}_updateCurrentPositionClass(t){let{overlayY:e,originX:i,originY:o}=t,s;if(e==="center"?this._dir&&this._dir.value==="rtl"?s=i==="end"?"left":"right":s=i==="start"?"left":"right":s=e==="bottom"&&o==="top"?"above":"below",s!==this._currentPosition){let d=this._overlayRef;if(d){let b=`${this._cssClassPrefix}-${Q}-`;d.removePanelClass(b+this._currentPosition),d.addPanelClass(b+s)}this._currentPosition=s}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._eventCleanups.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._addListener("touchstart",t=>{let e=t.targetTouches?.[0],i=e?{x:e.clientX,y:e.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,i)},this._defaultOptions?.touchLongPressShowDelay??o)})):this._addListener("mouseenter",t=>{this._setupPointerExitEventsIfNeeded();let e;t.x!==void 0&&t.y!==void 0&&(e=t),this.show(void 0,e)}))}_setupPointerExitEventsIfNeeded(){if(!this._pointerExitEventsInitialized){if(this._pointerExitEventsInitialized=!0,!this._isTouchPlatform())this._addListener("mouseleave",t=>{let e=t.relatedTarget;(!e||!this._overlayRef?.overlayElement.contains(e))&&this.hide()}),this._addListener("wheel",t=>{if(this._isTooltipVisible()){let e=this._document.elementFromPoint(t.clientX,t.clientY),i=this._elementRef.nativeElement;e!==i&&!i.contains(e)&&this.hide()}});else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let t=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};this._addListener("touchend",t),this._addListener("touchcancel",t)}}}_addListener(t,e){this._eventCleanups.push(this._renderer.listen(this._elementRef.nativeElement,t,e,et))}_isTouchPlatform(){let t=this._defaultOptions?.detectHoverCapability;return typeof t=="function"?!t():this._platform.IOS||this._platform.ANDROID?!0:this._platform.isBrowser?!!t&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:!1}_disableNativeGesturesIfNecessary(){let t=this.touchGestures;if(t!=="off"){let e=this._elementRef.nativeElement,i=e.style;(t==="on"||e.nodeName!=="INPUT"&&e.nodeName!=="TEXTAREA")&&(i.userSelect=i.msUserSelect=i.webkitUserSelect=i.MozUserSelect="none"),(t==="on"||!e.draggable)&&(i.webkitUserDrag="none"),i.touchAction="none",i.webkitTapHighlightColor="transparent"}}_syncAriaDescription(t){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,t,"tooltip"),this._isDestroyed||m({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}_overlayEventPredicate=t=>t.type==="keydown"?this._isTooltipVisible()&&t.keyCode===27&&!G(t):!0;static \u0275fac=function(e){return new(e||a)};static \u0275dir=E({type:a,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(e,i){e&2&&u("mat-mdc-tooltip-disabled",i.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return a})(),at=(()=>{class a{_changeDetectorRef=n(H);_elementRef=n(h);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=v();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new c;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(t){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},t)}hide(t){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},t)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:t}){(!t||!this._triggerElement.contains(t))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let t=this._elementRef.nativeElement.getBoundingClientRect();return t.height>st&&t.width>=nt}_handleAnimationEnd({animationName:t}){(t===this._showAnimation||t===this._hideAnimation)&&this._finalizeAnimation(t===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(t){t?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(t){let e=this._tooltip.nativeElement,i=this._showAnimation,o=this._hideAnimation;if(e.classList.remove(t?o:i),e.classList.add(t?i:o),this._isVisible!==t&&(this._isVisible=t,this._changeDetectorRef.markForCheck()),t&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let s=getComputedStyle(e);(s.getPropertyValue("animation-duration")==="0s"||s.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}t&&this._onShow(),this._animationsDisabled&&(e.classList.add("_mat-animation-noopable"),this._finalizeAnimation(t))}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=I({type:a,selectors:[["mat-tooltip-component"]],viewQuery:function(e,i){if(e&1&&M(q,7),e&2){let o;x(o=S())&&(i._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(e,i){e&1&&A("mouseleave",function(s){return i._handleMouseLeave(s)})},decls:4,vars:5,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(e,i){e&1&&(f(0,"div",1,0),O("animationend",function(s){return i._handleAnimationEnd(s)}),f(2,"div",2),k(3),R()()),e&2&&(L(i.tooltipClass),u("mdc-tooltip--multiline",i._isMultiline),D(3),N(i.message))},styles:[`.mat-mdc-tooltip {
|
|
2
|
+
position: relative;
|
|
3
|
+
transform: scale(0);
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
}
|
|
6
|
+
.mat-mdc-tooltip::before {
|
|
7
|
+
content: "";
|
|
8
|
+
top: 0;
|
|
9
|
+
right: 0;
|
|
10
|
+
bottom: 0;
|
|
11
|
+
left: 0;
|
|
12
|
+
z-index: -1;
|
|
13
|
+
position: absolute;
|
|
14
|
+
}
|
|
15
|
+
.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before {
|
|
16
|
+
top: -8px;
|
|
17
|
+
}
|
|
18
|
+
.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before {
|
|
19
|
+
bottom: -8px;
|
|
20
|
+
}
|
|
21
|
+
.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before {
|
|
22
|
+
left: -8px;
|
|
23
|
+
}
|
|
24
|
+
.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before {
|
|
25
|
+
right: -8px;
|
|
26
|
+
}
|
|
27
|
+
.mat-mdc-tooltip._mat-animation-noopable {
|
|
28
|
+
animation: none;
|
|
29
|
+
transform: scale(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.mat-mdc-tooltip-surface {
|
|
33
|
+
word-break: normal;
|
|
34
|
+
overflow-wrap: anywhere;
|
|
35
|
+
padding: 4px 8px;
|
|
36
|
+
min-width: 40px;
|
|
37
|
+
max-width: 200px;
|
|
38
|
+
min-height: 24px;
|
|
39
|
+
max-height: 40vh;
|
|
40
|
+
box-sizing: border-box;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
text-align: center;
|
|
43
|
+
will-change: transform, opacity;
|
|
44
|
+
background-color: var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));
|
|
45
|
+
color: var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));
|
|
46
|
+
border-radius: var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));
|
|
47
|
+
font-family: var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));
|
|
48
|
+
font-size: var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));
|
|
49
|
+
font-weight: var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));
|
|
50
|
+
line-height: var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));
|
|
51
|
+
letter-spacing: var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking));
|
|
52
|
+
}
|
|
53
|
+
.mat-mdc-tooltip-surface::before {
|
|
54
|
+
position: absolute;
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
width: 100%;
|
|
57
|
+
height: 100%;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
border: 1px solid transparent;
|
|
61
|
+
border-radius: inherit;
|
|
62
|
+
content: "";
|
|
63
|
+
pointer-events: none;
|
|
64
|
+
}
|
|
65
|
+
.mdc-tooltip--multiline .mat-mdc-tooltip-surface {
|
|
66
|
+
text-align: left;
|
|
67
|
+
}
|
|
68
|
+
[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface {
|
|
69
|
+
text-align: right;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.mat-mdc-tooltip-panel {
|
|
73
|
+
line-height: normal;
|
|
74
|
+
}
|
|
75
|
+
.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive {
|
|
76
|
+
pointer-events: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@keyframes mat-mdc-tooltip-show {
|
|
80
|
+
0% {
|
|
81
|
+
opacity: 0;
|
|
82
|
+
transform: scale(0.8);
|
|
83
|
+
}
|
|
84
|
+
100% {
|
|
85
|
+
opacity: 1;
|
|
86
|
+
transform: scale(1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
@keyframes mat-mdc-tooltip-hide {
|
|
90
|
+
0% {
|
|
91
|
+
opacity: 1;
|
|
92
|
+
transform: scale(1);
|
|
93
|
+
}
|
|
94
|
+
100% {
|
|
95
|
+
opacity: 0;
|
|
96
|
+
transform: scale(0.8);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
.mat-mdc-tooltip-show {
|
|
100
|
+
animation: mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.mat-mdc-tooltip-hide {
|
|
104
|
+
animation: mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards;
|
|
105
|
+
}
|
|
106
|
+
`],encapsulation:2,changeDetection:0})}return a})();export{It as a};
|