@mxtommy/kip 3.9.0-beta.2 → 3.9.0-beta.21

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.
Files changed (178) hide show
  1. package/.github/copilot-instructions.md +1 -1
  2. package/.github/instructions/angular.instructions.md +46 -0
  3. package/README.md +49 -12
  4. package/package.json +2 -4
  5. package/public/3rdpartylicenses.txt +77 -77
  6. package/public/app-help.component.css.map +7 -0
  7. package/public/app.component.css.map +7 -0
  8. package/public/assets/help-docs/configuration.md +4 -4
  9. package/public/assets/help-docs/dashboards.md +4 -2
  10. package/public/assets/svg/icons.svg +1 -1
  11. package/public/boolean-control-config.component.css.map +7 -0
  12. package/public/boolean-multicontrol-options.component.css.map +7 -0
  13. package/public/chunk-3EWIS24B.js +5237 -0
  14. package/public/chunk-3EWIS24B.js.map +1 -0
  15. package/public/chunk-3VR3EA35.js +1022 -0
  16. package/public/chunk-3VR3EA35.js.map +1 -0
  17. package/public/chunk-63ILPRXC.js +2091 -0
  18. package/public/chunk-63ILPRXC.js.map +1 -0
  19. package/public/chunk-65ZWQBS6.js +3102 -0
  20. package/public/chunk-65ZWQBS6.js.map +1 -0
  21. package/public/chunk-B3LKEWZP.js +4950 -0
  22. package/public/chunk-B3LKEWZP.js.map +1 -0
  23. package/public/chunk-BIBIW64D.js +16773 -0
  24. package/public/chunk-BIBIW64D.js.map +1 -0
  25. package/public/chunk-BM53SC5N.js +77 -0
  26. package/public/chunk-BM53SC5N.js.map +7 -0
  27. package/public/chunk-D7ILNFDM.js +3059 -0
  28. package/public/chunk-D7ILNFDM.js.map +1 -0
  29. package/public/chunk-E24UNLSJ.js +2228 -0
  30. package/public/chunk-E24UNLSJ.js.map +1 -0
  31. package/public/chunk-J42S2ELC.js +5927 -0
  32. package/public/chunk-J42S2ELC.js.map +1 -0
  33. package/public/chunk-KC22A6VH.js +17 -0
  34. package/public/chunk-KC22A6VH.js.map +7 -0
  35. package/public/chunk-MCEJWZB2.js +116 -0
  36. package/public/chunk-MCEJWZB2.js.map +1 -0
  37. package/public/chunk-NBF6SE6O.js +89 -0
  38. package/public/chunk-NBF6SE6O.js.map +7 -0
  39. package/public/chunk-QC7VGVAR.js +343 -0
  40. package/public/chunk-QC7VGVAR.js.map +7 -0
  41. package/public/chunk-SDOP6T56.js +42377 -0
  42. package/public/chunk-SDOP6T56.js.map +1 -0
  43. package/public/chunk-U2DCSTRY.js +159 -0
  44. package/public/chunk-U2DCSTRY.js.map +7 -0
  45. package/public/chunk-UHVNAEXC.js +4752 -0
  46. package/public/chunk-UHVNAEXC.js.map +1 -0
  47. package/public/chunk-UQYTD5AC.js +2723 -0
  48. package/public/chunk-UQYTD5AC.js.map +1 -0
  49. package/public/chunk-XSABJ5NZ.js +272 -0
  50. package/public/chunk-XSABJ5NZ.js.map +7 -0
  51. package/public/chunk-Y6N6O2IP.js +19852 -0
  52. package/public/chunk-Y6N6O2IP.js.map +1 -0
  53. package/public/chunk-YGJLBLOX.js +2708 -0
  54. package/public/chunk-YGJLBLOX.js.map +1 -0
  55. package/public/chunk-YT33DHC3.js +591 -0
  56. package/public/chunk-YT33DHC3.js.map +7 -0
  57. package/public/chunk-YZXYVP72.js +4934 -0
  58. package/public/chunk-YZXYVP72.js.map +1 -0
  59. package/public/chunk-ZEHRDSTB.js +13727 -0
  60. package/public/chunk-ZEHRDSTB.js.map +1 -0
  61. package/public/config.component.css.map +7 -0
  62. package/public/dashboard-scroller.component.css.map +7 -0
  63. package/public/dashboard.component.css.map +7 -0
  64. package/public/dashboards-editor.component.css.map +7 -0
  65. package/public/data-inspector-row.component.css.map +7 -0
  66. package/public/data-inspector.component.css.map +7 -0
  67. package/public/dataset-chart-options.component.css.map +7 -0
  68. package/public/datasets.component.css.map +7 -0
  69. package/public/dialog-confirmation.component.css.map +7 -0
  70. package/public/dialog-dashboard-page-editor.component.css.map +7 -0
  71. package/public/dialog-frame.component.css.map +7 -0
  72. package/public/dialog-name.component.css.map +7 -0
  73. package/public/display-chart-options.component.css.map +7 -0
  74. package/public/display.component.css.map +7 -0
  75. package/public/gauge-steel.component.css.map +7 -0
  76. package/public/home.component.css.map +7 -0
  77. package/public/index.html +19 -17
  78. package/public/main.js +36423 -0
  79. package/public/main.js.map +1 -0
  80. package/public/menu-actions.component.css.map +7 -0
  81. package/public/menu-notifications.component.css.map +7 -0
  82. package/public/minichart.component.css.map +7 -0
  83. package/public/modal-user-credential.component.css.map +7 -0
  84. package/public/modal-widget-config.component.css.map +7 -0
  85. package/public/notification-badge.component.css.map +7 -0
  86. package/public/page-header.component.css.map +7 -0
  87. package/public/path-control-config.component.css.map +7 -0
  88. package/public/paths-options.component.css.map +7 -0
  89. package/public/polyfills.js +4422 -0
  90. package/public/polyfills.js.map +1 -0
  91. package/public/select-autopilot.component.css.map +7 -0
  92. package/public/select-icon.component.css.map +7 -0
  93. package/public/settings.component.css.map +7 -0
  94. package/public/signalk.component.css.map +7 -0
  95. package/public/styles.css +1651 -0
  96. package/public/styles.css.map +7 -0
  97. package/public/svg-autopilot.component.css.map +7 -0
  98. package/public/svg-racesteer.component.css.map +7 -0
  99. package/public/svg-simple-linear-gauge.component.css.map +7 -0
  100. package/public/svg-windsteer.component.css.map +7 -0
  101. package/public/tile-large-icon.component.css.map +7 -0
  102. package/public/units.component.css.map +7 -0
  103. package/public/upgrade-config.component.css.map +7 -0
  104. package/public/widget-autopilot.component.css.map +7 -0
  105. package/public/widget-boolean-switch.component.css.map +7 -0
  106. package/public/widget-datetime.component.css.map +7 -0
  107. package/public/widget-freeboardsk.component.css.map +7 -0
  108. package/public/widget-gauge-ng-compass.component.css.map +7 -0
  109. package/public/widget-gauge-ng-linear.component.css.map +7 -0
  110. package/public/widget-gauge-ng-radial.component.css.map +7 -0
  111. package/public/widget-gauge-steel.component.css.map +7 -0
  112. package/public/widget-horizon.component.css.map +7 -0
  113. package/public/widget-host.component.css.map +7 -0
  114. package/public/widget-iframe.component.css.map +7 -0
  115. package/public/widget-label.component.css.map +7 -0
  116. package/public/widget-list-card.component.css.map +7 -0
  117. package/public/widget-numeric.component.css.map +7 -0
  118. package/public/widget-position.component.css.map +7 -0
  119. package/public/widget-race-timer.component.css.map +7 -0
  120. package/public/widget-racer-line.component.css.map +7 -0
  121. package/public/widget-racer-timer.component.css.map +7 -0
  122. package/public/widget-simple-linear.component.css.map +7 -0
  123. package/public/widget-slider.component.css.map +7 -0
  124. package/public/widget-text.component.css.map +7 -0
  125. package/public/widget-title.component.css.map +7 -0
  126. package/public/widget-tutorial.component.css.map +7 -0
  127. package/public/widgets-list.component.css.map +7 -0
  128. package/public/assets/hammer.min.js +0 -7
  129. package/public/chunk-2YVW3TBK.js +0 -2
  130. package/public/chunk-35L7BBBD.js +0 -15
  131. package/public/chunk-3LEMFOCV.js +0 -3
  132. package/public/chunk-3LJAKLLW.js +0 -1
  133. package/public/chunk-4JJLPUET.js +0 -60
  134. package/public/chunk-CBUY7NMR.js +0 -2
  135. package/public/chunk-CQXWGD3T.js +0 -2
  136. package/public/chunk-EUFDL4TJ.js +0 -6
  137. package/public/chunk-FBFTGVZ6.js +0 -1
  138. package/public/chunk-HCXH72CD.js +0 -5
  139. package/public/chunk-JY3WVS7C.js +0 -2
  140. package/public/chunk-KTDDP73O.js +0 -2
  141. package/public/chunk-NMEZOCU2.js +0 -1
  142. package/public/chunk-NS2FPVWM.js +0 -4
  143. package/public/chunk-OSYHJB4F.js +0 -11
  144. package/public/chunk-PKNLASTF.js +0 -4
  145. package/public/chunk-Q2Y75POI.js +0 -1
  146. package/public/chunk-RRTCHHRC.js +0 -3
  147. package/public/chunk-TA4GACKT.js +0 -4
  148. package/public/chunk-TXPLRBW5.js +0 -2
  149. package/public/chunk-VHFBF47T.js +0 -1
  150. package/public/chunk-VYUMZVH2.js +0 -2
  151. package/public/chunk-XRGAX4LS.js +0 -2
  152. package/public/chunk-YNJRIFUM.js +0 -1
  153. package/public/chunk-ZBCOJLI4.js +0 -6
  154. package/public/main-XM5EHMUE.js +0 -50
  155. package/public/polyfills-KH22MU6U.js +0 -2
  156. package/public/styles-RECKN66R.css +0 -1
  157. /package/public/media/{KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2 → KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2} +0 -0
  158. /package/public/media/{KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2 → KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2} +0 -0
  159. /package/public/media/{KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2 → KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2} +0 -0
  160. /package/public/media/{KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2 → KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2} +0 -0
  161. /package/public/media/{KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2 → KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2} +0 -0
  162. /package/public/media/{KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2 → KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2} +0 -0
  163. /package/public/media/{KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2 → KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2} +0 -0
  164. /package/public/media/{KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2 → KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2} +0 -0
  165. /package/public/media/{KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2 → KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2} +0 -0
  166. /package/public/media/{KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2 → KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2} +0 -0
  167. /package/public/media/{KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2 → KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2} +0 -0
  168. /package/public/media/{KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2 → KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2} +0 -0
  169. /package/public/media/{KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2 → KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2} +0 -0
  170. /package/public/media/{KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2 → KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2} +0 -0
  171. /package/public/media/{KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2 → KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2} +0 -0
  172. /package/public/media/{KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2 → KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2} +0 -0
  173. /package/public/media/{KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2 → KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2} +0 -0
  174. /package/public/media/{KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2 → KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2} +0 -0
  175. /package/public/media/{KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2 → KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2} +0 -0
  176. /package/public/media/{KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2 → KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2} +0 -0
  177. /package/public/media/{KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2 → KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2} +0 -0
  178. /package/public/media/{flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-CN2J7AYH.woff2 → flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2} +0 -0
@@ -0,0 +1,591 @@
1
+ import {
2
+ PageHeaderComponent
3
+ } from "./chunk-BM53SC5N.js";
4
+ import {
5
+ UnitsService
6
+ } from "./chunk-E24UNLSJ.js";
7
+ import {
8
+ MatCell,
9
+ MatCellDef,
10
+ MatColumnDef,
11
+ MatHeaderCell,
12
+ MatHeaderCellDef,
13
+ MatHeaderRow,
14
+ MatHeaderRowDef,
15
+ MatNoDataRow,
16
+ MatPaginator,
17
+ MatPaginatorModule,
18
+ MatRow,
19
+ MatRowDef,
20
+ MatSort,
21
+ MatSortHeader,
22
+ MatSortModule,
23
+ MatTable,
24
+ MatTableDataSource,
25
+ MatTableModule
26
+ } from "./chunk-B3LKEWZP.js";
27
+ import "./chunk-3VR3EA35.js";
28
+ import {
29
+ MatOptgroup,
30
+ MatOption,
31
+ MatSelect
32
+ } from "./chunk-65ZWQBS6.js";
33
+ import "./chunk-J42S2ELC.js";
34
+ import {
35
+ MatIcon,
36
+ MatIconModule
37
+ } from "./chunk-UQYTD5AC.js";
38
+ import {
39
+ DataService,
40
+ MAT_DIALOG_DATA,
41
+ MatDialog,
42
+ MatDialogActions,
43
+ MatDialogClose,
44
+ MatDialogContent,
45
+ MatDialogRef,
46
+ MatDialogTitle,
47
+ MatFormField,
48
+ MatFormFieldModule,
49
+ MatInput,
50
+ MatInputModule,
51
+ MatLabel
52
+ } from "./chunk-BIBIW64D.js";
53
+ import {
54
+ BreakpointObserver,
55
+ Breakpoints,
56
+ Component,
57
+ DestroyRef,
58
+ KeyValuePipe,
59
+ MatButton,
60
+ MatButtonModule,
61
+ Subject,
62
+ ViewEncapsulation,
63
+ __spreadProps,
64
+ __spreadValues,
65
+ debounceTime,
66
+ effect,
67
+ inject,
68
+ input,
69
+ map,
70
+ setClassMetadata,
71
+ takeUntilDestroyed,
72
+ throttleTime,
73
+ toSignal,
74
+ viewChild,
75
+ ɵsetClassDebugInfo,
76
+ ɵɵadvance,
77
+ ɵɵconditional,
78
+ ɵɵconditionalCreate,
79
+ ɵɵdefineComponent,
80
+ ɵɵelement,
81
+ ɵɵelementContainerEnd,
82
+ ɵɵelementContainerStart,
83
+ ɵɵelementEnd,
84
+ ɵɵelementStart,
85
+ ɵɵgetCurrentView,
86
+ ɵɵlistener,
87
+ ɵɵnextContext,
88
+ ɵɵpipe,
89
+ ɵɵpipeBind1,
90
+ ɵɵproperty,
91
+ ɵɵqueryAdvance,
92
+ ɵɵreference,
93
+ ɵɵrepeater,
94
+ ɵɵrepeaterCreate,
95
+ ɵɵrepeaterTrackByIdentity,
96
+ ɵɵresetView,
97
+ ɵɵrestoreView,
98
+ ɵɵtemplate,
99
+ ɵɵtext,
100
+ ɵɵtextInterpolate,
101
+ ɵɵtextInterpolate1,
102
+ ɵɵtwoWayBindingSet,
103
+ ɵɵtwoWayListener,
104
+ ɵɵtwoWayProperty,
105
+ ɵɵviewQuerySignal
106
+ } from "./chunk-SDOP6T56.js";
107
+
108
+ // src/app/core/components/data-inspector-row/data-inspector-row.component.ts
109
+ function DataInspectorRowComponent_Case_5_Template(rf, ctx) {
110
+ if (rf & 1) {
111
+ \u0275\u0275elementStart(0, "span", 3);
112
+ \u0275\u0275text(1, "Boolean");
113
+ \u0275\u0275elementEnd();
114
+ }
115
+ }
116
+ function DataInspectorRowComponent_Case_6_Template(rf, ctx) {
117
+ if (rf & 1) {
118
+ \u0275\u0275elementStart(0, "span", 3);
119
+ \u0275\u0275text(1, "String");
120
+ \u0275\u0275elementEnd();
121
+ }
122
+ }
123
+ function DataInspectorRowComponent_Case_7_Template(rf, ctx) {
124
+ if (rf & 1) {
125
+ \u0275\u0275elementStart(0, "span", 3);
126
+ \u0275\u0275text(1, "String");
127
+ \u0275\u0275elementEnd();
128
+ }
129
+ }
130
+ function DataInspectorRowComponent_Case_8_Template(rf, ctx) {
131
+ if (rf & 1) {
132
+ \u0275\u0275elementStart(0, "span", 3);
133
+ \u0275\u0275text(1, "Object");
134
+ \u0275\u0275elementEnd();
135
+ }
136
+ }
137
+ function DataInspectorRowComponent_Case_9_Template(rf, ctx) {
138
+ if (rf & 1) {
139
+ const _r1 = \u0275\u0275getCurrentView();
140
+ \u0275\u0275elementStart(0, "button", 5);
141
+ \u0275\u0275listener("click", function DataInspectorRowComponent_Case_9_Template_button_click_0_listener() {
142
+ \u0275\u0275restoreView(_r1);
143
+ const ctx_r1 = \u0275\u0275nextContext();
144
+ return \u0275\u0275resetView(ctx_r1.openDialog());
145
+ });
146
+ \u0275\u0275text(1);
147
+ \u0275\u0275elementEnd();
148
+ }
149
+ if (rf & 2) {
150
+ const ctx_r1 = \u0275\u0275nextContext();
151
+ \u0275\u0275advance();
152
+ \u0275\u0275textInterpolate(ctx_r1.selectedUnit);
153
+ }
154
+ }
155
+ function DialogUnitSelect_For_8_For_2_Template(rf, ctx) {
156
+ if (rf & 1) {
157
+ \u0275\u0275elementStart(0, "mat-option", 6);
158
+ \u0275\u0275text(1);
159
+ \u0275\u0275elementEnd();
160
+ }
161
+ if (rf & 2) {
162
+ const unit_r1 = ctx.$implicit;
163
+ \u0275\u0275property("value", unit_r1.measure);
164
+ \u0275\u0275advance();
165
+ \u0275\u0275textInterpolate1(" ", unit_r1.measure, " ");
166
+ }
167
+ }
168
+ function DialogUnitSelect_For_8_Template(rf, ctx) {
169
+ if (rf & 1) {
170
+ \u0275\u0275elementStart(0, "mat-optgroup", 3);
171
+ \u0275\u0275repeaterCreate(1, DialogUnitSelect_For_8_For_2_Template, 2, 2, "mat-option", 6, \u0275\u0275repeaterTrackByIdentity);
172
+ \u0275\u0275elementEnd();
173
+ }
174
+ if (rf & 2) {
175
+ const unitgroup_r2 = ctx.$implicit;
176
+ \u0275\u0275property("label", unitgroup_r2.group);
177
+ \u0275\u0275advance();
178
+ \u0275\u0275repeater(unitgroup_r2.units);
179
+ }
180
+ }
181
+ var DataInspectorRowComponent = class _DataInspectorRowComponent {
182
+ _units = inject(UnitsService);
183
+ _dialog = inject(MatDialog);
184
+ path = input.required(...ngDevMode ? [{ debugName: "path" }] : []);
185
+ source = input(void 0, ...ngDevMode ? [{ debugName: "source" }] : []);
186
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
187
+ pathValue = input(void 0, ...ngDevMode ? [{ debugName: "pathValue" }] : []);
188
+ type = input.required(...ngDevMode ? [{ debugName: "type" }] : []);
189
+ units = null;
190
+ selectedUnit = "unitless";
191
+ ngOnInit() {
192
+ this.units = this._units.getConversionsForPath(this.path());
193
+ this.selectedUnit = this.units.base;
194
+ }
195
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
196
+ convertValue(value, type) {
197
+ if (type === "number")
198
+ return this._units.convertToUnit(this.selectedUnit, value);
199
+ else {
200
+ return value;
201
+ }
202
+ }
203
+ openDialog() {
204
+ const dialogRef = this._dialog.open(DialogUnitSelect, {
205
+ data: { selectedUnit: this.selectedUnit, units: this.units }
206
+ });
207
+ dialogRef.afterClosed().subscribe((result) => {
208
+ if (result) {
209
+ this.selectedUnit = result;
210
+ }
211
+ });
212
+ }
213
+ static \u0275fac = function DataInspectorRowComponent_Factory(__ngFactoryType__) {
214
+ return new (__ngFactoryType__ || _DataInspectorRowComponent)();
215
+ };
216
+ static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _DataInspectorRowComponent, selectors: [["data-inspector-row"]], inputs: { path: [1, "path"], source: [1, "source"], pathValue: [1, "pathValue"], type: [1, "type"] }, decls: 10, vars: 3, consts: [[1, "cell-source", "cells"], [1, "cell-value", "cells"], [1, "cell-action", "cells"], [1, "path-type"], ["mat-stroked-button", "", 1, "change-units-btn"], ["mat-stroked-button", "", 1, "change-units-btn", 3, "click"]], template: function DataInspectorRowComponent_Template(rf, ctx) {
217
+ if (rf & 1) {
218
+ \u0275\u0275elementStart(0, "mat-cell", 0);
219
+ \u0275\u0275text(1);
220
+ \u0275\u0275elementEnd();
221
+ \u0275\u0275elementStart(2, "mat-cell", 1);
222
+ \u0275\u0275text(3);
223
+ \u0275\u0275elementEnd();
224
+ \u0275\u0275elementStart(4, "mat-cell", 2);
225
+ \u0275\u0275conditionalCreate(5, DataInspectorRowComponent_Case_5_Template, 2, 0, "span", 3)(6, DataInspectorRowComponent_Case_6_Template, 2, 0, "span", 3)(7, DataInspectorRowComponent_Case_7_Template, 2, 0, "span", 3)(8, DataInspectorRowComponent_Case_8_Template, 2, 0, "span", 3)(9, DataInspectorRowComponent_Case_9_Template, 2, 1, "button", 4);
226
+ \u0275\u0275elementEnd();
227
+ }
228
+ if (rf & 2) {
229
+ let tmp_2_0;
230
+ \u0275\u0275advance();
231
+ \u0275\u0275textInterpolate(ctx.source());
232
+ \u0275\u0275advance(2);
233
+ \u0275\u0275textInterpolate(ctx.convertValue(ctx.pathValue(), ctx.type()));
234
+ \u0275\u0275advance(2);
235
+ \u0275\u0275conditional((tmp_2_0 = ctx.type()) === "boolean" ? 5 : tmp_2_0 === "string" ? 6 : tmp_2_0 === "Date" ? 7 : tmp_2_0 === "object" ? 8 : 9);
236
+ }
237
+ }, dependencies: [MatCell, MatButtonModule, MatButton], styles: ["/* src/app/core/components/data-inspector-row/data-inspector-row.component.css */\n.change-units-btn {\n width: 100%;\n}\n.cell-source:first-of-type {\n padding-left: 0px;\n flex: 1 1 30%;\n}\n.cells {\n border: 0px solid white;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.cell-value {\n justify-content: flex-start;\n flex: 1 1 70%;\n padding: 0px;\n}\n.cell-action {\n justify-content: end;\n flex: 0 0 107px;\n}\n.cell-action:last-of-type {\n padding: 0px 0px 0px 0px;\n}\n.path-type {\n width: 100%;\n height: 40px;\n align-content: center;\n text-align: center;\n color: var(--mat-sys-primary);\n}\n/*# sourceMappingURL=data-inspector-row.component.css.map */\n"], encapsulation: 2 });
238
+ };
239
+ (() => {
240
+ (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DataInspectorRowComponent, [{
241
+ type: Component,
242
+ args: [{ selector: "data-inspector-row", encapsulation: ViewEncapsulation.None, imports: [MatCell, MatButtonModule], template: `<mat-cell class="cell-source cells">{{ source() }}</mat-cell>
243
+ <mat-cell class="cell-value cells">{{ convertValue(pathValue(), type()) }}</mat-cell>
244
+ <mat-cell class="cell-action cells">
245
+ @switch (type()) {
246
+ @case ('boolean') {
247
+ <span class="path-type">Boolean</span>
248
+ }
249
+ @case ('string') {
250
+ <span class="path-type">String</span>
251
+ }
252
+ @case ('Date') {
253
+ <span class="path-type">String</span>
254
+ }
255
+ @case ('object') {
256
+ <span class="path-type">Object</span>
257
+ }
258
+ @default {
259
+ <button mat-stroked-button class="change-units-btn" (click)="openDialog()">{{selectedUnit}}</button>
260
+ }
261
+ }
262
+ </mat-cell>
263
+ `, styles: ["/* src/app/core/components/data-inspector-row/data-inspector-row.component.css */\n.change-units-btn {\n width: 100%;\n}\n.cell-source:first-of-type {\n padding-left: 0px;\n flex: 1 1 30%;\n}\n.cells {\n border: 0px solid white;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.cell-value {\n justify-content: flex-start;\n flex: 1 1 70%;\n padding: 0px;\n}\n.cell-action {\n justify-content: end;\n flex: 0 0 107px;\n}\n.cell-action:last-of-type {\n padding: 0px 0px 0px 0px;\n}\n.path-type {\n width: 100%;\n height: 40px;\n align-content: center;\n text-align: center;\n color: var(--mat-sys-primary);\n}\n/*# sourceMappingURL=data-inspector-row.component.css.map */\n"] }]
264
+ }], null, null);
265
+ })();
266
+ (() => {
267
+ (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(DataInspectorRowComponent, { className: "DataInspectorRowComponent", filePath: "src/app/core/components/data-inspector-row/data-inspector-row.component.ts", lineNumber: 20 });
268
+ })();
269
+ var DialogUnitSelect = class _DialogUnitSelect {
270
+ dialogRef = inject(MatDialogRef);
271
+ data = inject(MAT_DIALOG_DATA);
272
+ selectedUnit = null;
273
+ static \u0275fac = function DialogUnitSelect_Factory(__ngFactoryType__) {
274
+ return new (__ngFactoryType__ || _DialogUnitSelect)();
275
+ };
276
+ static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _DialogUnitSelect, selectors: [["dialog-unit-selector"]], decls: 14, vars: 2, consts: [["mat-dialog-title", ""], ["appearance", "outline", "floatLabel", "always", 2, "padding-top", "15px", "padding-bottom", "15px"], [3, "valueChange", "value"], [3, "label"], ["mat-flat-button", "", "mat-dialog-close", ""], ["mat-flat-button", "", 3, "mat-dialog-close"], [3, "value"]], template: function DialogUnitSelect_Template(rf, ctx) {
277
+ if (rf & 1) {
278
+ \u0275\u0275elementStart(0, "h2", 0);
279
+ \u0275\u0275text(1, "Select Unit type");
280
+ \u0275\u0275elementEnd();
281
+ \u0275\u0275elementStart(2, "mat-dialog-content")(3, "mat-form-field", 1)(4, "mat-label");
282
+ \u0275\u0275text(5, "Unit");
283
+ \u0275\u0275elementEnd();
284
+ \u0275\u0275elementStart(6, "mat-select", 2);
285
+ \u0275\u0275twoWayListener("valueChange", function DialogUnitSelect_Template_mat_select_valueChange_6_listener($event) {
286
+ \u0275\u0275twoWayBindingSet(ctx.data.selectedUnit, $event) || (ctx.data.selectedUnit = $event);
287
+ return $event;
288
+ });
289
+ \u0275\u0275repeaterCreate(7, DialogUnitSelect_For_8_Template, 3, 1, "mat-optgroup", 3, \u0275\u0275repeaterTrackByIdentity);
290
+ \u0275\u0275elementEnd()()();
291
+ \u0275\u0275elementStart(9, "mat-dialog-actions")(10, "button", 4);
292
+ \u0275\u0275text(11, "Cancel");
293
+ \u0275\u0275elementEnd();
294
+ \u0275\u0275elementStart(12, "button", 5);
295
+ \u0275\u0275text(13, "Ok");
296
+ \u0275\u0275elementEnd()();
297
+ }
298
+ if (rf & 2) {
299
+ \u0275\u0275advance(6);
300
+ \u0275\u0275twoWayProperty("value", ctx.data.selectedUnit);
301
+ \u0275\u0275advance();
302
+ \u0275\u0275repeater(ctx.data.units.conversions);
303
+ \u0275\u0275advance(5);
304
+ \u0275\u0275property("mat-dialog-close", ctx.data.selectedUnit);
305
+ }
306
+ }, dependencies: [
307
+ MatDialogTitle,
308
+ MatDialogContent,
309
+ MatFormField,
310
+ MatLabel,
311
+ MatSelect,
312
+ MatOptgroup,
313
+ MatOption,
314
+ MatDialogActions,
315
+ MatButtonModule,
316
+ MatButton,
317
+ MatDialogClose
318
+ ], encapsulation: 2 });
319
+ };
320
+ (() => {
321
+ (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DialogUnitSelect, [{
322
+ type: Component,
323
+ args: [{ selector: "dialog-unit-selector", imports: [
324
+ MatDialogTitle,
325
+ MatDialogContent,
326
+ MatFormField,
327
+ MatLabel,
328
+ MatSelect,
329
+ MatOptgroup,
330
+ MatOption,
331
+ MatDialogActions,
332
+ MatButtonModule,
333
+ MatDialogClose
334
+ ], template: '<h2 mat-dialog-title>Select Unit type</h2>\n<mat-dialog-content>\n <mat-form-field style="padding-top: 15px; padding-bottom: 15px;" appearance="outline" floatLabel="always">\n <mat-label>Unit</mat-label>\n <mat-select [(value)]="data.selectedUnit">\n @for (unitgroup of data.units.conversions; track unitgroup) {\n <mat-optgroup [label]="unitgroup.group">\n @for (unit of unitgroup.units; track unit) {\n <mat-option [value]="unit.measure">\n {{unit.measure}}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n </mat-form-field>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-flat-button mat-dialog-close>Cancel</button>\n <button mat-flat-button [mat-dialog-close]="data.selectedUnit">Ok</button>\n</mat-dialog-actions>\n' }]
335
+ }], null, null);
336
+ })();
337
+ (() => {
338
+ (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(DialogUnitSelect, { className: "DialogUnitSelect", filePath: "src/app/core/components/data-inspector-row/data-inspector-row.component.ts", lineNumber: 77 });
339
+ })();
340
+
341
+ // src/app/core/components/data-inspector/data-inspector.component.ts
342
+ var _forTrack0 = ($index, $item) => $item.key;
343
+ function DataInspectorComponent_mat_header_cell_9_Template(rf, ctx) {
344
+ if (rf & 1) {
345
+ \u0275\u0275elementStart(0, "mat-header-cell", 19);
346
+ \u0275\u0275text(1, " Path ");
347
+ \u0275\u0275elementEnd();
348
+ }
349
+ }
350
+ function DataInspectorComponent_mat_cell_10_Template(rf, ctx) {
351
+ if (rf & 1) {
352
+ \u0275\u0275elementStart(0, "mat-cell", 20);
353
+ \u0275\u0275text(1);
354
+ \u0275\u0275elementEnd();
355
+ }
356
+ if (rf & 2) {
357
+ const element_r2 = ctx.$implicit;
358
+ \u0275\u0275advance();
359
+ \u0275\u0275textInterpolate1(" ", element_r2.path, " ");
360
+ }
361
+ }
362
+ function DataInspectorComponent_mat_header_cell_12_Template(rf, ctx) {
363
+ if (rf & 1) {
364
+ \u0275\u0275elementStart(0, "mat-header-cell", 21);
365
+ \u0275\u0275text(1, " PUT Support ");
366
+ \u0275\u0275elementEnd();
367
+ }
368
+ }
369
+ function DataInspectorComponent_mat_cell_13_Conditional_1_Template(rf, ctx) {
370
+ if (rf & 1) {
371
+ \u0275\u0275elementStart(0, "mat-icon", 23);
372
+ \u0275\u0275text(1, "check_circle");
373
+ \u0275\u0275elementEnd();
374
+ }
375
+ }
376
+ function DataInspectorComponent_mat_cell_13_Template(rf, ctx) {
377
+ if (rf & 1) {
378
+ \u0275\u0275elementStart(0, "mat-cell", 22);
379
+ \u0275\u0275conditionalCreate(1, DataInspectorComponent_mat_cell_13_Conditional_1_Template, 2, 0, "mat-icon", 23);
380
+ \u0275\u0275elementEnd();
381
+ }
382
+ if (rf & 2) {
383
+ const element_r3 = ctx.$implicit;
384
+ \u0275\u0275advance();
385
+ \u0275\u0275conditional((element_r3.meta == null ? null : element_r3.meta.supportsPut) ? 1 : -1);
386
+ }
387
+ }
388
+ function DataInspectorComponent_mat_header_cell_15_Template(rf, ctx) {
389
+ if (rf & 1) {
390
+ \u0275\u0275elementStart(0, "mat-header-cell", 24);
391
+ \u0275\u0275text(1, " Source ");
392
+ \u0275\u0275elementEnd();
393
+ }
394
+ }
395
+ function DataInspectorComponent_mat_cell_16_For_3_Template(rf, ctx) {
396
+ if (rf & 1) {
397
+ \u0275\u0275element(0, "data-inspector-row", 27);
398
+ }
399
+ if (rf & 2) {
400
+ const item_r4 = ctx.$implicit;
401
+ const element_r5 = \u0275\u0275nextContext().$implicit;
402
+ const ctx_r5 = \u0275\u0275nextContext();
403
+ \u0275\u0275property("path", element_r5.path)("source", ctx_r5.getSourceKey(item_r4))("pathValue", ctx_r5.getSourceValue(item_r4))("type", element_r5.type);
404
+ }
405
+ }
406
+ function DataInspectorComponent_mat_cell_16_Template(rf, ctx) {
407
+ if (rf & 1) {
408
+ \u0275\u0275elementStart(0, "mat-cell", 25)(1, "div", 26);
409
+ \u0275\u0275repeaterCreate(2, DataInspectorComponent_mat_cell_16_For_3_Template, 1, 4, "data-inspector-row", 27, _forTrack0);
410
+ \u0275\u0275pipe(4, "keyvalue");
411
+ \u0275\u0275elementEnd()();
412
+ }
413
+ if (rf & 2) {
414
+ const element_r5 = ctx.$implicit;
415
+ \u0275\u0275advance(2);
416
+ \u0275\u0275repeater(\u0275\u0275pipeBind1(4, 0, element_r5.sources));
417
+ }
418
+ }
419
+ function DataInspectorComponent_mat_header_row_17_Template(rf, ctx) {
420
+ if (rf & 1) {
421
+ \u0275\u0275element(0, "mat-header-row", 28);
422
+ }
423
+ }
424
+ function DataInspectorComponent_mat_row_18_Template(rf, ctx) {
425
+ if (rf & 1) {
426
+ \u0275\u0275element(0, "mat-row", 29);
427
+ }
428
+ }
429
+ function DataInspectorComponent_tr_19_Template(rf, ctx) {
430
+ if (rf & 1) {
431
+ \u0275\u0275elementStart(0, "tr", 30)(1, "td", 31);
432
+ \u0275\u0275text(2);
433
+ \u0275\u0275elementEnd()();
434
+ }
435
+ if (rf & 2) {
436
+ \u0275\u0275nextContext();
437
+ const input_r7 = \u0275\u0275reference(6);
438
+ \u0275\u0275advance(2);
439
+ \u0275\u0275textInterpolate1('No data matching the filter "', input_r7.value, '"');
440
+ }
441
+ }
442
+ var DataInspectorComponent = class _DataInspectorComponent {
443
+ dataService = inject(DataService);
444
+ destroyRef = inject(DestroyRef);
445
+ _responsive = inject(BreakpointObserver);
446
+ isPhonePortrait;
447
+ filterSubject = new Subject();
448
+ paginator = viewChild.required(MatPaginator);
449
+ sort = viewChild.required(MatSort);
450
+ pageTitle = "Data Inspector";
451
+ pageSize = 25;
452
+ hidePageSize = false;
453
+ showFirstLastButtons = true;
454
+ showPageSizeOptions = [5, 10, 25, 100];
455
+ tableData = new MatTableDataSource([]);
456
+ displayedColumns = ["path", "supportsPut", "defaultSource"];
457
+ constructor() {
458
+ this.filterSubject.pipe(debounceTime(500)).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((filterValue) => {
459
+ this.tableData.filter = filterValue.trim().toLowerCase();
460
+ if (this.tableData.paginator) {
461
+ this.tableData.paginator.firstPage();
462
+ }
463
+ });
464
+ this.isPhonePortrait = toSignal(this._responsive.observe(Breakpoints.HandsetPortrait));
465
+ effect(() => {
466
+ if (this.isPhonePortrait().matches) {
467
+ this.hidePageSize = true;
468
+ this.showFirstLastButtons = false;
469
+ this.showPageSizeOptions = [];
470
+ } else {
471
+ this.hidePageSize = false;
472
+ this.showFirstLastButtons = true;
473
+ this.showPageSizeOptions = [5, 10, 25, 100];
474
+ }
475
+ });
476
+ }
477
+ ngAfterViewInit() {
478
+ this.dataService.startSkDataFullTree().pipe(
479
+ map((paths) => paths.filter((path) => Object.keys(path.sources || {}).length > 0).map((path) => __spreadProps(__spreadValues({}, path), {
480
+ sources: path.type && path.type.includes("object") && typeof path.sources === "object" ? Object.fromEntries(Object.entries(path.sources).map(([key, value]) => [
481
+ key,
482
+ __spreadProps(__spreadValues({}, value), {
483
+ sourceValue: typeof value.sourceValue === "object" ? JSON.stringify(value.sourceValue) : value.sourceValue
484
+ })
485
+ ])) : path.sources
486
+ }))),
487
+ throttleTime(500),
488
+ // Emit at most once every 500ms
489
+ takeUntilDestroyed(this.destroyRef)
490
+ ).subscribe((filteredPaths) => {
491
+ this.tableData.data = filteredPaths;
492
+ });
493
+ this.tableData.paginator = this.paginator();
494
+ this.tableData.sort = this.sort();
495
+ this.tableData.sortingDataAccessor = (item, property) => {
496
+ switch (property) {
497
+ case "supportsPut":
498
+ return item.meta?.supportsPut ? 1 : 0;
499
+ // Sort by boolean value (1 for true, 0 for false)
500
+ default:
501
+ return item[property];
502
+ }
503
+ };
504
+ }
505
+ applyFilter(event) {
506
+ const filterValue = event.target.value;
507
+ this.filterSubject.next(filterValue);
508
+ }
509
+ trackByPath(index, item) {
510
+ return `${item.path}`;
511
+ }
512
+ trackBySource(index, item) {
513
+ return `${item.key}`;
514
+ }
515
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
516
+ getSourceKey(source) {
517
+ return String(source.key);
518
+ }
519
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
520
+ getSourceValue(item) {
521
+ return item.value.sourceValue;
522
+ }
523
+ ngOnDestroy() {
524
+ this.filterSubject.complete();
525
+ this.dataService.stopSkDataFullTree();
526
+ }
527
+ static \u0275fac = function DataInspectorComponent_Factory(__ngFactoryType__) {
528
+ return new (__ngFactoryType__ || _DataInspectorComponent)();
529
+ };
530
+ static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _DataInspectorComponent, selectors: [["data-inspector"]], viewQuery: function DataInspectorComponent_Query(rf, ctx) {
531
+ if (rf & 1) {
532
+ \u0275\u0275viewQuerySignal(ctx.paginator, MatPaginator, 5);
533
+ \u0275\u0275viewQuerySignal(ctx.sort, MatSort, 5);
534
+ }
535
+ if (rf & 2) {
536
+ \u0275\u0275queryAdvance(2);
537
+ }
538
+ }, decls: 21, vars: 10, consts: [["input", ""], [3, "pageTitle"], [1, "data-inspector-container"], [1, "filter-field"], ["matInput", "", "placeholder", "Type any part of the path, source or value...", "value", "", 3, "keyup"], ["matSort", "", "matSortActive", "path", "matSortDirection", "asc", 1, "table-content-area", "mat-elevation-z8", 3, "dataSource", "trackBy"], ["matColumnDef", "path"], ["class", "pathHeader", "mat-sort-header", "", 4, "matHeaderCellDef"], ["class", "pathCell row-cell", 4, "matCellDef"], ["matColumnDef", "supportsPut"], ["class", "putHeader", "mat-sort-header", "", 4, "matHeaderCellDef"], ["class", "putCell row-cell", 4, "matCellDef"], ["matColumnDef", "defaultSource"], ["class", "dataHeader", "mat-sort-header", "", 4, "matHeaderCellDef"], ["class", "dataCell row-cell", 4, "matCellDef"], ["class", "headerRow", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["class", "table-row", 4, "matRowDef", "matRowDefColumns"], ["class", "mat-row", 4, "matNoDataRow"], [1, "paginator", 3, "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons"], ["mat-sort-header", "", 1, "pathHeader"], [1, "pathCell", "row-cell"], ["mat-sort-header", "", 1, "putHeader"], [1, "putCell", "row-cell"], ["matTooltip", "Supports PUT operation", 1, "put-icon"], ["mat-sort-header", "", 1, "dataHeader"], [1, "dataCell", "row-cell"], [1, "flex-container"], [1, "source-sub-row", 3, "path", "source", "pathValue", "type"], [1, "headerRow"], [1, "table-row"], [1, "mat-row"], ["colspan", "4", 1, "mat-cell"]], template: function DataInspectorComponent_Template(rf, ctx) {
539
+ if (rf & 1) {
540
+ const _r1 = \u0275\u0275getCurrentView();
541
+ \u0275\u0275element(0, "page-header", 1);
542
+ \u0275\u0275elementStart(1, "div", 2)(2, "mat-form-field", 3)(3, "mat-label");
543
+ \u0275\u0275text(4, "Filter");
544
+ \u0275\u0275elementEnd();
545
+ \u0275\u0275elementStart(5, "input", 4, 0);
546
+ \u0275\u0275listener("keyup", function DataInspectorComponent_Template_input_keyup_5_listener($event) {
547
+ \u0275\u0275restoreView(_r1);
548
+ return \u0275\u0275resetView(ctx.applyFilter($event));
549
+ });
550
+ \u0275\u0275elementEnd()();
551
+ \u0275\u0275elementStart(7, "mat-table", 5);
552
+ \u0275\u0275elementContainerStart(8, 6);
553
+ \u0275\u0275template(9, DataInspectorComponent_mat_header_cell_9_Template, 2, 0, "mat-header-cell", 7)(10, DataInspectorComponent_mat_cell_10_Template, 2, 1, "mat-cell", 8);
554
+ \u0275\u0275elementContainerEnd();
555
+ \u0275\u0275elementContainerStart(11, 9);
556
+ \u0275\u0275template(12, DataInspectorComponent_mat_header_cell_12_Template, 2, 0, "mat-header-cell", 10)(13, DataInspectorComponent_mat_cell_13_Template, 2, 1, "mat-cell", 11);
557
+ \u0275\u0275elementContainerEnd();
558
+ \u0275\u0275elementContainerStart(14, 12);
559
+ \u0275\u0275template(15, DataInspectorComponent_mat_header_cell_15_Template, 2, 0, "mat-header-cell", 13)(16, DataInspectorComponent_mat_cell_16_Template, 5, 2, "mat-cell", 14);
560
+ \u0275\u0275elementContainerEnd();
561
+ \u0275\u0275template(17, DataInspectorComponent_mat_header_row_17_Template, 1, 0, "mat-header-row", 15)(18, DataInspectorComponent_mat_row_18_Template, 1, 0, "mat-row", 16)(19, DataInspectorComponent_tr_19_Template, 3, 1, "tr", 17);
562
+ \u0275\u0275elementEnd();
563
+ \u0275\u0275element(20, "mat-paginator", 18);
564
+ \u0275\u0275elementEnd();
565
+ }
566
+ if (rf & 2) {
567
+ \u0275\u0275property("pageTitle", ctx.pageTitle);
568
+ \u0275\u0275advance(7);
569
+ \u0275\u0275property("dataSource", ctx.tableData)("trackBy", ctx.trackByPath);
570
+ \u0275\u0275advance(10);
571
+ \u0275\u0275property("matHeaderRowDef", ctx.displayedColumns)("matHeaderRowDefSticky", true);
572
+ \u0275\u0275advance();
573
+ \u0275\u0275property("matRowDefColumns", ctx.displayedColumns);
574
+ \u0275\u0275advance(2);
575
+ \u0275\u0275property("pageSize", ctx.pageSize)("pageSizeOptions", ctx.showPageSizeOptions)("hidePageSize", ctx.hidePageSize)("showFirstLastButtons", ctx.showFirstLastButtons);
576
+ }
577
+ }, dependencies: [MatFormFieldModule, MatFormField, MatLabel, MatTableModule, MatTable, MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatHeaderCell, MatCell, MatHeaderRow, MatRow, MatNoDataRow, MatInputModule, MatInput, MatPaginatorModule, MatPaginator, MatSortModule, MatSort, MatSortHeader, DataInspectorRowComponent, PageHeaderComponent, MatIconModule, MatIcon, KeyValuePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n width: 100%;\n}\n.data-inspector-container[_ngcontent-%COMP%] {\n margin-left: 24px;\n margin-right: 24px;\n height: calc(100% - 63px);\n}\n.table-content-area[_ngcontent-%COMP%] {\n height: calc(100% - 56px - 86px);\n overflow-y: auto;\n width: 100%;\n scroll-behavior: smooth;\n}\n.mat-column-path[_ngcontent-%COMP%] {\n flex: 0 0 50%;\n width: 50%;\n}\n.mat-mdc-table[_ngcontent-%COMP%] {\n overflow: auto;\n}\n.paginator[_ngcontent-%COMP%] {\n width: 100%;\n height: 56px;\n background-color: var(--mat-sys-background);\n}\n.filter-field[_ngcontent-%COMP%] {\n padding: 15px 0px 15px 0px;\n width: 100%;\n height: 86px;\n}\n.pathHeader[_ngcontent-%COMP%] {\n flex: 1 1 45%;\n}\n.putHeader[_ngcontent-%COMP%] {\n flex: 1 1 10%;\n}\n.dataHeader[_ngcontent-%COMP%] {\n flex: 1 1 45%;\n}\n.table-row[_ngcontent-%COMP%] {\n border-bottom-color: var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));\n border-bottom-width: var(--mat-table-row-item-outline-width, 1px);\n border-bottom-style: solid;\n}\n.row-cell[_ngcontent-%COMP%] {\n border-bottom-color: white;\n border-bottom-width: 0px;\n border-bottom-style: solid;\n}\n.pathCell[_ngcontent-%COMP%] {\n flex: 1 1 45%;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.putCell[_ngcontent-%COMP%] {\n flex: 1 1 10%;\n}\n.dataCell[_ngcontent-%COMP%] {\n flex: 1 1 45%;\n flex-flow: column;\n flex-wrap: nowrap;\n gap: 2px;\n}\n.flex-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n gap: 5px;\n margin: 5px 0px 5px 0px;\n height: 100%;\n width: 100%;\n}\n.source-sub-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n gap: 5px;\n width: 100%;\n}\n.put-icon[_ngcontent-%COMP%] {\n color: var(--kip-starboard-color);\n}\n@media screen and (max-width: 750px) {\n .pathHeader[_ngcontent-%COMP%] {\n flex: 1 1 50%;\n }\n .dataHeader[_ngcontent-%COMP%] {\n flex: 1 1 50%;\n }\n .dataCell[_ngcontent-%COMP%] {\n flex: 1 1 100%;\n }\n .dataCell[_ngcontent-%COMP%] {\n flex: 1 1 100%;\n margin-left: 24px;\n }\n .mat-mdc-table[_ngcontent-%COMP%] .mat-mdc-row[_ngcontent-%COMP%] {\n flex-direction: row;\n flex-wrap: wrap;\n }\n .mat-mdc-table[_ngcontent-%COMP%] .mat-mdc-cell[_ngcontent-%COMP%]:before {\n content: attr(data-label);\n float: left;\n padding-right: 5px;\n }\n mat-row[_ngcontent-%COMP%]::after {\n min-height: auto;\n padding-bottom: 10px;\n }\n .dataRow[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n .actionCell[_ngcontent-%COMP%] {\n margin-left: 24px;\n }\n}\n/*# sourceMappingURL=data-inspector.component.css.map */"] });
578
+ };
579
+ (() => {
580
+ (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DataInspectorComponent, [{
581
+ type: Component,
582
+ args: [{ selector: "data-inspector", imports: [MatFormFieldModule, MatTableModule, MatInputModule, MatPaginatorModule, MatSortModule, DataInspectorRowComponent, KeyValuePipe, PageHeaderComponent, MatIconModule], template: '<page-header [pageTitle]="pageTitle" />\n<div class="data-inspector-container">\n <mat-form-field class="filter-field">\n <mat-label>Filter</mat-label>\n <input matInput (keyup)="applyFilter($event)" placeholder="Type any part of the path, source or value..." value="" #input>\n </mat-form-field>\n\n <mat-table class="table-content-area mat-elevation-z8" [dataSource]="tableData" [trackBy]="trackByPath" matSort matSortActive="path" matSortDirection="asc">\n <!-- Path Column -->\n <ng-container matColumnDef="path">\n <mat-header-cell class="pathHeader" *matHeaderCellDef mat-sort-header> Path </mat-header-cell>\n <mat-cell class="pathCell row-cell" *matCellDef="let element"> {{element.path}} </mat-cell>\n </ng-container>\n <!-- Put Column -->\n <ng-container matColumnDef="supportsPut">\n <mat-header-cell class="putHeader" *matHeaderCellDef mat-sort-header> PUT Support </mat-header-cell>\n <mat-cell class="putCell row-cell" *matCellDef="let element">\n @if (element.meta?.supportsPut) {\n <mat-icon class="put-icon" matTooltip="Supports PUT operation">check_circle</mat-icon>\n }\n </mat-cell>\n </ng-container>\n <!-- Source/value Column -->\n <ng-container matColumnDef="defaultSource">\n <mat-header-cell class="dataHeader" *matHeaderCellDef mat-sort-header> Source </mat-header-cell>\n <mat-cell class="dataCell row-cell" *matCellDef="let element">\n <div class="flex-container">\n @for (item of element.sources | keyvalue; track item.key) {\n <data-inspector-row class="source-sub-row" [path]="element.path" [source]="getSourceKey(item )" [pathValue]="getSourceValue(item)" [type]="element.type"></data-inspector-row>\n }\n </div>\n </mat-cell>\n </ng-container>\n\n <!-- Table headers -->\n <mat-header-row class="headerRow" *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>\n <mat-row class="table-row" *matRowDef="let row; columns: displayedColumns;"></mat-row>\n\n <!-- Row shown when there is no matching data. -->\n <tr class="mat-row" *matNoDataRow>\n <td class="mat-cell" colspan="4">No data matching the filter "{{input.value}}"</td>\n </tr>\n </mat-table>\n <mat-paginator [pageSize]="pageSize" [pageSizeOptions]="showPageSizeOptions" [hidePageSize]="hidePageSize" [showFirstLastButtons]="showFirstLastButtons" class="paginator"></mat-paginator>\n</div>\n', styles: ["/* src/app/core/components/data-inspector/data-inspector.component.scss */\n:host {\n display: block;\n height: 100%;\n width: 100%;\n}\n.data-inspector-container {\n margin-left: 24px;\n margin-right: 24px;\n height: calc(100% - 63px);\n}\n.table-content-area {\n height: calc(100% - 56px - 86px);\n overflow-y: auto;\n width: 100%;\n scroll-behavior: smooth;\n}\n.mat-column-path {\n flex: 0 0 50%;\n width: 50%;\n}\n.mat-mdc-table {\n overflow: auto;\n}\n.paginator {\n width: 100%;\n height: 56px;\n background-color: var(--mat-sys-background);\n}\n.filter-field {\n padding: 15px 0px 15px 0px;\n width: 100%;\n height: 86px;\n}\n.pathHeader {\n flex: 1 1 45%;\n}\n.putHeader {\n flex: 1 1 10%;\n}\n.dataHeader {\n flex: 1 1 45%;\n}\n.table-row {\n border-bottom-color: var(--mat-table-row-item-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.12)));\n border-bottom-width: var(--mat-table-row-item-outline-width, 1px);\n border-bottom-style: solid;\n}\n.row-cell {\n border-bottom-color: white;\n border-bottom-width: 0px;\n border-bottom-style: solid;\n}\n.pathCell {\n flex: 1 1 45%;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.putCell {\n flex: 1 1 10%;\n}\n.dataCell {\n flex: 1 1 45%;\n flex-flow: column;\n flex-wrap: nowrap;\n gap: 2px;\n}\n.flex-container {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n gap: 5px;\n margin: 5px 0px 5px 0px;\n height: 100%;\n width: 100%;\n}\n.source-sub-row {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n gap: 5px;\n width: 100%;\n}\n.put-icon {\n color: var(--kip-starboard-color);\n}\n@media screen and (max-width: 750px) {\n .pathHeader {\n flex: 1 1 50%;\n }\n .dataHeader {\n flex: 1 1 50%;\n }\n .dataCell {\n flex: 1 1 100%;\n }\n .dataCell {\n flex: 1 1 100%;\n margin-left: 24px;\n }\n .mat-mdc-table .mat-mdc-row {\n flex-direction: row;\n flex-wrap: wrap;\n }\n .mat-mdc-table .mat-mdc-cell:before {\n content: attr(data-label);\n float: left;\n padding-right: 5px;\n }\n mat-row::after {\n min-height: auto;\n padding-bottom: 10px;\n }\n .dataRow {\n flex-direction: column;\n align-items: flex-start;\n }\n .actionCell {\n margin-left: 24px;\n }\n}\n/*# sourceMappingURL=data-inspector.component.css.map */\n"] }]
583
+ }], () => [], null);
584
+ })();
585
+ (() => {
586
+ (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(DataInspectorComponent, { className: "DataInspectorComponent", filePath: "src/app/core/components/data-inspector/data-inspector.component.ts", lineNumber: 26 });
587
+ })();
588
+ export {
589
+ DataInspectorComponent
590
+ };
591
+ //# sourceMappingURL=chunk-YT33DHC3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/app/core/components/data-inspector-row/data-inspector-row.component.ts", "src/app/core/components/data-inspector-row/data-inspector-row.component.html", "src/app/core/components/data-inspector-row/data-inspector-row-unit-modal.html", "src/app/core/components/data-inspector/data-inspector.component.ts", "src/app/core/components/data-inspector/data-inspector.component.html"],
4
+ "sourcesContent": ["import { Component, OnInit, ViewEncapsulation, input, inject } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\n\nimport { UnitsService } from '../../services/units.service';\nimport { MatCell } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptgroup, MatOption } from '@angular/material/core';\n\nimport { MatSelect } from '@angular/material/select';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\n\n\n@Component({\n selector: 'data-inspector-row',\n templateUrl: './data-inspector-row.component.html',\n styleUrls: ['./data-inspector-row.component.css'],\n encapsulation: ViewEncapsulation.None,\n imports: [MatCell, MatButtonModule]\n})\nexport class DataInspectorRowComponent implements OnInit {\n private _units = inject(UnitsService);\n private _dialog = inject(MatDialog);\n readonly path = input.required<string>();\n readonly source = input<string>(undefined);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly pathValue = input<any>(undefined);\n readonly type = input.required<string>();\n\n units = null;\n selectedUnit = \"unitless\"\n\n ngOnInit() {\n this.units = this._units.getConversionsForPath(this.path());\n this.selectedUnit = this.units.base;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected convertValue(value: any, type: string): any {\n if (type === 'number')\n return this._units.convertToUnit(this.selectedUnit, value);\n else {\n return value;\n }\n }\n\n openDialog(): void {\n const dialogRef = this._dialog.open(DialogUnitSelect, {\n data: {selectedUnit: this.selectedUnit, units: this.units}\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.selectedUnit = result;\n }\n });\n }\n}\n\n\n\n@Component({\n selector: 'dialog-unit-selector',\n templateUrl: 'data-inspector-row-unit-modal.html',\n imports: [\n MatDialogTitle,\n MatDialogContent,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOptgroup,\n MatOption,\n MatDialogActions,\n MatButtonModule,\n MatDialogClose\n],\n})\nexport class DialogUnitSelect {\n dialogRef = inject<MatDialogRef<DialogUnitSelect>>(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n\n selectedUnit = null;\n}\n", "<mat-cell class=\"cell-source cells\">{{ source() }}</mat-cell>\n<mat-cell class=\"cell-value cells\">{{ convertValue(pathValue(), type()) }}</mat-cell>\n<mat-cell class=\"cell-action cells\">\n @switch (type()) {\n @case ('boolean') {\n <span class=\"path-type\">Boolean</span>\n }\n @case ('string') {\n <span class=\"path-type\">String</span>\n }\n @case ('Date') {\n <span class=\"path-type\">String</span>\n }\n @case ('object') {\n <span class=\"path-type\">Object</span>\n }\n @default {\n <button mat-stroked-button class=\"change-units-btn\" (click)=\"openDialog()\">{{selectedUnit}}</button>\n }\n }\n</mat-cell>\n", "<h2 mat-dialog-title>Select Unit type</h2>\n<mat-dialog-content>\n <mat-form-field style=\"padding-top: 15px; padding-bottom: 15px;\" appearance=\"outline\" floatLabel=\"always\">\n <mat-label>Unit</mat-label>\n <mat-select [(value)]=\"data.selectedUnit\">\n @for (unitgroup of data.units.conversions; track unitgroup) {\n <mat-optgroup [label]=\"unitgroup.group\">\n @for (unit of unitgroup.units; track unit) {\n <mat-option [value]=\"unit.measure\">\n {{unit.measure}}\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n </mat-form-field>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-flat-button mat-dialog-close>Cancel</button>\n <button mat-flat-button [mat-dialog-close]=\"data.selectedUnit\">Ok</button>\n</mat-dialog-actions>\n", "import { MatIconModule } from '@angular/material/icon';\nimport { Component, AfterViewInit, OnDestroy, inject, DestroyRef, Signal, effect, viewChild } from '@angular/core';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { DataService } from '../../services/data.service';\nimport { ISkPathData } from \"../../interfaces/app-interfaces\";\nimport { DataInspectorRowComponent } from '../data-inspector-row/data-inspector-row.component';\nimport { KeyValuePipe } from '@angular/common';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { PageHeaderComponent } from '../page-header/page-header.component';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { map, throttleTime } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\n\n\n@Component({\n selector: 'data-inspector',\n templateUrl: './data-inspector.component.html',\n styleUrls: ['./data-inspector.component.scss'],\n imports: [ MatFormFieldModule, MatTableModule, MatInputModule, MatPaginatorModule, MatSortModule, DataInspectorRowComponent, KeyValuePipe, PageHeaderComponent, MatIconModule]\n})\nexport class DataInspectorComponent implements AfterViewInit, OnDestroy {\n private dataService = inject(DataService);\n private destroyRef = inject(DestroyRef);\n private _responsive = inject(BreakpointObserver);\n private isPhonePortrait: Signal<BreakpointState>;\n private filterSubject = new Subject<string>();\n\n readonly paginator = viewChild.required(MatPaginator);\n readonly sort = viewChild.required(MatSort);\n protected readonly pageTitle = 'Data Inspector';\n\n public pageSize = 25;\n protected hidePageSize = false;\n protected showFirstLastButtons = true;\n protected showPageSizeOptions = [5, 10, 25, 100];\n public tableData = new MatTableDataSource<ISkPathData>([]);\n public displayedColumns: string[] = ['path', 'supportsPut', 'defaultSource'];\n\n constructor() {\n this.filterSubject.pipe(\n debounceTime(500)\n ).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(filterValue => {\n this.tableData.filter = filterValue.trim().toLowerCase();\n if (this.tableData.paginator) {\n this.tableData.paginator.firstPage();\n }\n });\n\n this.isPhonePortrait = toSignal(this._responsive.observe(Breakpoints.HandsetPortrait));\n\n effect(() => {\n if (this.isPhonePortrait().matches) {\n this.hidePageSize = true;\n this.showFirstLastButtons = false;\n this.showPageSizeOptions = [];\n } else {\n this.hidePageSize = false;\n this.showFirstLastButtons = true;\n this.showPageSizeOptions = [5, 10, 25, 100];\n }\n });\n }\n\n ngAfterViewInit() {\n this.dataService.startSkDataFullTree()\n .pipe(\n map((paths: ISkPathData[]) =>\n paths\n .filter(path => Object.keys(path.sources || {}).length > 0) // Filter out items with empty sources\n .map(path => ({\n ...path,\n sources: path.type && path.type.includes('object') && typeof path.sources === 'object'\n ? Object.fromEntries(\n Object.entries(path.sources).map(([key, value]) => [\n key,\n {\n ...value,\n sourceValue: typeof value.sourceValue === 'object'\n ? JSON.stringify(value.sourceValue) // Stringify only sourceValue if it's an object\n : value.sourceValue\n }\n ])\n ) // Transform only sourceValue in sources if path.type contains 'object'\n : path.sources\n }))\n ),\n throttleTime(500), // Emit at most once every 500ms\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((filteredPaths: ISkPathData[]) => {\n this.tableData.data = filteredPaths;\n });\n\n // Assign paginator and sort to the tableData\n this.tableData.paginator = this.paginator();\n this.tableData.sort = this.sort();\n\n // Add a custom sorting accessor for the \"supportsPut\" column\n this.tableData.sortingDataAccessor = (item, property) => {\n switch (property) {\n case 'supportsPut':\n return item.meta?.supportsPut ? 1 : 0; // Sort by boolean value (1 for true, 0 for false)\n default:\n return item[property]; // Default sorting for other columns\n }\n };\n }\n\n public applyFilter(event: Event) {\n const filterValue = (event.target as HTMLInputElement).value;\n this.filterSubject.next(filterValue);\n }\n\n public trackByPath(index: number, item: ISkPathData): string {\n return `${item.path}`;\n }\n\n public trackBySource(index: number, item): string {\n return `${item.key}`;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getSourceKey(source: { key: any, value: any }): string {\n return String(source.key);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getSourceValue(item: { key: any, value: any } ): any {\n return item.value.sourceValue;\n }\n\n ngOnDestroy(): void {\n this.filterSubject.complete(); // Clean up the Subject\n this.dataService.stopSkDataFullTree();\n }\n}\n", "<page-header [pageTitle]=\"pageTitle\" />\n<div class=\"data-inspector-container\">\n <mat-form-field class=\"filter-field\">\n <mat-label>Filter</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" placeholder=\"Type any part of the path, source or value...\" value=\"\" #input>\n </mat-form-field>\n\n <mat-table class=\"table-content-area mat-elevation-z8\" [dataSource]=\"tableData\" [trackBy]=\"trackByPath\" matSort matSortActive=\"path\" matSortDirection=\"asc\">\n <!-- Path Column -->\n <ng-container matColumnDef=\"path\">\n <mat-header-cell class=\"pathHeader\" *matHeaderCellDef mat-sort-header> Path </mat-header-cell>\n <mat-cell class=\"pathCell row-cell\" *matCellDef=\"let element\"> {{element.path}} </mat-cell>\n </ng-container>\n <!-- Put Column -->\n <ng-container matColumnDef=\"supportsPut\">\n <mat-header-cell class=\"putHeader\" *matHeaderCellDef mat-sort-header> PUT Support </mat-header-cell>\n <mat-cell class=\"putCell row-cell\" *matCellDef=\"let element\">\n @if (element.meta?.supportsPut) {\n <mat-icon class=\"put-icon\" matTooltip=\"Supports PUT operation\">check_circle</mat-icon>\n }\n </mat-cell>\n </ng-container>\n <!-- Source/value Column -->\n <ng-container matColumnDef=\"defaultSource\">\n <mat-header-cell class=\"dataHeader\" *matHeaderCellDef mat-sort-header> Source </mat-header-cell>\n <mat-cell class=\"dataCell row-cell\" *matCellDef=\"let element\">\n <div class=\"flex-container\">\n @for (item of element.sources | keyvalue; track item.key) {\n <data-inspector-row class=\"source-sub-row\" [path]=\"element.path\" [source]=\"getSourceKey(item )\" [pathValue]=\"getSourceValue(item)\" [type]=\"element.type\"></data-inspector-row>\n }\n </div>\n </mat-cell>\n </ng-container>\n\n <!-- Table headers -->\n <mat-header-row class=\"headerRow\" *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\n <mat-row class=\"table-row\" *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n\n <!-- Row shown when there is no matching data. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" colspan=\"4\">No data matching the filter \"{{input.value}}\"</td>\n </tr>\n </mat-table>\n <mat-paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"showPageSizeOptions\" [hidePageSize]=\"hidePageSize\" [showFirstLastButtons]=\"showFirstLastButtons\" class=\"paginator\"></mat-paginator>\n</div>\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }