@c8y/ngx-components 1022.13.0 → 1022.16.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.
Files changed (390) hide show
  1. package/alarms/alarms.helper.d.ts.map +1 -1
  2. package/auth-configuration/sso-configuration/templates/template.component.d.ts +1 -1
  3. package/core/asset-property/asset-property.model.d.ts +2 -0
  4. package/core/asset-property/asset-property.model.d.ts.map +1 -1
  5. package/core/authentication/authentication.module.d.ts.map +1 -1
  6. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -1
  7. package/core/drop-area/drop-area.component.d.ts +2 -0
  8. package/core/drop-area/drop-area.component.d.ts.map +1 -1
  9. package/core/dynamic-forms/file/file.type.component.d.ts.map +1 -1
  10. package/core/modal/modal.module.d.ts.map +1 -1
  11. package/core/plugins/plugins.module.d.ts.map +1 -1
  12. package/core/plugins/plugins.service.d.ts +1 -2
  13. package/core/plugins/plugins.service.d.ts.map +1 -1
  14. package/core/select/select.component.d.ts.map +1 -1
  15. package/device-list/devices.breadcrumb-factory.d.ts +1 -0
  16. package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
  17. package/device-parameters/device-parameter-details.component.d.ts +22 -0
  18. package/device-parameters/device-parameter-details.component.d.ts.map +1 -0
  19. package/device-parameters/device-parameter-value.component.d.ts +12 -0
  20. package/device-parameters/device-parameter-value.component.d.ts.map +1 -0
  21. package/device-parameters/device-parameters-list.component.d.ts +2 -1
  22. package/device-parameters/device-parameters-list.component.d.ts.map +1 -1
  23. package/device-parameters/index.d.ts +5 -0
  24. package/device-parameters/index.d.ts.map +1 -1
  25. package/device-parameters/parameter-type-cell-renderer.components.d.ts +8 -0
  26. package/device-parameters/parameter-type-cell-renderer.components.d.ts.map +1 -0
  27. package/device-profile/add-device-profile.component.d.ts +1 -1
  28. package/device-profile/add-device-profile.component.d.ts.map +1 -1
  29. package/device-profile/device-profile-list.component.d.ts +1 -1
  30. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  31. package/device-profile/device-profile.component.d.ts +1 -1
  32. package/device-profile/device-profile.component.d.ts.map +1 -1
  33. package/device-profile/device-profile.module.d.ts +17 -17
  34. package/device-profile/device-profile.module.d.ts.map +1 -1
  35. package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts +1 -1
  36. package/device-profile/device-tab-profile/device-profile-item-list.component.d.ts.map +1 -1
  37. package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts +1 -1
  38. package/device-profile/device-tab-profile/device-tab-profile-detail.component.d.ts.map +1 -1
  39. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts +1 -1
  40. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
  41. package/device-profile/select-configuration-modal.component.d.ts +1 -1
  42. package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
  43. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +4 -2
  44. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  45. package/device-shell/command-templates/command-templates.component.d.ts +1 -1
  46. package/device-shell/command-templates/command-templates.component.d.ts.map +1 -1
  47. package/device-shell/command-templates/command-templates.directive.d.ts +1 -1
  48. package/device-shell/command-templates/command-templates.directive.d.ts.map +1 -1
  49. package/device-shell/command-templates/command-templates.module.d.ts +1 -1
  50. package/device-shell/shell/shell.component.d.ts +1 -1
  51. package/device-shell/shell/shell.component.d.ts.map +1 -1
  52. package/device-shell/shell/shell.module.d.ts +7 -7
  53. package/diagnostics/diagnostics.component.d.ts +1 -1
  54. package/diagnostics/diagnostics.component.d.ts.map +1 -1
  55. package/diagnostics/diagnostics.module.d.ts +8 -8
  56. package/diagnostics/diagnostics.module.d.ts.map +1 -1
  57. package/events/c8y-ngx-components-events.d.ts.map +1 -0
  58. package/events/events-timeline/c8y-ngx-components-events-events-timeline.d.ts.map +1 -0
  59. package/events/events-timeline/events-timeline.component.d.ts +19 -0
  60. package/events/events-timeline/events-timeline.component.d.ts.map +1 -0
  61. package/events/events-timeline/index.d.ts +2 -0
  62. package/events/events-timeline/index.d.ts.map +1 -0
  63. package/events/events.model.d.ts +6 -0
  64. package/events/events.model.d.ts.map +1 -0
  65. package/events/events.service.d.ts +10 -0
  66. package/events/events.service.d.ts.map +1 -0
  67. package/events/index.d.ts +3 -0
  68. package/events/index.d.ts.map +1 -0
  69. package/fesm2022/c8y-ngx-components-alarms.mjs +2 -1
  70. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  72. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-device-list.mjs +10 -3
  74. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-device-parameters.mjs +110 -13
  76. package/fesm2022/c8y-ngx-components-device-parameters.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-device-profile.mjs +126 -49
  78. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  79. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +44 -12
  80. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  81. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -22
  82. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-diagnostics.mjs +36 -19
  84. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +45 -0
  86. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -0
  87. package/fesm2022/c8y-ngx-components-events.mjs +44 -0
  88. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -0
  89. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +8 -14
  90. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
  91. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +49 -49
  92. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +27 -14
  94. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +27 -33
  96. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +51 -39
  98. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +10 -8
  100. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +16 -11
  102. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +8 -11
  104. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  105. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +25 -21
  106. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -9
  108. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
  109. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +31 -31
  110. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  111. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +3 -3
  112. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  113. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +33 -13
  114. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  115. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +19 -13
  116. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
  117. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +40 -36
  118. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  119. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +60 -41
  120. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  121. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +122 -109
  122. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  123. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +66 -41
  124. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  125. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +11 -16
  126. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
  127. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +212 -83
  128. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  129. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +113 -54
  130. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  131. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +130 -62
  132. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  133. package/fesm2022/c8y-ngx-components-repository-shared.mjs +37 -28
  134. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  135. package/fesm2022/c8y-ngx-components-repository-software.mjs +156 -83
  136. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  137. package/fesm2022/c8y-ngx-components-services.mjs +32 -19
  138. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  139. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +66 -29
  140. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  141. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +16 -3
  142. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
  143. package/fesm2022/c8y-ngx-components-upgrade.mjs +1 -14
  144. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  145. package/fesm2022/c8y-ngx-components-user-roles.mjs +8 -3
  146. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  147. package/fesm2022/c8y-ngx-components.mjs +864 -859
  148. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  149. package/locales/de.po +34 -17
  150. package/locales/es.po +20 -2
  151. package/locales/fr.po +20 -2
  152. package/locales/ja_JP.po +22 -4
  153. package/locales/ko.po +20 -2
  154. package/locales/locales.pot +19 -1
  155. package/locales/nl.po +20 -2
  156. package/locales/pl.po +20 -2
  157. package/locales/pt_BR.po +20 -2
  158. package/locales/zh_CN.po +21 -3
  159. package/locales/zh_TW.po +20 -2
  160. package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts +1 -1
  161. package/operations/bulk-operation-from-single/bulk-operation-from-single.component.d.ts.map +1 -1
  162. package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts +3 -5
  163. package/operations/bulk-operation-from-single/bulk-operation-from-single.module.d.ts.map +1 -1
  164. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts +1 -1
  165. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
  166. package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts +1 -7
  167. package/operations/bulk-operation-list-item/bulk-operation-list-item.module.d.ts.map +1 -1
  168. package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts +1 -1
  169. package/operations/bulk-operation-list-item/bulk-operation-wrapper.component.d.ts.map +1 -1
  170. package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts +1 -1
  171. package/operations/bulk-operation-list-item/modal-body-host.directive.d.ts.map +1 -1
  172. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts +1 -1
  173. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
  174. package/operations/bulk-operation-scheduler/bulk-operation-scheduler.module.d.ts +6 -6
  175. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +1 -1
  176. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  177. package/operations/bulk-operation-stepper/base-stepper.component.d.ts +1 -1
  178. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts +1 -1
  179. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
  180. package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts +1 -5
  181. package/operations/bulk-operation-stepper/bulk-operation-stepper.module.d.ts.map +1 -1
  182. package/operations/bulk-operation-stepper/custom-step.directive.d.ts +1 -1
  183. package/operations/bulk-operation-stepper/custom-step.directive.d.ts.map +1 -1
  184. package/operations/bulk-operations-list/bulk-operations-list.component.d.ts +1 -1
  185. package/operations/bulk-operations-list/bulk-operations-list.component.d.ts.map +1 -1
  186. package/operations/bulk-operations-list/bulk-operations-list.module.d.ts +4 -10
  187. package/operations/bulk-operations-list/bulk-operations-list.module.d.ts.map +1 -1
  188. package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts +1 -1
  189. package/operations/bulk-operations-list/modals/bulk-operations-modal.component.d.ts.map +1 -1
  190. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts +1 -1
  191. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.component.d.ts.map +1 -1
  192. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts +3 -4
  193. package/operations/bulk-operations-stepper-container/bulk-operations-stepper-container.module.d.ts.map +1 -1
  194. package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts +1 -1
  195. package/operations/create-bulk-operation-details/create-bulk-operation-details.component.d.ts.map +1 -1
  196. package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts +1 -4
  197. package/operations/create-bulk-operation-details/create-bulk-operation-details.module.d.ts.map +1 -1
  198. package/operations/device-selector/device-selector.component.d.ts +1 -1
  199. package/operations/device-selector/device-selector.component.d.ts.map +1 -1
  200. package/operations/device-selector/device-selector.module.d.ts +1 -3
  201. package/operations/device-selector/device-selector.module.d.ts.map +1 -1
  202. package/operations/operation-details/operation-details-modal.component.d.ts +1 -1
  203. package/operations/operation-details/operation-details-modal.component.d.ts.map +1 -1
  204. package/operations/operation-details/operation-details.component.d.ts +1 -1
  205. package/operations/operation-details/operation-details.component.d.ts.map +1 -1
  206. package/operations/operation-details/operation-details.module.d.ts +1 -7
  207. package/operations/operation-details/operation-details.module.d.ts.map +1 -1
  208. package/operations/operation-details/operation-details.service.d.ts.map +1 -1
  209. package/operations/operation-summary/operation-summary.component.d.ts +1 -1
  210. package/operations/operation-summary/operation-summary.component.d.ts.map +1 -1
  211. package/operations/operation-summary/operation-summary.module.d.ts +1 -2
  212. package/operations/operation-summary/operation-summary.module.d.ts.map +1 -1
  213. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  214. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  215. package/operations/operations-list/operations-list.service.d.ts +1 -1
  216. package/operations/operations-list/operations-list.service.d.ts.map +1 -1
  217. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts +1 -1
  218. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
  219. package/operations/operations-list-item-details/operation-details.component.d.ts +1 -1
  220. package/operations/operations-list-item-details/operation-details.component.d.ts.map +1 -1
  221. package/operations/operations-list-item-details/operations-list-item-details.module.d.ts +1 -6
  222. package/operations/operations-list-item-details/operations-list-item-details.module.d.ts.map +1 -1
  223. package/operations/operations-timeline/operations-timeline.component.d.ts +5 -5
  224. package/operations/operations-timeline/operations-timeline.component.d.ts.map +1 -1
  225. package/operations/operations-timeline/operations-timeline.module.d.ts +4 -6
  226. package/operations/operations-timeline/operations-timeline.module.d.ts.map +1 -1
  227. package/operations/status-filter/status-filter.component.d.ts +1 -1
  228. package/operations/status-filter/status-filter.component.d.ts.map +1 -1
  229. package/operations/status-filter/status-filter.module.d.ts +1 -4
  230. package/operations/status-filter/status-filter.module.d.ts.map +1 -1
  231. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts +1 -1
  232. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
  233. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts +1 -6
  234. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.d.ts.map +1 -1
  235. package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts +1 -1
  236. package/operations/stepper-bulk-type-device-profile/confirm-device-profile-selection-step.component.d.ts.map +1 -1
  237. package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts +1 -1
  238. package/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.d.ts.map +1 -1
  239. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts +1 -1
  240. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
  241. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts +1 -6
  242. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.module.d.ts.map +1 -1
  243. package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts +1 -1
  244. package/operations/stepper-bulk-type-firmware/select-firmware.component.d.ts.map +1 -1
  245. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts +1 -1
  246. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
  247. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts +1 -6
  248. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.d.ts.map +1 -1
  249. package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts +1 -1
  250. package/operations/stepper-bulk-type-firmware/version-or-patch.component.d.ts.map +1 -1
  251. package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts +1 -1
  252. package/operations/stepper-bulk-type-software/confirm-software-selection-step.component.d.ts.map +1 -1
  253. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts +1 -1
  254. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
  255. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts +1 -1
  256. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
  257. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts +1 -6
  258. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.module.d.ts.map +1 -1
  259. package/operations/stepper-frames/preview-block.directive.d.ts +1 -1
  260. package/operations/stepper-frames/preview-block.directive.d.ts.map +1 -1
  261. package/operations/stepper-frames/preview-selection-frame.component.d.ts +1 -1
  262. package/operations/stepper-frames/preview-selection-frame.component.d.ts.map +1 -1
  263. package/operations/stepper-frames/select-step-frame.component.d.ts +1 -1
  264. package/operations/stepper-frames/select-step-frame.component.d.ts.map +1 -1
  265. package/operations/stepper-frames/stepper-frames.modules.d.ts +1 -2
  266. package/operations/stepper-frames/stepper-frames.modules.d.ts.map +1 -1
  267. package/package.json +1 -1
  268. package/protocol-opcua/opcua-address-space-detail.component.d.ts +1 -1
  269. package/protocol-opcua/opcua-address-space-detail.component.d.ts.map +1 -1
  270. package/protocol-opcua/opcua-address-space-tree.component.d.ts +1 -1
  271. package/protocol-opcua/opcua-address-space-tree.component.d.ts.map +1 -1
  272. package/protocol-opcua/opcua-address-space.component.d.ts +1 -1
  273. package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
  274. package/protocol-opcua/opcua-auto-apply-settings.component.d.ts +1 -1
  275. package/protocol-opcua/opcua-auto-apply-settings.component.d.ts.map +1 -1
  276. package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts +1 -1
  277. package/protocol-opcua/opcua-device-protocol-browse-path-validation.directive.d.ts.map +1 -1
  278. package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts +1 -1
  279. package/protocol-opcua/opcua-device-protocol-data-reporting.component.d.ts.map +1 -1
  280. package/protocol-opcua/opcua-device-protocol-description.component.d.ts +1 -1
  281. package/protocol-opcua/opcua-device-protocol-description.component.d.ts.map +1 -1
  282. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts +1 -1
  283. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
  284. package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts +1 -1
  285. package/protocol-opcua/opcua-device-protocol-mapping.component.d.ts.map +1 -1
  286. package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts +1 -1
  287. package/protocol-opcua/opcua-device-protocol-object-mapping-status-icon.component.d.ts.map +1 -1
  288. package/protocol-opcua/opcua-protocol.module.d.ts +26 -26
  289. package/protocol-opcua/opcua-protocol.module.d.ts.map +1 -1
  290. package/protocol-opcua/opcua-server-config.component.d.ts +1 -1
  291. package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
  292. package/protocol-opcua/opcua-server-list.component.d.ts +1 -1
  293. package/protocol-opcua/opcua-server-list.component.d.ts.map +1 -1
  294. package/protocol-opcua/opcua-servers.component.d.ts +1 -1
  295. package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
  296. package/repository/configuration/device-tab/configuration-filter.pipe.d.ts +1 -1
  297. package/repository/configuration/device-tab/configuration-filter.pipe.d.ts.map +1 -1
  298. package/repository/configuration/device-tab/configuration-preview.component.d.ts +1 -1
  299. package/repository/configuration/device-tab/configuration-preview.component.d.ts.map +1 -1
  300. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts +11 -13
  301. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
  302. package/repository/configuration/device-tab/device-configuration-list.component.d.ts +1 -1
  303. package/repository/configuration/device-tab/device-configuration-list.component.d.ts.map +1 -1
  304. package/repository/configuration/device-tab/device-configuration.component.d.ts +1 -1
  305. package/repository/configuration/device-tab/device-configuration.component.d.ts.map +1 -1
  306. package/repository/configuration/device-tab/save-to-repository.component.d.ts +1 -1
  307. package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
  308. package/repository/configuration/device-tab/source-code-preview.component.d.ts +1 -1
  309. package/repository/configuration/device-tab/source-code-preview.component.d.ts.map +1 -1
  310. package/repository/configuration/device-tab/text-based-configuration.component.d.ts +1 -1
  311. package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
  312. package/repository/configuration/list/configuration-detail.component.d.ts +1 -1
  313. package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
  314. package/repository/configuration/list/configuration-list.component.d.ts +1 -1
  315. package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
  316. package/repository/configuration/list/configuration-repository-list.module.d.ts +4 -7
  317. package/repository/configuration/list/configuration-repository-list.module.d.ts.map +1 -1
  318. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts +1 -1
  319. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
  320. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts +4 -6
  321. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
  322. package/repository/firmware/list/add-firmware-modal.component.d.ts +1 -1
  323. package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
  324. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts +1 -1
  325. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
  326. package/repository/firmware/list/firmware-details.component.d.ts +1 -1
  327. package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
  328. package/repository/firmware/list/firmware-list.component.d.ts +1 -1
  329. package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
  330. package/repository/firmware/list/firmware-repository-list.module.d.ts +6 -11
  331. package/repository/firmware/list/firmware-repository-list.module.d.ts.map +1 -1
  332. package/repository/shared/file-download/file-download.component.d.ts +1 -1
  333. package/repository/shared/file-download/file-download.component.d.ts.map +1 -1
  334. package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
  335. package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
  336. package/repository/shared/shared-repository.module.d.ts +1 -4
  337. package/repository/shared/shared-repository.module.d.ts.map +1 -1
  338. package/repository/shared/software-type/software-type.component.d.ts +1 -1
  339. package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
  340. package/repository/software/device-tab/device-software-changes.component.d.ts +1 -1
  341. package/repository/software/device-tab/device-software-changes.component.d.ts.map +1 -1
  342. package/repository/software/device-tab/device-software-list.component.d.ts +1 -1
  343. package/repository/software/device-tab/device-software-list.component.d.ts.map +1 -1
  344. package/repository/software/device-tab/installed-software.component.d.ts +1 -1
  345. package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
  346. package/repository/software/device-tab/software-device-tab.component.d.ts +1 -1
  347. package/repository/software/device-tab/software-device-tab.component.d.ts.map +1 -1
  348. package/repository/software/device-tab/software-repository-device-tab.module.d.ts +7 -11
  349. package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
  350. package/repository/software/list/add-software-modal.component.d.ts +1 -1
  351. package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
  352. package/repository/software/list/software-details.component.d.ts +1 -1
  353. package/repository/software/list/software-details.component.d.ts.map +1 -1
  354. package/repository/software/list/software-list.component.d.ts +1 -1
  355. package/repository/software/list/software-list.component.d.ts.map +1 -1
  356. package/repository/software/list/software-repository-list.module.d.ts +5 -11
  357. package/repository/software/list/software-repository-list.module.d.ts.map +1 -1
  358. package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts +1 -1
  359. package/services/services-device-tab/columns/last-updated-date.cell-renderer.component.d.ts.map +1 -1
  360. package/services/services-device-tab/columns/name.cell-renderer.component.d.ts +1 -1
  361. package/services/services-device-tab/columns/name.cell-renderer.component.d.ts.map +1 -1
  362. package/services/services-device-tab/columns/status.cell-renderer.component.d.ts +1 -1
  363. package/services/services-device-tab/columns/status.cell-renderer.component.d.ts.map +1 -1
  364. package/services/services-device-tab/services-device-tab.component.d.ts +1 -1
  365. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  366. package/services/services-device-tab/services-device-tab.module.d.ts +1 -4
  367. package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
  368. package/trusted-certificates/crl/crl-settings.component.d.ts +5 -1
  369. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
  370. package/trusted-certificates/factories/tabs.factory.d.ts +3 -2
  371. package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
  372. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts +2 -0
  373. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
  374. package/trusted-certificates/list/trusted-certificate-list.component.d.ts +5 -1
  375. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  376. package/trusted-certificates/trusted-certificates.guard.d.ts +11 -0
  377. package/trusted-certificates/trusted-certificates.guard.d.ts.map +1 -0
  378. package/upgrade/index.d.ts +0 -1
  379. package/upgrade/index.d.ts.map +1 -1
  380. package/upgrade/upgrade.module.d.ts.map +1 -1
  381. package/upgrade/upgraded-services/index.d.ts +1 -0
  382. package/upgrade/upgraded-services/index.d.ts.map +1 -1
  383. package/upgrade/upgraded-services/smart-rules.service.d.ts.map +1 -0
  384. package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
  385. package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts +2 -1
  386. package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts.map +1 -1
  387. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts +2 -1
  388. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
  389. package/upgrade/smart-rules.service.d.ts.map +0 -1
  390. /package/upgrade/{smart-rules.service.d.ts → upgraded-services/smart-rules.service.d.ts} +0 -0
@@ -4,35 +4,32 @@ import * as i1 from '@c8y/client';
4
4
  import { OperationStatus } from '@c8y/client';
5
5
  import { BehaviorSubject, merge, Subject, debounceTime } from 'rxjs';
6
6
  import { omit, isEmpty, some, isEqual, reject, isNil, get, assign, cloneDeep, unset as unset$1, set as set$1, find, findIndex, pick, has } from 'lodash-es';
7
- import * as i2 from '@angular/common';
7
+ import { NgClass, NgFor, NgIf, JsonPipe, KeyValuePipe } from '@angular/common';
8
8
  import * as i2$1 from '@c8y/ngx-components';
9
- import { gettext, Status, DropAreaComponent, ViewContext, CoreModule, FormsModule, DropAreaModule, DeviceStatusModule, DynamicFormsModule, hookRoute } from '@c8y/ngx-components';
10
- import * as i2$2 from '@angular/router';
9
+ import { C8yTranslatePipe, IconDirective, LoadingComponent, C8yTranslateDirective, gettext, FormGroupComponent, SelectLegacyComponent, ListItemComponent, FilterInputComponent, ListItemBodyComponent, ListItemCheckboxComponent, InputGroupListContainerDirective, InputGroupListComponent, RequiredInputPlaceholderDirective, MinValidationDirective, DatePipe, MessagesComponent, MessageDirective, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, EmptyStateComponent, Status, DeviceStatusComponent, DefaultValidationDirective, DropAreaComponent, ViewContext, CoreModule, FormsModule as FormsModule$1, DropAreaModule, DeviceStatusModule, DynamicFormsModule, hookRoute } from '@c8y/ngx-components';
10
+ import * as i2 from '@angular/router';
11
11
  import { RouterModule } from '@angular/router';
12
- import * as i4 from '@angular/forms';
13
- import { NG_VALIDATORS, NgModelGroup, ControlContainer, NgForm, FormGroup, ReactiveFormsModule } from '@angular/forms';
14
- import * as i5 from '@angular/cdk/tree';
15
- import { NestedTreeControl, CdkTreeModule } from '@angular/cdk/tree';
12
+ import * as i2$2 from '@angular/forms';
13
+ import { NG_VALIDATORS, FormsModule, NgModelGroup, ControlContainer, NgForm, FormGroup, ReactiveFormsModule } from '@angular/forms';
14
+ import { NestedTreeControl, CdkTree, CdkTreeNodeDef, CdkNestedTreeNode, CdkTreeNodeToggle, CdkTreeNodeOutlet, CdkTreeModule } from '@angular/cdk/tree';
16
15
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
17
- import * as i8 from '@c8y/ngx-components/device-protocol-object-mappings';
18
16
  import { BaseObjectMapping, MeasurementObjectMapping, EventObjectMapping, AlarmObjectMapping, ALARM_SEVERITY, ObjectMappingComponent } from '@c8y/ngx-components/device-protocol-object-mappings';
19
- import * as i7 from '@c8y/ngx-components/operations/operation-details';
20
- import { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';
21
- import * as i4$2 from 'ngx-bootstrap/buttons';
22
- import { ButtonsModule } from 'ngx-bootstrap/buttons';
17
+ import { OperationDetailsComponent, OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';
18
+ import { ButtonCheckboxDirective, ButtonsModule } from 'ngx-bootstrap/buttons';
23
19
  import * as i4$1 from 'ngx-bootstrap/collapse';
24
- import { CollapseModule } from 'ngx-bootstrap/collapse';
25
- import * as i7$1 from 'ngx-bootstrap/dropdown';
26
- import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
27
- import * as i5$3 from 'ngx-bootstrap/popover';
28
- import { PopoverModule } from 'ngx-bootstrap/popover';
29
- import * as i5$1 from 'ngx-bootstrap/tooltip';
30
- import { TooltipModule } from 'ngx-bootstrap/tooltip';
20
+ import { CollapseDirective, CollapseModule } from 'ngx-bootstrap/collapse';
21
+ import * as i5 from 'ngx-bootstrap/dropdown';
22
+ import { BsDropdownDirective, BsDropdownToggleDirective, BsDropdownMenuDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
23
+ import * as i3$1 from 'ngx-bootstrap/popover';
24
+ import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';
25
+ import * as i2$3 from 'ngx-bootstrap/tooltip';
26
+ import { TooltipDirective, TooltipModule } from 'ngx-bootstrap/tooltip';
31
27
  import { clone, toInteger, unset, set, cloneDeep as cloneDeep$1 } from 'lodash';
32
28
  import { map, takeUntil, filter } from 'rxjs/operators';
33
29
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
34
30
  import { UpgradeComponent, downgradeComponent } from '@angular/upgrade/static';
35
- import * as i5$2 from '@ngx-formly/core';
31
+ import * as i4 from '@ngx-formly/core';
32
+ import { FormlyModule } from '@ngx-formly/core';
36
33
  import * as i3 from '@ngx-translate/core';
37
34
  import * as angular from 'angular';
38
35
  import { registerNgModule } from '@c8y/ng1-modules';
@@ -176,11 +173,11 @@ class OpcuaAddressSpaceDetailComponent {
176
173
  this.addressSpaceService.triggerNodeToOpen(nodeNavData);
177
174
  }
178
175
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceDetailComponent, deps: [{ token: AddressSpaceService }], target: i0.ɵɵFactoryTarget.Component }); }
179
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceDetailComponent, isStandalone: false, selector: "opcua-address-space-detail", inputs: { node: "node" }, outputs: { toggleAttrDetail: "toggleAttrDetail" }, ngImport: i0, template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n &times;\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.JsonPipe, name: "json" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }] }); }
176
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceDetailComponent, isStandalone: true, selector: "opcua-address-space-detail", inputs: { node: "node" }, outputs: { toggleAttrDetail: "toggleAttrDetail" }, ngImport: i0, template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n &times;\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
180
177
  }
181
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceDetailComponent, decorators: [{
182
179
  type: Component,
183
- args: [{ selector: 'opcua-address-space-detail', standalone: false, template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n &times;\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n" }]
180
+ args: [{ selector: 'opcua-address-space-detail', imports: [NgClass, NgFor, NgIf, C8yTranslatePipe, JsonPipe, KeyValuePipe], template: "<div\n class=\"card m-b-4 split-row-2 animated fast pointer-all\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'Attributes' | translate }}</h4>\n <button\n class=\"close m-l-auto visible-sm visible-xs\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"toggleDetail(nodeDataAttr)\"\n >\n &times;\n </button>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataAttr | keyvalue\">\n <td>{{ item.key }}</td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'absolutePaths'\"\n >\n {{ item.value | json }}\n </td>\n <td\n class=\"text-break-word\"\n *ngIf=\"item.key === 'ancestorNodeIds'\"\n >\n <a\n *ngFor=\"let value of item.value\"\n (click)=\"navigateTo(value)\"\n >\n {{ value | json }}\n </a>\n </td>\n <td *ngIf=\"item.key !== 'absolutePaths' && item.key !== 'ancestorNodeIds'\">\n {{ item.value }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<div\n class=\"card split-row-2 animated fast pointer-all\"\n style=\"height: calc(50% - 4px)\"\n [ngClass]=\"{ fadeInRightBig: showDetails, fadeOutRightBig: !showDetails }\"\n>\n <div class=\"card-header separator\">\n <h4>{{ 'References' | translate }}</h4>\n </div>\n <div\n class=\"card-inner-scroll\"\n tabindex=\"0\"\n >\n <div\n class=\"card-block\"\n tabindex=\"-1\"\n >\n <table class=\"table table-striped table-condensed\">\n <colgroup>\n <col width=\"50%\" />\n <col width=\"50%\" />\n </colgroup>\n <thead>\n <tr>\n <th>{{ 'Attribute' | translate }}</th>\n <th>{{ 'Value' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of nodeDataRef\">\n <td>{{ item.referenceLabel }}</td>\n <td class=\"text-break-word\">{{ item.targetLabel }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n" }]
184
181
  }], ctorParameters: () => [{ type: AddressSpaceService }], propDecorators: { node: [{
185
182
  type: Input
186
183
  }], toggleAttrDetail: [{
@@ -369,12 +366,12 @@ class OpcuaService {
369
366
  }
370
367
  }
371
368
  }
372
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i2$2.Router }, { token: i2$1.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
369
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i2.Router }, { token: i2$1.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
373
370
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService }); }
374
371
  }
375
372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaService, decorators: [{
376
373
  type: Injectable
377
- }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i2$2.Router }, { type: i2$1.AlertService }] });
374
+ }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i2.Router }, { type: i2$1.AlertService }] });
378
375
 
379
376
  class OpcuaAgentGuard {
380
377
  constructor() {
@@ -430,7 +427,7 @@ class OpcuaDeviceProtocolBrowsePathValidation {
430
427
  return found ? true : false;
431
428
  }
432
429
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolBrowsePathValidation, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
433
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolBrowsePathValidation, isStandalone: false, selector: "[c8yBrowsePathValidator][ngModel]", inputs: { getMappings: "getMappings", model: "model" }, providers: [
430
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolBrowsePathValidation, isStandalone: true, selector: "[c8yBrowsePathValidator][ngModel]", inputs: { getMappings: "getMappings", model: "model" }, providers: [
434
431
  {
435
432
  provide: NG_VALIDATORS,
436
433
  useExisting: forwardRef(() => OpcuaDeviceProtocolBrowsePathValidation),
@@ -448,8 +445,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
448
445
  useExisting: forwardRef(() => OpcuaDeviceProtocolBrowsePathValidation),
449
446
  multi: true
450
447
  }
451
- ],
452
- standalone: false
448
+ ]
453
449
  }]
454
450
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { getMappings: [{
455
451
  type: Input
@@ -677,11 +673,23 @@ class OpcuaAddressSpaceTreeComponent {
677
673
  }
678
674
  }
679
675
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceTreeComponent, deps: [{ token: AddressSpaceService }, { token: OpcuaService }, { token: i2$1.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
680
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceTreeComponent, isStandalone: false, selector: "opcua-address-space-tree", inputs: { moId: "moId", node: "node", focusEmitter: "focusEmitter" }, outputs: { selectedNode: "selectedNode" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "levelAccessor", "childrenAccessor", "trackBy", "expansionKey"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceTreeComponent, isStandalone: true, selector: "opcua-address-space-tree", inputs: { moId: "moId", node: "node", focusEmitter: "focusEmitter" }, outputs: { selectedNode: "selectedNode" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "levelAccessor", "childrenAccessor", "trackBy", "expansionKey"], exportAs: ["cdkTree"] }, { kind: "directive", type: CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "directive", type: CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
681
677
  }
682
678
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceTreeComponent, decorators: [{
683
679
  type: Component,
684
- args: [{ selector: 'opcua-address-space-tree', standalone: false, template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n" }]
680
+ args: [{ selector: 'opcua-address-space-tree', imports: [
681
+ NgIf,
682
+ CdkTree,
683
+ CdkTreeNodeDef,
684
+ CdkNestedTreeNode,
685
+ NgClass,
686
+ IconDirective,
687
+ CdkTreeNodeToggle,
688
+ CdkTreeNodeOutlet,
689
+ LoadingComponent,
690
+ C8yTranslateDirective,
691
+ C8yTranslatePipe
692
+ ], template: "<div\n class=\"card-block\"\n *ngIf=\"dataSource && !loading\"\n>\n <cdk-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"nestedTreeControl\"\n >\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node\n class=\"interact\"\n *cdkTreeNodeDef=\"let node\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n <span>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n ></i>\n {{ node.displayName }}\n </span>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let node; when: hasChild\">\n <div role=\"group\">\n <div class=\"d-flex a-i-center\">\n <button\n class=\"btn-clean text-primary m-r-4\"\n title=\"{{ 'Expand node' | translate }}\"\n cdkTreeNodeToggle\n [disabled]=\"node.currentlyLoadingChildren\"\n >\n <i\n [ngClass]=\"{\n 'dlt-c8y-icon-plus-square': !node.expanded,\n 'dlt-c8y-icon-minus-square': node.expanded\n }\"\n ></i>\n </button>\n <i\n class=\"m-r-4 interact\"\n [c8yIcon]=\"getIcon(node.nodeClassName)\"\n ></i>\n <span\n class=\"interact\"\n (click)=\"toggleFocusedNode(node)\"\n [ngClass]=\"{ strong: isFocusedNode(node) }\"\n >\n {{ node.displayName }}\n </span>\n <span\n class=\"m-l-4\"\n [style.visibility]=\"node.currentlyLoadingChildren ? 'visible' : 'hidden'\"\n >\n <i class=\"dlt-c8y-icon-circle-o-notch icon-spin\"></i>\n </span>\n </div>\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n<div\n class=\"p-t-8\"\n *ngIf=\"loading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<div\n class=\"alert alert-info m-t-16\"\n *ngIf=\"!dataSource && !loading\"\n translate\n>\n No source data available to fetch address space.\n</div>\n" }]
685
693
  }], ctorParameters: () => [{ type: AddressSpaceService }, { type: OpcuaService }, { type: i2$1.AlertService }], propDecorators: { moId: [{
686
694
  type: Input
687
695
  }], node: [{
@@ -839,11 +847,22 @@ class OpcuaAddressSpaceComponent {
839
847
  return result;
840
848
  }
841
849
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceComponent, deps: [{ token: AddressSpaceService }, { token: OpcuaService }, { token: i1.OperationService }, { token: i2$1.OperationRealtimeService }, { token: i2$1.AlertService }, { token: i2$1.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
842
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceComponent, isStandalone: false, selector: "opcua-address-space", outputs: { focusStatus: "focusStatus" }, ngImport: i0, template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n &nbsp;\n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.OperationDetailsComponent, selector: "c8y-operation-details", inputs: ["operation"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: OpcuaAddressSpaceDetailComponent, selector: "opcua-address-space-detail", inputs: ["node"], outputs: ["toggleAttrDetail"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
850
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAddressSpaceComponent, isStandalone: true, selector: "opcua-address-space", outputs: { focusStatus: "focusStatus" }, ngImport: i0, template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n &nbsp;\n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OperationDetailsComponent, selector: "c8y-operation-details", inputs: ["operation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: OpcuaAddressSpaceDetailComponent, selector: "opcua-address-space-detail", inputs: ["node"], outputs: ["toggleAttrDetail"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
843
851
  }
844
852
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAddressSpaceComponent, decorators: [{
845
853
  type: Component,
846
- args: [{ selector: 'opcua-address-space', standalone: false, template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n &nbsp;\n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n" }]
854
+ args: [{ selector: 'opcua-address-space', imports: [
855
+ NgIf,
856
+ OperationDetailsComponent,
857
+ FormsModule,
858
+ IconDirective,
859
+ LoadingComponent,
860
+ NgFor,
861
+ NgClass,
862
+ OpcuaAddressSpaceTreeComponent,
863
+ OpcuaAddressSpaceDetailComponent,
864
+ C8yTranslatePipe
865
+ ], template: "<div class=\"row split-scroll\">\n <div class=\"col-md-5 col-xs-12 scroll-column no-gutter-r\">\n <div class=\"card bg-level-2 split-scroll overflow-auto\">\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"!!operation\"\n >\n <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n </fieldset>\n </div>\n <div class=\"card-block separator sticky-top\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ filterLabel | translate }}\"\n type=\"search\"\n (keydown.enter)=\"searchNodes()\"\n [(ngModel)]=\"searchKey\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"submit\"\n *ngIf=\"!isSearch\"\n (click)=\"searchNodes()\"\n >\n <i c8yIcon=\"search\"></i>\n </button>\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Clear`input`' | translate }}\"\n type=\"button\"\n *ngIf=\"isSearch\"\n (click)=\"clearSearch()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"p-t-16\"\n *ngIf=\"isSearch && !loading\"\n >\n <p *ngIf=\"!searchInProgress\">\n <em>{{ nodeList.resultLabel | translate }}</em>\n &nbsp;\n <span class=\"badge badge-info\">{{ nodeList?.length }}</span>\n </p>\n </div>\n </div>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"(isSearch && loading) || searchInProgress\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"inner-scroll\"\n *ngIf=\"isSearch && !loading && !searchInProgress\"\n >\n <div\n class=\"list-group list-group-links\"\n *ngIf=\"isSearch && !loading\"\n >\n <button\n *ngFor=\"let nodeItem of nodeList\"\n (click)=\"selectNode(nodeItem)\"\n [ngClass]=\"{ 'list-group-item d-flex': true }\"\n >\n <div class=\"list-group-icon m-r-4\">\n <i\n class=\"m-r-4\"\n [c8yIcon]=\"getIcon(nodeItem.nodeClassName)\"\n ></i>\n </div>\n <div class=\"list-item-body text-truncate\">\n <span tile=\"nodeId\">{{ nodeItem.nodeId }}</span>\n {{ nodeItem.displayName }}\n </div>\n </button>\n </div>\n </div>\n <div\n class=\"inner-scroll\"\n *ngIf=\"!isSearch\"\n >\n <opcua-address-space-tree\n (selectedNode)=\"toggleCurrentNode($event)\"\n [focusEmitter]=\"focusStatus\"\n ></opcua-address-space-tree>\n </div>\n <div class=\"card-footer separator-top\">\n <button\n class=\"btn btn-default\"\n [class.btn-pending]=\"isOperationRunning()\"\n type=\"button\"\n (click)=\"rescanAddressSpace()\"\n [disabled]=\"isOperationRunning()\"\n >\n {{ 'Rescan' | translate }}\n </button>\n </div>\n </div>\n </div>\n <opcua-address-space-detail\n class=\"col-md-7 col-xs-12 scroll-column no-gutter-l no-pointer\"\n [node]=\"currentNode\"\n (toggleAttrDetail)=\"backHandler($event)\"\n ></opcua-address-space-detail>\n</div>\n" }]
847
866
  }], ctorParameters: () => [{ type: AddressSpaceService }, { type: OpcuaService }, { type: i1.OperationService }, { type: i2$1.OperationRealtimeService }, { type: i2$1.AlertService }, { type: i2$1.ModalService }], propDecorators: { focusStatus: [{
848
867
  type: Output
849
868
  }] } });
@@ -980,11 +999,27 @@ class OpcuaAutoApplySettingsComponent {
980
999
  this.updateConstraints(this.selectedItems);
981
1000
  }
982
1001
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAutoApplySettingsComponent, deps: [{ token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
983
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAutoApplySettingsComponent, isStandalone: false, selector: "opcua-auto-apply", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i2$1.InputGroupListComponent, selector: "c8y-input-group-list", inputs: ["plus", "minus", "index"], outputs: ["onRemove", "onAdd"] }, { kind: "directive", type: i2$1.InputGroupListContainerDirective, selector: "[c8yInputGroupListContainer]" }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2$1.FilterInputComponent, selector: "c8y-filter", inputs: ["icon", "filterTerm"], outputs: ["onSearch"] }, { kind: "component", type: i2$1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2$1.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i2$1.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
1002
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaAutoApplySettingsComponent, isStandalone: true, selector: "opcua-auto-apply", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: SelectLegacyComponent, selector: "c8y-select-legacy", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection", "addDropdownContainerToBody"], outputs: ["onChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: FilterInputComponent, selector: "c8y-filter", inputs: ["icon", "filterTerm"], outputs: ["onSearch"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputGroupListContainerDirective, selector: "[c8yInputGroupListContainer]" }, { kind: "component", type: InputGroupListComponent, selector: "c8y-input-group-list", inputs: ["plus", "minus", "index"], outputs: ["onRemove", "onAdd"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
984
1003
  }
985
1004
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaAutoApplySettingsComponent, decorators: [{
986
1005
  type: Component,
987
- args: [{ selector: 'opcua-auto-apply', standalone: false, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n" }]
1006
+ args: [{ selector: 'opcua-auto-apply', imports: [
1007
+ C8yTranslateDirective,
1008
+ CollapseDirective,
1009
+ FormGroupComponent,
1010
+ SelectLegacyComponent,
1011
+ NgIf,
1012
+ ListItemComponent,
1013
+ FilterInputComponent,
1014
+ ListItemBodyComponent,
1015
+ NgFor,
1016
+ ListItemCheckboxComponent,
1017
+ FormsModule,
1018
+ InputGroupListContainerDirective,
1019
+ InputGroupListComponent,
1020
+ RequiredInputPlaceholderDirective,
1021
+ C8yTranslatePipe
1022
+ ], template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <p translate>\n Specifying auto-apply constraints allows you to limit the scope where the device protocols are\n applied, for example by specifying a set of possible servers or node IDs.\n </p>\n <p translate>\n If no constraints are set, device protocols are applied at any fitting location on the OPC UA\n server.\n </p>\n </div>\n\n <div class=\"col-md-6\">\n <ul class=\"list-group\" style=\"box-shadow: none;\">\n <!-- Limit device type to a set of servers -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to a set of servers' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.matchesServerIds !== null && constraints.matchesServerIds.length > 0\n \"\n (change)=\"onChangeShowServerIds($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to a set of servers' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [collapse]=\"\n (!showServerIds &&\n (constraints.matchesServerIds !== null && constraints.matchesServerIds.length < 1)) ||\n (!showServerIds && constraints.matchesServerIds === null)\n \"\n [isAnimated]=\"true\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <c8y-select-legacy\n [items]=\"opcuaServers\"\n [selected]=\"selectedItems\"\n [placeholder]=\"placeholderSelectServerIds\"\n (onChange)=\"serverIdsSelected($event)\"\n [updateItems]=\"updateSelectedItem\"\n >\n \n <c8y-li *ngIf=\"opcuaServers.length > sizeToShowFilter\" class=\"sticky-top\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"filterItems($event)\"></c8y-filter>\n </c8y-li>\n <c8y-li *ngIf=\"filteredList && filteredList.length === 0\">\n <c8y-li-body> \n <div class=\"c8y-empty-state text-left\">\n <p>{{ 'No items to display.' | translate }}</p>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *ngFor=\"let item of filteredList\">\n <c8y-li-checkbox\n [selected]=\"isChecked(item)\"\n (onSelect)=\"onSelect($event, item)\"\n ></c8y-li-checkbox>\n <c8y-li-body>{{ item.name | translate }}<br>\n <span class=\"text-label-small m-r-4\" translate>ID</span> <small>{{ item.id }}</small>\n </c8y-li-body>\n </c8y-li>\n </c8y-select-legacy>\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type scope in the address space -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol scope in the address space' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length > 0\n \"\n (change)=\"onChangeShowBrowsePath($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol scope in the address space' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"\n (!showBrowsePath &&\n constraints.browsePathMatchesRegex !== null &&\n constraints.browsePathMatchesRegex.length < 1) ||\n (!showBrowsePath && constraints.browsePathMatchesRegex === null)\n \"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"browsePath\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} /objects/devices/.*\"\n [(ngModel)]=\"constraints.browsePathMatchesRegex\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to servers with a certain fragment-->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to servers with a certain fragment' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length > 0\"\n (change)=\"onChangeShowServerFragment($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to servers with a certain fragment' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showServerFragment && constraints.serverObjectHasFragment !== null && constraints.serverObjectHasFragment.length < 1) || (!showServerFragment && constraints.serverObjectHasFragment === null)\"\n >\n <c8y-form-group class=\"m-t-8 m-b-8\">\n <input\n name=\"serverFragment\"\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_SomeServerMarker\"\n [(ngModel)]=\"constraints.serverObjectHasFragment\"\n ngDefaultControl\n />\n </c8y-form-group>\n </div>\n </li>\n <!-- Limit device type to a specific root node ID -->\n <li class=\"list-group-item\">\n <label\n title=\"{{ 'Limit device protocol to specific root nodes ID' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length > 0\"\n (change)=\"onChangeNodeId($event)\"\n />\n <span></span>\n <span class=\"m-l-8\">\n {{ 'Limit device protocol to specific root nodes ID' | translate }}\n </span>\n </label>\n <div\n class=\"collapse\"\n [isAnimated]=\"true\"\n [collapse]=\"(!showRootNodes && constraints.matchesNodeIds !== null && constraints.matchesNodeIds.length < 1) || ( !showRootNodes && constraints.matchesNodeIds === null)\"\n >\n <ul c8yInputGroupListContainer class=\"list-unstyled p-t-16\">\n <li\n class=\"m-b-8\"\n *ngFor=\"let item of constraints.matchesNodeIds; let i = index; trackBy: trackByFn\"\n >\n <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n <c8y-form-group class=\"form-group--tooltip-validation\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} nodeId\"\n [(ngModel)]=\"constraints.matchesNodeIds[i]\"\n [required]=\"true\"\n />\n </c8y-form-group>\n </c8y-input-group-list>\n </li>\n </ul> \n </div>\n </li>\n </ul>\n </div>\n</div>\n" }]
988
1023
  }], ctorParameters: () => [{ type: i1.InventoryService }], propDecorators: { model: [{
989
1024
  type: Input
990
1025
  }] } });
@@ -1074,11 +1109,20 @@ class OpcuaDeviceProtocolDataReportingComponent {
1074
1109
  });
1075
1110
  }
1076
1111
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDataReportingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1077
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDataReportingComponent, isStandalone: false, selector: "opcua-device-protocol-data-reporting", inputs: { model: "model", groupName: "groupName" }, outputs: { onSubscriptionChange: "onSubscriptionChange" }, ngImport: i0, template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong>&nbsp;\n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
1112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDataReportingComponent, isStandalone: true, selector: "opcua-device-protocol-data-reporting", inputs: { model: "model", groupName: "groupName" }, outputs: { onSubscriptionChange: "onSubscriptionChange" }, ngImport: i0, template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong>&nbsp;\n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
1078
1113
  }
1079
1114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDataReportingComponent, decorators: [{
1080
1115
  type: Component,
1081
- args: [{ selector: 'opcua-device-protocol-data-reporting', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], standalone: false, template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong>&nbsp;\n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n" }]
1116
+ args: [{ selector: 'opcua-device-protocol-data-reporting', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], imports: [
1117
+ FormGroupComponent,
1118
+ C8yTranslateDirective,
1119
+ NgFor,
1120
+ FormsModule,
1121
+ RequiredInputPlaceholderDirective,
1122
+ CollapseDirective,
1123
+ MinValidationDirective,
1124
+ C8yTranslatePipe
1125
+ ], template: "<c8y-form-group>\n <label translate>Mechanism</label>\n <label\n title=\"{{ mechanism.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n *ngFor=\"let mechanism of types\"\n >\n <input\n type=\"radio\"\n name=\"{{subscriptionTypeName}}\"\n [value]=\"mechanism.value\"\n [(ngModel)]=\"subscription.type\"\n (change)=\"updateModel()\"\n required\n [attr.data-cy]=\"mechanism.value\"\n />\n <span></span>\n <span>{{ mechanism.label | translate }}</span>\n </label>\n</c8y-form-group>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'CyclicRead'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-md-4 col-lg-3\">\n <c8y-form-group>\n <label translate>Reading interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"rate\"\n [(ngModel)]=\"cyclicReadParameters.rate\"\n placeholder=\"{{ 'e.g.' | translate }} 50\"\n [required]=\"requireCyclic\"\n min=\"50\"\n [attr.data-cy]=\"'cyclicReadRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\">\n {{ 'msec' | translate }}\n </span>\n </div>\n </c8y-form-group>\n </div>\n</div>\n\n<div class=\"row collapse\" [collapse]=\"subscription.type != 'Subscription'\" [isAnimated]=\"true\">\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Sampling interval</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"samplingRate\"\n [(ngModel)]=\"subscriptionParameters.samplingRate\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n [required]=\"requireSubscription\"\n min=\"0\"\n [attr.data-cy]=\"'subscriptionSamplingRate'\"\n />\n <span class=\"input-group-addon units\" title=\"{{ 'Milliseconds' | translate }}\" translate>\n msec\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Queue size</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"queueSize\"\n [(ngModel)]=\"subscriptionParameters.queueSize\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n min=\"1\"\n [attr.data-cy]=\"'subscriptionQueueSize'\"\n />\n <span class=\"input-group-addon\">\n <strong translate>Discard</strong>&nbsp;\n <label\n *ngFor=\"let discardOption of discard\"\n title=\"{{ discardOption.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"discard{{ _model.id }}\"\n [value]=\"discardOption.value\"\n [(ngModel)]=\"subscriptionParameters.discardOldest\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"discardOption.label\"\n [attr.data-name]=\"'discard' + _model.id\"\n />\n <span></span>\n <span>{{ discardOption.label | translate }}</span>\n </label>\n </span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"clearfix\"></div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Data change trigger</label>\n <label\n *ngFor=\"let trigger of triggers\"\n title=\"{{ trigger.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"dataChangeTrigger{{ _model.id }}\"\n [value]=\"trigger.value\"\n [(ngModel)]=\"subscriptionParameters.dataChangeTrigger\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"trigger.label\"\n [attr.data-name]=\"'dataChangeTrigger' + _model.id\"\n />\n <span></span>\n <span>{{ trigger.label | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6 col-lg-4\">\n <c8y-form-group>\n <label translate>Deadband filter</label>\n <label\n *ngFor=\"let deadbandFilter of filters\"\n title=\"{{ deadbandFilter.label | translate }}\"\n class=\"c8y-radio radio-inline\"\n >\n <input\n type=\"radio\"\n name=\"deadbandType{{ _model.id }}\"\n [value]=\"deadbandFilter.value\"\n [(ngModel)]=\"subscriptionParameters.deadbandType\"\n [required]=\"requireSubscription\"\n [attr.data-cy]=\"deadbandFilter.label\"\n [attr.data-name]=\"'deadbandType' + _model.id\"\n />\n <span></span>\n <span>{{ deadbandFilter.label | translate }}</span>\n </label>\n </c8y-form-group>\n <div [collapse]=\"subscriptionParameters.deadbandType == 'None'\" [isAnimated]=\"true\">\n <c8y-form-group>\n <label translate>Deadband value</label>\n <input\n class=\"form-control\"\n type=\"number\"\n name=\"deadbandValue\"\n [(ngModel)]=\"subscriptionParameters.deadbandValue\"\n placeholder=\"{{ 'e.g.' | translate }} 10\"\n [required]=\"subscriptionParameters.deadbandType != 'None'\"\n min=\"0\"\n [attr.data-cy]=\"'deadbandValue'\"\n />\n </c8y-form-group>\n </div>\n </div>\n</div>\n" }]
1082
1126
  }], propDecorators: { model: [{
1083
1127
  type: Input
1084
1128
  }], groupName: [{
@@ -1100,11 +1144,20 @@ class OpcuaDeviceProtocolDescription {
1100
1144
  this._model.enabled = data !== '0' ? true : false;
1101
1145
  }
1102
1146
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDescription, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDescription, isStandalone: false, selector: "opcua-device-protocol-description", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$2.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.DatePipe, name: "c8yDate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1147
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDescription, isStandalone: true, selector: "opcua-device-protocol-description", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1104
1148
  }
1105
1149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDescription, decorators: [{
1106
1150
  type: Component,
1107
- args: [{ selector: 'opcua-device-protocol-description', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: false, template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
1151
+ args: [{ selector: 'opcua-device-protocol-description', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], imports: [
1152
+ C8yTranslateDirective,
1153
+ NgClass,
1154
+ FormsModule,
1155
+ NgIf,
1156
+ ButtonCheckboxDirective,
1157
+ IconDirective,
1158
+ C8yTranslatePipe,
1159
+ DatePipe
1160
+ ], template: "<div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-protocols\"></i>\n <p>\n <small class=\"label label-info\">{{ _model.fieldbusType }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <div class=\"form-group form-group-lg m-b-0\">\n <label class=\"sr-only\" translate>Name</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlName.dirty }\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n #ctrlName=\"ngModel\"\n [(ngModel)]=\"_model.name\"\n style=\"max-width:calc( {{ _model.name.length || 10 }} * 1ch + 14px)\"\n />\n </label>\n </div>\n <div class=\"form-group\">\n <label class=\"sr-only\" translate>Description</label>\n <label class=\"editable\" [ngClass]=\"{ updated: ctrlDescription.dirty }\">\n <textarea\n class=\"form-control\"\n rows=\"1\"\n name=\"description\"\n placeholder=\"{{ 'e.g. My protocol description' | translate }}\"\n #ctrlDescription=\"ngModel\"\n [(ngModel)]=\"_model.description\"\n style=\"max-width:calc( {{ _model.description?.length || 25 }} * 1ch + 14px)\"\n ></textarea>\n <span *ngIf=\"_model.description\">\n {{ _model.description }}\n </span>\n </label>\n </div>\n <div class=\"d-flex\">\n <div>\n <button\n type=\"button\"\n class=\"btn\"\n name=\"autoScanAddressSpace\"\n [(ngModel)]=\"autoScan\"\n (ngModelChange)=\"setAutoScanOption($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n ngDefaultControl\n >\n <i *ngIf=\"autoScan === '1'\" c8yIcon=\"check\" class=\"text-success\"></i>\n <span *ngIf=\"autoScan === '1'\">\n {{ 'Active`auto scanning`' | translate }}\n </span>\n\n <i *ngIf=\"autoScan === '0'\" c8yIcon=\"ban\" class=\"text-danger\"></i>\n <span *ngIf=\"autoScan === '0'\">\n {{ 'Inactive`auto scanning`' | translate }}\n </span>\n </button>\n </div>\n <small class=\"m-l-16 text-muted\">\n {{\n 'When active, the gateway scans the address space of all servers and automatically applies this device protocol to all nodes matching the criteria.'\n | translate\n }}\n </small>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>ID</label>\n <span class=\"m-l-auto\">{{ _model.id }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Date created</label>\n <span class=\"m-l-auto\">{{ _model.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Last update</label>\n <span class=\"m-l-auto\">{{ _model.lastUpdated | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\" translate>Fieldbus version</label>\n <span class=\"m-l-auto\">{{ _model.fieldbusVersion }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
1108
1161
  }], propDecorators: { model: [{
1109
1162
  type: Input
1110
1163
  }] } });
@@ -1266,14 +1319,11 @@ class OpcuaDeviceProtocolObjectMappingStatus extends UpgradeComponent {
1266
1319
  super('c8yObjectMappingStatusIcons', elementRef, injector);
1267
1320
  }
1268
1321
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolObjectMappingStatus, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
1269
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolObjectMappingStatus, isStandalone: false, selector: "c8y-object-mapping-status-icons", inputs: { mapping: "mapping" }, usesInheritance: true, ngImport: i0 }); }
1322
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolObjectMappingStatus, isStandalone: true, selector: "c8y-object-mapping-status-icons", inputs: { mapping: "mapping" }, usesInheritance: true, ngImport: i0 }); }
1270
1323
  }
1271
1324
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolObjectMappingStatus, decorators: [{
1272
1325
  type: Directive,
1273
- args: [{
1274
- selector: 'c8y-object-mapping-status-icons',
1275
- standalone: false
1276
- }]
1326
+ args: [{ selector: 'c8y-object-mapping-status-icons' }]
1277
1327
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }], propDecorators: { mapping: [{
1278
1328
  type: Input
1279
1329
  }] } });
@@ -1472,11 +1522,32 @@ class OpcuaDeviceProtocolMapping {
1472
1522
  this.mapping.subscriptionType = value;
1473
1523
  }
1474
1524
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolMapping, deps: [{ token: AddressSpaceService }], target: i0.ɵɵFactoryTarget.Component }); }
1475
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolMapping, isStandalone: false, selector: "opcua-device-protocol-mapping", inputs: { _model: ["resource", "_model"], index: "index", getParentAttr: "getParentAttr", referencedServerId: "referencedServerId", referencedRootNodeId: "referencedRootNodeId" }, outputs: { onAction: "onAction" }, viewQueries: [{ propertyName: "subFormRef", first: true, predicate: ["variableForm"], descendants: true }, { propertyName: "browsePathModel", first: true, predicate: ["browsePathModel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i5$1.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i7$1.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i7$1.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i7$1.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i8.ObjectMappingComponent, selector: "c8y-device-protocol-object-mappings", inputs: ["data", "objectMappingTypes"], outputs: ["onUpdate"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "directive", type: OpcuaDeviceProtocolObjectMappingStatus, selector: "c8y-object-mapping-status-icons", inputs: ["mapping"] }, { kind: "directive", type: OpcuaDeviceProtocolBrowsePathValidation, selector: "[c8yBrowsePathValidator][ngModel]", inputs: ["getMappings", "model"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.JsonPipe, name: "json" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
1525
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolMapping, isStandalone: true, selector: "opcua-device-protocol-mapping", inputs: { _model: ["resource", "_model"], index: "index", getParentAttr: "getParentAttr", referencedServerId: "referencedServerId", referencedRootNodeId: "referencedRootNodeId" }, outputs: { onAction: "onAction" }, viewQueries: [{ propertyName: "subFormRef", first: true, predicate: ["variableForm"], descendants: true }, { propertyName: "browsePathModel", first: true, predicate: ["browsePathModel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: OpcuaDeviceProtocolObjectMappingStatus, selector: "c8y-object-mapping-status-icons", inputs: ["mapping"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: OpcuaDeviceProtocolBrowsePathValidation, selector: "[c8yBrowsePathValidator][ngModel]", inputs: ["getMappings", "model"] }, { kind: "directive", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "component", type: OpcuaAddressSpaceTreeComponent, selector: "opcua-address-space-tree", inputs: ["moId", "node", "focusEmitter"], outputs: ["selectedNode"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "component", type: ObjectMappingComponent, selector: "c8y-device-protocol-object-mappings", inputs: ["data", "objectMappingTypes"], outputs: ["onUpdate"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: JsonPipe, name: "json" }], viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }] }); }
1476
1526
  }
1477
1527
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolMapping, decorators: [{
1478
1528
  type: Component,
1479
- args: [{ selector: 'opcua-device-protocol-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], standalone: false, template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
1529
+ args: [{ selector: 'opcua-device-protocol-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgModelGroup }], imports: [
1530
+ NgClass,
1531
+ IconDirective,
1532
+ NgIf,
1533
+ OpcuaDeviceProtocolObjectMappingStatus,
1534
+ TooltipDirective,
1535
+ CollapseDirective,
1536
+ FormsModule,
1537
+ FormGroupComponent,
1538
+ BsDropdownDirective,
1539
+ RequiredInputPlaceholderDirective,
1540
+ OpcuaDeviceProtocolBrowsePathValidation,
1541
+ BsDropdownToggleDirective,
1542
+ BsDropdownMenuDirective,
1543
+ OpcuaAddressSpaceTreeComponent,
1544
+ MessagesComponent,
1545
+ MessageDirective,
1546
+ OpcuaDeviceProtocolDataReportingComponent,
1547
+ ObjectMappingComponent,
1548
+ C8yTranslatePipe,
1549
+ JsonPipe
1550
+ ], template: "<div\n class=\"c8y-list__item\"\n [ngClass]=\"{ expanded: isDetailOpen }\"\n [attr.data-cy]=\"mapping.browsePath | json\"\n>\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"sliders\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-70\">\n <div class=\"col-5\">\n <p\n class=\"text-truncate\"\n title=\" {{ nodeDisplayName }} {{\n mapping.browsePath.length > 0 ? (mapping.browsePath | json) : ''\n }}\"\n (click)=\"toggleDetail()\"\n >\n {{ nodeDisplayName }}\n <small\n class=\"text-muted\"\n *ngIf=\"mapping.browsePath.length > 0\"\n >\n {{ mapping.browsePath | json }}\n </small>\n </p>\n </div>\n <div class=\"col-5\">\n <div class=\"list-functionalities\">\n <label class=\"small m-r-8 m-b-0 hidden-xs\">\n {{ 'Functionalities' | translate }}\n </label>\n <c8y-object-mapping-status-icons [mapping]=\"mapping\"></c8y-object-mapping-status-icons>\n </div>\n </div>\n <div class=\"flex-grow d-flex p-r-8\">\n <button\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n c8yIcon=\"minus-circle\"\n (click)=\"onDelete()\"\n ></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\">\n <button\n class=\"collapse-btn\"\n title=\"{{ 'Expand' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ active: isDetailOpen }\"\n (click)=\"toggleDetail()\"\n [attr.data-cy]=\"'toggleDetail'\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"collapse\"\n [collapse]=\"!isDetailOpen\"\n [isAnimated]=\"true\"\n >\n <div class=\"c8y-list__item__collapse--container\">\n <div\n class=\"form\"\n [ngModelGroup]=\"index\"\n #variableForm=\"ngModelGroup\"\n *ngIf=\"isDetailOpen\"\n >\n <div class=\"row p-t-8\">\n <c8y-form-group\n class=\"col-md-4\"\n [status]=\"!isBrowsePathUniq ? 'error' : ''\"\n *ngIf=\"showAddressSpaceTree(); else simpleInput\"\n >\n <label>{{ 'Path' | translate }}</label>\n <div\n class=\"dropdown fit-w\"\n dropdown\n #dropdown=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n (focus)=\"setTreeFromRefNode()\"\n #browsePathModel=\"ngModel\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Toggle address space' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n </span>\n </div>\n <div\n class=\"dropdown-menu panel-inner-scroll fit-w\"\n style=\"max-height: 240px\"\n *dropdownMenu\n >\n <opcua-address-space-tree\n [node]=\"referencedNode\"\n [moId]=\"referencedServerId\"\n (selectedNode)=\"updateBrowsePath($event); dropdown.hide()\"\n ></opcua-address-space-tree>\n </div>\n </div>\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <ng-template #simpleInput>\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Path' | translate }}</label>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} {{ ['2:Node1', '2:SubNode1'] | json }}\"\n name=\"browsePath\"\n type=\"text\"\n autocomplete=\"off\"\n required\n c8yBrowsePathValidator\n [getMappings]=\"getMappings\"\n [model]=\"mapping\"\n [(ngModel)]=\"browsePath\"\n (change)=\"updateBrowsePathInput()\"\n #browsePathModel=\"ngModel\"\n />\n <c8y-messages>\n <c8y-message\n name=\"invalidBrowsePathNotation\"\n text=\"{{ 'Must be a valid array of strings.' | translate }}\"\n ></c8y-message>\n <c8y-message\n name=\"browsePathNotUnique\"\n text=\"{{ 'Variable with this path is already added.' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </ng-template>\n\n <c8y-form-group class=\"col-md-4\">\n <label>{{ 'Name' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. childDevice2' | translate }} \"\n name=\"displayName\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"nodeDisplayName\"\n (change)=\"updateDisplayname()\"\n />\n </div>\n </c8y-form-group>\n </div>\n <div\n class=\"row\"\n ngModelGroup=\"dataReportingSection\"\n >\n <c8y-form-group class=\"col-sm-4 col-md-3 col-lg-2\">\n <label>\n <span>{{ 'Data reporting' | translate }}</span>\n </label>\n <div class=\"input-group\">\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Default' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"default\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Default' | translate }}</span>\n </label>\n <label\n class=\"c8y-radio radio-inline\"\n title=\"{{ 'Custom' | translate }}\"\n >\n <input\n name=\"{{ dataReportingName }}\"\n type=\"radio\"\n value=\"custom\"\n [(ngModel)]=\"dataReporting\"\n />\n <span></span>\n <span>{{ 'Custom' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n <div\n class=\"col-sm-8 col-md-9 col-lg-10\"\n *ngIf=\"dataReporting === 'custom'\"\n ngModelGroup=\"overriddenSubscription\"\n >\n <opcua-device-protocol-data-reporting\n [model]=\"mapping\"\n (onSubscriptionChange)=\"updateSubscriptionType($event)\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n\n <c8y-device-protocol-object-mappings\n [data]=\"mapping\"\n [objectMappingTypes]=\"mappingTypes\"\n (onUpdate)=\"onMappingUpdate($event)\">\n </c8y-device-protocol-object-mappings>\n\n <button\n class=\"btn btn-default m-t-16 m-b-16\"\n title=\"{{ 'Cancel' | translate }}\"\n id=\"cancelBtn\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary m-t-16 m-b-16\"\n title=\"{{ 'Save' | translate }}\"\n id=\"saveBtn\"\n type=\"button\"\n (click)=\"save()\"\n [disabled]=\"!canSave(variableForm)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
1480
1551
  }], ctorParameters: () => [{ type: AddressSpaceService }], propDecorators: { subFormRef: [{
1481
1552
  type: ViewChild,
1482
1553
  args: ['variableForm', { static: false }]
@@ -1674,13 +1745,28 @@ class OpcuaDeviceProtocolDetailComponent {
1674
1745
  }
1675
1746
  return !deviceTypeForm.form.valid;
1676
1747
  }
1677
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: OpcuaService }, { token: i2$1.AlertService }, { token: i2$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1678
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDetailComponent, isStandalone: false, selector: "opcua-device-protocol-detail", viewQueries: [{ propertyName: "instanceList", predicate: OpcuaDeviceProtocolMapping, descendants: true }], ngImport: i0, template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2$1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2$1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: OpcuaDeviceProtocolDescription, selector: "opcua-device-protocol-description", inputs: ["model"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "component", type: OpcuaDeviceProtocolMapping, selector: "opcua-device-protocol-mapping", inputs: ["resource", "index", "getParentAttr", "referencedServerId", "referencedRootNodeId"], outputs: ["onAction"] }, { kind: "component", type: OpcuaAutoApplySettingsComponent, selector: "opcua-auto-apply", inputs: ["model"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
1748
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: OpcuaService }, { token: i2$1.AlertService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1749
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaDeviceProtocolDetailComponent, isStandalone: true, selector: "opcua-device-protocol-detail", viewQueries: [{ propertyName: "instanceList", predicate: OpcuaDeviceProtocolMapping, descendants: true }], ngImport: i0, template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgModelGroup, selector: "[ngModelGroup]", inputs: ["ngModelGroup"], exportAs: ["ngModelGroup"] }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: OpcuaDeviceProtocolDescription, selector: "opcua-device-protocol-description", inputs: ["model"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: OpcuaDeviceProtocolMapping, selector: "opcua-device-protocol-mapping", inputs: ["resource", "index", "getParentAttr", "referencedServerId", "referencedRootNodeId"], outputs: ["onAction"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: OpcuaDeviceProtocolDataReportingComponent, selector: "opcua-device-protocol-data-reporting", inputs: ["model", "groupName"], outputs: ["onSubscriptionChange"] }, { kind: "component", type: OpcuaAutoApplySettingsComponent, selector: "opcua-auto-apply", inputs: ["model"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1679
1750
  }
1680
1751
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaDeviceProtocolDetailComponent, decorators: [{
1681
1752
  type: Component,
1682
- args: [{ selector: 'opcua-device-protocol-detail', standalone: false, template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n" }]
1683
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: OpcuaService }, { type: i2$1.AlertService }, { type: i2$2.Router }], propDecorators: { instanceList: [{
1753
+ args: [{ selector: 'opcua-device-protocol-detail', imports: [
1754
+ NgIf,
1755
+ TitleComponent,
1756
+ BreadcrumbComponent,
1757
+ BreadcrumbItemComponent,
1758
+ FormsModule,
1759
+ OpcuaDeviceProtocolDescription,
1760
+ C8yTranslateDirective,
1761
+ NgFor,
1762
+ OpcuaDeviceProtocolMapping,
1763
+ EmptyStateComponent,
1764
+ IconDirective,
1765
+ OpcuaDeviceProtocolDataReportingComponent,
1766
+ OpcuaAutoApplySettingsComponent,
1767
+ C8yTranslatePipe
1768
+ ], template: "<c8y-title *ngIf=\"!isLoaded\">{{ model.name }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device types' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-protocols'\"\n [label]=\"'Device protocols' | translate\"\n [path]=\"'deviceprotocols'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'c8y-device-protocols'\" [label]=\"model?.name\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <form #deviceTypeForm=\"ngForm\" name=\"detailForm\" *ngIf=\"!isLoaded\" class=\"card card--fullpage\">\n <opcua-device-protocol-description [model]=\"model\"></opcua-device-protocol-description>\n <div class=\"inner-scroll\">\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Variables</div>\n </div>\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-list__group\" *ngIf=\"model.mappings.length > 0\" ngModelGroup=\"variable\">\n <opcua-device-protocol-mapping\n *ngFor=\"let resource of getMapping(); index as i; trackBy: trackById\"\n [index]=\"i\"\n [referencedServerId]=\"model.referencedServerId\"\n [referencedRootNodeId]=\"model.referencedRootNodeId\"\n [resource]=\"getStructuredResource(resource)\"\n [getParentAttr]=\"getParentAttr\"\n (onAction)=\"actionHandler($event)\"\n ></opcua-device-protocol-mapping>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\">\n <c8y-ui-empty-state\n *ngIf=\"model.mappings.length === 0\"\n [icon]=\"'sliders'\"\n [title]=\"'No variables to display.' | translate\"\n [subtitle]=\"'Click below to add your first variable.' | translate\"\n ></c8y-ui-empty-state>\n\n <div class=\"card-footer\">\n <button\n type=\"button\"\n title=\"{{ 'Add variable' | translate }}\"\n class=\"btn btn-default addVariableBtn\"\n (click)=\"addVariable()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add variable' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"h4\" translate>Data reporting</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16\" ngModelGroup=\"subscription\">\n <opcua-device-protocol-data-reporting\n [groupName]=\"'subscription'\"\n [model]=\"model\"\n ></opcua-device-protocol-data-reporting>\n </div>\n </div>\n <div class=\"d-contents\">\n <div class=\"card-header separator-top-bottom sticky-top\">\n <div class=\"h4\" translate>Auto apply constraints</div>\n </div>\n <div class=\"p-l-16 p-r-16 p-t-16 overflow-visible\" ngModelGroup=\"autoApply\">\n <opcua-auto-apply [model]=\"model\"></opcua-auto-apply>\n </div>\n </div>\n\n <div class=\"card-footer sticky-bottom separator\" style=\"z-index: 101\">\n <button\n title=\"{{ 'Save' | translate }}\"\n id=\"deviceTypeSave\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"canSave(deviceTypeForm)\"\n type=\"button\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n" }]
1769
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: OpcuaService }, { type: i2$1.AlertService }, { type: i2.Router }], propDecorators: { instanceList: [{
1684
1770
  type: ViewChildren,
1685
1771
  args: [OpcuaDeviceProtocolMapping]
1686
1772
  }] } });
@@ -2129,11 +2215,30 @@ class OpcuaServerConfigComponent {
2129
2215
  ];
2130
2216
  }
2131
2217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerConfigComponent, deps: [{ token: OpcuaService }, { token: i2$1.ModalService }, { token: i2$1.AlertService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerConfigComponent, isStandalone: false, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved", updated: "updated" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: i2$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: i2$1.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2$1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2$1.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2$1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i2$1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2$1.DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "component", type: i5$2.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i4$2.ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "directive", type: i4$1.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
2218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerConfigComponent, isStandalone: true, selector: "opcua-server-config", inputs: { server: "server" }, outputs: { canceled: "canceled", removed: "removed", saved: "saved", updated: "updated" }, viewQueries: [{ propertyName: "opcuaConfigForm", first: true, predicate: ["opcuaConfigForm"], descendants: true }, { propertyName: "dropArea", first: true, predicate: DropAreaComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: ButtonCheckboxDirective, selector: "[btnCheckbox]", inputs: ["btnCheckboxTrue", "btnCheckboxFalse"] }, { kind: "component", type: DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "directive", type: DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
2133
2219
  }
2134
2220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerConfigComponent, decorators: [{
2135
2221
  type: Component,
2136
- args: [{ selector: 'opcua-server-config', standalone: false, template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
2222
+ args: [{ selector: 'opcua-server-config', imports: [
2223
+ NgIf,
2224
+ EmptyStateComponent,
2225
+ FormsModule,
2226
+ IconDirective,
2227
+ FormGroupComponent,
2228
+ RequiredInputPlaceholderDirective,
2229
+ MessagesComponent,
2230
+ MessageDirective,
2231
+ C8yTranslateDirective,
2232
+ ButtonCheckboxDirective,
2233
+ DeviceStatusComponent,
2234
+ DefaultValidationDirective,
2235
+ NgFor,
2236
+ DropAreaComponent,
2237
+ NgClass,
2238
+ CollapseDirective,
2239
+ FormlyModule,
2240
+ C8yTranslatePipe
2241
+ ], template: "<c8y-ui-empty-state\n [icon]=\"'server'\"\n [title]=\"'No server to display.' | translate\"\n [subtitle]=\"'Add or select a server.' | translate\"\n *ngIf=\"!server\"\n></c8y-ui-empty-state>\n\n<form\n class=\"d-contents\"\n #opcuaConfigForm=\"ngForm\"\n *ngIf=\"server\"\n>\n <div class=\"card-header large-padding separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n {{ 'Back' | translate }}\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"card-block large-padding\">\n <!-- SERVER NAME -->\n <c8y-form-group class=\"m-b-8\">\n <label>{{ 'Server name' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My server' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"model.name\"\n />\n <c8y-messages>\n <c8y-message\n name=\"required\"\n text=\"{{ 'Server name is required' | translate }}\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"card-block large-padding bg-level-2\">\n <div class=\"tight-grid\">\n <div class=\"col-sm-6\">\n <label\n class=\"fit-w\"\n translate\n >\n Server connection\n </label>\n <button\n class=\"btn m-t-4\"\n name=\"serverConnection\"\n type=\"button\"\n [(ngModel)]=\"targetConnectionState\"\n (ngModelChange)=\"setServerConnection($event)\"\n btnCheckbox\n btnCheckboxTrue=\"1\"\n btnCheckboxFalse=\"0\"\n >\n <span\n title=\"{{ 'Enabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '1'\"\n >\n {{ 'Enabled' | translate }}\n </span>\n <span\n title=\"{{ 'Disabled' | translate }}\"\n [hidden]=\"targetConnectionState !== '0'\"\n >\n {{ 'Disabled' | translate }}\n </span>\n </button>\n </div>\n <div class=\"col-sm-6\">\n <label translate>Connection status</label>\n <div class=\"form-control-static\">\n <device-status\n class=\"p-r-8\"\n [mo]=\"server\"\n ></device-status>\n <span>{{ connectionStatusLabel | translate }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <!-- SERVER URL-->\n <c8y-form-group>\n <label\n for=\"configServerUrl\"\n translate\n >\n Server URL\n </label>\n <input\n class=\"form-control\"\n id=\"configServerUrl\"\n name=\"serverUrl\"\n type=\"text\"\n required\n [(ngModel)]=\"model.config.serverUrl\"\n c8yDefaultValidation=\"opcuaBrowsePath\"\n />\n </c8y-form-group>\n\n <!-- SECURITY MODE -->\n <div class=\"tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <!-- NONE, SIGN, SIGN & ENCRYPT-->\n <label\n for=\"config.securityMode\"\n translate\n >\n Security mode\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityMode\"\n name=\"securityMode\"\n required\n [(ngModel)]=\"currentSecMode\"\n (ngModelChange)=\"setPolicy($event)\"\n >\n <option\n *ngFor=\"let mode of securityModes\"\n [ngValue]=\"mode\"\n >\n {{ mode }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode === NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <input\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [(ngModel)]=\"model.config.securityMode\"\n />\n </div>\n </div>\n <div\n class=\"col-md-6\"\n *ngIf=\"currentSecMode !== NONE\"\n >\n <div class=\"form-group\">\n <label\n for=\"config.securityPolicy\"\n translate\n >\n Security policy\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <select\n class=\"form-control\"\n id=\"config.securityPolicy\"\n name=\"securityPolicy\"\n required\n *ngIf=\"currentSecMode === SIGN_ENC\"\n [(ngModel)]=\"model.config.securityMode\"\n >\n <option\n *ngFor=\"let policy of securityPolicies.sign_enc\"\n [ngValue]=\"policy\"\n >\n {{ policy }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AUTHENTICATION -->\n <div class=\"row tight-grid\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.authenticationMode\"\n translate\n >\n Authentication\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"config.authenticationMode\"\n name=\"authenticationMode\"\n required\n [(ngModel)]=\"authenticationMode\"\n (ngModelChange)=\"updateAuthentication($event)\"\n >\n <option\n *ngFor=\"let auth of authenticationModes\"\n [ngValue]=\"auth\"\n >\n {{ auth.value | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n <!-- User/Pw-->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 2\"\n >\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.userName\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"config.userName\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n name=\"userName\"\n type=\"text\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userName\"\n />\n </div>\n </div>\n\n <!-- change password section BEGINS-->\n <div class=\"col-md-6\">\n <div\n class=\"form-group\"\n *ngIf=\"!initialPasswordRequired\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"toggleChangePassword()\"\n >\n <ng-container *ngIf=\"!changePassword\">\n {{ 'Change password' | translate }}\n </ng-container>\n <ng-container *ngIf=\"changePassword\">\n {{ 'Cancel password change' | translate }}\n </ng-container>\n </button>\n </div>\n\n <div class=\"form-group\">\n <div *ngIf=\"changePassword\">\n <label\n for=\"config.password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"config.userPassword\"\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n required\n [(ngModel)]=\"model.config.userPassword\"\n />\n </div>\n </div>\n </div>\n <!-- change password section ENDS-->\n </div>\n\n <!-- Key-based -->\n <div\n class=\"tight-grid\"\n *ngIf=\"authenticationMode.id === 3\"\n >\n <!-- KEYSTORE PASSWORD -->\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.keystorePass\"\n translate\n >\n Keystore password\n </label>\n <input\n class=\"form-control\"\n id=\"config.keystorePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.keystorePass\"\n />\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label\n for=\"config.certificatePass\"\n translate\n >\n Certificate password\n </label>\n <input\n class=\"form-control\"\n id=\"config.certificatePass\"\n name=\"keystorePass\"\n type=\"password\"\n required\n [(ngModel)]=\"model.config.certificatePass\"\n />\n </div>\n </div>\n <!-- UPLOAD KEYSTORE -->\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label\n for=\"certificateUpload\"\n translate\n >\n Upload keystore\n </label>\n <input\n class=\"form-control m-b-8\"\n placeholder=\"{{ 'e.g.' | translate }} yourKeystore.jks\"\n name=\"certificateUpload\"\n type=\"text\"\n required\n [readonly]=\"true\"\n [ngModel]=\"fileName\"\n />\n <c8y-drop-area\n [title]=\"'Import keystore with jks file extension' | translate\"\n (dropped)=\"uploadFile($event)\"\n [loadingMessage]=\"'Importing, please wait.' | translate\"\n ></c8y-drop-area>\n </div>\n </div>\n </div>\n\n <div class=\"form-group m-b-0 d-flex a-i-center\">\n <button\n class=\"btn btn-dot collapse-btn\"\n title=\"{{ (advancedSettings ? collapse : expand) | translate }}\"\n [attr.aria-label]=\"(advancedSettings ? collapse : expand) | translate\"\n [attr.aria-expanded]=\"advancedSettings\"\n [ngClass]=\"{ active: advancedSettings }\"\n (click)=\"advancedSettings = !advancedSettings\"\n data-cy=\"opcua-server-config--advanced-settings-toggle\"\n >\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n <label class=\"m-0\">\n <span>{{ 'Advanced settings' | translate }}</span>\n </label>\n </div>\n </div>\n\n <div\n class=\"card-block collapse\"\n [collapse]=\"!advancedSettings\"\n [isAnimated]=\"true\"\n [ngClass]=\"{ 'bg-level-1': advancedSettings }\"\n >\n <formly-form\n [form]=\"advancedSettingsForm\"\n [fields]=\"advancedSettingsFields\"\n [model]=\"model.config\"\n ></formly-form>\n </div>\n </div>\n <div class=\"card-footer large-padding separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-danger\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"isNew()\"\n >\n {{ 'Remove' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"!opcuaConfigForm.valid || !advancedSettingsForm.valid\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
2137
2242
  }], ctorParameters: () => [{ type: OpcuaService }, { type: i2$1.ModalService }, { type: i2$1.AlertService }, { type: i0.ChangeDetectorRef }], propDecorators: { opcuaConfigForm: [{
2138
2243
  type: ViewChild,
2139
2244
  args: ['opcuaConfigForm', { static: false }]
@@ -2162,11 +2267,19 @@ class OpcuaServerListComponent {
2162
2267
  this.present.emit(server);
2163
2268
  }
2164
2269
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2165
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerListComponent, isStandalone: false, selector: "opcua-server-list", inputs: { serverList: "serverList" }, outputs: { present: "present" }, ngImport: i0, template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2$1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "directive", type: i5$1.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
2270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServerListComponent, isStandalone: true, selector: "opcua-server-list", inputs: { serverList: "serverList" }, outputs: { present: "present" }, ngImport: i0, template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: DeviceStatusComponent, selector: "device-status, c8y-device-status", inputs: ["mo", "size"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
2166
2271
  }
2167
2272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServerListComponent, decorators: [{
2168
2273
  type: Component,
2169
- args: [{ selector: 'opcua-server-list', standalone: false, template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n" }]
2274
+ args: [{ selector: 'opcua-server-list', imports: [
2275
+ NgIf,
2276
+ EmptyStateComponent,
2277
+ NgFor,
2278
+ IconDirective,
2279
+ DeviceStatusComponent,
2280
+ TooltipDirective,
2281
+ C8yTranslatePipe
2282
+ ], template: "<!-- add active class to c8y-stacked-item when clicked -->\n<div class=\"card-block\" *ngIf=\"serverList.length === 0\">\n <c8y-ui-empty-state\n class=\"m-l-auto p-l-8 d-flex p-r-16\"\n [icon]=\"'server'\"\n [title]=\"'No servers found.' | translate\"\n [subtitle]=\"'Click below to add a new server.' | translate\"\n ></c8y-ui-empty-state>\n</div>\n<div\n class=\"c8y-stacked-item\"\n [class.active]=\"server.active\"\n *ngFor=\"let server of serverList\"\n (click)=\"presentConfig(server)\"\n>\n <i [c8yIcon]=\"'server'\" class=\"icon-20\"></i>\n <div class=\"p-l-16 text-truncate\">\n <p id=\"serverName\" class=\"text-truncate\">{{ server.name }}</p>\n <small id=\"serverUrl\" class=\"text-truncate text-muted\">{{ server.config.serverUrl }}</small>\n </div>\n <div class=\"m-l-auto p-l-8 d-flex p-r-16 a-i-center\">\n <device-status class=\"p-r-8\" [mo]=\"server\"></device-status>\n <button\n class=\"btn btn-dot text-gray-darker\"\n type=\"button\"\n [attr.aria-label]=\"server.quickInfo.padlockMsg | translate\"\n tooltip=\"{{ server.quickInfo.padlockMsg | translate }}\"\n placement=\"left\"\n container=\"body\"\n >\n <i [c8yIcon]=\"server.quickInfo.padlock\"></i>\n </button>\n </div>\n</div>\n" }]
2170
2283
  }], propDecorators: { serverList: [{
2171
2284
  type: Input
2172
2285
  }], present: [{
@@ -2375,11 +2488,18 @@ class OpcuaServersComponent {
2375
2488
  }
2376
2489
  }
2377
2490
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServersComponent, deps: [{ token: OpcuaService }, { token: i2$1.AlertService }, { token: i3.TranslateService }, { token: i2$1.ContextRouteComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2378
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServersComponent, isStandalone: false, selector: "opcua-servers", ngImport: i0, template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: OpcuaServerListComponent, selector: "opcua-server-list", inputs: ["serverList"], outputs: ["present"] }, { kind: "component", type: OpcuaServerConfigComponent, selector: "opcua-server-config", inputs: ["server"], outputs: ["canceled", "removed", "saved", "updated"] }, { kind: "pipe", type: i2$1.C8yTranslatePipe, name: "translate" }] }); }
2491
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: OpcuaServersComponent, isStandalone: true, selector: "opcua-servers", ngImport: i0, template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n", dependencies: [{ kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: OpcuaServerListComponent, selector: "opcua-server-list", inputs: ["serverList"], outputs: ["present"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: OpcuaServerConfigComponent, selector: "opcua-server-config", inputs: ["server"], outputs: ["canceled", "removed", "saved", "updated"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
2379
2492
  }
2380
2493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaServersComponent, decorators: [{
2381
2494
  type: Component,
2382
- args: [{ selector: 'opcua-servers', standalone: false, template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n" }]
2495
+ args: [{ selector: 'opcua-servers', imports: [
2496
+ PopoverDirective,
2497
+ OpcuaServerListComponent,
2498
+ IconDirective,
2499
+ OpcuaServerConfigComponent,
2500
+ NgClass,
2501
+ C8yTranslatePipe
2502
+ ], template: "<div class=\"card content-fullpage split-view--5-7\">\n <div class=\"card-header grid__col--fullspan separator\">\n <div class=\"h4 card-title\">OPC UA servers</div>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </div>\n <div class=\"inner-scroll split-view__list\">\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"c8y-nav-stacked\">\n <opcua-server-list\n [serverList]=\"serverObjectList\"\n (present)=\"onPresent($event)\"\n ></opcua-server-list>\n </div>\n </div>\n <div class=\"card-footer separator sticky-bottom\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add server' | translate }}\"\n type=\"button\"\n [disabled]=\"localServerObjectExist()\"\n (click)=\"addServer()\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add server' | translate }}\n </button>\n </div>\n </div>\n\n <opcua-server-config\n class=\"inner-scroll split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': server }\"\n (canceled)=\"onCanceled($event)\"\n (removed)=\"onRemoved($event)\"\n (saved)=\"onSaved($event)\"\n (updated)=\"onUpdated($event)\"\n [server]=\"server\"\n ></opcua-server-config>\n</div>\n" }]
2383
2503
  }], ctorParameters: () => [{ type: OpcuaService }, { type: i2$1.AlertService }, { type: i3.TranslateService }, { type: i2$1.ContextRouteComponent, decorators: [{
2384
2504
  type: Optional
2385
2505
  }] }] });
@@ -2410,7 +2530,16 @@ const deviceProtocolRoutes = [
2410
2530
  ];
2411
2531
  class OpcuaProtocolModule {
2412
2532
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2413
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, declarations: [OpcuaServersComponent,
2533
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, imports: [CoreModule,
2534
+ FormsModule$1,
2535
+ ReactiveFormsModule,
2536
+ DropAreaModule,
2537
+ ButtonsModule,
2538
+ CdkTreeModule, i2.RouterModule, i2$3.TooltipModule, i3$1.PopoverModule, DeviceStatusModule,
2539
+ OperationDetailsModule,
2540
+ BrowserAnimationsModule, i4$1.CollapseModule, i5.BsDropdownModule, ObjectMappingComponent,
2541
+ DynamicFormsModule,
2542
+ OpcuaServersComponent,
2414
2543
  OpcuaServerListComponent,
2415
2544
  OpcuaServerConfigComponent,
2416
2545
  OpcuaAddressSpaceComponent,
@@ -2422,15 +2551,7 @@ class OpcuaProtocolModule {
2422
2551
  OpcuaDeviceProtocolMapping,
2423
2552
  OpcuaDeviceProtocolObjectMappingStatus,
2424
2553
  OpcuaAutoApplySettingsComponent,
2425
- OpcuaDeviceProtocolBrowsePathValidation], imports: [CoreModule,
2426
- FormsModule,
2427
- ReactiveFormsModule,
2428
- DropAreaModule,
2429
- ButtonsModule,
2430
- CdkTreeModule, i2$2.RouterModule, i5$1.TooltipModule, i5$3.PopoverModule, DeviceStatusModule,
2431
- OperationDetailsModule,
2432
- BrowserAnimationsModule, i4$1.CollapseModule, i7$1.BsDropdownModule, ObjectMappingComponent,
2433
- DynamicFormsModule] }); }
2554
+ OpcuaDeviceProtocolBrowsePathValidation] }); }
2434
2555
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, providers: [
2435
2556
  OpcuaAgentGuard,
2436
2557
  OpcuaServerGuard,
@@ -2439,7 +2560,7 @@ class OpcuaProtocolModule {
2439
2560
  AddressSpaceService,
2440
2561
  hookRoute(opcuaRoutes)
2441
2562
  ], imports: [CoreModule,
2442
- FormsModule,
2563
+ FormsModule$1,
2443
2564
  ReactiveFormsModule,
2444
2565
  DropAreaModule,
2445
2566
  ButtonsModule,
@@ -2453,29 +2574,24 @@ class OpcuaProtocolModule {
2453
2574
  CollapseModule.forRoot(),
2454
2575
  BsDropdownModule.forRoot(),
2455
2576
  ObjectMappingComponent,
2456
- DynamicFormsModule] }); }
2577
+ DynamicFormsModule,
2578
+ OpcuaServersComponent,
2579
+ OpcuaServerListComponent,
2580
+ OpcuaServerConfigComponent,
2581
+ OpcuaAddressSpaceComponent,
2582
+ OpcuaAddressSpaceTreeComponent,
2583
+ OpcuaDeviceProtocolDescription,
2584
+ OpcuaDeviceProtocolDetailComponent,
2585
+ OpcuaDeviceProtocolDataReportingComponent,
2586
+ OpcuaDeviceProtocolMapping,
2587
+ OpcuaAutoApplySettingsComponent] }); }
2457
2588
  }
2458
2589
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OpcuaProtocolModule, decorators: [{
2459
2590
  type: NgModule,
2460
2591
  args: [{
2461
- declarations: [
2462
- OpcuaServersComponent,
2463
- OpcuaServerListComponent,
2464
- OpcuaServerConfigComponent,
2465
- OpcuaAddressSpaceComponent,
2466
- OpcuaAddressSpaceTreeComponent,
2467
- OpcuaAddressSpaceDetailComponent,
2468
- OpcuaDeviceProtocolDescription,
2469
- OpcuaDeviceProtocolDetailComponent,
2470
- OpcuaDeviceProtocolDataReportingComponent,
2471
- OpcuaDeviceProtocolMapping,
2472
- OpcuaDeviceProtocolObjectMappingStatus,
2473
- OpcuaAutoApplySettingsComponent,
2474
- OpcuaDeviceProtocolBrowsePathValidation
2475
- ],
2476
2592
  imports: [
2477
2593
  CoreModule,
2478
- FormsModule,
2594
+ FormsModule$1,
2479
2595
  ReactiveFormsModule,
2480
2596
  DropAreaModule,
2481
2597
  ButtonsModule,
@@ -2489,7 +2605,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
2489
2605
  CollapseModule.forRoot(),
2490
2606
  BsDropdownModule.forRoot(),
2491
2607
  ObjectMappingComponent,
2492
- DynamicFormsModule
2608
+ DynamicFormsModule,
2609
+ OpcuaServersComponent,
2610
+ OpcuaServerListComponent,
2611
+ OpcuaServerConfigComponent,
2612
+ OpcuaAddressSpaceComponent,
2613
+ OpcuaAddressSpaceTreeComponent,
2614
+ OpcuaAddressSpaceDetailComponent,
2615
+ OpcuaDeviceProtocolDescription,
2616
+ OpcuaDeviceProtocolDetailComponent,
2617
+ OpcuaDeviceProtocolDataReportingComponent,
2618
+ OpcuaDeviceProtocolMapping,
2619
+ OpcuaDeviceProtocolObjectMappingStatus,
2620
+ OpcuaAutoApplySettingsComponent,
2621
+ OpcuaDeviceProtocolBrowsePathValidation
2493
2622
  ],
2494
2623
  providers: [
2495
2624
  OpcuaAgentGuard,