@c8y/ngx-components 1023.4.6 → 1023.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
- package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +34 -34
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +7 -7
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
- package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +39 -39
- package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B0Yspstg.mjs → c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs} +13 -13
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B0Yspstg.mjs.map → c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +114 -114
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
- package/fesm2022/c8y-ngx-components-branding-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
- package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs +68 -0
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BeFT75x1.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B8_RmTvv.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B8_RmTvv.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs +44 -0
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BUxC3Tmh.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Dcmrw2Wg.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Dcmrw2Wg.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +6 -6
- package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
- package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C30if8-Q.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C30if8-Q.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-FBfdlVT1.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs} +10 -10
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-FBfdlVT1.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DrVQS63v.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DrVQS63v.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +102 -102
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-BHmaZVgy.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs} +16 -16
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-BHmaZVgy.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
- package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +24 -24
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +7 -7
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +40 -40
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +33 -33
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
- package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-global-context.mjs +118 -118
- package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +28 -28
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +19 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
- package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +19 -19
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +29 -29
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
- package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +41 -41
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +62 -43
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-exports.mjs +8 -1
- package/fesm2022/c8y-ngx-components-widgets-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +27 -27
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +7 -7
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-widget-providers.mjs +5 -2
- package/fesm2022/c8y-ngx-components-widgets-widget-providers.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1329 -1325
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts +7 -0
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/upgrade/index.d.ts +1 -0
- package/upgrade/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/device-management-exports/index.d.ts +6 -0
- package/widgets/device-management-exports/index.d.ts.map +1 -1
- package/widgets/exports/index.d.ts +8 -1
- package/widgets/exports/index.d.ts.map +1 -1
- package/widgets/widget-providers/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BeFT75x1.mjs +0 -68
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-BUxC3Tmh.mjs +0 -44
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-device-profile.mjs","sources":["../../device-profile/device-profile-navigation.factory.ts","../../device-profile/device-profile.service.ts","../../device-profile/select-configuration-modal.component.ts","../../device-profile/select-configuration-modal.component.html","../../device-profile/device-profile.model.ts","../../device-profile/device-profile.component.ts","../../device-profile/device-profile.component.html","../../device-profile/add-device-profile.component.ts","../../device-profile/add-device-profile-component.html","../../device-profile/device-profile-list.component.ts","../../device-profile/device-profile-list.component.html","../../device-profile/device-profile.guard.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.html","../../device-profile/device-tab-profile/device-tab-profile-detail.component.ts","../../device-profile/device-tab-profile/device-tab-profile-detail.component.html","../../device-profile/device-tab-profile/device-tab-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile.component.html","../../device-profile/device-profile.module.ts","../../device-profile/c8y-ngx-components-device-profile.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\n\n@Injectable()\nexport class DeviceProfileNavigationFactory implements NavigatorNodeFactory {\n nodeItem: NavigatorNode;\n\n async get() {\n if (!this.nodeItem) {\n this.nodeItem = new NavigatorNode({\n label: gettext('Device profiles'),\n path: '/device-profiles',\n icon: 'c8y-device-profile',\n parent: gettext('Management')\n });\n }\n return this.nodeItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IOperation,\n IResultList,\n OperationService,\n OperationStatus,\n QueriesUtil\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService } from '@c8y/ngx-components';\nimport {\n get,\n isEmpty,\n isNil,\n keyBy,\n keys,\n mapValues,\n omitBy,\n pickBy,\n sortBy,\n toArray,\n uniqBy\n} from 'lodash-es';\nimport {\n ComparisonResult,\n DeviceProfile,\n DeviceProfileFirmware,\n DeviceProfileSoftware\n} from './device-profile.model';\n\n@Injectable()\nexport class DeviceProfileService {\n readonly dateFrom = new Date(0);\n readonly dateTo = new Date(Date.now() + 86400000); // 1 day in the future\n private queriesUtil: QueriesUtil;\n\n private NOT_INSTALLED_WARNING = gettext('Not installed on the device');\n private VERSION_MISSMATCH_WARNING = gettext('Version mismatch');\n private SAME_URL_WARNING = gettext(\n 'Installed configuration has the same URL but different name or type than the one in the profile'\n );\n\n constructor(\n private inventoryService: InventoryService,\n private operationService: OperationService,\n private alertService: AlertService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n createDeviceProfile(deviceProfile: Partial<DeviceProfile>) {\n if (get(deviceProfile, 'c8y_Filter.type') === '') {\n delete deviceProfile.c8y_Filter.type;\n }\n return this.inventoryService.create(deviceProfile as IManagedObject);\n }\n\n /**\n * Determines the available device profiles for a given device by considering device type\n * and the supported software types declared by the devices. Because of limitations in the\n * Inventory Query API the methods return profile that contain at least one of the supported\n * software types and omits profiles having only non-supported software types. Resulting device\n * profiles need to be further filtered on the client side to exclude the ones that contain\n * non-supported software types next to the supported ones.\n *\n * @param device A device MO\n * @param name Optional device profile name filter\n * @returns Candidate device profiles that contain at least on software with supported type.\n */\n getDeviceProfilesByDevice(\n device: IManagedObject,\n name: string = null\n ): Promise<IResultList<IManagedObject>> {\n const deviceTypeFilter = {\n __or: [\n { 'c8y_Filter.type': device.type },\n { 'c8y_Filter.type': '' },\n { __not: { __has: 'c8y_Filter.type' } }\n ]\n };\n\n let softwareTypeFilter = {};\n if (!isEmpty(device.c8y_SupportedSoftwareTypes)) {\n softwareTypeFilter = {\n __hasany: device.c8y_SupportedSoftwareTypes.map((type: string) => `softwareType!${type}`)\n };\n }\n let query = this.queriesUtil.addAndFilter(deviceTypeFilter, softwareTypeFilter);\n\n let profileNameFilter = {};\n if (!isEmpty(name)) {\n profileNameFilter = { name: `*${name}*` };\n }\n query = this.queriesUtil.addAndFilter(query, profileNameFilter);\n\n return this.getDeviceProfiles(query);\n }\n\n /**\n * @deprecated Use `getDeviceProfilesByDevice` instead as it also considers the supported software types.\n */\n getDeviceProfilesByDeviceType(deviceType: string): Promise<IResultList<IManagedObject>> {\n const deviceTypeFilter = {\n __or: [\n { 'c8y_Filter.type': deviceType },\n { 'c8y_Filter.type': '' },\n { __not: { __has: 'c8y_Filter.type' } }\n ]\n };\n return this.getDeviceProfiles(deviceTypeFilter);\n }\n\n getDeviceProfiles(andQuery?: any): Promise<IResultList<IManagedObject>> {\n let query: object = {\n type: 'c8y_Profile'\n };\n const filter: object = {\n pageSize: 100,\n withTotalPages: true\n };\n query = this.queriesUtil.addAndFilter(query, andQuery || {});\n return this.inventoryService.listQuery(query, filter);\n }\n\n async getProfileOperation(deviceId: string | number) {\n const filter: object = {\n deviceId,\n fragmentType: 'c8y_DeviceProfile',\n dateFrom: this.dateFrom.toISOString(),\n dateTo: this.dateTo.toISOString(),\n revert: true,\n pageSize: 1\n };\n\n const operation = (await this.operationService.list(filter)).data[0];\n return operation && operation.status !== OperationStatus.SUCCESSFUL ? operation : undefined;\n }\n\n async createProfileOperation(device: IManagedObject, deviceProfile: Partial<DeviceProfile>) {\n let operation;\n const operationCfg: IOperation = {\n deviceId: device.id,\n profileId: deviceProfile.id,\n profileName: deviceProfile.name,\n c8y_DeviceProfile: deviceProfile.c8y_DeviceProfile,\n description: `Assign device profile ${deviceProfile.name} to device ${device.name}`\n };\n try {\n const { data } = await this.operationService.create(operationCfg);\n operation = data;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n return operation;\n }\n\n getFirmwareItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceFirmware = device.c8y_Firmware;\n const profileFirmware = get(selectedProfile, 'c8y_DeviceProfile.firmware');\n const deviceItems = [];\n const profileItems = [];\n\n if (deviceFirmware) {\n deviceItems.push(deviceFirmware);\n }\n if (profileFirmware) {\n profileItems.push(profileFirmware);\n }\n return this.createProfileComparison(\n deviceItems,\n profileItems,\n 'name',\n 'version',\n null,\n this.getAlert('firmware')\n );\n }\n\n getSoftwareItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceSoftware = device.c8y_SoftwareList;\n const profileSoftware = get(selectedProfile, 'c8y_DeviceProfile.software');\n return this.createProfileComparison(\n deviceSoftware,\n profileSoftware,\n 'name',\n 'version',\n 'softwareType',\n this.getAlert('software')\n );\n }\n\n getConfigurationItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceConfiguration = [];\n Object.keys(device).forEach(key => {\n if (key.slice(0, 18) === 'c8y_Configuration_') {\n deviceConfiguration.push(device[key]);\n }\n });\n const profileConfiguration = get(selectedProfile, 'c8y_DeviceProfile.configuration');\n return this.createProfileComparison(\n deviceConfiguration,\n profileConfiguration,\n 'url',\n null,\n 'type',\n this.getAlert('configuration')\n );\n }\n\n /**\n * Aligns device profile managed object's `softwareType!*` fragments to the software items\n * included in the device profile. Removes obsolete software type fragments and adds new.\n *\n * @param profilePartial The device profile managed object which `softwareType!*` fragments will be adjusted.\n * @returns The adjusted device profile managed object.\n */\n alignSoftwareTypeFragments(\n profilePartial: Partial<DeviceProfile>,\n profile: DeviceProfile\n ): Partial<DeviceProfile> {\n if (!profilePartial?.c8y_DeviceProfile?.software || !profile) {\n return profilePartial;\n }\n\n const removedSoftwareTypes = mapValues(\n omitBy(\n profile,\n (_: unknown, key: PropertyKey) =>\n typeof key === 'string' && !key.startsWith('softwareType!')\n ),\n () => null\n );\n const softwareTypesToAdd: { [key: PropertyKey]: Record<PropertyKey, never> } = mapValues(\n keyBy(\n uniqBy(profilePartial.c8y_DeviceProfile.software, 'softwareType'),\n (profile: DeviceProfileSoftware) => `softwareType!${profile.softwareType}`\n ),\n () => ({})\n );\n\n const result = { ...profilePartial, ...removedSoftwareTypes, ...softwareTypesToAdd };\n return result;\n }\n\n getSoftwareTypes(profile: DeviceProfile): string[] {\n return keys(\n pickBy(\n profile,\n (_: unknown, key: PropertyKey) => typeof key === 'string' && key.startsWith('softwareType!')\n )\n ).map(softwareType => softwareType.substr('softwareType!'.length));\n }\n\n private getAlert(itemType: string): (comparisionResult: ComparisonResult) => string {\n const notInstalled = (comparisionResult: ComparisonResult) => {\n return !comparisionResult.device ? this.NOT_INSTALLED_WARNING : '';\n };\n\n switch (itemType) {\n case 'firmware':\n case 'software':\n return (comparisionResult: ComparisonResult) => {\n return comparisionResult.device &&\n comparisionResult.profile &&\n comparisionResult.device.itemDetails !== comparisionResult.profile.itemDetails\n ? this.VERSION_MISSMATCH_WARNING\n : notInstalled(comparisionResult);\n };\n case 'configuration':\n return (comparisionResult: ComparisonResult) => {\n return comparisionResult.device &&\n comparisionResult.profile &&\n (comparisionResult.device.itemName !== comparisionResult.profile.itemName ||\n comparisionResult.device.itemDetails !== comparisionResult.profile.itemDetails)\n ? this.SAME_URL_WARNING\n : notInstalled(comparisionResult);\n };\n default:\n return notInstalled;\n }\n }\n\n private createProfileComparison(\n deviceItems: any[] = [],\n profileItems: Array<DeviceProfileSoftware | DeviceProfileFirmware> = [],\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string,\n getAlert: (comparisionResult: ComparisonResult) => string\n ): ComparisonResult[] {\n const comparisonObj = this.createProfileComparisonFromDeviceItems(\n deviceItems,\n mergeByProperty,\n propertyNameWithDetails,\n propertyNameWithType\n );\n const extendedComparisonObj = this.extendProfileComparisonWithProfileItems(\n comparisonObj,\n profileItems,\n mergeByProperty,\n propertyNameWithDetails,\n propertyNameWithType,\n getAlert\n );\n return sortBy(toArray(extendedComparisonObj), 'name');\n }\n\n private createProfileComparisonFromDeviceItems(\n deviceItems: any[],\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string\n ): any {\n return deviceItems.reduce(\n (comapritionItem, deviceItem) =>\n Object.assign(comapritionItem, {\n [deviceItem[mergeByProperty]]: {\n device: omitBy(\n {\n itemName: deviceItem.name,\n itemDetails: deviceItem[propertyNameWithDetails],\n itemType: deviceItem[propertyNameWithType],\n itemUrl: deviceItem.url\n },\n isNil\n ),\n profile: undefined\n }\n }),\n {}\n );\n }\n\n private extendProfileComparisonWithProfileItems(\n comparisonObj: object,\n profileItems: Array<DeviceProfileSoftware | DeviceProfileFirmware>,\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string,\n getAlert: (comparisionResult: ComparisonResult) => string\n ) {\n profileItems.forEach(profileItem => {\n const comparisionResult: ComparisonResult = {\n profile: omitBy(\n {\n itemName: profileItem.name,\n itemDetails: profileItem[propertyNameWithDetails],\n itemType: profileItem[propertyNameWithType],\n itemUrl: profileItem.url\n },\n isNil\n ),\n device: comparisonObj[profileItem[mergeByProperty]]\n ? comparisonObj[profileItem[mergeByProperty]].device\n : undefined\n };\n comparisionResult.comparisonAlert = getAlert(comparisionResult);\n comparisonObj[profileItem[mergeByProperty]] = comparisionResult;\n });\n return comparisonObj;\n }\n}\n","import { Component, EventEmitter, forwardRef } from '@angular/core';\nimport { IManagedObject, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ISelectModalObject,\n ISelectModalOption,\n ModalLabels,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n SelectModalComponent,\n ProductExperienceDirective\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { Observable, Subject } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-select-configuration-modal',\n templateUrl: './select-configuration-modal.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => SelectConfigurationModalComponent)\n }\n ],\n imports: [SelectModalComponent, ProductExperienceDirective, AsyncPipe]\n})\nexport class SelectConfigurationModalComponent implements ProductExperienceEventSource {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n title: string = gettext('Select configuration');\n load: Subject<void> = new Subject();\n configurations: Observable<any[]> = this.load.pipe(\n switchMap(() => this.getItems()),\n map(({ data }) => this.aggregate(data))\n );\n resultEmitter: EventEmitter<any[]> = new EventEmitter<any>();\n selected: any[];\n deviceTypeQuery: any = {};\n searchQuery: any = {};\n labels: ModalLabels = { ok: gettext('Save') };\n productExperienceEvent: ProductExperienceEvent;\n private queriesUtil: QueriesUtil;\n\n constructor(private repositoryService: RepositoryService) {\n this.queriesUtil = new QueriesUtil();\n }\n\n search(searchTerm) {\n if (!searchTerm) {\n this.searchQuery = {};\n } else {\n this.searchQuery = this.queriesUtil.addOrFilter(\n { name: `*${searchTerm}*` },\n { configurationType: `*${searchTerm}*` }\n );\n }\n this.load.next();\n }\n\n result(selectedItems) {\n this.resultEmitter.emit(selectedItems);\n }\n\n getItems() {\n return this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, {\n query: this.queriesUtil.addOrFilter(this.deviceTypeQuery, this.searchQuery),\n params: { pageSize: 100 }\n });\n }\n\n aggregate(mos: IManagedObject[]): ISelectModalObject[] {\n const selectedItems: any[] = this.selected;\n return mos.reduce((acc, curr) => {\n curr.configurationType = curr.configurationType || curr.name;\n const selected =\n selectedItems && selectedItems.filter(val => val.url === curr.url).length > 0;\n const selectModalOption: ISelectModalOption = {\n body: [{ value: curr.name }],\n obj: curr,\n selected\n };\n let selectModalObject: ISelectModalObject = acc.find(\n val => val.body[0].value === curr.configurationType\n ) as ISelectModalObject;\n if (selectModalObject) {\n selectModalObject.options.push(selectModalOption);\n } else {\n selectModalObject = {\n groupId: curr.id,\n body: [{ value: curr.configurationType }],\n options: [selectModalOption]\n };\n acc.push(selectModalObject);\n }\n return acc;\n }, []);\n }\n}\n","<c8y-select-modal\n [icon]=\"'gears'\"\n [title]=\"title\"\n [items]=\"configurations | async\"\n [mode]=\"'multi'\"\n (result)=\"result($event)\"\n (search)=\"search($event)\"\n [disableSelected]=\"true\"\n [labels]=\"labels\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.SHARED.COMPONENTS.SELECT_CONFIGURATION_MODAL }\"\n></c8y-select-modal>\n","import { IManagedObject } from '@c8y/client';\n\nexport interface DeviceProfile extends Partial<IManagedObject> {\n name?: string;\n type: string;\n c8y_Filter: {\n type?: string;\n };\n c8y_DeviceProfile: {\n firmware?: DeviceProfileFirmware;\n software?: DeviceProfileSoftware[];\n configuration?: DeviceProfileConfiguration[];\n };\n}\n\nexport interface DeviceProfileFirmware {\n name: string;\n version: string;\n url: string;\n isPatch: boolean;\n patchDependency?: string;\n}\n\nexport interface DeviceProfileSoftware {\n name: string;\n softwareType: string;\n version: string;\n url: string;\n action: string;\n}\n\nexport interface DeviceProfileConfiguration {\n url: string;\n name: string;\n type: string;\n}\n\nexport interface ComparisonResult {\n profile: {\n itemName: string;\n itemDetails?: string;\n itemType?: string;\n itemUrl: string;\n };\n device: {\n itemName: string;\n itemDetails?: string;\n itemType?: string;\n itemUrl: string;\n };\n comparisonAlert?: string;\n}\n\nexport enum DeviceProfileOperation {\n APPLY_PROFILE = 'c8y_DeviceProfile'\n}\n\nexport const PRODUCT_EXPERIENCE_DEVICE_PROFILE = {\n EVENTS: {\n REPOSITORY: 'deviceProfileRepository',\n DEVICE_TAB: 'deviceProfileTab'\n },\n COMPONENTS: {\n DEVICE_PROFILE_LIST: 'device-profile-list',\n ADD_DEVICE_PROFILE: 'add-device-profile',\n DEVICE_PROFILE: 'device-profile',\n DEVICE_TAB_PROFILE: 'device-tab-profile'\n },\n ACTIONS: {\n CANCEL: 'cancel',\n CREATE: 'create',\n REMOVE: 'remove',\n ADD: 'add',\n SAVE: 'save',\n ASSIGN_DEVICE_PROFILE: 'assignDeviceProfile'\n },\n RESULTS: {\n ADD_SOFTWARE: 'addSoftware'\n },\n FRAGMENTS: {\n FIRMWARE: 'firmware',\n SOFTWARE: 'software',\n CONFGIURATION: 'configuration'\n }\n} as const;\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalSelectionMode,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n IconDirective,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n FilterCriteria,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { assign, concat, has, isEmpty, isEqual, uniqWith } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap, take } from 'rxjs/operators';\nimport {\n DeviceProfile,\n DeviceProfileConfiguration,\n DeviceProfileFirmware,\n DeviceProfileSoftware,\n PRODUCT_EXPERIENCE_DEVICE_PROFILE\n} from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { SelectConfigurationModalComponent } from './select-configuration-modal.component';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-device-profile',\n templateUrl: './device-profile.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceProfileComponent)\n }\n ],\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n FormsModule,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n PopoverDirective,\n IconDirective,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n TooltipDirective,\n EmptyStateComponent,\n NgFor,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileComponent implements OnInit, ProductExperienceEventSource {\n DEVICE_TYPE_POPOVER = gettext(\n 'The device profile will be available for assignments on devices of the specified type. Otherwise, it will be available for all device types.'\n );\n DEVICE_TYPE_DISABLED_POPOVER = gettext(\n 'Device type cannot be changed on profiles with already defined firmware, software or configuration since they may not be applicable to devices of the new device type.'\n );\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n deviceProfile: DeviceProfile;\n profileName: string;\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.REPOSITORY,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_PROFILE\n }\n };\n private queriesUtil: QueriesUtil;\n\n constructor(\n private route: ActivatedRoute,\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private bsModal: BsModalService,\n private repositoryService: RepositoryService,\n private deviceProfileService: DeviceProfileService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n async ngOnInit() {\n const profileId = this.route.snapshot.paramMap.get('id');\n this.deviceProfile = (await this.getDeviceProfile(profileId)) as DeviceProfile;\n if (this.deviceProfile) {\n this.profileName = this.deviceProfile.name;\n if (!this.deviceProfile.c8y_DeviceProfile.software) {\n this.deviceProfile.c8y_DeviceProfile.software = [];\n }\n if (!this.deviceProfile.c8y_DeviceProfile.configuration) {\n this.deviceProfile.c8y_DeviceProfile.configuration = [];\n }\n }\n }\n\n addFirmware() {\n const initialState: Partial<RepositorySelectModalComponent> & {\n repositoryEntriesWithVersionsFn$: (modal) => Observable<IManagedObject[]>;\n } = {\n deviceTypeQuery: this.getDeviceTypeQuery(RepositoryType.FIRMWARE),\n repositoryType: RepositoryType.FIRMWARE,\n repositoryEntriesWithVersionsFn$: modalDialog =>\n this.getRepositoryEntriesWithVersions$(\n modalDialog.content.searchTerm,\n RepositoryType.FIRMWARE\n ),\n icon: 'c8y-firmware',\n title: gettext('Select firmware'),\n mode: ModalSelectionMode.SINGLE,\n productExperienceEvent: this.productExperienceEvent\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialState.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialState.repositoryEntriesWithVersionsFn$(modal);\n }\n\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(firmwareList => {\n const [firmware] = firmwareList;\n if (!firmware) {\n return;\n }\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, {\n firmware: {\n name: firmware.name,\n version: firmware.version,\n url: firmware.url,\n isPatch: firmware.isPatch,\n patchDependency: firmware.patchDependency\n } as DeviceProfileFirmware\n });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n getRepositoryEntriesWithVersions$(\n searchTerm$: BehaviorSubject<FilterCriteria>,\n repoType: RepositoryType\n ) {\n return searchTerm$.pipe(\n distinctUntilChanged(),\n switchMap(searchTerm =>\n this.repositoryService.listRepositoryEntries(repoType, {\n query: this.getDeviceTypeQuery(repoType),\n partialName: searchTerm.name,\n params: { pageSize: 100 },\n skipLegacy: true\n })\n ),\n map(({ data }) => data),\n map(mos => this.getAndAssignRepositoryBinaries(mos)),\n shareReplay(1)\n );\n }\n\n getAndAssignRepositoryBinaries(mos: IManagedObject[]) {\n mos.forEach(mo => {\n mo.versions = this.repositoryService.listBaseVersions(mo);\n });\n return mos;\n }\n\n addConfiguration() {\n const modal = this.bsModal.show(SelectConfigurationModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState: {\n productExperienceEvent: this.productExperienceEvent\n }\n });\n modal.content.deviceTypeQuery = this.getDeviceTypeQuery(RepositoryType.CONFIGURATION);\n modal.content.selected = this.deviceProfile.c8y_DeviceProfile.configuration;\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(selectedConfigurations => {\n const selectedMapped: DeviceProfileConfiguration[] = selectedConfigurations.map(\n selectedItem => {\n return assign(\n {\n url: selectedItem.url,\n name: selectedItem.name\n },\n selectedItem.configurationType ? { type: selectedItem.configurationType } : {}\n );\n }\n );\n const merged: DeviceProfileConfiguration = concat(\n selectedMapped,\n this.deviceProfile.c8y_DeviceProfile.configuration || []\n );\n const configuration: DeviceProfileConfiguration = uniqWith(merged, (arrVal, othVal) => {\n return arrVal.type && othVal.type && arrVal.type === othVal.type;\n });\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, { configuration });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n addSoftware() {\n const initialState: Partial<RepositorySelectModalComponent> & {\n repositoryEntriesWithVersionsFn$: (modal) => Observable<IManagedObject[]>;\n } = {\n deviceTypeQuery: this.getDeviceTypeQuery(RepositoryType.SOFTWARE),\n repositoryType: RepositoryType.SOFTWARE,\n repositoryEntriesWithVersionsFn$: modalDialog =>\n this.getRepositoryEntriesWithVersions$(\n modalDialog.content.searchTerm,\n RepositoryType.SOFTWARE\n ),\n selected: this.deviceProfile.c8y_DeviceProfile.software,\n icon: 'c8y-tools',\n title: gettext('Select software'),\n mode: ModalSelectionMode.MULTI,\n productExperienceEvent: this.productExperienceEvent\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialState.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialState.repositoryEntriesWithVersionsFn$(modal);\n }\n\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(selectedSoftware => {\n const selectedMapped: DeviceProfileSoftware[] = selectedSoftware.map(selectedItem => {\n return {\n name: selectedItem.name,\n version: selectedItem.version,\n url: selectedItem.url,\n softwareType: selectedItem.softwareType,\n action: 'install'\n };\n });\n const merged: DeviceProfileSoftware = concat(\n selectedMapped,\n this.deviceProfile.c8y_DeviceProfile.software || []\n );\n const software: DeviceProfileSoftware = uniqWith(merged, (arrVal, othVal) => {\n return arrVal.name && othVal.name && arrVal.name === othVal.name;\n });\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, { software });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n get isDeviceProfileEmpty() {\n const isSoftware =\n this.deviceProfile.c8y_DeviceProfile.software &&\n this.deviceProfile.c8y_DeviceProfile.software.length > 0;\n const isFirmware = Boolean(this.deviceProfile.c8y_DeviceProfile.firmware);\n const isConfiguration =\n this.deviceProfile.c8y_DeviceProfile.configuration &&\n this.deviceProfile.c8y_DeviceProfile.configuration.length > 0;\n return isSoftware || isFirmware || isConfiguration;\n }\n\n removeItem(removedItem, category) {\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile\n };\n const filtered = deviceProfilePartial.c8y_DeviceProfile[category].filter(\n item => !isEqual(removedItem, item)\n );\n deviceProfilePartial.c8y_DeviceProfile[category] = filtered;\n this.updateDeviceProfile(deviceProfilePartial);\n }\n\n removeFirmware() {\n delete this.deviceProfile.c8y_DeviceProfile.firmware;\n this.updateDeviceProfile({ c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile });\n }\n\n async updateDeviceProfile(partialDeviceProfile) {\n if (partialDeviceProfile.c8y_Filter && partialDeviceProfile.c8y_Filter.type === '') {\n delete partialDeviceProfile.c8y_Filter.type;\n }\n Object.assign(partialDeviceProfile, { id: this.deviceProfile.id });\n try {\n const profileWithSoftwareTypeFragments = this.deviceProfileService.alignSoftwareTypeFragments(\n partialDeviceProfile,\n this.deviceProfile\n );\n const { data } = await this.inventoryService.update(profileWithSoftwareTypeFragments);\n this.deviceProfile = data as DeviceProfile;\n this.profileName = this.deviceProfile.name;\n this.alertService.success(gettext('Device profile changed.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private async getDeviceProfile(profileId) {\n try {\n const { data } = await this.inventoryService.detail(profileId);\n return data;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private getDeviceTypeQuery(repositoryType) {\n if (\n has(this.deviceProfile, 'c8y_Filter.type') &&\n !isEmpty(this.deviceProfile.c8y_Filter.type)\n ) {\n if (repositoryType === RepositoryType.CONFIGURATION) {\n return this.queriesUtil.addOrFilter(\n { deviceType: this.deviceProfile.c8y_Filter.type },\n { __not: { __has: `deviceType` } }\n );\n } else {\n return this.queriesUtil.addOrFilter(\n { 'c8y_Filter.type': this.deviceProfile.c8y_Filter.type },\n {\n __or: [{ 'c8y_Filter.type': '' }, { __not: { __has: `c8y_Filter.type` } }]\n }\n );\n }\n }\n return {};\n }\n}\n","<c8y-title>{{ profileName }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-profile'\"\n [label]=\"'Device profiles' | translate\"\n [path]=\"'device-profiles'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-device-profile\"\n label=\"{{ profileName }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"row\"\n *ngIf=\"deviceProfile\"\n>\n <div class=\"col-lg-12 col-lg-max\">\n <div\n class=\"card card--fullpage\"\n *ngIf=\"deviceProfile\"\n >\n <div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24 overflow-visible\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-profile\"></i>\n <p>\n <small class=\"label label-info\">{{ 'Device profile' | translate }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <form #editNameForm=\"ngForm\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n translate\n >\n Name\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"device-profile--add-device-profile-name\"\n size=\"{{ deviceProfile.name?.length || 1 }}\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--save\"\n (click)=\"\n updateDeviceProfile({ name: deviceProfile.name });\n editNameForm.form.markAsPristine()\n \"\n [disabled]=\"editNameForm.form.invalid\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n <div class=\"col-md-4\">\n <form #editTypeForm=\"ngForm\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n (DEVICE_TYPE_POPOVER | translate) +\n (isDeviceProfileEmpty\n ? ' ' + (DEVICE_TYPE_DISABLED_POPOVER | translate)\n : '')\n \"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"type\"\n type=\"text\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"device-profile--device-type\"\n size=\"{{ deviceProfile.c8y_Filter.type?.length || 14 }}\"\n [disabled]=\"isDeviceProfileEmpty\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"\n updateDeviceProfile({\n c8y_Filter: { type: deviceProfile.c8y_Filter.type }\n });\n editTypeForm.form.markAsPristine()\n \"\n [disabled]=\"isDeviceProfileEmpty\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator-top-bottom bg-content sticky-top\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'c8y-firmware'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Firmware\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <c8y-list-group>\n <c8y-li>\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ deviceProfile.c8y_DeviceProfile.firmware.name }}\n </span>\n </div>\n <div class=\"col-4\"></div>\n <div class=\"col-3 d-flex a-i-center\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.version }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n Version\n </span>\n {{ deviceProfile.c8y_DeviceProfile.firmware.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`firmware`' | translate }}\"\n type=\"button\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`firmware`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`firmware`' | translate\"\n tooltip=\"{{ 'Remove`firmware`' | translate }}\"\n placement=\"right\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <c8y-ui-empty-state\n class=\"p-t-16 d-block\"\n icon=\"c8y-firmware\"\n [title]=\"'No firmware defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add firmware' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-firmware-button\"\n (click)=\"addFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add firmware' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom sticky-top bg-component\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'c8y-tools'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Software\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length > 0\"\n >\n <c8y-list-group>\n <c8y-li *ngFor=\"let software of deviceProfile.c8y_DeviceProfile.software\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ software.name }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Type\n </span>\n <span\n class=\"label label-info m-l-4\"\n *ngIf=\"!!software.softwareType\"\n >\n {{ software.softwareType }}\n </span>\n </span>\n </div>\n <div class=\"col-3 d-flex a-i-center\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.version }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Version\n </span>\n {{ software.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`software`' | translate }}\"\n type=\"button\"\n ((click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`software`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`software`' | translate\"\n tooltip=\"{{ 'Remove`software`' | translate }}\"\n placement=\"right\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i\n c8yIcon=\"minus-circle\"\n data-cy=\"device-profile--Remove-icon\"\n ></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"c8y-tools\"\n [title]=\"'No software defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <button\n class=\"btn btn-default m-b-0\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-software-button\"\n (click)=\"addSoftware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'gears'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Configuration\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length > 0\"\n >\n <c8y-list-group>\n <c8y-li *ngFor=\"let configuration of deviceProfile.c8y_DeviceProfile.configuration\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'gears'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ configuration.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ configuration.name }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Type\n </span>\n <span class=\"label label-info\">{{ configuration.type }}</span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`configuration`' | translate }}\"\n type=\"button\"\n (click)=\"removeItem(configuration, 'configuration')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`configuration`' | translate }}\n </button>\n </div>\n <div class=\"col-3 d-flex a-i-center\"></div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`configuration`' | translate\"\n tooltip=\"{{ 'Remove`configuration`' | translate }}\"\n placement=\"top\"\n type=\"button\"\n (click)=\"removeItem(configuration, 'configuration')\"\n [delay]=\"500\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i\n c8yIcon=\"minus-circle\"\n data-cy=\"device-profile--Remove-icon\"\n ></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"gears\"\n [title]=\"'No configuration defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <div class=\"p-t-8\">\n <button\n class=\"btn btn-default m-b-0\"\n title=\"{{ 'Add configuration' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-configuration-button\"\n (click)=\"addConfiguration()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, forwardRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ProductExperienceEvent,\n ProductExperienceEventSource,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n IconDirective,\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DeviceProfile, PRODUCT_EXPERIENCE_DEVICE_PROFILE } from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-add-device-profile',\n templateUrl: './add-device-profile-component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => AddDeviceProfileComponent)\n }\n ],\n imports: [\n IconDirective,\n C8yTranslateDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n PopoverDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n ]\n})\nexport class AddDeviceProfileComponent implements ProductExperienceEventSource {\n DEVICE_TYPE_POPOVER = gettext(\n 'The device profile will be available for assignments on devices of the specified type. Otherwise, it will be available for all device types.'\n );\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n deviceProfile: Partial<DeviceProfile> = {\n name: '',\n type: 'c8y_Profile',\n c8y_Filter: {},\n c8y_DeviceProfile: {}\n };\n result: Promise<any> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n productExperienceEvent: ProductExperienceEvent;\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n private deviceProfileService: DeviceProfileService\n ) {}\n\n async create() {\n const mo = (await this.deviceProfileService.createDeviceProfile(this.deviceProfile)).data;\n this._save(mo.id);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-device-profile'\"></i>\n <div\n class=\"modal-title\"\n id=\"addDeviceProfileModalTitle\"\n translate\n >\n Add device profile\n </div>\n </div>\n\n <form\n #createDeviceProfile=\"ngForm\"\n (ngSubmit)=\"createDeviceProfile.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addDeviceProfileModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"name\"\n translate\n >\n Name\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"add-device-profile--device-profile-name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label>\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ DEVICE_TYPE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"deviceType\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"add-device-profile--device-type\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CANCEL }\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n type=\"submit\"\n [disabled]=\"createDeviceProfile.form.invalid\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CREATE }\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </form>\n</div>\n","import { Component, EventEmitter, forwardRef, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n ModalService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n ColumnDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceTypeGridColumn,\n RepositoryItemNameGridColumn,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AddDeviceProfileComponent } from './add-device-profile.component';\nimport { PRODUCT_EXPERIENCE_DEVICE_PROFILE } from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { NgIf, NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-device-profile-list',\n templateUrl: './device-profile-list.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceProfileListComponent)\n }\n ],\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n NgIf,\n NgFor,\n ColumnDirective,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileListComponent implements OnInit {\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n refresh$: EventEmitter<void> = new EventEmitter();\n isDataPresent$: Observable<boolean> = from(\n this.repositoryService.listRepositoryEntries(RepositoryType.PROFILE, { skipLegacy: true })\n ).pipe(map(({ data }) => data.length > 0));\n\n columns: Column[] = [\n new RepositoryItemNameGridColumn({\n filterLabel: gettext('Filter device profile by name'),\n placeholder: gettext('ubuntu core')\n }),\n new DeviceTypeGridColumn({ filterLabel: gettext('Filter device profile by device type') })\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.REPOSITORY,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_PROFILE_LIST\n }\n };\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No device profiles to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Add a new device profile by clicking below.');\n\n constructor(\n private repositoryService: RepositoryService,\n private gridService: DataGridService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private deviceProfileService: DeviceProfileService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit(): void {\n this.actionControls.push({\n type: BuiltInActionType.Edit,\n callback: this.editDeviceProfile.bind(this)\n });\n this.actionControls.push({\n type: 'duplicate',\n icon: 'copy',\n text: gettext('Duplicate'),\n callback: this.duplicateDeviceProfile.bind(this)\n });\n this.actionControls.push({\n type: BuiltInActionType.Delete,\n callback: this.deleteDeviceProfile.bind(this)\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.repositoryService.listRepositoryEntries(RepositoryType.PROFILE, {\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n skipDefaultOrder: true,\n params: {\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n }\n });\n\n const filtererdSizeRequest: Promise<number> = this.repositoryService\n .listRepositoryEntries(RepositoryType.PROFILE, {\n skipDefaultOrder: true,\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n params: { pageSize: 1 }\n })\n .then(response => response?.paging?.totalPages);\n\n this.sizeRequest = this.repositoryService\n .listRepositoryEntries(RepositoryType.PROFILE, {\n skipDefaultOrder: true,\n params: { pageSize: 1 }\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n editDeviceProfile(deviceProfile: Partial<IManagedObject>) {\n this.router.navigate([deviceProfile.id], { relativeTo: this.activatedRoute });\n }\n\n async createDeviceProfile() {\n const modal = this.bsModalService.show(AddDeviceProfileComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'addDeviceProfileModalDescription',\n ariaLabelledBy: 'addDeviceProfileModalTitle',\n ignoreBackdropClick: true,\n keyboard: false,\n initialState: {\n productExperienceEvent: {\n ...this.productExperienceEvent,\n data: {\n ...this.productExperienceEvent.data,\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.ADD_DEVICE_PROFILE\n }\n }\n }\n }).content as AddDeviceProfileComponent;\n try {\n const profileId = await modal.result;\n modal.close();\n this.router.navigateByUrl(`/device-profiles/${profileId}`);\n } catch (ex) {\n // do nothing\n }\n }\n\n async duplicateDeviceProfile(deviceProfile) {\n const copy = cloneDeep(deviceProfile);\n copy.id = null;\n copy.name = 'Duplicate of ' + deviceProfile.name;\n const mo = (await this.deviceProfileService.createDeviceProfile(copy)).data;\n this.router.navigateByUrl(`/device-profiles/${mo.id}`);\n }\n\n async deleteDeviceProfile(deviceProfile) {\n const deviceProfileName = deviceProfile.name;\n const title = gettext('Delete device profile');\n const confirmationText = this.translateService.instant(\n gettext('You are about to delete a device profile \"{{ deviceProfileName }}\".'),\n { deviceProfileName }\n );\n const finalQuestion = this.translateService.instant(gettext('Do you want to proceed?'));\n try {\n await this.modalService.confirm(\n title,\n `${confirmationText} ${finalQuestion}`,\n Status.DANGER,\n {\n ok: gettext('Delete')\n },\n {},\n this.productExperienceEvent\n );\n await this.delete(deviceProfile.id);\n this.refresh$.next();\n } catch (ex) {\n // do nothing\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n private async delete(profileId) {\n try {\n await this.repositoryService.delete(profileId);\n this.alertService.success(gettext('Device profile deleted.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n}\n","<c8y-title>{{ 'Device profiles' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-device-profile\"\n label=\"{{ 'Device profiles' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add device profile' | translate }}\"\n data-cy=\"device-profile-list--Add-device-profile\"\n (click)=\"createDeviceProfile()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add device profile' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-device-profiles\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Device profiles' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add device profile' | translate }}\"\n type=\"button\"\n (click)=\"createDeviceProfile()\"\n >\n {{ 'Add device profile' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { DeviceProfileOperation } from './device-profile.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceProfileGuard {\n canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n return this.hasSupportedOperation(contextData, DeviceProfileOperation.APPLY_PROFILE);\n }\n\n private hasSupportedOperation(mo: IManagedObject, operation: DeviceProfileOperation) {\n const supported = mo.c8y_SupportedOperations || [];\n if (!supported) {\n return false;\n }\n return !!supported.find(supportedOperation => supportedOperation === operation);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ComparisonResult } from '../device-profile.model';\nimport { NgFor, NgIf, NgTemplateOutlet, NgClass } from '@angular/common';\nimport {\n IconDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-device-profile-item-list',\n templateUrl: './device-profile-item-list.component.html',\n imports: [\n NgFor,\n NgIf,\n IconDirective,\n NgTemplateOutlet,\n NgClass,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileItemListComponent {\n @Input() icon: string;\n @Input() comparisonResults: ComparisonResult[];\n @Input() showProfileItems: boolean;\n @Input() showTextLabel: boolean;\n}\n","<div\n class=\"d-contents\"\n *ngFor=\"let comparisonResult of comparisonResults\"\n>\n <div\n class=\"p-l-16 p-r-16\"\n *ngIf=\"showProfileItems\"\n >\n <div class=\"c8y-list__item fit-h\">\n <div\n class=\"c8y-list__item__block\"\n *ngIf=\"comparisonResult.profile\"\n >\n <div class=\"c8y-list__item__icon\">\n <i [c8yIcon]=\"icon\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <ng-container\n *ngTemplateOutlet=\"comparisonResultInfo; context: comparisonResult.profile\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 bg-level-1\">\n <div\n class=\"c8y-list__item bg-level-1\"\n [ngClass]=\"{\n 'has-warning': !!comparisonResult.comparisonAlert\n }\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i [c8yIcon]=\"icon\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <ng-container\n *ngTemplateOutlet=\"\n comparisonResultInfo;\n context: comparisonResult.device ? comparisonResult.device : comparisonResult.profile\n \"\n ></ng-container>\n <c8y-messages\n class=\"m-0\"\n style=\"margin-bottom: calc(var(--margin-base, 8px) * -1)\"\n *ngIf=\"comparisonResult.comparisonAlert\"\n >\n <c8y-message>\n {{ comparisonResult.comparisonAlert | translate }}\n </c8y-message>\n </c8y-messages>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"p-l-16 p-r-16 bg-level-0 hidden-xs hidden-sm\"\n *ngIf=\"!showProfileItems\"\n ></div>\n</div>\n\n<ng-template\n #comparisonResultInfo\n let-name=\"itemName\"\n let-details=\"itemDetails\"\n let-type=\"itemType\"\n>\n <div class=\"content-flex-40\">\n <div class=\"col-5\">\n <span class=\"text-truncate\">\n <span class=\"text-label-small m-r-4\">Name</span>\n <span title=\"{{ name }}\">\n {{ name }}\n </span>\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n *ngIf=\"!!type\"\n >\n <span class=\"text-label-small m-r-4\">Type</span>\n <span title=\"{{ type }}\">\n <span class=\"label label-info m-l-4\">\n {{ type }}\n </span>\n </span>\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n *ngIf=\"showTextLabel && details; else showInfoLabel\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n Version\n </span>\n <span title=\"{{ details }}\">{{ details }}</span>\n </span>\n <ng-template #showInfoLabel>\n <span class=\"label label-info\">{{ details }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport { ComparisonResult } from '../device-profile.model';\nimport { NgIf } from '@angular/common';\nimport { IconDirective, C8yTranslateDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { DeviceProfileItemListComponent } from './device-profile-item-list.component';\n\n@Component({\n selector: 'c8y-device-tab-profile-detail',\n templateUrl: './device-tab-profile-detail.component.html',\n imports: [\n NgIf,\n IconDirective,\n C8yTranslateDirective,\n DeviceProfileItemListComponent,\n C8yTranslatePipe\n ]\n})\nexport class DeviceTabProfileDetailComponent {\n @Input() sectionTitle: string;\n @Input() sectionIcon: string;\n @Input() emptyStateText = '';\n @Input() emptyStateDetails = '';\n @Input() isProfileSelected: boolean;\n @Input() isEmpty: boolean;\n @Input() items: ComparisonResult[];\n @Input() showTextLabel = true;\n}\n","<div class=\"card--grid grid__col--6-6--md\">\n <div class=\"bg-level-0 card-block sticky-top\">\n <h5 class=\"legend form-block\">{{ sectionTitle | translate }}</h5>\n </div>\n <div class=\"bg-level-1 card-block sticky-top hidden-xs hidden-sm\">\n <h5 class=\"legend form-block\">{{ sectionTitle | translate }}</h5>\n </div>\n <div class=\"bg-level-0 p-l-16 p-r-16\">\n <hr class=\"m-0\" />\n </div>\n <div class=\"bg-level-1 p-l-16 p-r-16\">\n <hr class=\"m-0\" />\n </div>\n <div class=\"d-contents\" *ngIf=\"!isProfileSelected || isEmpty\">\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-empty-state text-left\">\n <h1 [c8yIcon]=\"sectionIcon\" class=\"c8y-icon-duocolor\"></h1>\n <p>\n <span>{{ emptyStateText | translate }}</span\n ><br />\n <small *ngIf=\"isProfileSelected; else noItems\">\n {{ emptyStateDetails | translate }}\n </small>\n <ng-template #noItems>\n <small translate>No device profile selected</small>\n </ng-template>\n </p>\n </div>\n </div>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"items.length === 0\"></div>\n <c8y-device-profile-item-list\n *ngIf=\"items.length > 0\"\n [icon]=\"sectionIcon\"\n [comparisonResults]=\"items\"\n [showProfileItems]=\"isProfileSelected && !isEmpty\"\n [showTextLabel]=\"showTextLabel\"\n class=\"d-contents\"\n ></c8y-device-profile-item-list>\n <div class=\"bg-level-0 p-t-24\" *ngIf=\"isProfileSelected && !isEmpty\"></div>\n <div class=\"bg-level-1 p-t-24\" *ngIf=\"isProfileSelected && !isEmpty\"></div>\n</div>\n","import { Component, DestroyRef, forwardRef, inject, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, IOperation, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n ManagedObjectRealtimeService,\n OperationRealtimeService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n ActionBarItemComponent,\n IconDirective,\n RealtimeButtonComponent,\n C8yTranslateDirective,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { has, pickBy } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { filter, map, switchMap, tap } from 'rxjs/operators';\nimport {\n ComparisonResult,\n DeviceProfile,\n PRODUCT_EXPERIENCE_DEVICE_PROFILE\n} from '../device-profile.model';\nimport { DeviceProfileService } from '../device-profile.service';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\nimport { DeviceTabProfileDetailComponent } from './device-tab-profile-detail.component';\n\n@Component({\n selector: 'c8y-device-tab-profile',\n templateUrl: './device-tab-profile.component.html',\n providers: [\n ManagedObjectRealtimeService,\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceTabProfileComponent)\n }\n ],\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n RealtimeButtonComponent,\n C8yTranslateDirective,\n FormsModule,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n ProductExperienceDirective,\n OperationDetailsComponent,\n DeviceTabProfileDetailComponent,\n C8yTranslatePipe\n ]\n})\nexport class DeviceTabProfileComponent implements OnInit, ProductExperienceEventSource {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n device: IManagedObject;\n deviceProfiles$: Observable<IResultList<IManagedObject>>;\n selectedProfile: Partial<DeviceProfile>;\n operation: IOperation;\n firmwareItems: ComparisonResult[] = [];\n softwareItems: ComparisonResult[] = [];\n configurationItems: ComparisonResult[] = [];\n\n filterPipe: ForOfFilterPipe;\n pattern$ = new BehaviorSubject<string>('');\n reload$ = new BehaviorSubject<boolean>(true);\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.DEVICE_TAB,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_TAB_PROFILE\n }\n };\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public deviceRealtime: ManagedObjectRealtimeService,\n private deviceProfileService: DeviceProfileService,\n private route: ActivatedRoute,\n private operationRealtime: OperationRealtimeService,\n private alertService: AlertService\n ) {\n this.device = this.route.snapshot.parent.data.contextData;\n }\n\n async ngOnInit() {\n this.getDeviceProfilesAndUpdateProfileItems();\n this.subscribeToManagedObjects();\n const supportedSoftwareTypes = new Set(this.device.c8y_SupportedSoftwareTypes);\n const isSubset = (profileTypes: string[]) => {\n return profileTypes.every(type => supportedSoftwareTypes.has(type));\n };\n this.filterPipe = pipe(\n map(data => {\n if (supportedSoftwareTypes.size) {\n return data.filter(mo =>\n isSubset(this.deviceProfileService.getSoftwareTypes(mo as unknown as DeviceProfile))\n );\n } else {\n return data;\n }\n })\n );\n }\n\n async getDeviceProfilesAndUpdateProfileItems() {\n this.deviceProfiles$ = combineLatest([this.reload$.pipe(filter(Boolean)), this.pattern$]).pipe(\n switchMap(([_, name]) =>\n this.deviceProfileService.getDeviceProfilesByDevice(this.device, name)\n ),\n tap(async profiles => {\n if (this.device.c8y_Profile) {\n const profileId = this.device.c8y_Profile.profileId;\n this.selectedProfile = profiles.data.find(mo => mo.id === profileId);\n }\n this.updateProfileItems(this.device, this.selectedProfile);\n this.operation = await this.deviceProfileService.getProfileOperation(this.device.id);\n this.subscribeToOperations();\n }),\n tap(() => this.reload$.next(false)),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n selectProfile(mo: DeviceProfile) {\n this.selectedProfile = this.toProfileForDevice(mo);\n this.updateProfileItems(this.device, this.selectedProfile);\n }\n\n async createOperation() {\n this.operation = await this.deviceProfileService.createProfileOperation(\n this.device,\n this.selectedProfile\n );\n }\n\n updateProfileItems(device, profile) {\n this.firmwareItems = this.deviceProfileService.getFirmwareItems(device, profile);\n this.softwareItems = this.deviceProfileService.getSoftwareItems(device, profile);\n this.configurationItems = this.deviceProfileService.getConfigurationItems(device, profile);\n }\n\n private subscribeToManagedObjects() {\n this.deviceRealtime\n .onUpdate$(this.device.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((managedObject: IManagedObject) => {\n this.updateProfileItems(managedObject, this.selectedProfile);\n });\n this.deviceRealtime\n .onDelete$(this.device.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alertService.danger(\n gettext(\n 'This device has just been deleted. You will be redirected to \"All devices\" page now.'\n )\n );\n window.location.href = '#/device';\n });\n }\n\n private subscribeToOperations() {\n this.operationRealtime\n .onAll$(this.device.id)\n .pipe(\n map(({ data }) => data as IOperation),\n filter(operation => operation.c8y_DeviceProfile),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(operation => {\n this.operation = operation;\n });\n }\n\n private toProfileForDevice(profile: DeviceProfile): DeviceProfile {\n if (\n Array.from(profile?.c8y_DeviceProfile?.software || []).length === 0 ||\n has(this.device, 'c8y_SupportedSoftwareTypes')\n ) {\n return profile;\n } else {\n return {\n ...profile,\n c8y_DeviceProfile: {\n ...profile.c8y_DeviceProfile,\n software: profile.c8y_DeviceProfile.software.map(sw =>\n pickBy(sw, (_, key) => key !== 'softwareType')\n )\n }\n };\n }\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload$.next(true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reload$.value }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"deviceRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid--fullpage card--grid--fullpage card--grid grid__row--2-10--md\">\n <div class=\"card--grid grid__col--6-6--md\">\n <!-- AVAILABLE PROFILES -->\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Device profile\n </div>\n </div>\n <div class=\"p-16\">\n <form #deviceProfileForm=\"ngForm\">\n <div class=\"input-group\">\n <c8y-typeahead\n class=\"flex-grow\"\n placeholder=\"{{ 'Select device profile' | translate }}\"\n name=\"selectProfile\"\n data-cy=\"device-tab-profile--select-device-profile\"\n [(ngModel)]=\"selectedProfile\"\n (onSearch)=\"pattern$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *c8yFor=\"let profile of deviceProfiles$; pipe: filterPipe\"\n (click)=\"selectProfile(profile); pattern$.next('')\"\n >\n <c8y-highlight\n [text]=\"profile.name || '--'\"\n [pattern]=\"pattern$.value\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Assign device profile' | translate }}\"\n type=\"button\"\n (click)=\"createOperation()\"\n data-cy=\"device-tab-profile--Assign-device-profile-button\"\n [disabled]=\"!selectedProfile?.id\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.ASSIGN_DEVICE_PROFILE }\"\n >\n <span>{{ 'Assign device profile' | translate }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- INSTALL PROFILE OPERATION -->\n <div class=\"bg-level-1\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Currently installed\n </div>\n </div>\n <div class=\"card-block\">\n <c8y-operation-details\n [operation]=\"operation\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n ></c8y-operation-details>\n </div>\n </div>\n </div>\n <div class=\"card--grid__inner-scroll d-col no-align-items\">\n <div class=\"d-contents\">\n <!-- FIRMWARE -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'c8y-firmware'\"\n [sectionTitle]=\"'Firmware' | translate\"\n [emptyStateText]=\"'No firmware to display.' | translate\"\n [emptyStateDetails]=\"'No firmware assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"firmwareItems\"\n [isEmpty]=\"!selectedProfile?.c8y_DeviceProfile?.firmware?.name\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- SOFTWARE -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'c8y-tools'\"\n [sectionTitle]=\"'Software' | translate\"\n [emptyStateText]=\"'No software to display.' | translate\"\n [emptyStateDetails]=\"'No software assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"softwareItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.software ||\n selectedProfile?.c8y_DeviceProfile?.software?.length === 0\n \"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- CONFIGURATION -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'gears'\"\n [sectionTitle]=\"'Configuration' | translate\"\n [emptyStateText]=\"'No configuration to display' | translate\"\n [emptyStateDetails]=\"'No configuration assigned' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"configurationItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.configuration ||\n selectedProfile?.c8y_DeviceProfile?.configuration?.length === 0\n \"\n ></c8y-device-tab-profile-detail>\n </div>\n <!-- fill in the remanining vertical space when empty -->\n <div class=\"card--grid grid__col--6-6--md flex-grow\">\n <div class=\"bg-level-0\"></div>\n <div class=\"bg-level-1\"></div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { Route, RouterModule } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CommonModule,\n CoreModule,\n hookNavigator,\n hookRoute,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProfileComponent } from './device-profile.component';\nimport { DeviceProfileListComponent } from './device-profile-list.component';\nimport { DeviceProfileNavigationFactory } from './device-profile-navigation.factory';\nimport { DeviceProfileService } from './device-profile.service';\nimport { AddDeviceProfileComponent } from './add-device-profile.component';\nimport { DeviceProfileGuard } from './device-profile.guard';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { SelectConfigurationModalComponent } from './select-configuration-modal.component';\nimport { DeviceTabProfileComponent } from './device-tab-profile/device-tab-profile.component';\nimport { DeviceTabProfileDetailComponent } from './device-tab-profile/device-tab-profile-detail.component';\nimport { DeviceProfileItemListComponent } from './device-tab-profile/device-profile-item-list.component';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\n\nconst deviceProfilesRoutes: Route[] = [\n {\n path: 'device-profiles/:id',\n component: DeviceProfileComponent\n },\n {\n path: 'device-profiles',\n component: DeviceProfileListComponent\n }\n];\n\nconst deviceTabProfileRoutes: any[] = [\n {\n context: ViewContext.Device,\n path: 'device-profile',\n component: DeviceTabProfileComponent,\n label: gettext('Device profile'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProfileGuard]\n }\n];\n\n@NgModule({\n exports: [],\n imports: [\n CoreModule,\n CommonModule,\n SharedRepositoryModule,\n RouterModule.forChild(deviceProfilesRoutes),\n BsDropdownModule.forRoot(),\n TooltipModule,\n ReactiveFormsModule,\n ButtonsModule,\n PopoverModule,\n OperationDetailsModule,\n DeviceProfileComponent,\n DeviceProfileListComponent,\n AddDeviceProfileComponent,\n SelectConfigurationModalComponent,\n DeviceTabProfileComponent,\n DeviceTabProfileDetailComponent,\n DeviceProfileItemListComponent\n ],\n providers: [\n hookNavigator(DeviceProfileNavigationFactory),\n hookRoute(deviceTabProfileRoutes),\n DeviceProfileService,\n DeviceProfileGuard\n ]\n})\nexport class DeviceProfileModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i5","i6.DeviceProfileService","i2.DeviceProfileService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAKa,8BAA8B,CAAA;AAGzC,IAAA,MAAM,GAAG,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC;AAChC,gBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,MAAM,EAAE,OAAO,CAAC,YAAY;AAC7B,aAAA,CAAC;QACJ;QACA,OAAO,IAAI,CAAC,QAAQ;IACtB;8GAbW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA9B,8BAA8B,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C;;;MC6BY,oBAAoB,CAAA;AAW/B,IAAA,WAAA,CACU,gBAAkC,EAClC,gBAAkC,EAClC,YAA0B,EAAA;QAF1B,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;AAbb,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;AAG1C,QAAA,IAAA,CAAA,qBAAqB,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAC9D,QAAA,IAAA,CAAA,yBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,OAAO,CAChC,iGAAiG,CAClG;AAOC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE;IACtC;AAEA,IAAA,mBAAmB,CAAC,aAAqC,EAAA;QACvD,IAAI,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,KAAK,EAAE,EAAE;AAChD,YAAA,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI;QACtC;QACA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAA+B,CAAC;IACtE;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,yBAAyB,CACvB,MAAsB,EACtB,IAAA,GAAe,IAAI,EAAA;AAEnB,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE;gBAClC,EAAE,iBAAiB,EAAE,EAAE,EAAE;AACzB,gBAAA,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;AACtC;SACF;QAED,IAAI,kBAAkB,GAAG,EAAE;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC,EAAE;AAC/C,YAAA,kBAAkB,GAAG;AACnB,gBAAA,QAAQ,EAAE,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAY,KAAK,CAAA,aAAA,EAAgB,IAAI,EAAE;aACzF;QACH;AACA,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;QAE/E,IAAI,iBAAiB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAClB,iBAAiB,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,CAAA,CAAA,CAAG,EAAE;QAC3C;QACA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAE/D,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACtC;AAEA;;AAEG;AACH,IAAA,6BAA6B,CAAC,UAAkB,EAAA;AAC9C,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,IAAI,EAAE;gBACJ,EAAE,iBAAiB,EAAE,UAAU,EAAE;gBACjC,EAAE,iBAAiB,EAAE,EAAE,EAAE;AACzB,gBAAA,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;AACtC;SACF;AACD,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IACjD;AAEA,IAAA,iBAAiB,CAAC,QAAc,EAAA;AAC9B,QAAA,IAAI,KAAK,GAAW;AAClB,YAAA,IAAI,EAAE;SACP;AACD,QAAA,MAAM,MAAM,GAAW;AACrB,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,cAAc,EAAE;SACjB;AACD,QAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACvD;IAEA,MAAM,mBAAmB,CAAC,QAAyB,EAAA;AACjD,QAAA,MAAM,MAAM,GAAW;YACrB,QAAQ;AACR,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACrC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACjC,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE;SACX;AAED,QAAA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,QAAA,OAAO,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS;IAC7F;AAEA,IAAA,MAAM,sBAAsB,CAAC,MAAsB,EAAE,aAAqC,EAAA;AACxF,QAAA,IAAI,SAAS;AACb,QAAA,MAAM,YAAY,GAAe;YAC/B,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,SAAS,EAAE,aAAa,CAAC,EAAE;YAC3B,WAAW,EAAE,aAAa,CAAC,IAAI;YAC/B,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;YAClD,WAAW,EAAE,yBAAyB,aAAa,CAAC,IAAI,CAAA,WAAA,EAAc,MAAM,CAAC,IAAI,CAAA;SAClF;AACD,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC;YACjE,SAAS,GAAG,IAAI;QAClB;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;AACA,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,CACd,MAAsB,EACtB,eAAuC,EAAA;AAEvC,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY;QAC1C,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,EAAE,4BAA4B,CAAC;QAC1E,MAAM,WAAW,GAAG,EAAE;QACtB,MAAM,YAAY,GAAG,EAAE;QAEvB,IAAI,cAAc,EAAE;AAClB,YAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;QAClC;QACA,IAAI,eAAe,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;QACpC;QACA,OAAO,IAAI,CAAC,uBAAuB,CACjC,WAAW,EACX,YAAY,EACZ,MAAM,EACN,SAAS,EACT,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC1B;IACH;IAEA,gBAAgB,CACd,MAAsB,EACtB,eAAuC,EAAA;AAEvC,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB;QAC9C,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,EAAE,4BAA4B,CAAC;QAC1E,OAAO,IAAI,CAAC,uBAAuB,CACjC,cAAc,EACd,eAAe,EACf,MAAM,EACN,SAAS,EACT,cAAc,EACd,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC1B;IACH;IAEA,qBAAqB,CACnB,MAAsB,EACtB,eAAuC,EAAA;QAEvC,MAAM,mBAAmB,GAAG,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAChC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,oBAAoB,EAAE;gBAC7C,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvC;AACF,QAAA,CAAC,CAAC;QACF,MAAM,oBAAoB,GAAG,GAAG,CAAC,eAAe,EAAE,iCAAiC,CAAC;QACpF,OAAO,IAAI,CAAC,uBAAuB,CACjC,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,EACL,IAAI,EACJ,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC/B;IACH;AAEA;;;;;;AAMG;IACH,0BAA0B,CACxB,cAAsC,EACtC,OAAsB,EAAA;QAEtB,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,QAAQ,IAAI,CAAC,OAAO,EAAE;AAC5D,YAAA,OAAO,cAAc;QACvB;AAEA,QAAA,MAAM,oBAAoB,GAAG,SAAS,CACpC,MAAM,CACJ,OAAO,EACP,CAAC,CAAU,EAAE,GAAgB,KAC3B,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAC9D,EACD,MAAM,IAAI,CACX;AACD,QAAA,MAAM,kBAAkB,GAAuD,SAAS,CACtF,KAAK,CACH,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,EACjE,CAAC,OAA8B,KAAK,CAAA,aAAA,EAAgB,OAAO,CAAC,YAAY,CAAA,CAAE,CAC3E,EACD,OAAO,EAAE,CAAC,CACX;AAED,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,oBAAoB,EAAE,GAAG,kBAAkB,EAAE;AACpF,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,gBAAgB,CAAC,OAAsB,EAAA;AACrC,QAAA,OAAO,IAAI,CACT,MAAM,CACJ,OAAO,EACP,CAAC,CAAU,EAAE,GAAgB,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAC7F,CACF,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACpE;AAEQ,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAC/B,QAAA,MAAM,YAAY,GAAG,CAAC,iBAAmC,KAAI;AAC3D,YAAA,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,GAAG,EAAE;AACpE,QAAA,CAAC;QAED,QAAQ,QAAQ;AACd,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,UAAU;gBACb,OAAO,CAAC,iBAAmC,KAAI;oBAC7C,OAAO,iBAAiB,CAAC,MAAM;AAC7B,wBAAA,iBAAiB,CAAC,OAAO;wBACzB,iBAAiB,CAAC,MAAM,CAAC,WAAW,KAAK,iBAAiB,CAAC,OAAO,CAAC;0BACjE,IAAI,CAAC;AACP,0BAAE,YAAY,CAAC,iBAAiB,CAAC;AACrC,gBAAA,CAAC;AACH,YAAA,KAAK,eAAe;gBAClB,OAAO,CAAC,iBAAmC,KAAI;oBAC7C,OAAO,iBAAiB,CAAC,MAAM;AAC7B,wBAAA,iBAAiB,CAAC,OAAO;yBACxB,iBAAiB,CAAC,MAAM,CAAC,QAAQ,KAAK,iBAAiB,CAAC,OAAO,CAAC,QAAQ;4BACvE,iBAAiB,CAAC,MAAM,CAAC,WAAW,KAAK,iBAAiB,CAAC,OAAO,CAAC,WAAW;0BAC9E,IAAI,CAAC;AACP,0BAAE,YAAY,CAAC,iBAAiB,CAAC;AACrC,gBAAA,CAAC;AACH,YAAA;AACE,gBAAA,OAAO,YAAY;;IAEzB;AAEQ,IAAA,uBAAuB,CAC7B,WAAA,GAAqB,EAAE,EACvB,YAAA,GAAqE,EAAE,EACvE,eAAuB,EACvB,uBAA+B,EAC/B,oBAA4B,EAC5B,QAAyD,EAAA;AAEzD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,sCAAsC,CAC/D,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,oBAAoB,CACrB;AACD,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,uCAAuC,CACxE,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,QAAQ,CACT;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACvD;AAEQ,IAAA,sCAAsC,CAC5C,WAAkB,EAClB,eAAuB,EACvB,uBAA+B,EAC/B,oBAA4B,EAAA;AAE5B,QAAA,OAAO,WAAW,CAAC,MAAM,CACvB,CAAC,eAAe,EAAE,UAAU,KAC1B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;AAC7B,YAAA,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG;gBAC7B,MAAM,EAAE,MAAM,CACZ;oBACE,QAAQ,EAAE,UAAU,CAAC,IAAI;AACzB,oBAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,oBAAA,QAAQ,EAAE,UAAU,CAAC,oBAAoB,CAAC;oBAC1C,OAAO,EAAE,UAAU,CAAC;AACrB,iBAAA,EACD,KAAK,CACN;AACD,gBAAA,OAAO,EAAE;AACV;SACF,CAAC,EACJ,EAAE,CACH;IACH;IAEQ,uCAAuC,CAC7C,aAAqB,EACrB,YAAkE,EAClE,eAAuB,EACvB,uBAA+B,EAC/B,oBAA4B,EAC5B,QAAyD,EAAA;AAEzD,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,YAAA,MAAM,iBAAiB,GAAqB;gBAC1C,OAAO,EAAE,MAAM,CACb;oBACE,QAAQ,EAAE,WAAW,CAAC,IAAI;AAC1B,oBAAA,WAAW,EAAE,WAAW,CAAC,uBAAuB,CAAC;AACjD,oBAAA,QAAQ,EAAE,WAAW,CAAC,oBAAoB,CAAC;oBAC3C,OAAO,EAAE,WAAW,CAAC;AACtB,iBAAA,EACD,KAAK,CACN;AACD,gBAAA,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC;sBAC9C,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9C,sBAAE;aACL;AACD,YAAA,iBAAiB,CAAC,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YAC/D,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,GAAG,iBAAiB;AACjE,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,aAAa;IACtB;8GAlVW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCCY,iCAAiC,CAAA;AAgB5C,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAfrC,IAAA,CAAA,kBAAkB,GAAG,oCAAoC;AACzD,QAAA,IAAA,CAAA,KAAK,GAAW,OAAO,CAAC,sBAAsB,CAAC;AAC/C,QAAA,IAAA,CAAA,IAAI,GAAkB,IAAI,OAAO,EAAE;AACnC,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,CAChD,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CACxC;AACD,QAAA,IAAA,CAAA,aAAa,GAAwB,IAAI,YAAY,EAAO;QAE5D,IAAA,CAAA,eAAe,GAAQ,EAAE;QACzB,IAAA,CAAA,WAAW,GAAQ,EAAE;QACrB,IAAA,CAAA,MAAM,GAAgB,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAK3C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE;IACtC;AAEA,IAAA,MAAM,CAAC,UAAU,EAAA;QACf,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACvB;aAAO;YACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC7C,EAAE,IAAI,EAAE,IAAI,UAAU,CAAA,CAAA,CAAG,EAAE,EAC3B,EAAE,iBAAiB,EAAE,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,EAAE,CACzC;QACH;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAClB;AAEA,IAAA,MAAM,CAAC,aAAa,EAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;IACxC;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,cAAc,CAAC,aAAa,EAAE;AAChF,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3E,YAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG;AACxB,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,GAAqB,EAAA;AAC7B,QAAA,MAAM,aAAa,GAAU,IAAI,CAAC,QAAQ;QAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;YAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI;YAC5D,MAAM,QAAQ,GACZ,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC/E,YAAA,MAAM,iBAAiB,GAAuB;gBAC5C,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,gBAAA,GAAG,EAAE,IAAI;gBACT;aACD;YACD,IAAI,iBAAiB,GAAuB,GAAG,CAAC,IAAI,CAClD,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAC9B;YACvB,IAAI,iBAAiB,EAAE;AACrB,gBAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACnD;iBAAO;AACL,gBAAA,iBAAiB,GAAG;oBAClB,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzC,OAAO,EAAE,CAAC,iBAAiB;iBAC5B;AACD,gBAAA,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC7B;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;IACR;8GArEW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,SAAA,EARjC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC;AAChE;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BH,qaAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDiBY,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,yIAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAE1D,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,SAAA,EAE/B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,uCAAuC;AAChE;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,oBAAoB,EAAE,0BAA0B,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,qaAAA,EAAA;;;IEsB5D;AAAZ,CAAA,UAAY,sBAAsB,EAAA;AAChC,IAAA,sBAAA,CAAA,eAAA,CAAA,GAAA,mBAAmC;AACrC,CAAC,EAFW,sBAAsB,KAAtB,sBAAsB,GAAA,EAAA,CAAA,CAAA;AAI3B,MAAM,iCAAiC,GAAG;AAC/C,IAAA,MAAM,EAAE;AACN,QAAA,UAAU,EAAE,yBAAyB;AACrC,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,mBAAmB,EAAE,qBAAqB;AAC1C,QAAA,kBAAkB,EAAE,oBAAoB;AACxC,QAAA,cAAc,EAAE,gBAAgB;AAChC,QAAA,kBAAkB,EAAE;AACrB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,qBAAqB,EAAE;AACxB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,YAAY,EAAE;AACf,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,aAAa,EAAE;AAChB;;;MCHU,sBAAsB,CAAA;IAkBjC,WAAA,CACU,KAAqB,EACrB,YAA0B,EAC1B,gBAAkC,EAClC,OAAuB,EACvB,iBAAoC,EACpC,oBAA0C,EAAA;QAL1C,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;AAvB9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,OAAO,CAC3B,8IAA8I,CAC/I;AACD,QAAA,IAAA,CAAA,4BAA4B,GAAG,OAAO,CACpC,wKAAwK,CACzK;QACD,IAAA,CAAA,kBAAkB,GAAG,iCAAiC;AAGtD,QAAA,IAAA,CAAA,sBAAsB,GAA2B;AAC/C,YAAA,SAAS,EAAE,iCAAiC,CAAC,MAAM,CAAC,UAAU;AAC9D,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,iCAAiC,CAAC,UAAU,CAAC;AACzD;SACF;AAWC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE;IACtC;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,aAAa,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAkB;AAC9E,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI;YAC1C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,EAAE;gBAClD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,GAAG,EAAE;YACpD;YACA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBACvD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,GAAG,EAAE;YACzD;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,YAAY,GAEd;YACF,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC;YACjE,cAAc,EAAE,cAAc,CAAC,QAAQ;AACvC,YAAA,gCAAgC,EAAE,WAAW,IAC3C,IAAI,CAAC,iCAAiC,CACpC,WAAW,CAAC,OAAO,CAAC,UAAU,EAC9B,cAAc,CAAC,QAAQ,CACxB;AACH,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;YACjC,IAAI,EAAE,kBAAkB,CAAC,MAAM;YAC/B,sBAAsB,EAAE,IAAI,CAAC;SAC9B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE;AAC9D,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE,aAAa;YAC7B;AACD,SAAA,CAAC;AAEF,QAAA,IAAI,YAAY,CAAC,gCAAgC,EAAE;YACjD,KAAK,CAAC,OAAO,CAAC,8BAA8B;AAC1C,gBAAA,YAAY,CAAC,gCAAgC,CAAC,KAAK,CAAC;QACxD;AAEA,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AACzB,QAAA,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAG;AACjE,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY;YAC/B,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AACA,YAAA,MAAM,oBAAoB,GAA4B;AACpD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAI;aAC5D;AACD,YAAA,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;AAC7C,gBAAA,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,eAAe,EAAE,QAAQ,CAAC;AACF;AAC3B,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;AAChD,QAAA,CAAC,CAAC;IACJ;IAEA,iCAAiC,CAC/B,WAA4C,EAC5C,QAAwB,EAAA;QAExB,OAAO,WAAW,CAAC,IAAI,CACrB,oBAAoB,EAAE,EACtB,SAAS,CAAC,UAAU,IAClB,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,EAAE;AACrD,YAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACxC,WAAW,EAAE,UAAU,CAAC,IAAI;AAC5B,YAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;AACzB,YAAA,UAAU,EAAE;AACb,SAAA,CAAC,CACH,EACD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EACvB,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,EACpD,WAAW,CAAC,CAAC,CAAC,CACf;IACH;AAEA,IAAA,8BAA8B,CAAC,GAAqB,EAAA;AAClD,QAAA,GAAG,CAAC,OAAO,CAAC,EAAE,IAAG;YACf,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC3D,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;IAEA,gBAAgB,GAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACjE,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,YAAY,EAAE;gBACZ,sBAAsB,EAAE,IAAI,CAAC;AAC9B;AACF,SAAA,CAAC;AACF,QAAA,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,aAAa,CAAC;AACrF,QAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa;AAC3E,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AACzB,QAAA,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,IAAG;YAC3E,MAAM,cAAc,GAAiC,sBAAsB,CAAC,GAAG,CAC7E,YAAY,IAAG;AACb,gBAAA,OAAO,MAAM,CACX;oBACE,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,IAAI,EAAE,YAAY,CAAC;AACpB,iBAAA,EACD,YAAY,CAAC,iBAAiB,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAC/E;AACH,YAAA,CAAC,CACF;AACD,YAAA,MAAM,MAAM,GAA+B,MAAM,CAC/C,cAAc,EACd,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,IAAI,EAAE,CACzD;YACD,MAAM,aAAa,GAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAI;AACpF,gBAAA,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;AAClE,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,oBAAoB,GAA4B;AACpD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAI;aAC5D;YACD,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC;AACjE,YAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;AAChD,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,YAAY,GAEd;YACF,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC;YACjE,cAAc,EAAE,cAAc,CAAC,QAAQ;AACvC,YAAA,gCAAgC,EAAE,WAAW,IAC3C,IAAI,CAAC,iCAAiC,CACpC,WAAW,CAAC,OAAO,CAAC,UAAU,EAC9B,cAAc,CAAC,QAAQ,CACxB;AACH,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ;AACvD,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;YACjC,IAAI,EAAE,kBAAkB,CAAC,KAAK;YAC9B,sBAAsB,EAAE,IAAI,CAAC;SAC9B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE;AAC9D,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,cAAc,EAAE,aAAa;YAC7B;AACD,SAAA,CAAC;AAEF,QAAA,IAAI,YAAY,CAAC,gCAAgC,EAAE;YACjD,KAAK,CAAC,OAAO,CAAC,8BAA8B;AAC1C,gBAAA,YAAY,CAAC,gCAAgC,CAAC,KAAK,CAAC;QACxD;AAEA,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AACzB,QAAA,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,IAAG;YACrE,MAAM,cAAc,GAA4B,gBAAgB,CAAC,GAAG,CAAC,YAAY,IAAG;gBAClF,OAAO;oBACL,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,YAAY,EAAE,YAAY,CAAC,YAAY;AACvC,oBAAA,MAAM,EAAE;iBACT;AACH,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,MAAM,GAA0B,MAAM,CAC1C,cAAc,EACd,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,IAAI,EAAE,CACpD;YACD,MAAM,QAAQ,GAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAI;AAC1E,gBAAA,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;AAClE,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,oBAAoB,GAA4B;AACpD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAI;aAC5D;YACD,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;AAChD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACtB,MAAM,UAAU,GACd,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ;YAC7C,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC1D,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACzE,MAAM,eAAe,GACnB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa;YAClD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AAC/D,QAAA,OAAO,UAAU,IAAI,UAAU,IAAI,eAAe;IACpD;IAEA,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAA;AAC9B,QAAA,MAAM,oBAAoB,GAA4B;AACpD,YAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC;SACvC;QACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,MAAM,CACtE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CACpC;AACD,QAAA,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,QAAQ;AAC3D,QAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;IAChD;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ;AACpD,QAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;IACvF;IAEA,MAAM,mBAAmB,CAAC,oBAAoB,EAAA;AAC5C,QAAA,IAAI,oBAAoB,CAAC,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,EAAE;AAClF,YAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,IAAI;QAC7C;AACA,QAAA,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;AAClE,QAAA,IAAI;AACF,YAAA,MAAM,gCAAgC,GAAG,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAC3F,oBAAoB,EACpB,IAAI,CAAC,aAAa,CACnB;AACD,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gCAAgC,CAAC;AACrF,YAAA,IAAI,CAAC,aAAa,GAAG,IAAqB;YAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI;YAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC/D;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;IACF;IAEQ,MAAM,gBAAgB,CAAC,SAAS,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9D,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;IACF;AAEQ,IAAA,kBAAkB,CAAC,cAAc,EAAA;AACvC,QAAA,IACE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC;YAC1C,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,EAC5C;AACA,YAAA,IAAI,cAAc,KAAK,cAAc,CAAC,aAAa,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CACjC,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,EAClD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAA,UAAA,CAAY,EAAE,EAAE,CACnC;YACH;iBAAO;AACL,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CACjC,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,EACzD;AACE,oBAAA,IAAI,EAAE,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAA,eAAA,CAAiB,EAAE,EAAE;AAC1E,iBAAA,CACF;YACH;QACF;AACA,QAAA,OAAO,EAAE;IACX;8GAjSW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,SAAA,EA5BtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB;AACrD;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDH,68nBAghBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrdI,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,2DACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACJ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,uIAClB,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iCAAiC,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjC,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,gBAAgB,6SAChB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,8FACrB,gBAAgB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,KAAK,8GACL,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA/BlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,SAAA,EAEnB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B;AACrD;qBACF,EAAA,OAAA,EACQ;wBACP,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,IAAI;wBACJ,WAAW;wBACX,kBAAkB;wBAClB,qBAAqB;wBACrB,iCAAiC;wBACjC,0BAA0B;wBAC1B,gBAAgB;wBAChB,aAAa;wBACb,kBAAkB;wBAClB,iBAAiB;wBACjB,qBAAqB;wBACrB,qBAAqB;wBACrB,gBAAgB;wBAChB,mBAAmB;wBACnB,KAAK;wBACL;AACD,qBAAA,EAAA,QAAA,EAAA,68nBAAA,EAAA;;;MEvCU,yBAAyB,CAAA;IAmBpC,WAAA,CACU,KAAiB,EACjB,oBAA0C,EAAA;QAD1C,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;AApB9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,OAAO,CAC3B,8IAA8I,CAC/I;QACD,IAAA,CAAA,kBAAkB,GAAG,iCAAiC;AACtD,QAAA,IAAA,CAAA,aAAa,GAA2B;AACtC,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,iBAAiB,EAAE;SACpB;QACD,IAAA,CAAA,MAAM,GAAiB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrD,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACvB,QAAA,CAAC,CAAC;IAQC;AAEH,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI;AACzF,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;8GAhCW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EAjBzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB;AACxD;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BH,opFA4FA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/DI,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,qBAAqB,uEACrB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iCAAiC,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjC,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,0BAA0B,yIAC1B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBApBrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,SAAA,EAEvB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B;AACxD;qBACF,EAAA,OAAA,EACQ;wBACP,aAAa;wBACb,qBAAqB;wBACrB,WAAW;wBACX,kBAAkB;wBAClB,iCAAiC;wBACjC,gBAAgB;wBAChB,0BAA0B;wBAC1B;AACD,qBAAA,EAAA,QAAA,EAAA,opFAAA,EAAA;;;MEiCU,0BAA0B,CAAA;AAiCrC,IAAA,WAAA,CACU,iBAAoC,EACpC,WAA4B,EAC5B,YAA0B,EAC1B,cAA8B,EAC9B,gBAAkC,EAClC,YAA0B,EAC1B,MAAc,EACd,cAA8B,EAC9B,oBAA0C,EAAA;QAR1C,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QAxC9B,IAAA,CAAA,eAAe,GAAG,KAAK;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAuB,IAAI,YAAY,EAAE;AACjD,QAAA,IAAA,CAAA,cAAc,GAAwB,IAAI,CACxC,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC3F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAA,CAAA,OAAO,GAAa;AAClB,YAAA,IAAI,4BAA4B,CAAC;AAC/B,gBAAA,WAAW,EAAE,OAAO,CAAC,+BAA+B,CAAC;AACrD,gBAAA,WAAW,EAAE,OAAO,CAAC,aAAa;aACnC,CAAC;YACF,IAAI,oBAAoB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,sCAAsC,CAAC,EAAE;SAC1F;QACD,IAAA,CAAA,cAAc,GAAoB,EAAE;AAEpC,QAAA,IAAA,CAAA,UAAU,GAAG;AACX,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE;SACd;AACD,QAAA,IAAA,CAAA,sBAAsB,GAA2B;AAC/C,YAAA,SAAS,EAAE,iCAAiC,CAAC,MAAM,CAAC,UAAU;AAC9D,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,iCAAiC,CAAC,UAAU,CAAC;AACzD;SACF;AAED,QAAA,IAAA,CAAA,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,gCAAgC,CAAC;AACzD,QAAA,IAAA,CAAA,iBAAiB,GAAG,OAAO,CAAC,kDAAkD,CAAC;AAC/E,QAAA,IAAA,CAAA,cAAc,GAAG,OAAO,CAAC,6CAA6C,CAAC;QAarE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,iBAAiB,CAAC,IAAI;YAC5B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI;AAC3C,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI;AAChD,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,iBAAiB,CAAC,MAAM;YAC9B,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI;AAC7C,SAAA,CAAC;IACJ;IAEA,MAAM,oBAAoB,CACxB,kBAAsC,EAAA;QAEtC,MAAM,WAAW,GACf,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,cAAc,CAAC,OAAO,EAAE;YACnE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAC/D,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,QAAQ;AAChD,gBAAA,WAAW,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAC5C;AACF,SAAA,CAAC;AAEJ,QAAA,MAAM,oBAAoB,GAAoB,IAAI,CAAC;AAChD,aAAA,qBAAqB,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7C,YAAA,gBAAgB,EAAE,IAAI;YACtB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAC/D,YAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC;SACtB;aACA,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;AAEjD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACrB,aAAA,qBAAqB,CAAC,cAAc,CAAC,OAAO,EAAE;AAC7C,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC;SACtB;aACA,IAAI,CAAC,QAAQ,IAAG;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,OAAO,QAAQ,EAAE,MAAM,EAAE,UAAU;AACrC,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,WAAW;AACX,YAAA,IAAI,CAAC,WAAW;YAChB;AACD,SAAA,CAAC;QAEF,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY;AAE1C,QAAA,MAAM,oBAAoB,GAAyB;YACjD,GAAG;YACH,IAAI;YACJ,MAAM;YACN,YAAY;YACZ;SACD;AAED,QAAA,OAAO,oBAAoB;IAC7B;AAEA,IAAA,iBAAiB,CAAC,aAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/E;AAEA,IAAA,MAAM,mBAAmB,GAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE;AAChE,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,kCAAkC;AACnD,YAAA,cAAc,EAAE,4BAA4B;AAC5C,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE;AACZ,gBAAA,sBAAsB,EAAE;oBACtB,GAAG,IAAI,CAAC,sBAAsB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI;AACnC,wBAAA,SAAS,EAAE,iCAAiC,CAAC,UAAU,CAAC;AACzD;AACF;AACF;SACF,CAAC,CAAC,OAAoC;AACvC,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM;YACpC,KAAK,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,CAAC;QAC5D;QAAE,OAAO,EAAE,EAAE;;QAEb;IACF;IAEA,MAAM,sBAAsB,CAAC,aAAa,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;AACrC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;QACd,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,aAAa,CAAC,IAAI;AAChD,QAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI;QAC3E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,iBAAA,EAAoB,EAAE,CAAC,EAAE,CAAA,CAAE,CAAC;IACxD;IAEA,MAAM,mBAAmB,CAAC,aAAa,EAAA;AACrC,QAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI;AAC5C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC9C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACpD,OAAO,CAAC,qEAAqE,CAAC,EAC9E,EAAE,iBAAiB,EAAE,CACtB;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACvF,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC7B,KAAK,EACL,CAAA,EAAG,gBAAgB,IAAI,aAAa,CAAA,CAAE,EACtC,MAAM,CAAC,MAAM,EACb;AACE,gBAAA,EAAE,EAAE,OAAO,CAAC,QAAQ;AACrB,aAAA,EACD,EAAE,EACF,IAAI,CAAC,sBAAsB,CAC5B;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB;QAAE,OAAO,EAAE,EAAE;;QAEb;IACF;IAEA,WAAW,CAAC,MAAM,EAAE,MAAc,EAAA;QAChC,OAAO,MAAM,CAAC,IAAI;IACpB;IAEQ,MAAM,MAAM,CAAC,SAAS,EAAA;AAC5B,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC/D;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC;IACF;8GA7LW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAtB1B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B;AACzD;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDH,0iEA8DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPI,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,aAAa,yGACb,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAzBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,SAAA,EAExB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC;AACzD;qBACF,EAAA,OAAA,EACQ;wBACP,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,sBAAsB;wBACtB,aAAa;wBACb,aAAa;wBACb,iBAAiB;wBACjB,0BAA0B;wBAC1B,mBAAmB;wBACnB,IAAI;wBACJ,KAAK;wBACL,eAAe;wBACf;AACD,qBAAA,EAAA,QAAA,EAAA,0iEAAA,EAAA;;;ME9DU,kBAAkB,CAAA;AAC7B,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;QAC3E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;QACA,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,sBAAsB,CAAC,aAAa,CAAC;IACtF;IAEQ,qBAAqB,CAAC,EAAkB,EAAE,SAAiC,EAAA;AACjF,QAAA,MAAM,SAAS,GAAG,EAAE,CAAC,uBAAuB,IAAI,EAAE;QAClD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,KAAK,SAAS,CAAC;IACjF;8GAfW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCqBY,8BAA8B,CAAA;8GAA9B,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,gOC1B3C,09FA4GA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7FI,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,IAAI,6FACJ,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,oFACP,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,mEACrB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAf1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,OAAA,EAE/B;wBACP,KAAK;wBACL,IAAI;wBACJ,aAAa;wBACb,gBAAgB;wBAChB,OAAO;wBACP,iBAAiB;wBACjB,gBAAgB;wBAChB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,09FAAA,EAAA;8BAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,aAAa,EAAA,CAAA;sBAArB;;;MEbU,+BAA+B,CAAA;AAX5C,IAAA,WAAA,GAAA;QAcW,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,iBAAiB,GAAG,EAAE;QAItB,IAAA,CAAA,aAAa,GAAG,IAAI;AAC9B,IAAA;8GATY,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB5C,8mDA0CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhCI,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,8BAA8B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC9B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAX3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAEhC;wBACP,IAAI;wBACJ,aAAa;wBACb,qBAAqB;wBACrB,8BAA8B;wBAC9B;AACD,qBAAA,EAAA,QAAA,EAAA,8mDAAA,EAAA;8BAGQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,aAAa,EAAA,CAAA;sBAArB;;;MEwCU,yBAAyB,CAAA;IAqBpC,WAAA,CACS,cAA4C,EAC3C,oBAA0C,EAC1C,KAAqB,EACrB,iBAA2C,EAC3C,YAA0B,EAAA;QAJ3B,IAAA,CAAA,cAAc,GAAd,cAAc;QACb,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAzBtB,IAAA,CAAA,kBAAkB,GAAG,iCAAiC;QAKtD,IAAA,CAAA,aAAa,GAAuB,EAAE;QACtC,IAAA,CAAA,aAAa,GAAuB,EAAE;QACtC,IAAA,CAAA,kBAAkB,GAAuB,EAAE;AAG3C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,sBAAsB,GAA2B;AAC/C,YAAA,SAAS,EAAE,iCAAiC,CAAC,MAAM,CAAC,UAAU;AAC9D,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,iCAAiC,CAAC,UAAU,CAAC;AACzD;SACF;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AASrC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;IAC3D;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,sCAAsC,EAAE;QAC7C,IAAI,CAAC,yBAAyB,EAAE;QAChC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC;AAC9E,QAAA,MAAM,QAAQ,GAAG,CAAC,YAAsB,KAAI;AAC1C,YAAA,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrE,QAAA,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CACpB,GAAG,CAAC,IAAI,IAAG;AACT,YAAA,IAAI,sBAAsB,CAAC,IAAI,EAAE;gBAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,IACnB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAA8B,CAAC,CAAC,CACrF;YACH;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAC,CACH;IACH;AAEA,IAAA,MAAM,sCAAsC,GAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC5F,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAClB,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CACvE,EACD,GAAG,CAAC,OAAM,QAAQ,KAAG;AACnB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS;AACnD,gBAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;YACtE;YACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC;AAC1D,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpF,IAAI,CAAC,qBAAqB,EAAE;QAC9B,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACnC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;IACH;AAEA,IAAA,aAAa,CAAC,EAAiB,EAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC;IAC5D;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CACrE,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,CACrB;IACH;IAEA,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAA;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;AAChF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;AAChF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5F;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACxB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,aAA6B,KAAI;YAC3C,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;AAC9D,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACxB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,CAAC,MAAM,CACtB,OAAO,CACL,sFAAsF,CACvF,CACF;AACD,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU;AACnC,QAAA,CAAC,CAAC;IACN;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrB,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAkB,CAAC,EACrC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,iBAAiB,CAAC,EAChD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,SAAS,IAAG;AACrB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,kBAAkB,CAAC,OAAsB,EAAA;AAC/C,QAAA,IACE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC,EAC9C;AACA,YAAA,OAAO,OAAO;QAChB;aAAO;YACL,OAAO;AACL,gBAAA,GAAG,OAAO;AACV,gBAAA,iBAAiB,EAAE;oBACjB,GAAG,OAAO,CAAC,iBAAiB;AAC5B,oBAAA,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IACjD,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,cAAc,CAAC;AAEjD;aACF;QACH;IACF;8GA1IW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,SAAA,EAxBzB;YACT,4BAA4B;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB;AACxD;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CH,suKAkJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjGI,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,+BAA+B,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC/B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA3BrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,SAAA,EAEvB;wBACT,4BAA4B;AAC5B,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B;AACxD;qBACF,EAAA,OAAA,EACQ;wBACP,sBAAsB;wBACtB,aAAa;wBACb,OAAO;wBACP,uBAAuB;wBACvB,qBAAqB;wBACrB,WAAW;wBACX,kBAAkB;wBAClB,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;wBAClB,0BAA0B;wBAC1B,yBAAyB;wBACzB,+BAA+B;wBAC/B;AACD,qBAAA,EAAA,QAAA,EAAA,suKAAA,EAAA;;;AEnCH,MAAM,oBAAoB,GAAY;AACpC,IAAA;AACE,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,SAAS,EAAE;AACZ,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,SAAS,EAAE;AACZ;CACF;AAED,MAAM,sBAAsB,GAAU;AACpC,IAAA;QACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,QAAA,IAAI,EAAE,gBAAgB;AACtB,QAAA,SAAS,EAAE,yBAAyB;AACpC,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,QAAA,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,CAAC,kBAAkB;AACjC;CACF;MA8BY,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAzB5B,UAAU;YACV,YAAY;AACZ,YAAA,sBAAsB,0CAGtB,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,sBAAsB;YACtB,sBAAsB;YACtB,0BAA0B;YAC1B,yBAAyB;YACzB,iCAAiC;YACjC,yBAAyB;YACzB,+BAA+B;YAC/B,8BAA8B,CAAA,EAAA,CAAA,CAAA;AASrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,SAAA,EAPnB;YACT,aAAa,CAAC,8BAA8B,CAAC;YAC7C,SAAS,CAAC,sBAAsB,CAAC;YACjC,oBAAoB;YACpB;AACD,SAAA,EAAA,OAAA,EAAA,CAvBC,UAAU;YACV,YAAY;YACZ,sBAAsB;AACtB,YAAA,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC3C,gBAAgB,CAAC,OAAO,EAAE;YAC1B,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,sBAAsB;YACtB,sBAAsB;YACtB,0BAA0B;YAC1B,yBAAyB;YACzB,iCAAiC;YACjC,yBAAyB;YACzB,+BAA+B;YAC/B,8BAA8B,CAAA,EAAA,CAAA,CAAA;;2FASrB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5B/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,YAAY;wBACZ,sBAAsB;AACtB,wBAAA,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC;wBAC3C,gBAAgB,CAAC,OAAO,EAAE;wBAC1B,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,aAAa;wBACb,sBAAsB;wBACtB,sBAAsB;wBACtB,0BAA0B;wBAC1B,yBAAyB;wBACzB,iCAAiC;wBACjC,yBAAyB;wBACzB,+BAA+B;wBAC/B;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,aAAa,CAAC,8BAA8B,CAAC;wBAC7C,SAAS,CAAC,sBAAsB,CAAC;wBACjC,oBAAoB;wBACpB;AACD;AACF,iBAAA;;;AC7ED;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-device-profile.mjs","sources":["../../device-profile/device-profile-navigation.factory.ts","../../device-profile/device-profile.service.ts","../../device-profile/select-configuration-modal.component.ts","../../device-profile/select-configuration-modal.component.html","../../device-profile/device-profile.model.ts","../../device-profile/device-profile.component.ts","../../device-profile/device-profile.component.html","../../device-profile/add-device-profile.component.ts","../../device-profile/add-device-profile-component.html","../../device-profile/device-profile-list.component.ts","../../device-profile/device-profile-list.component.html","../../device-profile/device-profile.guard.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.ts","../../device-profile/device-tab-profile/device-profile-item-list.component.html","../../device-profile/device-tab-profile/device-tab-profile-detail.component.ts","../../device-profile/device-tab-profile/device-tab-profile-detail.component.html","../../device-profile/device-tab-profile/device-tab-profile.component.ts","../../device-profile/device-tab-profile/device-tab-profile.component.html","../../device-profile/device-profile.module.ts","../../device-profile/c8y-ngx-components-device-profile.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\n\n@Injectable()\nexport class DeviceProfileNavigationFactory implements NavigatorNodeFactory {\n nodeItem: NavigatorNode;\n\n async get() {\n if (!this.nodeItem) {\n this.nodeItem = new NavigatorNode({\n label: gettext('Device profiles'),\n path: '/device-profiles',\n icon: 'c8y-device-profile',\n parent: gettext('Management')\n });\n }\n return this.nodeItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IOperation,\n IResultList,\n OperationService,\n OperationStatus,\n QueriesUtil\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService } from '@c8y/ngx-components';\nimport {\n get,\n isEmpty,\n isNil,\n keyBy,\n keys,\n mapValues,\n omitBy,\n pickBy,\n sortBy,\n toArray,\n uniqBy\n} from 'lodash-es';\nimport {\n ComparisonResult,\n DeviceProfile,\n DeviceProfileFirmware,\n DeviceProfileSoftware\n} from './device-profile.model';\n\n@Injectable()\nexport class DeviceProfileService {\n readonly dateFrom = new Date(0);\n readonly dateTo = new Date(Date.now() + 86400000); // 1 day in the future\n private queriesUtil: QueriesUtil;\n\n private NOT_INSTALLED_WARNING = gettext('Not installed on the device');\n private VERSION_MISSMATCH_WARNING = gettext('Version mismatch');\n private SAME_URL_WARNING = gettext(\n 'Installed configuration has the same URL but different name or type than the one in the profile'\n );\n\n constructor(\n private inventoryService: InventoryService,\n private operationService: OperationService,\n private alertService: AlertService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n createDeviceProfile(deviceProfile: Partial<DeviceProfile>) {\n if (get(deviceProfile, 'c8y_Filter.type') === '') {\n delete deviceProfile.c8y_Filter.type;\n }\n return this.inventoryService.create(deviceProfile as IManagedObject);\n }\n\n /**\n * Determines the available device profiles for a given device by considering device type\n * and the supported software types declared by the devices. Because of limitations in the\n * Inventory Query API the methods return profile that contain at least one of the supported\n * software types and omits profiles having only non-supported software types. Resulting device\n * profiles need to be further filtered on the client side to exclude the ones that contain\n * non-supported software types next to the supported ones.\n *\n * @param device A device MO\n * @param name Optional device profile name filter\n * @returns Candidate device profiles that contain at least on software with supported type.\n */\n getDeviceProfilesByDevice(\n device: IManagedObject,\n name: string = null\n ): Promise<IResultList<IManagedObject>> {\n const deviceTypeFilter = {\n __or: [\n { 'c8y_Filter.type': device.type },\n { 'c8y_Filter.type': '' },\n { __not: { __has: 'c8y_Filter.type' } }\n ]\n };\n\n let softwareTypeFilter = {};\n if (!isEmpty(device.c8y_SupportedSoftwareTypes)) {\n softwareTypeFilter = {\n __hasany: device.c8y_SupportedSoftwareTypes.map((type: string) => `softwareType!${type}`)\n };\n }\n let query = this.queriesUtil.addAndFilter(deviceTypeFilter, softwareTypeFilter);\n\n let profileNameFilter = {};\n if (!isEmpty(name)) {\n profileNameFilter = { name: `*${name}*` };\n }\n query = this.queriesUtil.addAndFilter(query, profileNameFilter);\n\n return this.getDeviceProfiles(query);\n }\n\n /**\n * @deprecated Use `getDeviceProfilesByDevice` instead as it also considers the supported software types.\n */\n getDeviceProfilesByDeviceType(deviceType: string): Promise<IResultList<IManagedObject>> {\n const deviceTypeFilter = {\n __or: [\n { 'c8y_Filter.type': deviceType },\n { 'c8y_Filter.type': '' },\n { __not: { __has: 'c8y_Filter.type' } }\n ]\n };\n return this.getDeviceProfiles(deviceTypeFilter);\n }\n\n getDeviceProfiles(andQuery?: any): Promise<IResultList<IManagedObject>> {\n let query: object = {\n type: 'c8y_Profile'\n };\n const filter: object = {\n pageSize: 100,\n withTotalPages: true\n };\n query = this.queriesUtil.addAndFilter(query, andQuery || {});\n return this.inventoryService.listQuery(query, filter);\n }\n\n async getProfileOperation(deviceId: string | number) {\n const filter: object = {\n deviceId,\n fragmentType: 'c8y_DeviceProfile',\n dateFrom: this.dateFrom.toISOString(),\n dateTo: this.dateTo.toISOString(),\n revert: true,\n pageSize: 1\n };\n\n const operation = (await this.operationService.list(filter)).data[0];\n return operation && operation.status !== OperationStatus.SUCCESSFUL ? operation : undefined;\n }\n\n async createProfileOperation(device: IManagedObject, deviceProfile: Partial<DeviceProfile>) {\n let operation;\n const operationCfg: IOperation = {\n deviceId: device.id,\n profileId: deviceProfile.id,\n profileName: deviceProfile.name,\n c8y_DeviceProfile: deviceProfile.c8y_DeviceProfile,\n description: `Assign device profile ${deviceProfile.name} to device ${device.name}`\n };\n try {\n const { data } = await this.operationService.create(operationCfg);\n operation = data;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n return operation;\n }\n\n getFirmwareItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceFirmware = device.c8y_Firmware;\n const profileFirmware = get(selectedProfile, 'c8y_DeviceProfile.firmware');\n const deviceItems = [];\n const profileItems = [];\n\n if (deviceFirmware) {\n deviceItems.push(deviceFirmware);\n }\n if (profileFirmware) {\n profileItems.push(profileFirmware);\n }\n return this.createProfileComparison(\n deviceItems,\n profileItems,\n 'name',\n 'version',\n null,\n this.getAlert('firmware')\n );\n }\n\n getSoftwareItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceSoftware = device.c8y_SoftwareList;\n const profileSoftware = get(selectedProfile, 'c8y_DeviceProfile.software');\n return this.createProfileComparison(\n deviceSoftware,\n profileSoftware,\n 'name',\n 'version',\n 'softwareType',\n this.getAlert('software')\n );\n }\n\n getConfigurationItems(\n device: IManagedObject,\n selectedProfile: Partial<DeviceProfile>\n ): ComparisonResult[] {\n const deviceConfiguration = [];\n Object.keys(device).forEach(key => {\n if (key.slice(0, 18) === 'c8y_Configuration_') {\n deviceConfiguration.push(device[key]);\n }\n });\n const profileConfiguration = get(selectedProfile, 'c8y_DeviceProfile.configuration');\n return this.createProfileComparison(\n deviceConfiguration,\n profileConfiguration,\n 'url',\n null,\n 'type',\n this.getAlert('configuration')\n );\n }\n\n /**\n * Aligns device profile managed object's `softwareType!*` fragments to the software items\n * included in the device profile. Removes obsolete software type fragments and adds new.\n *\n * @param profilePartial The device profile managed object which `softwareType!*` fragments will be adjusted.\n * @returns The adjusted device profile managed object.\n */\n alignSoftwareTypeFragments(\n profilePartial: Partial<DeviceProfile>,\n profile: DeviceProfile\n ): Partial<DeviceProfile> {\n if (!profilePartial?.c8y_DeviceProfile?.software || !profile) {\n return profilePartial;\n }\n\n const removedSoftwareTypes = mapValues(\n omitBy(\n profile,\n (_: unknown, key: PropertyKey) =>\n typeof key === 'string' && !key.startsWith('softwareType!')\n ),\n () => null\n );\n const softwareTypesToAdd: { [key: PropertyKey]: Record<PropertyKey, never> } = mapValues(\n keyBy(\n uniqBy(profilePartial.c8y_DeviceProfile.software, 'softwareType'),\n (profile: DeviceProfileSoftware) => `softwareType!${profile.softwareType}`\n ),\n () => ({})\n );\n\n const result = { ...profilePartial, ...removedSoftwareTypes, ...softwareTypesToAdd };\n return result;\n }\n\n getSoftwareTypes(profile: DeviceProfile): string[] {\n return keys(\n pickBy(\n profile,\n (_: unknown, key: PropertyKey) => typeof key === 'string' && key.startsWith('softwareType!')\n )\n ).map(softwareType => softwareType.substr('softwareType!'.length));\n }\n\n private getAlert(itemType: string): (comparisionResult: ComparisonResult) => string {\n const notInstalled = (comparisionResult: ComparisonResult) => {\n return !comparisionResult.device ? this.NOT_INSTALLED_WARNING : '';\n };\n\n switch (itemType) {\n case 'firmware':\n case 'software':\n return (comparisionResult: ComparisonResult) => {\n return comparisionResult.device &&\n comparisionResult.profile &&\n comparisionResult.device.itemDetails !== comparisionResult.profile.itemDetails\n ? this.VERSION_MISSMATCH_WARNING\n : notInstalled(comparisionResult);\n };\n case 'configuration':\n return (comparisionResult: ComparisonResult) => {\n return comparisionResult.device &&\n comparisionResult.profile &&\n (comparisionResult.device.itemName !== comparisionResult.profile.itemName ||\n comparisionResult.device.itemDetails !== comparisionResult.profile.itemDetails)\n ? this.SAME_URL_WARNING\n : notInstalled(comparisionResult);\n };\n default:\n return notInstalled;\n }\n }\n\n private createProfileComparison(\n deviceItems: any[] = [],\n profileItems: Array<DeviceProfileSoftware | DeviceProfileFirmware> = [],\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string,\n getAlert: (comparisionResult: ComparisonResult) => string\n ): ComparisonResult[] {\n const comparisonObj = this.createProfileComparisonFromDeviceItems(\n deviceItems,\n mergeByProperty,\n propertyNameWithDetails,\n propertyNameWithType\n );\n const extendedComparisonObj = this.extendProfileComparisonWithProfileItems(\n comparisonObj,\n profileItems,\n mergeByProperty,\n propertyNameWithDetails,\n propertyNameWithType,\n getAlert\n );\n return sortBy(toArray(extendedComparisonObj), 'name');\n }\n\n private createProfileComparisonFromDeviceItems(\n deviceItems: any[],\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string\n ): any {\n return deviceItems.reduce(\n (comapritionItem, deviceItem) =>\n Object.assign(comapritionItem, {\n [deviceItem[mergeByProperty]]: {\n device: omitBy(\n {\n itemName: deviceItem.name,\n itemDetails: deviceItem[propertyNameWithDetails],\n itemType: deviceItem[propertyNameWithType],\n itemUrl: deviceItem.url\n },\n isNil\n ),\n profile: undefined\n }\n }),\n {}\n );\n }\n\n private extendProfileComparisonWithProfileItems(\n comparisonObj: object,\n profileItems: Array<DeviceProfileSoftware | DeviceProfileFirmware>,\n mergeByProperty: string,\n propertyNameWithDetails: string,\n propertyNameWithType: string,\n getAlert: (comparisionResult: ComparisonResult) => string\n ) {\n profileItems.forEach(profileItem => {\n const comparisionResult: ComparisonResult = {\n profile: omitBy(\n {\n itemName: profileItem.name,\n itemDetails: profileItem[propertyNameWithDetails],\n itemType: profileItem[propertyNameWithType],\n itemUrl: profileItem.url\n },\n isNil\n ),\n device: comparisonObj[profileItem[mergeByProperty]]\n ? comparisonObj[profileItem[mergeByProperty]].device\n : undefined\n };\n comparisionResult.comparisonAlert = getAlert(comparisionResult);\n comparisonObj[profileItem[mergeByProperty]] = comparisionResult;\n });\n return comparisonObj;\n }\n}\n","import { Component, EventEmitter, forwardRef } from '@angular/core';\nimport { IManagedObject, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ISelectModalObject,\n ISelectModalOption,\n ModalLabels,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n SelectModalComponent,\n ProductExperienceDirective\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { Observable, Subject } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-select-configuration-modal',\n templateUrl: './select-configuration-modal.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => SelectConfigurationModalComponent)\n }\n ],\n imports: [SelectModalComponent, ProductExperienceDirective, AsyncPipe]\n})\nexport class SelectConfigurationModalComponent implements ProductExperienceEventSource {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n title: string = gettext('Select configuration');\n load: Subject<void> = new Subject();\n configurations: Observable<any[]> = this.load.pipe(\n switchMap(() => this.getItems()),\n map(({ data }) => this.aggregate(data))\n );\n resultEmitter: EventEmitter<any[]> = new EventEmitter<any>();\n selected: any[];\n deviceTypeQuery: any = {};\n searchQuery: any = {};\n labels: ModalLabels = { ok: gettext('Save') };\n productExperienceEvent: ProductExperienceEvent;\n private queriesUtil: QueriesUtil;\n\n constructor(private repositoryService: RepositoryService) {\n this.queriesUtil = new QueriesUtil();\n }\n\n search(searchTerm) {\n if (!searchTerm) {\n this.searchQuery = {};\n } else {\n this.searchQuery = this.queriesUtil.addOrFilter(\n { name: `*${searchTerm}*` },\n { configurationType: `*${searchTerm}*` }\n );\n }\n this.load.next();\n }\n\n result(selectedItems) {\n this.resultEmitter.emit(selectedItems);\n }\n\n getItems() {\n return this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, {\n query: this.queriesUtil.addOrFilter(this.deviceTypeQuery, this.searchQuery),\n params: { pageSize: 100 }\n });\n }\n\n aggregate(mos: IManagedObject[]): ISelectModalObject[] {\n const selectedItems: any[] = this.selected;\n return mos.reduce((acc, curr) => {\n curr.configurationType = curr.configurationType || curr.name;\n const selected =\n selectedItems && selectedItems.filter(val => val.url === curr.url).length > 0;\n const selectModalOption: ISelectModalOption = {\n body: [{ value: curr.name }],\n obj: curr,\n selected\n };\n let selectModalObject: ISelectModalObject = acc.find(\n val => val.body[0].value === curr.configurationType\n ) as ISelectModalObject;\n if (selectModalObject) {\n selectModalObject.options.push(selectModalOption);\n } else {\n selectModalObject = {\n groupId: curr.id,\n body: [{ value: curr.configurationType }],\n options: [selectModalOption]\n };\n acc.push(selectModalObject);\n }\n return acc;\n }, []);\n }\n}\n","<c8y-select-modal\n [icon]=\"'gears'\"\n [title]=\"title\"\n [items]=\"configurations | async\"\n [mode]=\"'multi'\"\n (result)=\"result($event)\"\n (search)=\"search($event)\"\n [disableSelected]=\"true\"\n [labels]=\"labels\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.SHARED.COMPONENTS.SELECT_CONFIGURATION_MODAL }\"\n></c8y-select-modal>\n","import { IManagedObject } from '@c8y/client';\n\nexport interface DeviceProfile extends Partial<IManagedObject> {\n name?: string;\n type: string;\n c8y_Filter: {\n type?: string;\n };\n c8y_DeviceProfile: {\n firmware?: DeviceProfileFirmware;\n software?: DeviceProfileSoftware[];\n configuration?: DeviceProfileConfiguration[];\n };\n}\n\nexport interface DeviceProfileFirmware {\n name: string;\n version: string;\n url: string;\n isPatch: boolean;\n patchDependency?: string;\n}\n\nexport interface DeviceProfileSoftware {\n name: string;\n softwareType: string;\n version: string;\n url: string;\n action: string;\n}\n\nexport interface DeviceProfileConfiguration {\n url: string;\n name: string;\n type: string;\n}\n\nexport interface ComparisonResult {\n profile: {\n itemName: string;\n itemDetails?: string;\n itemType?: string;\n itemUrl: string;\n };\n device: {\n itemName: string;\n itemDetails?: string;\n itemType?: string;\n itemUrl: string;\n };\n comparisonAlert?: string;\n}\n\nexport enum DeviceProfileOperation {\n APPLY_PROFILE = 'c8y_DeviceProfile'\n}\n\nexport const PRODUCT_EXPERIENCE_DEVICE_PROFILE = {\n EVENTS: {\n REPOSITORY: 'deviceProfileRepository',\n DEVICE_TAB: 'deviceProfileTab'\n },\n COMPONENTS: {\n DEVICE_PROFILE_LIST: 'device-profile-list',\n ADD_DEVICE_PROFILE: 'add-device-profile',\n DEVICE_PROFILE: 'device-profile',\n DEVICE_TAB_PROFILE: 'device-tab-profile'\n },\n ACTIONS: {\n CANCEL: 'cancel',\n CREATE: 'create',\n REMOVE: 'remove',\n ADD: 'add',\n SAVE: 'save',\n ASSIGN_DEVICE_PROFILE: 'assignDeviceProfile'\n },\n RESULTS: {\n ADD_SOFTWARE: 'addSoftware'\n },\n FRAGMENTS: {\n FIRMWARE: 'firmware',\n SOFTWARE: 'software',\n CONFGIURATION: 'configuration'\n }\n} as const;\n","import { Component, forwardRef, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ModalSelectionMode,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n IconDirective,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n FilterCriteria,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { assign, concat, has, isEmpty, isEqual, uniqWith } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap, take } from 'rxjs/operators';\nimport {\n DeviceProfile,\n DeviceProfileConfiguration,\n DeviceProfileFirmware,\n DeviceProfileSoftware,\n PRODUCT_EXPERIENCE_DEVICE_PROFILE\n} from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { SelectConfigurationModalComponent } from './select-configuration-modal.component';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-device-profile',\n templateUrl: './device-profile.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceProfileComponent)\n }\n ],\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n NgIf,\n FormsModule,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n PopoverDirective,\n IconDirective,\n ListGroupComponent,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n TooltipDirective,\n EmptyStateComponent,\n NgFor,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileComponent implements OnInit, ProductExperienceEventSource {\n DEVICE_TYPE_POPOVER = gettext(\n 'The device profile will be available for assignments on devices of the specified type. Otherwise, it will be available for all device types.'\n );\n DEVICE_TYPE_DISABLED_POPOVER = gettext(\n 'Device type cannot be changed on profiles with already defined firmware, software or configuration since they may not be applicable to devices of the new device type.'\n );\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n deviceProfile: DeviceProfile;\n profileName: string;\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.REPOSITORY,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_PROFILE\n }\n };\n private queriesUtil: QueriesUtil;\n\n constructor(\n private route: ActivatedRoute,\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private bsModal: BsModalService,\n private repositoryService: RepositoryService,\n private deviceProfileService: DeviceProfileService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n async ngOnInit() {\n const profileId = this.route.snapshot.paramMap.get('id');\n this.deviceProfile = (await this.getDeviceProfile(profileId)) as DeviceProfile;\n if (this.deviceProfile) {\n this.profileName = this.deviceProfile.name;\n if (!this.deviceProfile.c8y_DeviceProfile.software) {\n this.deviceProfile.c8y_DeviceProfile.software = [];\n }\n if (!this.deviceProfile.c8y_DeviceProfile.configuration) {\n this.deviceProfile.c8y_DeviceProfile.configuration = [];\n }\n }\n }\n\n addFirmware() {\n const initialState: Partial<RepositorySelectModalComponent> & {\n repositoryEntriesWithVersionsFn$: (modal) => Observable<IManagedObject[]>;\n } = {\n deviceTypeQuery: this.getDeviceTypeQuery(RepositoryType.FIRMWARE),\n repositoryType: RepositoryType.FIRMWARE,\n repositoryEntriesWithVersionsFn$: modalDialog =>\n this.getRepositoryEntriesWithVersions$(\n modalDialog.content.searchTerm,\n RepositoryType.FIRMWARE\n ),\n icon: 'c8y-firmware',\n title: gettext('Select firmware'),\n mode: ModalSelectionMode.SINGLE,\n productExperienceEvent: this.productExperienceEvent\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialState.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialState.repositoryEntriesWithVersionsFn$(modal);\n }\n\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(firmwareList => {\n const [firmware] = firmwareList;\n if (!firmware) {\n return;\n }\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, {\n firmware: {\n name: firmware.name,\n version: firmware.version,\n url: firmware.url,\n isPatch: firmware.isPatch,\n patchDependency: firmware.patchDependency\n } as DeviceProfileFirmware\n });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n getRepositoryEntriesWithVersions$(\n searchTerm$: BehaviorSubject<FilterCriteria>,\n repoType: RepositoryType\n ) {\n return searchTerm$.pipe(\n distinctUntilChanged(),\n switchMap(searchTerm =>\n this.repositoryService.listRepositoryEntries(repoType, {\n query: this.getDeviceTypeQuery(repoType),\n partialName: searchTerm.name,\n params: { pageSize: 100 },\n skipLegacy: true\n })\n ),\n map(({ data }) => data),\n map(mos => this.getAndAssignRepositoryBinaries(mos)),\n shareReplay(1)\n );\n }\n\n getAndAssignRepositoryBinaries(mos: IManagedObject[]) {\n mos.forEach(mo => {\n mo.versions = this.repositoryService.listBaseVersions(mo);\n });\n return mos;\n }\n\n addConfiguration() {\n const modal = this.bsModal.show(SelectConfigurationModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState: {\n productExperienceEvent: this.productExperienceEvent\n }\n });\n modal.content.deviceTypeQuery = this.getDeviceTypeQuery(RepositoryType.CONFIGURATION);\n modal.content.selected = this.deviceProfile.c8y_DeviceProfile.configuration;\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(selectedConfigurations => {\n const selectedMapped: DeviceProfileConfiguration[] = selectedConfigurations.map(\n selectedItem => {\n return assign(\n {\n url: selectedItem.url,\n name: selectedItem.name\n },\n selectedItem.configurationType ? { type: selectedItem.configurationType } : {}\n );\n }\n );\n const merged: DeviceProfileConfiguration = concat(\n selectedMapped,\n this.deviceProfile.c8y_DeviceProfile.configuration || []\n );\n const configuration: DeviceProfileConfiguration = uniqWith(merged, (arrVal, othVal) => {\n return arrVal.type && othVal.type && arrVal.type === othVal.type;\n });\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, { configuration });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n addSoftware() {\n const initialState: Partial<RepositorySelectModalComponent> & {\n repositoryEntriesWithVersionsFn$: (modal) => Observable<IManagedObject[]>;\n } = {\n deviceTypeQuery: this.getDeviceTypeQuery(RepositoryType.SOFTWARE),\n repositoryType: RepositoryType.SOFTWARE,\n repositoryEntriesWithVersionsFn$: modalDialog =>\n this.getRepositoryEntriesWithVersions$(\n modalDialog.content.searchTerm,\n RepositoryType.SOFTWARE\n ),\n selected: this.deviceProfile.c8y_DeviceProfile.software,\n icon: 'c8y-tools',\n title: gettext('Select software'),\n mode: ModalSelectionMode.MULTI,\n productExperienceEvent: this.productExperienceEvent\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialState.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialState.repositoryEntriesWithVersionsFn$(modal);\n }\n\n modal.content.load.next();\n modal.content.resultEmitter.pipe(take(1)).subscribe(selectedSoftware => {\n const selectedMapped: DeviceProfileSoftware[] = selectedSoftware.map(selectedItem => {\n return {\n name: selectedItem.name,\n version: selectedItem.version,\n url: selectedItem.url,\n softwareType: selectedItem.softwareType,\n action: 'install'\n };\n });\n const merged: DeviceProfileSoftware = concat(\n selectedMapped,\n this.deviceProfile.c8y_DeviceProfile.software || []\n );\n const software: DeviceProfileSoftware = uniqWith(merged, (arrVal, othVal) => {\n return arrVal.name && othVal.name && arrVal.name === othVal.name;\n });\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile || {}\n };\n assign(deviceProfilePartial.c8y_DeviceProfile, { software });\n this.updateDeviceProfile(deviceProfilePartial);\n });\n }\n\n get isDeviceProfileEmpty() {\n const isSoftware =\n this.deviceProfile.c8y_DeviceProfile.software &&\n this.deviceProfile.c8y_DeviceProfile.software.length > 0;\n const isFirmware = Boolean(this.deviceProfile.c8y_DeviceProfile.firmware);\n const isConfiguration =\n this.deviceProfile.c8y_DeviceProfile.configuration &&\n this.deviceProfile.c8y_DeviceProfile.configuration.length > 0;\n return isSoftware || isFirmware || isConfiguration;\n }\n\n removeItem(removedItem, category) {\n const deviceProfilePartial: Partial<IManagedObject> = {\n c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile\n };\n const filtered = deviceProfilePartial.c8y_DeviceProfile[category].filter(\n item => !isEqual(removedItem, item)\n );\n deviceProfilePartial.c8y_DeviceProfile[category] = filtered;\n this.updateDeviceProfile(deviceProfilePartial);\n }\n\n removeFirmware() {\n delete this.deviceProfile.c8y_DeviceProfile.firmware;\n this.updateDeviceProfile({ c8y_DeviceProfile: this.deviceProfile.c8y_DeviceProfile });\n }\n\n async updateDeviceProfile(partialDeviceProfile) {\n if (partialDeviceProfile.c8y_Filter && partialDeviceProfile.c8y_Filter.type === '') {\n delete partialDeviceProfile.c8y_Filter.type;\n }\n Object.assign(partialDeviceProfile, { id: this.deviceProfile.id });\n try {\n const profileWithSoftwareTypeFragments = this.deviceProfileService.alignSoftwareTypeFragments(\n partialDeviceProfile,\n this.deviceProfile\n );\n const { data } = await this.inventoryService.update(profileWithSoftwareTypeFragments);\n this.deviceProfile = data as DeviceProfile;\n this.profileName = this.deviceProfile.name;\n this.alertService.success(gettext('Device profile changed.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private async getDeviceProfile(profileId) {\n try {\n const { data } = await this.inventoryService.detail(profileId);\n return data;\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private getDeviceTypeQuery(repositoryType) {\n if (\n has(this.deviceProfile, 'c8y_Filter.type') &&\n !isEmpty(this.deviceProfile.c8y_Filter.type)\n ) {\n if (repositoryType === RepositoryType.CONFIGURATION) {\n return this.queriesUtil.addOrFilter(\n { deviceType: this.deviceProfile.c8y_Filter.type },\n { __not: { __has: `deviceType` } }\n );\n } else {\n return this.queriesUtil.addOrFilter(\n { 'c8y_Filter.type': this.deviceProfile.c8y_Filter.type },\n {\n __or: [{ 'c8y_Filter.type': '' }, { __not: { __has: `c8y_Filter.type` } }]\n }\n );\n }\n }\n return {};\n }\n}\n","<c8y-title>{{ profileName }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-profile'\"\n [label]=\"'Device profiles' | translate\"\n [path]=\"'device-profiles'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-device-profile\"\n label=\"{{ profileName }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div\n class=\"row\"\n *ngIf=\"deviceProfile\"\n>\n <div class=\"col-lg-12 col-lg-max\">\n <div\n class=\"card card--fullpage\"\n *ngIf=\"deviceProfile\"\n >\n <div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24 overflow-visible\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-profile\"></i>\n <p>\n <small class=\"label label-info\">{{ 'Device profile' | translate }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <form #editNameForm=\"ngForm\">\n <c8y-form-group>\n <label\n class=\"control-label\"\n translate\n >\n Name\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"device-profile--add-device-profile-name\"\n size=\"{{ deviceProfile.name?.length || 1 }}\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--save\"\n (click)=\"\n updateDeviceProfile({ name: deviceProfile.name });\n editNameForm.form.markAsPristine()\n \"\n [disabled]=\"editNameForm.form.invalid\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n <div class=\"col-md-4\">\n <form #editTypeForm=\"ngForm\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n (DEVICE_TYPE_POPOVER | translate) +\n (isDeviceProfileEmpty\n ? ' ' + (DEVICE_TYPE_DISABLED_POPOVER | translate)\n : '')\n \"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"type\"\n type=\"text\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"device-profile--device-type\"\n size=\"{{ deviceProfile.c8y_Filter.type?.length || 14 }}\"\n [disabled]=\"isDeviceProfileEmpty\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"\n updateDeviceProfile({\n c8y_Filter: { type: deviceProfile.c8y_Filter.type }\n });\n editTypeForm.form.markAsPristine()\n \"\n [disabled]=\"isDeviceProfileEmpty\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator-top-bottom bg-content sticky-top\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'c8y-firmware'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Firmware\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <c8y-list-group>\n <c8y-li>\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ deviceProfile.c8y_DeviceProfile.firmware.name }}\n </span>\n </div>\n <div class=\"col-4\"></div>\n <div class=\"col-3 d-flex a-i-center\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.version }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n Version\n </span>\n {{ deviceProfile.c8y_DeviceProfile.firmware.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`firmware`' | translate }}\"\n type=\"button\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`firmware`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`firmware`' | translate\"\n tooltip=\"{{ 'Remove`firmware`' | translate }}\"\n placement=\"right\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <c8y-ui-empty-state\n class=\"p-t-16 d-block\"\n icon=\"c8y-firmware\"\n [title]=\"'No firmware defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Add firmware' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-firmware-button\"\n (click)=\"addFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add firmware' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom sticky-top bg-component\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'c8y-tools'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Software\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length > 0\"\n >\n <c8y-list-group>\n <c8y-li *ngFor=\"let software of deviceProfile.c8y_DeviceProfile.software\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ software.name }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Type\n </span>\n <span\n class=\"label label-info m-l-4\"\n *ngIf=\"!!software.softwareType\"\n >\n {{ software.softwareType }}\n </span>\n </span>\n </div>\n <div class=\"col-3 d-flex a-i-center\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ software.version }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Version\n </span>\n {{ software.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`software`' | translate }}\"\n type=\"button\"\n ((click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`software`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`software`' | translate\"\n tooltip=\"{{ 'Remove`software`' | translate }}\"\n placement=\"right\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i\n c8yIcon=\"minus-circle\"\n data-cy=\"device-profile--Remove-icon\"\n ></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"c8y-tools\"\n [title]=\"'No software defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <button\n class=\"btn btn-default m-b-0\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-software-button\"\n (click)=\"addSoftware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"card-icon\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"'gears'\"\n ></i>\n </div>\n <div\n class=\"card-title\"\n translate\n >\n Configuration\n </div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length > 0\"\n >\n <c8y-list-group>\n <c8y-li *ngFor=\"let configuration of deviceProfile.c8y_DeviceProfile.configuration\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'gears'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ configuration.name }}\"\n >\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Name\n </span>\n {{ configuration.name }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n Type\n </span>\n <span class=\"label label-info\">{{ configuration.type }}</span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Remove`configuration`' | translate }}\"\n type=\"button\"\n (click)=\"removeItem(configuration, 'configuration')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`configuration`' | translate }}\n </button>\n </div>\n <div class=\"col-3 d-flex a-i-center\"></div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n [attr.aria-label]=\"'Remove`configuration`' | translate\"\n tooltip=\"{{ 'Remove`configuration`' | translate }}\"\n placement=\"top\"\n type=\"button\"\n (click)=\"removeItem(configuration, 'configuration')\"\n [delay]=\"500\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i\n c8yIcon=\"minus-circle\"\n data-cy=\"device-profile--Remove-icon\"\n ></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"gears\"\n [title]=\"'No configuration defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <div class=\"p-t-8\">\n <button\n class=\"btn btn-default m-b-0\"\n title=\"{{ 'Add configuration' | translate }}\"\n type=\"button\"\n data-cy=\"device-profile--Add-configuration-button\"\n (click)=\"addConfiguration()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, forwardRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ProductExperienceEvent,\n ProductExperienceEventSource,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n IconDirective,\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DeviceProfile, PRODUCT_EXPERIENCE_DEVICE_PROFILE } from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-add-device-profile',\n templateUrl: './add-device-profile-component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => AddDeviceProfileComponent)\n }\n ],\n imports: [\n IconDirective,\n C8yTranslateDirective,\n FormsModule,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n PopoverDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n ]\n})\nexport class AddDeviceProfileComponent implements ProductExperienceEventSource {\n DEVICE_TYPE_POPOVER = gettext(\n 'The device profile will be available for assignments on devices of the specified type. Otherwise, it will be available for all device types.'\n );\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n deviceProfile: Partial<DeviceProfile> = {\n name: '',\n type: 'c8y_Profile',\n c8y_Filter: {},\n c8y_DeviceProfile: {}\n };\n result: Promise<any> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n productExperienceEvent: ProductExperienceEvent;\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n private deviceProfileService: DeviceProfileService\n ) {}\n\n async create() {\n const mo = (await this.deviceProfileService.createDeviceProfile(this.deviceProfile)).data;\n this._save(mo.id);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-device-profile'\"></i>\n <div\n class=\"modal-title\"\n id=\"addDeviceProfileModalTitle\"\n translate\n >\n Add device profile\n </div>\n </div>\n\n <form\n #createDeviceProfile=\"ngForm\"\n (ngSubmit)=\"createDeviceProfile.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addDeviceProfileModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"name\"\n translate\n >\n Name\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"add-device-profile--device-profile-name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label>\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ DEVICE_TYPE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"deviceType\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"add-device-profile--device-type\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CANCEL }\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n type=\"submit\"\n [disabled]=\"createDeviceProfile.form.invalid\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CREATE }\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </form>\n</div>\n","import { Component, EventEmitter, forwardRef, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n ModalService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n ColumnDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceTypeGridColumn,\n RepositoryItemNameGridColumn,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AddDeviceProfileComponent } from './add-device-profile.component';\nimport { PRODUCT_EXPERIENCE_DEVICE_PROFILE } from './device-profile.model';\nimport { DeviceProfileService } from './device-profile.service';\nimport { NgIf, NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-device-profile-list',\n templateUrl: './device-profile-list.component.html',\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceProfileListComponent)\n }\n ],\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n NgIf,\n NgFor,\n ColumnDirective,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileListComponent implements OnInit {\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n refresh$: EventEmitter<void> = new EventEmitter();\n isDataPresent$: Observable<boolean> = from(\n this.repositoryService.listRepositoryEntries(RepositoryType.PROFILE, { skipLegacy: true })\n ).pipe(map(({ data }) => data.length > 0));\n\n columns: Column[] = [\n new RepositoryItemNameGridColumn({\n filterLabel: gettext('Filter device profile by name'),\n placeholder: gettext('ubuntu core')\n }),\n new DeviceTypeGridColumn({ filterLabel: gettext('Filter device profile by device type') })\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.REPOSITORY,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_PROFILE_LIST\n }\n };\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No device profiles to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Add a new device profile by clicking below.');\n\n constructor(\n private repositoryService: RepositoryService,\n private gridService: DataGridService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private deviceProfileService: DeviceProfileService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit(): void {\n this.actionControls.push({\n type: BuiltInActionType.Edit,\n callback: this.editDeviceProfile.bind(this)\n });\n this.actionControls.push({\n type: 'duplicate',\n icon: 'copy',\n text: gettext('Duplicate'),\n callback: this.duplicateDeviceProfile.bind(this)\n });\n this.actionControls.push({\n type: BuiltInActionType.Delete,\n callback: this.deleteDeviceProfile.bind(this)\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.repositoryService.listRepositoryEntries(RepositoryType.PROFILE, {\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n skipDefaultOrder: true,\n params: {\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n }\n });\n\n const filtererdSizeRequest: Promise<number> = this.repositoryService\n .listRepositoryEntries(RepositoryType.PROFILE, {\n skipDefaultOrder: true,\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n params: { pageSize: 1 }\n })\n .then(response => response?.paging?.totalPages);\n\n this.sizeRequest = this.repositoryService\n .listRepositoryEntries(RepositoryType.PROFILE, {\n skipDefaultOrder: true,\n params: { pageSize: 1 }\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n editDeviceProfile(deviceProfile: Partial<IManagedObject>) {\n this.router.navigate([deviceProfile.id], { relativeTo: this.activatedRoute });\n }\n\n async createDeviceProfile() {\n const modal = this.bsModalService.show(AddDeviceProfileComponent, {\n class: 'modal-sm',\n ariaDescribedby: 'addDeviceProfileModalDescription',\n ariaLabelledBy: 'addDeviceProfileModalTitle',\n ignoreBackdropClick: true,\n keyboard: false,\n initialState: {\n productExperienceEvent: {\n ...this.productExperienceEvent,\n data: {\n ...this.productExperienceEvent.data,\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.ADD_DEVICE_PROFILE\n }\n }\n }\n }).content as AddDeviceProfileComponent;\n try {\n const profileId = await modal.result;\n modal.close();\n this.router.navigateByUrl(`/device-profiles/${profileId}`);\n } catch (ex) {\n // do nothing\n }\n }\n\n async duplicateDeviceProfile(deviceProfile) {\n const copy = cloneDeep(deviceProfile);\n copy.id = null;\n copy.name = 'Duplicate of ' + deviceProfile.name;\n const mo = (await this.deviceProfileService.createDeviceProfile(copy)).data;\n this.router.navigateByUrl(`/device-profiles/${mo.id}`);\n }\n\n async deleteDeviceProfile(deviceProfile) {\n const deviceProfileName = deviceProfile.name;\n const title = gettext('Delete device profile');\n const confirmationText = this.translateService.instant(\n gettext('You are about to delete a device profile \"{{ deviceProfileName }}\".'),\n { deviceProfileName }\n );\n const finalQuestion = this.translateService.instant(gettext('Do you want to proceed?'));\n try {\n await this.modalService.confirm(\n title,\n `${confirmationText} ${finalQuestion}`,\n Status.DANGER,\n {\n ok: gettext('Delete')\n },\n {},\n this.productExperienceEvent\n );\n await this.delete(deviceProfile.id);\n this.refresh$.next();\n } catch (ex) {\n // do nothing\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n private async delete(profileId) {\n try {\n await this.repositoryService.delete(profileId);\n this.alertService.success(gettext('Device profile deleted.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n}\n","<c8y-title>{{ 'Device profiles' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-device-profile\"\n label=\"{{ 'Device profiles' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add device profile' | translate }}\"\n data-cy=\"device-profile-list--Add-device-profile\"\n (click)=\"createDeviceProfile()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add device profile' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-device-profiles\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Device profiles' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add device profile' | translate }}\"\n type=\"button\"\n (click)=\"createDeviceProfile()\"\n >\n {{ 'Add device profile' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { DeviceProfileOperation } from './device-profile.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceProfileGuard {\n canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n return this.hasSupportedOperation(contextData, DeviceProfileOperation.APPLY_PROFILE);\n }\n\n private hasSupportedOperation(mo: IManagedObject, operation: DeviceProfileOperation) {\n const supported = mo.c8y_SupportedOperations || [];\n if (!supported) {\n return false;\n }\n return !!supported.find(supportedOperation => supportedOperation === operation);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ComparisonResult } from '../device-profile.model';\nimport { NgFor, NgIf, NgTemplateOutlet, NgClass } from '@angular/common';\nimport {\n IconDirective,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-device-profile-item-list',\n templateUrl: './device-profile-item-list.component.html',\n imports: [\n NgFor,\n NgIf,\n IconDirective,\n NgTemplateOutlet,\n NgClass,\n MessagesComponent,\n MessageDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ]\n})\nexport class DeviceProfileItemListComponent {\n @Input() icon: string;\n @Input() comparisonResults: ComparisonResult[];\n @Input() showProfileItems: boolean;\n @Input() showTextLabel: boolean;\n}\n","<div\n class=\"d-contents\"\n *ngFor=\"let comparisonResult of comparisonResults\"\n>\n <div\n class=\"p-l-16 p-r-16\"\n *ngIf=\"showProfileItems\"\n >\n <div class=\"c8y-list__item fit-h\">\n <div\n class=\"c8y-list__item__block\"\n *ngIf=\"comparisonResult.profile\"\n >\n <div class=\"c8y-list__item__icon\">\n <i [c8yIcon]=\"icon\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <ng-container\n *ngTemplateOutlet=\"comparisonResultInfo; context: comparisonResult.profile\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-l-16 p-r-16 bg-level-1\">\n <div\n class=\"c8y-list__item bg-level-1\"\n [ngClass]=\"{\n 'has-warning': !!comparisonResult.comparisonAlert\n }\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i [c8yIcon]=\"icon\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <ng-container\n *ngTemplateOutlet=\"\n comparisonResultInfo;\n context: comparisonResult.device ? comparisonResult.device : comparisonResult.profile\n \"\n ></ng-container>\n <c8y-messages\n class=\"m-0\"\n style=\"margin-bottom: calc(var(--margin-base, 8px) * -1)\"\n *ngIf=\"comparisonResult.comparisonAlert\"\n >\n <c8y-message>\n {{ comparisonResult.comparisonAlert | translate }}\n </c8y-message>\n </c8y-messages>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"p-l-16 p-r-16 bg-level-0 hidden-xs hidden-sm\"\n *ngIf=\"!showProfileItems\"\n ></div>\n</div>\n\n<ng-template\n #comparisonResultInfo\n let-name=\"itemName\"\n let-details=\"itemDetails\"\n let-type=\"itemType\"\n>\n <div class=\"content-flex-40\">\n <div class=\"col-5\">\n <span class=\"text-truncate\">\n <span class=\"text-label-small m-r-4\">Name</span>\n <span title=\"{{ name }}\">\n {{ name }}\n </span>\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n *ngIf=\"!!type\"\n >\n <span class=\"text-label-small m-r-4\">Type</span>\n <span title=\"{{ type }}\">\n <span class=\"label label-info m-l-4\">\n {{ type }}\n </span>\n </span>\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n *ngIf=\"showTextLabel && details; else showInfoLabel\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n Version\n </span>\n <span title=\"{{ details }}\">{{ details }}</span>\n </span>\n <ng-template #showInfoLabel>\n <span class=\"label label-info\">{{ details }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport { ComparisonResult } from '../device-profile.model';\nimport { NgIf } from '@angular/common';\nimport { IconDirective, C8yTranslateDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { DeviceProfileItemListComponent } from './device-profile-item-list.component';\n\n@Component({\n selector: 'c8y-device-tab-profile-detail',\n templateUrl: './device-tab-profile-detail.component.html',\n imports: [\n NgIf,\n IconDirective,\n C8yTranslateDirective,\n DeviceProfileItemListComponent,\n C8yTranslatePipe\n ]\n})\nexport class DeviceTabProfileDetailComponent {\n @Input() sectionTitle: string;\n @Input() sectionIcon: string;\n @Input() emptyStateText = '';\n @Input() emptyStateDetails = '';\n @Input() isProfileSelected: boolean;\n @Input() isEmpty: boolean;\n @Input() items: ComparisonResult[];\n @Input() showTextLabel = true;\n}\n","<div class=\"card--grid grid__col--6-6--md\">\n <div class=\"bg-level-0 card-block sticky-top\">\n <h5 class=\"legend form-block\">{{ sectionTitle | translate }}</h5>\n </div>\n <div class=\"bg-level-1 card-block sticky-top hidden-xs hidden-sm\">\n <h5 class=\"legend form-block\">{{ sectionTitle | translate }}</h5>\n </div>\n <div class=\"bg-level-0 p-l-16 p-r-16\">\n <hr class=\"m-0\" />\n </div>\n <div class=\"bg-level-1 p-l-16 p-r-16\">\n <hr class=\"m-0\" />\n </div>\n <div class=\"d-contents\" *ngIf=\"!isProfileSelected || isEmpty\">\n <div class=\"p-l-16 p-r-16\">\n <div class=\"c8y-empty-state text-left\">\n <h1 [c8yIcon]=\"sectionIcon\" class=\"c8y-icon-duocolor\"></h1>\n <p>\n <span>{{ emptyStateText | translate }}</span\n ><br />\n <small *ngIf=\"isProfileSelected; else noItems\">\n {{ emptyStateDetails | translate }}\n </small>\n <ng-template #noItems>\n <small translate>No device profile selected</small>\n </ng-template>\n </p>\n </div>\n </div>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"items.length === 0\"></div>\n <c8y-device-profile-item-list\n *ngIf=\"items.length > 0\"\n [icon]=\"sectionIcon\"\n [comparisonResults]=\"items\"\n [showProfileItems]=\"isProfileSelected && !isEmpty\"\n [showTextLabel]=\"showTextLabel\"\n class=\"d-contents\"\n ></c8y-device-profile-item-list>\n <div class=\"bg-level-0 p-t-24\" *ngIf=\"isProfileSelected && !isEmpty\"></div>\n <div class=\"bg-level-1 p-t-24\" *ngIf=\"isProfileSelected && !isEmpty\"></div>\n</div>\n","import { Component, DestroyRef, forwardRef, inject, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, IOperation, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ForOfFilterPipe,\n ManagedObjectRealtimeService,\n OperationRealtimeService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource,\n ActionBarItemComponent,\n IconDirective,\n RealtimeButtonComponent,\n C8yTranslateDirective,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { has, pickBy } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { filter, map, switchMap, tap } from 'rxjs/operators';\nimport {\n ComparisonResult,\n DeviceProfile,\n PRODUCT_EXPERIENCE_DEVICE_PROFILE\n} from '../device-profile.model';\nimport { DeviceProfileService } from '../device-profile.service';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\nimport { DeviceTabProfileDetailComponent } from './device-tab-profile-detail.component';\n\n@Component({\n selector: 'c8y-device-tab-profile',\n templateUrl: './device-tab-profile.component.html',\n providers: [\n ManagedObjectRealtimeService,\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => DeviceTabProfileComponent)\n }\n ],\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n RealtimeButtonComponent,\n C8yTranslateDirective,\n FormsModule,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n ProductExperienceDirective,\n OperationDetailsComponent,\n DeviceTabProfileDetailComponent,\n C8yTranslatePipe\n ]\n})\nexport class DeviceTabProfileComponent implements OnInit, ProductExperienceEventSource {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;\n device: IManagedObject;\n deviceProfiles$: Observable<IResultList<IManagedObject>>;\n selectedProfile: Partial<DeviceProfile>;\n operation: IOperation;\n firmwareItems: ComparisonResult[] = [];\n softwareItems: ComparisonResult[] = [];\n configurationItems: ComparisonResult[] = [];\n\n filterPipe: ForOfFilterPipe;\n pattern$ = new BehaviorSubject<string>('');\n reload$ = new BehaviorSubject<boolean>(true);\n productExperienceEvent: ProductExperienceEvent = {\n eventName: PRODUCT_EXPERIENCE_DEVICE_PROFILE.EVENTS.DEVICE_TAB,\n data: {\n component: PRODUCT_EXPERIENCE_DEVICE_PROFILE.COMPONENTS.DEVICE_TAB_PROFILE\n }\n };\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public deviceRealtime: ManagedObjectRealtimeService,\n private deviceProfileService: DeviceProfileService,\n private route: ActivatedRoute,\n private operationRealtime: OperationRealtimeService,\n private alertService: AlertService\n ) {\n this.device = this.route.snapshot.parent.data.contextData;\n }\n\n async ngOnInit() {\n this.getDeviceProfilesAndUpdateProfileItems();\n this.subscribeToManagedObjects();\n const supportedSoftwareTypes = new Set(this.device.c8y_SupportedSoftwareTypes);\n const isSubset = (profileTypes: string[]) => {\n return profileTypes.every(type => supportedSoftwareTypes.has(type));\n };\n this.filterPipe = pipe(\n map(data => {\n if (supportedSoftwareTypes.size) {\n return data.filter(mo =>\n isSubset(this.deviceProfileService.getSoftwareTypes(mo as unknown as DeviceProfile))\n );\n } else {\n return data;\n }\n })\n );\n }\n\n async getDeviceProfilesAndUpdateProfileItems() {\n this.deviceProfiles$ = combineLatest([this.reload$.pipe(filter(Boolean)), this.pattern$]).pipe(\n switchMap(([_, name]) =>\n this.deviceProfileService.getDeviceProfilesByDevice(this.device, name)\n ),\n tap(async profiles => {\n if (this.device.c8y_Profile) {\n const profileId = this.device.c8y_Profile.profileId;\n this.selectedProfile = profiles.data.find(mo => mo.id === profileId);\n }\n this.updateProfileItems(this.device, this.selectedProfile);\n this.operation = await this.deviceProfileService.getProfileOperation(this.device.id);\n this.subscribeToOperations();\n }),\n tap(() => this.reload$.next(false)),\n takeUntilDestroyed(this.destroyRef)\n );\n }\n\n selectProfile(mo: DeviceProfile) {\n this.selectedProfile = this.toProfileForDevice(mo);\n this.updateProfileItems(this.device, this.selectedProfile);\n }\n\n async createOperation() {\n this.operation = await this.deviceProfileService.createProfileOperation(\n this.device,\n this.selectedProfile\n );\n }\n\n updateProfileItems(device, profile) {\n this.firmwareItems = this.deviceProfileService.getFirmwareItems(device, profile);\n this.softwareItems = this.deviceProfileService.getSoftwareItems(device, profile);\n this.configurationItems = this.deviceProfileService.getConfigurationItems(device, profile);\n }\n\n private subscribeToManagedObjects() {\n this.deviceRealtime\n .onUpdate$(this.device.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((managedObject: IManagedObject) => {\n this.updateProfileItems(managedObject, this.selectedProfile);\n });\n this.deviceRealtime\n .onDelete$(this.device.id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.alertService.danger(\n gettext(\n 'This device has just been deleted. You will be redirected to \"All devices\" page now.'\n )\n );\n window.location.href = '#/device';\n });\n }\n\n private subscribeToOperations() {\n this.operationRealtime\n .onAll$(this.device.id)\n .pipe(\n map(({ data }) => data as IOperation),\n filter(operation => operation.c8y_DeviceProfile),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(operation => {\n this.operation = operation;\n });\n }\n\n private toProfileForDevice(profile: DeviceProfile): DeviceProfile {\n if (\n Array.from(profile?.c8y_DeviceProfile?.software || []).length === 0 ||\n has(this.device, 'c8y_SupportedSoftwareTypes')\n ) {\n return profile;\n } else {\n return {\n ...profile,\n c8y_DeviceProfile: {\n ...profile.c8y_DeviceProfile,\n software: profile.c8y_DeviceProfile.software.map(sw =>\n pickBy(sw, (_, key) => key !== 'softwareType')\n )\n }\n };\n }\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload$.next(true)\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reload$.value }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"deviceRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid--fullpage card--grid--fullpage card--grid grid__row--2-10--md\">\n <div class=\"card--grid grid__col--6-6--md\">\n <!-- AVAILABLE PROFILES -->\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Device profile\n </div>\n </div>\n <div class=\"p-16\">\n <form #deviceProfileForm=\"ngForm\">\n <div class=\"input-group\">\n <c8y-typeahead\n class=\"flex-grow\"\n placeholder=\"{{ 'Select device profile' | translate }}\"\n name=\"selectProfile\"\n data-cy=\"device-tab-profile--select-device-profile\"\n [(ngModel)]=\"selectedProfile\"\n (onSearch)=\"pattern$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *c8yFor=\"let profile of deviceProfiles$; pipe: filterPipe\"\n (click)=\"selectProfile(profile); pattern$.next('')\"\n >\n <c8y-highlight\n [text]=\"profile.name || '--'\"\n [pattern]=\"pattern$.value\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Assign device profile' | translate }}\"\n type=\"button\"\n (click)=\"createOperation()\"\n data-cy=\"device-tab-profile--Assign-device-profile-button\"\n [disabled]=\"!selectedProfile?.id\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.ASSIGN_DEVICE_PROFILE }\"\n >\n <span>{{ 'Assign device profile' | translate }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- INSTALL PROFILE OPERATION -->\n <div class=\"bg-level-1\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Currently installed\n </div>\n </div>\n <div class=\"card-block\">\n <c8y-operation-details\n [operation]=\"operation\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n ></c8y-operation-details>\n </div>\n </div>\n </div>\n <div class=\"card--grid__inner-scroll d-col no-align-items\">\n <div class=\"d-contents\">\n <!-- FIRMWARE -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'c8y-firmware'\"\n [sectionTitle]=\"'Firmware' | translate\"\n [emptyStateText]=\"'No firmware to display.' | translate\"\n [emptyStateDetails]=\"'No firmware assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"firmwareItems\"\n [isEmpty]=\"!selectedProfile?.c8y_DeviceProfile?.firmware?.name\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- SOFTWARE -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'c8y-tools'\"\n [sectionTitle]=\"'Software' | translate\"\n [emptyStateText]=\"'No software to display.' | translate\"\n [emptyStateDetails]=\"'No software assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"softwareItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.software ||\n selectedProfile?.c8y_DeviceProfile?.software?.length === 0\n \"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- CONFIGURATION -->\n <c8y-device-tab-profile-detail\n class=\"d-contents\"\n [sectionIcon]=\"'gears'\"\n [sectionTitle]=\"'Configuration' | translate\"\n [emptyStateText]=\"'No configuration to display' | translate\"\n [emptyStateDetails]=\"'No configuration assigned' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"configurationItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.configuration ||\n selectedProfile?.c8y_DeviceProfile?.configuration?.length === 0\n \"\n ></c8y-device-tab-profile-detail>\n </div>\n <!-- fill in the remanining vertical space when empty -->\n <div class=\"card--grid grid__col--6-6--md flex-grow\">\n <div class=\"bg-level-0\"></div>\n <div class=\"bg-level-1\"></div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { Route, RouterModule } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CommonModule,\n CoreModule,\n hookNavigator,\n hookRoute,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProfileComponent } from './device-profile.component';\nimport { DeviceProfileListComponent } from './device-profile-list.component';\nimport { DeviceProfileNavigationFactory } from './device-profile-navigation.factory';\nimport { DeviceProfileService } from './device-profile.service';\nimport { AddDeviceProfileComponent } from './add-device-profile.component';\nimport { DeviceProfileGuard } from './device-profile.guard';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { SelectConfigurationModalComponent } from './select-configuration-modal.component';\nimport { DeviceTabProfileComponent } from './device-tab-profile/device-tab-profile.component';\nimport { DeviceTabProfileDetailComponent } from './device-tab-profile/device-tab-profile-detail.component';\nimport { DeviceProfileItemListComponent } from './device-tab-profile/device-profile-item-list.component';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\n\nconst deviceProfilesRoutes: Route[] = [\n {\n path: 'device-profiles/:id',\n component: DeviceProfileComponent\n },\n {\n path: 'device-profiles',\n component: DeviceProfileListComponent\n }\n];\n\nconst deviceTabProfileRoutes: any[] = [\n {\n context: ViewContext.Device,\n path: 'device-profile',\n component: DeviceTabProfileComponent,\n label: gettext('Device profile'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProfileGuard]\n }\n];\n\n@NgModule({\n exports: [],\n imports: [\n CoreModule,\n CommonModule,\n SharedRepositoryModule,\n RouterModule.forChild(deviceProfilesRoutes),\n BsDropdownModule.forRoot(),\n TooltipModule,\n ReactiveFormsModule,\n ButtonsModule,\n PopoverModule,\n OperationDetailsModule,\n DeviceProfileComponent,\n DeviceProfileListComponent,\n AddDeviceProfileComponent,\n SelectConfigurationModalComponent,\n DeviceTabProfileComponent,\n DeviceTabProfileDetailComponent,\n DeviceProfileItemListComponent\n ],\n providers: [\n hookNavigator(DeviceProfileNavigationFactory),\n hookRoute(deviceTabProfileRoutes),\n DeviceProfileService,\n DeviceProfileGuard\n ]\n})\nexport class DeviceProfileModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i5","i6.DeviceProfileService","i2.DeviceProfileService","i4"],"mappings":"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"}
|