@c8y/ngx-components 1024.10.8 → 1024.14.0
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-advanced-software-management.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +51 -33
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +25 -25
- 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-alarm-event-selector.mjs +40 -40
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
- package/fesm2022/c8y-ngx-components-api.mjs +7 -7
- package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
- package/fesm2022/c8y-ngx-components-application-access-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +3 -3
- package/fesm2022/c8y-ngx-components-application-select.mjs +3 -3
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +48 -48
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs → c8y-ngx-components-asset-property-grid.component-DiyBj-XO.mjs} +13 -13
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-Ddva2QJW.mjs.map → c8y-ngx-components-asset-property-grid.component-DiyBj-XO.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +120 -120
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
- package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BSxOT0SU.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-QfHyUsqG.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BSxOT0SU.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-QfHyUsqG.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BSeGaS86.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-DreEjPAV.mjs} +11 -11
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BSeGaS86.mjs.map → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-DreEjPAV.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C9_wOe7Q.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-vwNRqIEN.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C9_wOe7Q.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-vwNRqIEN.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BkWl-4Xt.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-BTfPf6IZ.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BkWl-4Xt.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-BTfPf6IZ.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-DXirzI0z.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-B2z2tGM7.mjs} +5 -5
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-DXirzI0z.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-B2z2tGM7.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DTOHhXlH.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CwWLXBUt.mjs} +5 -5
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DTOHhXlH.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CwWLXBUt.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
- package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +12 -10
- 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-dashboard-appearance-settings.component-DVP1ld4m.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-ly9fklRG.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DVP1ld4m.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-ly9fklRG.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-B8yNG85v.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DA9DFUIL.mjs} +10 -10
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-B8yNG85v.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DA9DFUIL.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-BUCVA0RW.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CiHrXzWC.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-BUCVA0RW.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CiHrXzWC.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +12 -10
- 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-state.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +131 -124
- 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-BZXZ_lDq.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-Nbg_Z47C.mjs} +16 -16
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-BZXZ_lDq.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-Nbg_Z47C.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +28 -28
- package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-preparation.mjs +7 -7
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +26 -26
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +13 -13
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +46 -46
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +36 -36
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-device-enrolment.mjs +6 -6
- package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
- package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
- package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
- package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
- package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
- package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events.mjs +33 -33
- package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-feature-toggles-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
- package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
- package/fesm2022/c8y-ngx-components-global-context.mjs +136 -136
- package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +6 -6
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +51 -45
- 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-location.mjs +28 -28
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-map.mjs +19 -19
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
- package/fesm2022/c8y-ngx-components-operation-picker.mjs +9 -9
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
- package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
- package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +21 -19
- 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-repository-configuration.mjs +48 -48
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
- package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
- package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
- package/fesm2022/c8y-ngx-components-search.mjs +19 -19
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-shared.mjs +5 -5
- 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-sigfox-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
- package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
- package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
- package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
- package/fesm2022/c8y-ngx-components-upgrade.mjs +64 -47
- 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-widgets-definitions-asset-table.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +51 -40
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.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-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +8 -8
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +21 -21
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +10 -10
- package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs +29 -25
- package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
- package/fesm2022/c8y-ngx-components.mjs +1440 -1433
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +43 -51
- package/locales/es.po +42 -50
- package/locales/fr.po +44 -52
- package/locales/ja_JP.po +38 -45
- package/locales/ko.po +41 -49
- package/locales/locales.pot +35 -40
- package/locales/nl.po +43 -51
- package/locales/pl.po +41 -49
- package/locales/pt_BR.po +43 -51
- package/locales/zh_CN.po +40 -48
- package/locales/zh_TW.po +43 -51
- package/package.json +1 -1
- package/types/c8y-ngx-components-ai-agent-chat.d.ts +10 -2
- package/types/c8y-ngx-components-ai-agent-chat.d.ts.map +1 -1
- package/types/c8y-ngx-components-context-dashboard-asset-view.d.ts.map +1 -1
- package/types/c8y-ngx-components-context-dashboard-device-view.d.ts.map +1 -1
- package/types/c8y-ngx-components-context-dashboard.d.ts +4 -3
- package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
- package/types/c8y-ngx-components-icon-selector.d.ts +8 -2
- package/types/c8y-ngx-components-icon-selector.d.ts.map +1 -1
- package/types/c8y-ngx-components-report-dashboard.d.ts.map +1 -1
- package/types/c8y-ngx-components-widgets-implementations-scada.d.ts +2 -1
- package/types/c8y-ngx-components-widgets-implementations-scada.d.ts.map +1 -1
- package/types/c8y-ngx-components.d.ts +24 -7
- package/types/c8y-ngx-components.d.ts.map +1 -1
|
@@ -39,10 +39,10 @@ class IconNamePipe {
|
|
|
39
39
|
}
|
|
40
40
|
return icon;
|
|
41
41
|
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
43
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
43
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.19", ngImport: i0, type: IconNamePipe, isStandalone: true, name: "iconName" }); }
|
|
44
44
|
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconNamePipe, decorators: [{
|
|
46
46
|
type: Pipe,
|
|
47
47
|
args: [{ name: 'iconName' }]
|
|
48
48
|
}] });
|
|
@@ -234,10 +234,10 @@ class CustomIconStorageService {
|
|
|
234
234
|
throw e;
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
238
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
238
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconStorageService, providedIn: 'root' }); }
|
|
239
239
|
}
|
|
240
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconStorageService, decorators: [{
|
|
241
241
|
type: Injectable,
|
|
242
242
|
args: [{ providedIn: 'root' }]
|
|
243
243
|
}] });
|
|
@@ -364,10 +364,10 @@ class SvgSanitizerService {
|
|
|
364
364
|
this.normalizeColorsOnNode(child);
|
|
365
365
|
}
|
|
366
366
|
}
|
|
367
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
368
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
367
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SvgSanitizerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
368
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SvgSanitizerService, providedIn: 'root' }); }
|
|
369
369
|
}
|
|
370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: SvgSanitizerService, decorators: [{
|
|
371
371
|
type: Injectable,
|
|
372
372
|
args: [{ providedIn: 'root' }]
|
|
373
373
|
}] });
|
|
@@ -582,10 +582,10 @@ class CustomIconRegistryService {
|
|
|
582
582
|
this.icons.set(set.icons);
|
|
583
583
|
this.loaded.set(true);
|
|
584
584
|
}
|
|
585
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
586
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
585
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
586
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconRegistryService, providedIn: 'root' }); }
|
|
587
587
|
}
|
|
588
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: CustomIconRegistryService, decorators: [{
|
|
589
589
|
type: Injectable,
|
|
590
590
|
args: [{ providedIn: 'root' }]
|
|
591
591
|
}] });
|
|
@@ -929,10 +929,10 @@ class AddCustomIconModalComponent {
|
|
|
929
929
|
return null;
|
|
930
930
|
};
|
|
931
931
|
}
|
|
932
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
933
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: AddCustomIconModalComponent, isStandalone: true, selector: "c8y-add-custom-icon-modal", viewQueries: [{ propertyName: "categoryTypeahead", first: true, predicate: ["categoryTypeahead"], descendants: true, isSignal: true }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true, isSignal: true }], ngImport: i0, template: "<c8y-modal\n [title]=\"modalTitle() | translate\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [close]=\"keepOpenOnOk\"\n [labels]=\"{ cancel: 'Cancel', ok: okLabel() | translate }\"\n>\n <ng-container c8y-modal-title>\n <span\n [c8yIcon]=\"isOverrideMode() ? 'replace' : isEditMode() ? 'pencil' : 'plus-circle-o'\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n\n @if (!isReady()) {\n <!-- min-height matches the approximate form height so Bootstrap animates\n the modal at its full size before the form is rendered. -->\n <div\n class=\"p-32 d-flex a-i-center j-c-center\"\n style=\"min-height: 380px\"\n [attr.aria-label]=\"'Loading\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n }\n\n @if (isReady()) {\n <div\n class=\"p-t-16 p-b-24 p-l-32 p-r-32\"\n #modalBody\n >\n @if (isOverrideMode()) {\n <p class=\"text-center text-16 text-bold text-balance m-b-16\">\n {{ 'Upload a replacement SVG for {{iconName}}' | translate: { iconName:\n editingIcon?.overriddenIconName } }}\n </p>\n }\n\n <!-- Name, collection and icon type (hidden in override mode) -->\n @if (!isOverrideMode()) {\n @if (!isEditMode()) {\n <p\n class=\"text-muted m-b-16\"\n translate\n >\n Upload a custom SVG icon and assign it to a collection to keep your icons organized.\n </p>\n }\n <div\n class=\"m-b-16\"\n [formGroup]=\"form\"\n >\n <c8y-form-group class=\"p-b-16\">\n <label\n for=\"iconName\"\n translate\n >Icon name</label\n >\n <input\n class=\"form-control\"\n id=\"iconName\"\n aria-required=\"true\"\n aria-describedby=\"iconName-messages\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'acme-logo' }\"\n formControlName=\"name\"\n />\n <c8y-messages\n id=\"iconName-messages\"\n role=\"status\"\n [helpMessage]=\"'Lowercase letters, numbers and hyphens only' | translate\"\n >\n @for (message of nameMessages; track message.name) {\n <c8y-message\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group [hasError]=\"hasCategoryError()\">\n <label\n for=\"iconCategory\"\n translate\n >Collection</label\n >\n <div class=\"p-relative\">\n <c8y-typeahead\n [attr.aria-label]=\"'Icon collection' | translate\"\n id=\"iconCategory\"\n #categoryTypeahead\n [allowFreeEntries]=\"true\"\n [hideNew]=\"true\"\n [placeholder]=\"'Select or enter a collection name' | translate\"\n (onSearch)=\"onCategorySearch($event)\"\n >\n @for (cat of filteredCategories(); track cat) {\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectCategory(cat)\"\n [active]=\"form.value.category === cat\"\n >{{ cat | translate }}</c8y-li\n >\n }\n @if (showAddNew()) {\n <c8y-li class=\"bg-level-2 p-8\">\n @if (hasNoMatch()) {\n <span\n class=\"m-r-8\"\n translate\n >No existing collection found.</span\n >\n }\n <button\n class=\"btn btn-default btn-xs\"\n type=\"button\"\n (click)=\"selectCategory(categorySearch())\"\n >\n {{ 'Add new collection`collection`' | translate }}\n </button>\n </c8y-li>\n }\n </c8y-typeahead>\n @if (categorySearch()) {\n <button\n class=\"btn btn-dot p-absolute\"\n style=\"right: 36px; z-index: 10\"\n [attr.aria-label]=\"'Clear collection' | translate\"\n type=\"button\"\n (click)=\"clearCategory()\"\n >\n <i\n [c8yIcon]=\"'times'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n </div>\n <c8y-messages\n role=\"alert\"\n [show]=\"categoryErrors()\"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Collection is required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n @if (!isEditMode()) {\n <fieldset class=\"c8y-fieldset m-b-24\">\n <legend translate>Icon type</legend>\n <div class=\"d-flex gap-16 p-b-16\">\n <label class=\"c8y-radio a-i-start\">\n <input\n name=\"iconFamily\"\n type=\"radio\"\n [checked]=\"selectedFamily() === 'dlt'\"\n (change)=\"onFamilyChange('dlt')\"\n />\n <span></span>\n <span\n >{{ 'Single color' | translate }}<br />\n <small\n class=\"text-muted d-block\"\n translate\n >\n Single SVG, inherits text color via currentColor.\n </small>\n </span>\n </label>\n\n <label class=\"c8y-radio a-i-start\">\n <input\n name=\"iconFamily\"\n type=\"radio\"\n [checked]=\"selectedFamily() === 'c8y'\"\n (change)=\"onFamilyChange('c8y')\"\n />\n <span></span>\n <span>\n {{ 'Duocolor' | translate }}<br />\n <small\n class=\"text-muted d-block\"\n translate\n >\n Two SVGs required: a dark layer and a light accent layer.\n </small>\n </span>\n </label>\n </div>\n </fieldset>\n }\n </div>\n }\n\n <!-- SVG uploads -->\n <div\n class=\"m-b-16\"\n [class.row]=\"selectedFamily() === 'c8y'\"\n >\n @if (selectedFamily() === 'dlt') {\n <c8y-form-group [hasError]=\"hasPrimarySvgError()\">\n <label translate>Icon SVG</label>\n @if (!primarySvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [title]=\"'Upload SVG icon' | translate\"\n [attr.aria-label]=\"'Upload SVG icon' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop SVG file here or click to browse' | translate\"\n (dropped)=\"onPrimaryDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"primarySvgErrors()\"\n [helpMessage]=\"\n hasPrimarySvgError()\n ? ''\n : ('Square viewBox (e.g. 24\u00D724) \u00B7 currentColor fills \u00B7 no external refs or scripts'\n | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (primaryValidation(); as pv) {\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <fieldset class=\"c8y-fieldset m-b-8\">\n <legend class=\"d-flex a-i-center\">\n <span translate>Preview</span>\n <button\n class=\"btn btn-dot btn-dot--danger m-l-8\"\n [attr.aria-label]=\"'Remove SVG preview' | translate\"\n [tooltip]=\"'Remove SVG preview' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearPrimary()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </legend>\n <div class=\"row d-flex a-i-center gap-16 p-b-16\">\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-light-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"d-flex a-i-center j-c-center text-default\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n <div\n class=\"col-sm-6 d-flex a-i-end gap-16 j-c-around p-16 c8y-dark-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"d-flex a-i-center j-c-center text-default\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n </div>\n @if (primaryValidation(); as pv) {\n @if (pv.errors.length || pv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n </fieldset>\n }\n </c8y-form-group>\n } @else {\n <!-- C8Y duocolor: dark + light uploads side by side -->\n <div class=\"row d-flex-md gap-16\">\n <div class=\"col-sm-6\">\n <c8y-form-group [hasError]=\"hasPrimarySvgError()\">\n <label translate>Dark layer SVG</label>\n @if (!primarySvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [attr.aria-label]=\"'Upload dark layer SVG' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop dark layer SVG' | translate\"\n (dropped)=\"onPrimaryDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"primarySvgErrors()\"\n [helpMessage]=\"\n hasPrimarySvgError()\n ? ''\n : ('Square viewBox \u00B7 currentColor fills \u00B7 main icon shape' | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (primaryValidation(); as pv) {\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <div class=\"d-flex a-i-center gap-8 p-8 separator m-b-4\">\n <div\n class=\"d-flex a-i-center j-c-center\"\n [style.width.px]=\"32\"\n [style.height.px]=\"32\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <span\n class=\"text-muted text-12 flex-grow\"\n translate\n >Dark layer</span\n >\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove dark layer SVG' | translate\"\n [tooltip]=\"'Remove dark layer SVG' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearPrimary()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n @if (primaryValidation(); as pv) {\n @if (pv.errors.length || pv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n }\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group [hasError]=\"hasLightSvgError()\">\n <label translate>Light layer SVG</label>\n @if (!lightSvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [attr.aria-label]=\"'Upload light layer SVG' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop light layer SVG' | translate\"\n (dropped)=\"onLightDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"lightSvgErrors()\"\n [helpMessage]=\"\n hasLightSvgError()\n ? ''\n : ('Same viewBox as dark layer \u00B7 accent shape for the light tint'\n | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (lightValidation(); as lv) {\n @for (error of lv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of lv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <div class=\"d-flex a-i-center gap-8 p-8 separator m-b-4\">\n <div\n class=\"d-flex a-i-center j-c-center\"\n [style.width.px]=\"32\"\n [style.height.px]=\"32\"\n aria-hidden=\"true\"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n <span\n class=\"text-muted text-12 flex-grow\"\n translate\n >Light layer</span\n >\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove light layer SVG' | translate\"\n [tooltip]=\"'Remove light layer SVG' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearLight()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n @if (lightValidation(); as lv) {\n @if (lv.errors.length || lv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of lv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of lv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n }\n </c8y-form-group>\n </div>\n </div>\n\n @if (showCompositePreview()) {\n <fieldset\n class=\"c8y-fieldset m-t-16\"\n aria-hidden=\"true\"\n >\n <legend translate>Composited preview</legend>\n <div class=\"row d-flex-md gap-16 p-b-16\">\n <!-- Light background -->\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-light-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"p-relative\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n >\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n style=\"color: var(--c8y-root-component-icon-dark-color-dark)\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"\n top: 0;\n left: 0;\n color: var(--c8y-root-component-icon-dark-color-light);\n \"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n </div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n <!-- Dark background -->\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-dark-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"p-relative\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n >\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n style=\"color: var(--c8y-root-component-icon-dark-color-dark)\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"\n top: 0;\n left: 0;\n color: var(\n --c8y-component-icon-dark-color-light,\n var(--c8y-root-component-icon-dark-color-light)\n );\n \"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n </div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n </div>\n </fieldset>\n }\n }\n </div>\n </div>\n }\n</c8y-modal>\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage", "additionalMessages"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "title", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
932
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AddCustomIconModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
933
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: AddCustomIconModalComponent, isStandalone: true, selector: "c8y-add-custom-icon-modal", viewQueries: [{ propertyName: "categoryTypeahead", first: true, predicate: ["categoryTypeahead"], descendants: true, isSignal: true }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true, isSignal: true }], ngImport: i0, template: "<c8y-modal\n [title]=\"modalTitle() | translate\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [close]=\"keepOpenOnOk\"\n [labels]=\"{ cancel: 'Cancel', ok: okLabel() | translate }\"\n>\n <ng-container c8y-modal-title>\n <span\n [c8yIcon]=\"isOverrideMode() ? 'replace' : isEditMode() ? 'pencil' : 'plus-circle-o'\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n\n @if (!isReady()) {\n <!-- min-height matches the approximate form height so Bootstrap animates\n the modal at its full size before the form is rendered. -->\n <div\n class=\"p-32 d-flex a-i-center j-c-center\"\n style=\"min-height: 380px\"\n [attr.aria-label]=\"'Loading\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n }\n\n @if (isReady()) {\n <div\n class=\"p-t-16 p-b-24 p-l-32 p-r-32\"\n #modalBody\n >\n @if (isOverrideMode()) {\n <p class=\"text-center text-16 text-bold text-balance m-b-16\">\n {{ 'Upload a replacement SVG for {{iconName}}' | translate: { iconName:\n editingIcon?.overriddenIconName } }}\n </p>\n }\n\n <!-- Name, collection and icon type (hidden in override mode) -->\n @if (!isOverrideMode()) {\n @if (!isEditMode()) {\n <p\n class=\"text-muted m-b-16\"\n translate\n >\n Upload a custom SVG icon and assign it to a collection to keep your icons organized.\n </p>\n }\n <div\n class=\"m-b-16\"\n [formGroup]=\"form\"\n >\n <c8y-form-group class=\"p-b-16\">\n <label\n for=\"iconName\"\n translate\n >Icon name</label\n >\n <input\n class=\"form-control\"\n id=\"iconName\"\n aria-required=\"true\"\n aria-describedby=\"iconName-messages\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'acme-logo' }\"\n formControlName=\"name\"\n />\n <c8y-messages\n id=\"iconName-messages\"\n role=\"status\"\n [helpMessage]=\"'Lowercase letters, numbers and hyphens only' | translate\"\n >\n @for (message of nameMessages; track message.name) {\n <c8y-message\n [name]=\"message.name\"\n [text]=\"message.text | translate\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group [hasError]=\"hasCategoryError()\">\n <label\n for=\"iconCategory\"\n translate\n >Collection</label\n >\n <div class=\"p-relative\">\n <c8y-typeahead\n [attr.aria-label]=\"'Icon collection' | translate\"\n id=\"iconCategory\"\n #categoryTypeahead\n [allowFreeEntries]=\"true\"\n [hideNew]=\"true\"\n [placeholder]=\"'Select or enter a collection name' | translate\"\n (onSearch)=\"onCategorySearch($event)\"\n >\n @for (cat of filteredCategories(); track cat) {\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectCategory(cat)\"\n [active]=\"form.value.category === cat\"\n >{{ cat | translate }}</c8y-li\n >\n }\n @if (showAddNew()) {\n <c8y-li class=\"bg-level-2 p-8\">\n @if (hasNoMatch()) {\n <span\n class=\"m-r-8\"\n translate\n >No existing collection found.</span\n >\n }\n <button\n class=\"btn btn-default btn-xs\"\n type=\"button\"\n (click)=\"selectCategory(categorySearch())\"\n >\n {{ 'Add new collection`collection`' | translate }}\n </button>\n </c8y-li>\n }\n </c8y-typeahead>\n @if (categorySearch()) {\n <button\n class=\"btn btn-dot p-absolute\"\n style=\"right: 36px; z-index: 10\"\n [attr.aria-label]=\"'Clear collection' | translate\"\n type=\"button\"\n (click)=\"clearCategory()\"\n >\n <i\n [c8yIcon]=\"'times'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n </div>\n <c8y-messages\n role=\"alert\"\n [show]=\"categoryErrors()\"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Collection is required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n @if (!isEditMode()) {\n <fieldset class=\"c8y-fieldset m-b-24\">\n <legend translate>Icon type</legend>\n <div class=\"d-flex gap-16 p-b-16\">\n <label class=\"c8y-radio a-i-start\">\n <input\n name=\"iconFamily\"\n type=\"radio\"\n [checked]=\"selectedFamily() === 'dlt'\"\n (change)=\"onFamilyChange('dlt')\"\n />\n <span></span>\n <span\n >{{ 'Single color' | translate }}<br />\n <small\n class=\"text-muted d-block\"\n translate\n >\n Single SVG, inherits text color via currentColor.\n </small>\n </span>\n </label>\n\n <label class=\"c8y-radio a-i-start\">\n <input\n name=\"iconFamily\"\n type=\"radio\"\n [checked]=\"selectedFamily() === 'c8y'\"\n (change)=\"onFamilyChange('c8y')\"\n />\n <span></span>\n <span>\n {{ 'Duocolor' | translate }}<br />\n <small\n class=\"text-muted d-block\"\n translate\n >\n Two SVGs required: a dark layer and a light accent layer.\n </small>\n </span>\n </label>\n </div>\n </fieldset>\n }\n </div>\n }\n\n <!-- SVG uploads -->\n <div\n class=\"m-b-16\"\n [class.row]=\"selectedFamily() === 'c8y'\"\n >\n @if (selectedFamily() === 'dlt') {\n <c8y-form-group [hasError]=\"hasPrimarySvgError()\">\n <label translate>Icon SVG</label>\n @if (!primarySvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [title]=\"'Upload SVG icon' | translate\"\n [attr.aria-label]=\"'Upload SVG icon' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop SVG file here or click to browse' | translate\"\n (dropped)=\"onPrimaryDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"primarySvgErrors()\"\n [helpMessage]=\"\n hasPrimarySvgError()\n ? ''\n : ('Square viewBox (e.g. 24\u00D724) \u00B7 currentColor fills \u00B7 no external refs or scripts'\n | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (primaryValidation(); as pv) {\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <fieldset class=\"c8y-fieldset m-b-8\">\n <legend class=\"d-flex a-i-center\">\n <span translate>Preview</span>\n <button\n class=\"btn btn-dot btn-dot--danger m-l-8\"\n [attr.aria-label]=\"'Remove SVG preview' | translate\"\n [tooltip]=\"'Remove SVG preview' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearPrimary()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </legend>\n <div class=\"row d-flex a-i-center gap-16 p-b-16\">\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-light-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"d-flex a-i-center j-c-center text-default\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n <div\n class=\"col-sm-6 d-flex a-i-end gap-16 j-c-around p-16 c8y-dark-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"d-flex a-i-center j-c-center text-default\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n </div>\n @if (primaryValidation(); as pv) {\n @if (pv.errors.length || pv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n </fieldset>\n }\n </c8y-form-group>\n } @else {\n <!-- C8Y duocolor: dark + light uploads side by side -->\n <div class=\"row d-flex-md gap-16\">\n <div class=\"col-sm-6\">\n <c8y-form-group [hasError]=\"hasPrimarySvgError()\">\n <label translate>Dark layer SVG</label>\n @if (!primarySvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [attr.aria-label]=\"'Upload dark layer SVG' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop dark layer SVG' | translate\"\n (dropped)=\"onPrimaryDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"primarySvgErrors()\"\n [helpMessage]=\"\n hasPrimarySvgError()\n ? ''\n : ('Square viewBox \u00B7 currentColor fills \u00B7 main icon shape' | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (primaryValidation(); as pv) {\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <div class=\"d-flex a-i-center gap-8 p-8 separator m-b-4\">\n <div\n class=\"d-flex a-i-center j-c-center\"\n [style.width.px]=\"32\"\n [style.height.px]=\"32\"\n aria-hidden=\"true\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <span\n class=\"text-muted text-12 flex-grow\"\n translate\n >Dark layer</span\n >\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove dark layer SVG' | translate\"\n [tooltip]=\"'Remove dark layer SVG' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearPrimary()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n @if (primaryValidation(); as pv) {\n @if (pv.errors.length || pv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of pv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of pv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n }\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group [hasError]=\"hasLightSvgError()\">\n <label translate>Light layer SVG</label>\n @if (!lightSvg()) {\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n [attr.aria-label]=\"'Upload light layer SVG' | translate\"\n [accept]=\"'.svg'\"\n [maxAllowedFiles]=\"1\"\n [maxFileSizeInMegaBytes]=\"5\"\n [message]=\"'Drop light layer SVG' | translate\"\n (dropped)=\"onLightDropped($event)\"\n ></c8y-drop-area>\n <c8y-messages\n class=\"m-t-8\"\n role=\"status\"\n [show]=\"lightSvgErrors()\"\n [helpMessage]=\"\n hasLightSvgError()\n ? ''\n : ('Same viewBox as dark layer \u00B7 accent shape for the light tint'\n | translate)\n \"\n >\n <c8y-message\n [name]=\"'required'\"\n [text]=\"'Upload an SVG file.' | translate\"\n ></c8y-message>\n @if (lightValidation(); as lv) {\n @for (error of lv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of lv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n }\n </c8y-messages>\n } @else {\n <div class=\"d-flex a-i-center gap-8 p-8 separator m-b-4\">\n <div\n class=\"d-flex a-i-center j-c-center\"\n [style.width.px]=\"32\"\n [style.height.px]=\"32\"\n aria-hidden=\"true\"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n <span\n class=\"text-muted text-12 flex-grow\"\n translate\n >Light layer</span\n >\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove light layer SVG' | translate\"\n [tooltip]=\"'Remove light layer SVG' | translate\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n (click)=\"clearLight()\"\n >\n <i\n [c8yIcon]=\"'minus-circle'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n @if (lightValidation(); as lv) {\n @if (lv.errors.length || lv.warnings.length) {\n <small\n class=\"form-control-feedback-message\"\n role=\"status\"\n >\n @for (error of lv.errors; track error) {\n <div class=\"d-block text-danger\">{{ error }}</div>\n }\n @for (warning of lv.warnings; track warning) {\n <div class=\"d-block text-warning\">{{ warning }}</div>\n }\n </small>\n }\n }\n }\n </c8y-form-group>\n </div>\n </div>\n\n @if (showCompositePreview()) {\n <fieldset\n class=\"c8y-fieldset m-t-16\"\n aria-hidden=\"true\"\n >\n <legend translate>Composited preview</legend>\n <div class=\"row d-flex-md gap-16 p-b-16\">\n <!-- Light background -->\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-light-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border: 1px solid var(--c8y-root-component-border-color);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"p-relative\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n >\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n style=\"color: var(--c8y-root-component-icon-dark-color-dark)\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"\n top: 0;\n left: 0;\n color: var(--c8y-root-component-icon-dark-color-light);\n \"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n </div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n <!-- Dark background -->\n <div\n class=\"col-sm-6 d-flex a-i-end gap-8 j-c-around p-16 c8y-dark-theme\"\n style=\"\n background: var(--c8y-root-component-background-default);\n border-radius: var(--c8y-component-border-radius-base, 4px);\n \"\n >\n @for (size of previewSizes; track size) {\n <div class=\"d-flex d-col a-i-center\">\n <div\n class=\"p-relative\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n >\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n style=\"color: var(--c8y-root-component-icon-dark-color-dark)\"\n [innerHTML]=\"primaryPreviewHtml()\"\n ></div>\n <div\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"\n top: 0;\n left: 0;\n color: var(\n --c8y-component-icon-dark-color-light,\n var(--c8y-root-component-icon-dark-color-light)\n );\n \"\n [innerHTML]=\"lightPreviewHtml()\"\n ></div>\n </div>\n <small class=\"text-muted\">{{ size }}</small>\n </div>\n }\n </div>\n </div>\n </fieldset>\n }\n }\n </div>\n </div>\n }\n</c8y-modal>\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage", "additionalMessages"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "title", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
934
934
|
}
|
|
935
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
935
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AddCustomIconModalComponent, decorators: [{
|
|
936
936
|
type: Component,
|
|
937
937
|
args: [{ selector: 'c8y-add-custom-icon-modal', imports: [
|
|
938
938
|
ModalComponent,
|
|
@@ -976,10 +976,10 @@ class AddCustomIconModalService {
|
|
|
976
976
|
});
|
|
977
977
|
return ref.content.result;
|
|
978
978
|
}
|
|
979
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
980
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
979
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AddCustomIconModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
980
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AddCustomIconModalService, providedIn: 'root' }); }
|
|
981
981
|
}
|
|
982
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
982
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: AddCustomIconModalService, decorators: [{
|
|
983
983
|
type: Injectable,
|
|
984
984
|
args: [{ providedIn: 'root' }]
|
|
985
985
|
}] });
|
|
@@ -1063,7 +1063,7 @@ class ImportCustomIconsModalComponent {
|
|
|
1063
1063
|
const entries = await firstValueFrom(this.zip.getEntries(file));
|
|
1064
1064
|
const manifestEntry = entries.find(e => e.filename === 'icons.json');
|
|
1065
1065
|
if (!manifestEntry) {
|
|
1066
|
-
throw new Error(this.translate.instant(gettext('Invalid ZIP: missing icons.json')));
|
|
1066
|
+
throw new Error(this.translate.instant(gettext('Invalid ZIP file: missing icons.json')));
|
|
1067
1067
|
}
|
|
1068
1068
|
const blob = await firstValueFrom(this.zip.getData(manifestEntry));
|
|
1069
1069
|
const manifest = JSON.parse(await blob.text());
|
|
@@ -1113,10 +1113,10 @@ class ImportCustomIconsModalComponent {
|
|
|
1113
1113
|
}
|
|
1114
1114
|
return this.domSanitizer.bypassSecurityTrustHtml(sanitized.replace(/<svg/i, '<svg width="100%" height="100%" style="display:block"'));
|
|
1115
1115
|
}
|
|
1116
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1117
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1116
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: ImportCustomIconsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1117
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: ImportCustomIconsModalComponent, isStandalone: true, selector: "c8y-import-custom-icons-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"'Import custom icons' | translate\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"close()\"\n (onClose)=\"confirmImport()\"\n [close]=\"keepOpen\"\n [dismiss]=\"keepOpen\"\n [disabled]=\"state() !== 'previewing' || toImportIcons().length === 0\"\n [labels]=\"{\n cancel: 'Cancel',\n ok: 'Import' | translate\n }\"\n>\n <ng-container c8y-modal-title>\n <span\n [c8yIcon]=\"'data-import'\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n\n <div class=\"p-24\">\n @if (state() === 'idle') {\n <p\n class=\"text-16 text-center text-balance m-b-16\"\n translate\n >\n Upload a ZIP file previously exported from the icon selector to import custom icons into\n this tenant.\n </p>\n <div class=\"d-flex j-c-center\">\n <c8y-drop-area\n [icon]=\"'upload'\"\n style=\"width: 390px\"\n [title]=\"'Upload ZIP file' | translate\"\n accept=\".zip\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Drop ZIP file here or click to browse' | translate\"\n (dropped)=\"onZipDropped($event)\"\n ></c8y-drop-area>\n @if (dropError()) {\n <div\n class=\"alert alert-danger m-t-8\"\n role=\"alert\"\n >\n {{ dropError() }}\n </div>\n }\n </div>\n }\n\n @if (state() === 'previewing') {\n @if (toImportIcons().length) {\n <p\n class=\"m-b-8 text-bold\"\n translate\n >\n The following icons will be imported:\n </p>\n <ul class=\"list-unstyled m-b-16 separator-top\">\n @for (icon of toImportIcons(); track icon.name) {\n <li class=\"d-flex a-i-center gap-8 p-t-8 p-b-8 separator-bottom\">\n <span\n class=\"p-relative flex-no-shrink\"\n [style.width.px]=\"24\"\n [style.height.px]=\"24\"\n aria-hidden=\"true\"\n >\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n [class.text-default]=\"!icon.previewHtmlSecondary\"\n [style.color]=\"\n icon.previewHtmlSecondary\n ? 'var(--c8y-root-component-icon-dark-color-dark)'\n : null\n \"\n [innerHTML]=\"icon.previewHtml\"\n ></span>\n @if (icon.previewHtmlSecondary) {\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"top: 0; left: 0; color: var(--c8y-root-component-icon-dark-color-light)\"\n [innerHTML]=\"icon.previewHtmlSecondary\"\n ></span>\n }\n </span>\n <span class=\"flex-grow min-width-0 text-truncate\">\n {{ icon.name }}\n @if (icon.category && !icon.isOverride) {\n <small class=\"text-muted m-l-4\">{{ icon.category | translate }}</small>\n }\n </span>\n <span class=\"tag tag--info flex-no-shrink\">\n {{ familyLabels[icon.family] | translate }}\n </span>\n @if (icon.isOverride) {\n <span\n class=\"tag tag--warning flex-no-shrink\"\n translate\n >Override</span\n >\n }\n </li>\n }\n </ul>\n } @else if (allSkippedExist()) {\n <div\n class=\"alert alert-warning\"\n role=\"status\"\n translate\n >\n All icons in this file already exist in this tenant.\n </div>\n } @else {\n <div\n class=\"alert alert-warning\"\n role=\"status\"\n translate\n >\n No icons to import.\n </div>\n }\n @if (skippedIcons().length && !(allSkippedExist() && toImportIcons().length === 0)) {\n <p\n class=\"m-b-8 text-bold\"\n translate\n >\n The following icons will be skipped:\n </p>\n <ul class=\"list-unstyled m-b-16 separator-top\">\n @for (icon of skippedIcons(); track icon.name) {\n <li class=\"d-flex a-i-center gap-8 p-t-8 p-b-8 separator-bottom\">\n <span\n class=\"p-relative flex-no-shrink\"\n [style.width.px]=\"24\"\n [style.height.px]=\"24\"\n aria-hidden=\"true\"\n >\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n [class.text-default]=\"!icon.previewHtmlSecondary\"\n [style.color]=\"\n icon.previewHtmlSecondary\n ? 'var(--c8y-root-component-icon-dark-color-dark)'\n : null\n \"\n [innerHTML]=\"icon.previewHtml\"\n ></span>\n @if (icon.previewHtmlSecondary) {\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"top: 0; left: 0; color: var(--c8y-root-component-icon-dark-color-light)\"\n [innerHTML]=\"icon.previewHtmlSecondary\"\n ></span>\n }\n </span>\n <span class=\"flex-grow min-width-0 text-truncate\">\n {{ icon.name }}\n @if (icon.category && !icon.isOverride) {\n <small class=\"text-muted m-l-4\">{{ icon.category | translate }}</small>\n }\n </span>\n <span class=\"tag tag--warning flex-no-shrink\">\n {{ skipReasonLabels[icon.reason] | translate }}\n </span>\n </li>\n }\n </ul>\n }\n }\n\n @if (state() === 'importing') {\n <c8y-loading\n role=\"status\"\n [message]=\"'Importing icons\u2026' | translate\"\n ></c8y-loading>\n }\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1118
1118
|
}
|
|
1119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: ImportCustomIconsModalComponent, decorators: [{
|
|
1120
1120
|
type: Component,
|
|
1121
1121
|
args: [{ selector: 'c8y-import-custom-icons-modal', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1122
1122
|
C8yTranslatePipe,
|
|
@@ -1125,7 +1125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1125
1125
|
LoadingComponent,
|
|
1126
1126
|
ModalComponent,
|
|
1127
1127
|
IconDirective
|
|
1128
|
-
], template: "<c8y-modal\n [title]=\"'Import custom icons' | translate\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"close()\"\n (onClose)=\"confirmImport()\"\n [close]=\"keepOpen\"\n [dismiss]=\"keepOpen\"\n [disabled]=\"state() !== 'previewing' || toImportIcons().length === 0\"\n [labels]=\"{\n cancel: 'Cancel',\n ok: 'Import' | translate\n }\"\n>\n <ng-container c8y-modal-title>\n <span\n [c8yIcon]=\"'data-import'\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n\n <div class=\"p-24\">\n @if (state() === 'idle') {\n <p\n class=\"text-16 text-center text-balance m-b-16\"\n translate\n >\n Upload a ZIP file previously exported from the icon selector to import custom icons into\n this tenant.\n </p>\n <div class=\"d-flex j-c-center\">\n <c8y-drop-area\n [icon]=\"'upload'\"\n style=\"width: 390px\"\n [title]=\"'Upload
|
|
1128
|
+
], template: "<c8y-modal\n [title]=\"'Import custom icons' | translate\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"close()\"\n (onClose)=\"confirmImport()\"\n [close]=\"keepOpen\"\n [dismiss]=\"keepOpen\"\n [disabled]=\"state() !== 'previewing' || toImportIcons().length === 0\"\n [labels]=\"{\n cancel: 'Cancel',\n ok: 'Import' | translate\n }\"\n>\n <ng-container c8y-modal-title>\n <span\n [c8yIcon]=\"'data-import'\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n\n <div class=\"p-24\">\n @if (state() === 'idle') {\n <p\n class=\"text-16 text-center text-balance m-b-16\"\n translate\n >\n Upload a ZIP file previously exported from the icon selector to import custom icons into\n this tenant.\n </p>\n <div class=\"d-flex j-c-center\">\n <c8y-drop-area\n [icon]=\"'upload'\"\n style=\"width: 390px\"\n [title]=\"'Upload ZIP file' | translate\"\n accept=\".zip\"\n [maxAllowedFiles]=\"1\"\n [message]=\"'Drop ZIP file here or click to browse' | translate\"\n (dropped)=\"onZipDropped($event)\"\n ></c8y-drop-area>\n @if (dropError()) {\n <div\n class=\"alert alert-danger m-t-8\"\n role=\"alert\"\n >\n {{ dropError() }}\n </div>\n }\n </div>\n }\n\n @if (state() === 'previewing') {\n @if (toImportIcons().length) {\n <p\n class=\"m-b-8 text-bold\"\n translate\n >\n The following icons will be imported:\n </p>\n <ul class=\"list-unstyled m-b-16 separator-top\">\n @for (icon of toImportIcons(); track icon.name) {\n <li class=\"d-flex a-i-center gap-8 p-t-8 p-b-8 separator-bottom\">\n <span\n class=\"p-relative flex-no-shrink\"\n [style.width.px]=\"24\"\n [style.height.px]=\"24\"\n aria-hidden=\"true\"\n >\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n [class.text-default]=\"!icon.previewHtmlSecondary\"\n [style.color]=\"\n icon.previewHtmlSecondary\n ? 'var(--c8y-root-component-icon-dark-color-dark)'\n : null\n \"\n [innerHTML]=\"icon.previewHtml\"\n ></span>\n @if (icon.previewHtmlSecondary) {\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"top: 0; left: 0; color: var(--c8y-root-component-icon-dark-color-light)\"\n [innerHTML]=\"icon.previewHtmlSecondary\"\n ></span>\n }\n </span>\n <span class=\"flex-grow min-width-0 text-truncate\">\n {{ icon.name }}\n @if (icon.category && !icon.isOverride) {\n <small class=\"text-muted m-l-4\">{{ icon.category | translate }}</small>\n }\n </span>\n <span class=\"tag tag--info flex-no-shrink\">\n {{ familyLabels[icon.family] | translate }}\n </span>\n @if (icon.isOverride) {\n <span\n class=\"tag tag--warning flex-no-shrink\"\n translate\n >Override</span\n >\n }\n </li>\n }\n </ul>\n } @else if (allSkippedExist()) {\n <div\n class=\"alert alert-warning\"\n role=\"status\"\n translate\n >\n All icons in this file already exist in this tenant.\n </div>\n } @else {\n <div\n class=\"alert alert-warning\"\n role=\"status\"\n translate\n >\n No icons to import.\n </div>\n }\n @if (skippedIcons().length && !(allSkippedExist() && toImportIcons().length === 0)) {\n <p\n class=\"m-b-8 text-bold\"\n translate\n >\n The following icons will be skipped:\n </p>\n <ul class=\"list-unstyled m-b-16 separator-top\">\n @for (icon of skippedIcons(); track icon.name) {\n <li class=\"d-flex a-i-center gap-8 p-t-8 p-b-8 separator-bottom\">\n <span\n class=\"p-relative flex-no-shrink\"\n [style.width.px]=\"24\"\n [style.height.px]=\"24\"\n aria-hidden=\"true\"\n >\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h\"\n [class.text-default]=\"!icon.previewHtmlSecondary\"\n [style.color]=\"\n icon.previewHtmlSecondary\n ? 'var(--c8y-root-component-icon-dark-color-dark)'\n : null\n \"\n [innerHTML]=\"icon.previewHtml\"\n ></span>\n @if (icon.previewHtmlSecondary) {\n <span\n class=\"d-flex a-i-center j-c-center fit-w fit-h p-absolute\"\n style=\"top: 0; left: 0; color: var(--c8y-root-component-icon-dark-color-light)\"\n [innerHTML]=\"icon.previewHtmlSecondary\"\n ></span>\n }\n </span>\n <span class=\"flex-grow min-width-0 text-truncate\">\n {{ icon.name }}\n @if (icon.category && !icon.isOverride) {\n <small class=\"text-muted m-l-4\">{{ icon.category | translate }}</small>\n }\n </span>\n <span class=\"tag tag--warning flex-no-shrink\">\n {{ skipReasonLabels[icon.reason] | translate }}\n </span>\n </li>\n }\n </ul>\n }\n }\n\n @if (state() === 'importing') {\n <c8y-loading\n role=\"status\"\n [message]=\"'Importing icons\u2026' | translate\"\n ></c8y-loading>\n }\n </div>\n</c8y-modal>\n" }]
|
|
1129
1129
|
}] });
|
|
1130
1130
|
|
|
1131
1131
|
class ImportCustomIconsModalService {
|
|
@@ -1145,10 +1145,10 @@ class ImportCustomIconsModalService {
|
|
|
1145
1145
|
});
|
|
1146
1146
|
return ref.content.result;
|
|
1147
1147
|
}
|
|
1148
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1149
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: ImportCustomIconsModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1149
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: ImportCustomIconsModalService, providedIn: 'root' }); }
|
|
1150
1150
|
}
|
|
1151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: ImportCustomIconsModalService, decorators: [{
|
|
1152
1152
|
type: Injectable,
|
|
1153
1153
|
args: [{ providedIn: 'root' }]
|
|
1154
1154
|
}] });
|
|
@@ -1159,13 +1159,19 @@ function errorMessage(e, fallback) {
|
|
|
1159
1159
|
}
|
|
1160
1160
|
class IconSelectorComponent {
|
|
1161
1161
|
constructor() {
|
|
1162
|
-
// Exposed so templates can use gettext() for i18n string extraction inside @let expressions
|
|
1163
|
-
this.gettext = gettext;
|
|
1164
1162
|
/** Category labels to hide from the grid. Values are translated category strings (e.g. `gettext('Custom\`icons-category\`')`). */
|
|
1165
1163
|
this.iconCategoriesToExclude = [];
|
|
1166
1164
|
/** When true, displays the icon's CSS class name as a label beneath each tile. */
|
|
1167
1165
|
this.showIconClass = true;
|
|
1168
1166
|
this.onSelect = new EventEmitter();
|
|
1167
|
+
/** Per-icon labels for tooltips and accessible names. Each takes an `iconName` parameter. */
|
|
1168
|
+
this.overriddenIconLabel = gettext('"{{ iconName }}" (overridden)');
|
|
1169
|
+
this.iconActionsLabel = gettext('Actions for "{{ iconName }}"');
|
|
1170
|
+
this.editIconLabel = gettext('Edit "{{ iconName }}"');
|
|
1171
|
+
this.deleteIconLabel = gettext('Delete "{{ iconName }}"');
|
|
1172
|
+
this.overrideIconLabel = gettext('Override "{{ iconName }}"');
|
|
1173
|
+
this.replaceOverrideLabel = gettext('Replace override for "{{ iconName }}"');
|
|
1174
|
+
this.resetOverrideLabel = gettext('Reset override for "{{ iconName }}"');
|
|
1169
1175
|
this.allIconCategory = allIconCategory;
|
|
1170
1176
|
this.searchTerm$ = new BehaviorSubject('');
|
|
1171
1177
|
this.selectedIconCategory$ = new BehaviorSubject(allIconCategory);
|
|
@@ -1540,10 +1546,10 @@ class IconSelectorComponent {
|
|
|
1540
1546
|
a.click();
|
|
1541
1547
|
URL.revokeObjectURL(url);
|
|
1542
1548
|
}
|
|
1543
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1544
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: IconSelectorComponent, isStandalone: true, selector: "c8y-icon-selector", inputs: { iconCategoriesToExclude: "iconCategoriesToExclude", showIconClass: "showIconClass", selectedIcon: "selectedIcon" }, outputs: { onSelect: "onSelect" }, ngImport: i0, template: "<div\n class=\"p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom sticky-top\"\n style=\"background: var(--c8y-root-component-background-default); z-index: 2\"\n>\n <div class=\"row d-flex-sm\">\n <div class=\"col-sm-5 m-b-8\">\n <div\n class=\"input-group-search input-group\"\n style=\"width: auto\"\n >\n <label\n class=\"sr-only\"\n for=\"filter-icons\"\n translate\n >Filter icons</label\n >\n <input\n class=\"form-control\"\n id=\"filter-icons\"\n placeholder=\"{{ 'Type to filter icons\u2026' | translate }}\"\n type=\"search\"\n [ngModel]=\"searchTerm$ | async\"\n (ngModelChange)=\"onSearchChange($event)\"\n />\n @if (searchTerm$ | async) {\n <button\n class=\"input-group-addon\"\n [attr.aria-label]=\"'Clear search' | translate\"\n type=\"button\"\n (click)=\"onSearchChange('')\"\n >\n <i\n c8yIcon=\"times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n } @else {\n <span\n class=\"input-group-addon\"\n aria-hidden=\"true\"\n >\n <i\n c8yIcon=\"search\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n </div>\n </div>\n <div class=\"col-sm-7 m-b-8\">\n <div class=\"d-flex a-i-center j-c-end gap-16 text-left\">\n <div class=\"d-flex a-i-center flex-grow\">\n <label\n class=\"m-b-0 m-r-8 flex-no-shrink\"\n id=\"icon-category-filter-label\"\n translate\n >Collection</label\n >\n <c8y-select\n class=\"flex-grow\"\n [attr.aria-labelledby]=\"'icon-category-filter-label'\"\n [items]=\"availableIconCategoryItems$ | async\"\n [selected]=\"selectedIconCategory$ | async\"\n [canDeselect]=\"true\"\n (onSelect)=\"onCategoryFilterChanged($any($event).value)\"\n (onDeselect)=\"onCategoryFilterChanged(allIconCategory)\"\n ></c8y-select>\n </div>\n\n @if (isAdmin()) {\n <button\n class=\"btn btn-clean p-l-8 p-r-8 flex-no-shrink\"\n [title]=\"'Add custom icon' | translate\"\n [attr.aria-label]=\"'Add custom icon' | translate\"\n type=\"button\"\n (click)=\"onAddIconClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n aria-hidden=\"true\"\n ></i>\n <span translate>Add icon</span>\n </button>\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Import icons from ZIP' | translate\"\n [tooltip]=\"'Import icons from ZIP' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onImportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-import\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Import`verb, imports icons from a ZIP file`' | translate }}</span>\n </button>\n @if (hasCustomIcons()) {\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Export custom icons as ZIP' | translate\"\n [tooltip]=\"'Export custom icons as ZIP' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onExportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-export\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Export`verb, exports custom icons as a ZIP file`' | translate }}</span>\n </button>\n }\n }\n </div>\n </div>\n </div>\n\n @if (isSaving()) {\n <div\n class=\"p-absolute m-t-4 p-b-4 overflow-hidden\"\n style=\"left: 0; right: 0\"\n [attr.aria-label]=\"'Saving\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading layout=\"page\"></c8y-loading>\n </div>\n }\n</div>\n\n<div class=\"p-16\">\n @if (iconsLoading()) {\n <div\n class=\"d-flex a-i-center j-c-center p-32\"\n [attr.aria-label]=\"'Loading icons\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n } @else {\n <p\n class=\"sr-only\"\n role=\"status\"\n >\n @if (filteredIconCount() === 0) {\n {{ 'No icons found' | translate }}\n } @else {\n {{ '{{count}} icon(s) found' | translate: { count: filteredIconCount() } }}\n }\n </p>\n <section\n class=\"dtm-icon-grid\"\n [attr.aria-label]=\"'Icon grid' | translate\"\n [attr.aria-busy]=\"visibleDefinitions().length === 0 ? 'true' : null\"\n role=\"region\"\n >\n @for (iconDefinition of visibleDefinitions(); track iconDefinition.label) {\n <div\n class=\"d-contents\"\n [attr.aria-label]=\"iconDefinition.label | translate\"\n role=\"group\"\n >\n <div class=\"legend form-block center grid__col--fullspan d-flex a-i-center gap-8\">\n {{ iconDefinition.label | translate }}\n @if (customCategoryLabels().has(iconDefinition.label)) {\n <span class=\"tag tag--info m-l-4 m-t-0 m-b-0\">{{\n 'Custom`badge indicating a user-added icon category`' | translate\n }}</span>\n }\n </div>\n\n @for (icon of iconDefinition.icons; track icon[0]) {\n @let isCustom = isCustomIcon(icon[0]);\n @let isOverridden = isIconOverridden(icon[0]);\n @let overriddenLabel = gettext('{{name}} (overridden)');\n @let deleteHint = 'Select a different icon before deleting this one.' | translate;\n <div class=\"d-contents\">\n <div\n class=\"dtm-icon-grid__item\"\n [class.dtm-icon-grid__item--selected]=\"selectedIcon && icon[0] === selectedIcon\"\n [class.dtm-icon-grid__item--overridden]=\"isOverridden\"\n >\n <button\n class=\"dtm-icon-grid__btn\"\n [title]=\"icon[0] | iconName\"\n [attr.aria-label]=\"\n isOverridden\n ? (overriddenLabel | translate: { name: icon[0] | iconName })\n : (icon[0] | iconName)\n \"\n [attr.aria-current]=\"selectedIcon && icon[0] === selectedIcon ? 'true' : null\"\n (click)=\"onIconClicked(icon)\"\n >\n <i\n class=\"icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon[0]\"\n aria-hidden=\"true\"\n ></i>\n @if (showIconClass) {\n <small\n class=\"d-block text-center text-break-word\"\n aria-hidden=\"true\"\n >\n {{ icon[0] | iconName }}\n </small>\n }\n </button>\n\n @if (isOverridden) {\n <span\n class=\"dtm-icon-grid__override-marker\"\n [tooltip]=\"'Overridden icon' | translate\"\n placement=\"top\"\n container=\"body\"\n aria-hidden=\"true\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"replace\"></i>\n </span>\n }\n\n @if (isAdmin()) {\n <div\n class=\"dtm-icon-grid__actions\"\n [attr.aria-label]=\"'{{name}} actions' | translate: { name: icon[0] | iconName }\"\n role=\"group\"\n >\n @if (isCustom) {\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n 'Edit {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"'Edit {{name}}' | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onEditIconClicked(icon[0])\"\n >\n <i\n c8yIcon=\"pencil\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <span\n [tooltip]=\"icon[0] === selectedIcon ? deleteHint : null\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n >\n <button\n class=\"btn btn-dot btn-dot--danger m-0\"\n [class.disabled]=\"icon[0] === selectedIcon\"\n [attr.aria-label]=\"\n 'Delete {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"'Delete {{name}}' | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n [attr.aria-disabled]=\"icon[0] === selectedIcon ? 'true' : null\"\n [attr.aria-describedby]=\"\n icon[0] === selectedIcon ? 'delete-hint-' + icon[0] : null\n \"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"\n $event.stopPropagation();\n icon[0] === selectedIcon || onDeleteIconClicked(icon[0])\n \"\n >\n <i\n c8yIcon=\"minus-circle\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (icon[0] === selectedIcon) {\n <span\n class=\"sr-only\"\n [id]=\"'delete-hint-' + icon[0]\"\n >{{ deleteHint }}</span\n >\n }\n </span>\n } @else {\n @let overrideKey =\n isOverridden\n ? gettext('Replace override for {{name}}')\n : gettext('Override {{name}}');\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"overrideKey | translate: { name: icon[0] | iconName }\"\n [tooltip]=\"overrideKey | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onOverrideIconClicked(icon)\"\n >\n <i\n c8yIcon=\"replace\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (isOverridden) {\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"\n 'Reset override for {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"\n 'Reset override for {{name}}' | translate: { name: icon[0] | iconName }\n \"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onResetOverrideClicked(icon[0])\"\n >\n <i\n c8yIcon=\"undo\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <c8y-ui-empty-state\n class=\"grid__col--fullspan\"\n icon=\"search\"\n [title]=\"'No icons found' | translate\"\n [subtitle]=\"\n 'Try adjusting your search or filter to find what you\\'re looking for.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </section>\n }\n <!-- end @else iconsLoading -->\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "component", type: SelectComponent, selector: "c8y-select", inputs: ["placeholder", "items", "selected", "container", "multi", "canSelectWithSpace", "disabled", "autoClose", "insideClick", "required", "canDeselect", "name", "icon", "filterItems"], outputs: ["onSelect", "onDeselect", "onIconClick"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: IconNamePipe, name: "iconName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1549
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1550
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: IconSelectorComponent, isStandalone: true, selector: "c8y-icon-selector", inputs: { iconCategoriesToExclude: "iconCategoriesToExclude", showIconClass: "showIconClass", selectedIcon: "selectedIcon" }, outputs: { onSelect: "onSelect" }, ngImport: i0, template: "<div\n class=\"p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom sticky-top\"\n style=\"background: var(--c8y-root-component-background-default); z-index: 2\"\n>\n <div class=\"row d-flex-sm\">\n <div class=\"col-sm-5 m-b-8\">\n <div\n class=\"input-group-search input-group\"\n style=\"width: auto\"\n >\n <label\n class=\"sr-only\"\n for=\"filter-icons\"\n translate\n >Filter icons</label\n >\n <input\n class=\"form-control\"\n id=\"filter-icons\"\n placeholder=\"{{ 'Type to filter icons\u2026' | translate }}\"\n type=\"search\"\n [ngModel]=\"searchTerm$ | async\"\n (ngModelChange)=\"onSearchChange($event)\"\n />\n @if (searchTerm$ | async) {\n <button\n class=\"input-group-addon\"\n [attr.aria-label]=\"'Clear search' | translate\"\n type=\"button\"\n (click)=\"onSearchChange('')\"\n >\n <i\n c8yIcon=\"times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n } @else {\n <span\n class=\"input-group-addon\"\n aria-hidden=\"true\"\n >\n <i\n c8yIcon=\"search\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n </div>\n </div>\n <div class=\"col-sm-7 m-b-8\">\n <div class=\"d-flex a-i-center j-c-end gap-16 text-left\">\n <div class=\"d-flex a-i-center flex-grow\">\n <label\n class=\"m-b-0 m-r-8 flex-no-shrink\"\n id=\"icon-category-filter-label\"\n translate\n >Collection</label\n >\n <c8y-select\n class=\"flex-grow\"\n [attr.aria-labelledby]=\"'icon-category-filter-label'\"\n [items]=\"availableIconCategoryItems$ | async\"\n [selected]=\"selectedIconCategory$ | async\"\n [canDeselect]=\"true\"\n (onSelect)=\"onCategoryFilterChanged($any($event).value)\"\n (onDeselect)=\"onCategoryFilterChanged(allIconCategory)\"\n ></c8y-select>\n </div>\n\n @if (isAdmin()) {\n <button\n class=\"btn btn-clean p-l-8 p-r-8 flex-no-shrink\"\n [title]=\"'Add custom icon' | translate\"\n [attr.aria-label]=\"'Add custom icon' | translate\"\n type=\"button\"\n (click)=\"onAddIconClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n aria-hidden=\"true\"\n ></i>\n <span translate>Add icon</span>\n </button>\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Import icons from ZIP file' | translate\"\n [tooltip]=\"'Import icons from ZIP file' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onImportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-import\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Import`verb, imports icons from a ZIP file`' | translate }}</span>\n </button>\n @if (hasCustomIcons()) {\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Export custom icons as ZIP file' | translate\"\n [tooltip]=\"'Export custom icons as ZIP file' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onExportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-export\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Export`verb, exports custom icons as a ZIP file`' | translate }}</span>\n </button>\n }\n }\n </div>\n </div>\n </div>\n\n @if (isSaving()) {\n <div\n class=\"p-absolute m-t-4 p-b-4 overflow-hidden\"\n style=\"left: 0; right: 0\"\n [attr.aria-label]=\"'Saving\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading layout=\"page\"></c8y-loading>\n </div>\n }\n</div>\n\n<div class=\"p-16\">\n @if (iconsLoading()) {\n <div\n class=\"d-flex a-i-center j-c-center p-32\"\n [attr.aria-label]=\"'Loading icons\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n } @else {\n <p\n class=\"sr-only\"\n role=\"status\"\n >\n @if (filteredIconCount() === 0) {\n {{ 'No icons found' | translate }}\n } @else {\n {{ '{{count}} icon(s) found' | translate: { count: filteredIconCount() } }}\n }\n </p>\n <section\n class=\"dtm-icon-grid\"\n [attr.aria-label]=\"'Icon grid' | translate\"\n [attr.aria-busy]=\"visibleDefinitions().length === 0 ? 'true' : null\"\n role=\"region\"\n >\n @for (iconDefinition of visibleDefinitions(); track iconDefinition.label) {\n <div\n class=\"d-contents\"\n [attr.aria-label]=\"iconDefinition.label | translate\"\n role=\"group\"\n >\n <div class=\"legend form-block center grid__col--fullspan d-flex a-i-center gap-8\">\n {{ iconDefinition.label | translate }}\n @if (customCategoryLabels().has(iconDefinition.label)) {\n <span class=\"tag tag--info m-l-4 m-t-0 m-b-0\">{{\n 'Custom`badge indicating a user-added icon category`' | translate\n }}</span>\n }\n </div>\n\n @for (icon of iconDefinition.icons; track icon[0]) {\n @let isCustom = isCustomIcon(icon[0]);\n @let isOverridden = isIconOverridden(icon[0]);\n @let deleteHint = 'Select a different icon before deleting this one.' | translate;\n <div class=\"d-contents\">\n <div\n class=\"dtm-icon-grid__item\"\n [class.dtm-icon-grid__item--selected]=\"selectedIcon && icon[0] === selectedIcon\"\n [class.dtm-icon-grid__item--overridden]=\"isOverridden\"\n >\n <button\n class=\"dtm-icon-grid__btn\"\n [title]=\"icon[0] | iconName\"\n [attr.aria-label]=\"\n isOverridden\n ? (overriddenIconLabel | translate: { iconName: icon[0] | iconName })\n : (icon[0] | iconName)\n \"\n [attr.aria-current]=\"selectedIcon && icon[0] === selectedIcon ? 'true' : null\"\n (click)=\"onIconClicked(icon)\"\n >\n <i\n class=\"icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon[0]\"\n aria-hidden=\"true\"\n ></i>\n @if (showIconClass) {\n <small\n class=\"d-block text-center text-break-word\"\n aria-hidden=\"true\"\n >\n {{ icon[0] | iconName }}\n </small>\n }\n </button>\n\n @if (isOverridden) {\n <span\n class=\"dtm-icon-grid__override-marker\"\n [tooltip]=\"'Overridden icon' | translate\"\n placement=\"top\"\n container=\"body\"\n aria-hidden=\"true\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"replace\"></i>\n </span>\n }\n\n @if (isAdmin()) {\n <div\n class=\"dtm-icon-grid__actions\"\n [attr.aria-label]=\"\n iconActionsLabel | translate: { iconName: icon[0] | iconName }\n \"\n role=\"group\"\n >\n @if (isCustom) {\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n editIconLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"editIconLabel | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onEditIconClicked(icon[0])\"\n >\n <i\n c8yIcon=\"pencil\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <span\n [tooltip]=\"icon[0] === selectedIcon ? deleteHint : null\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n >\n <button\n class=\"btn btn-dot btn-dot--danger m-0\"\n [class.disabled]=\"icon[0] === selectedIcon\"\n [attr.aria-label]=\"\n deleteIconLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"deleteIconLabel | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n [attr.aria-disabled]=\"icon[0] === selectedIcon ? 'true' : null\"\n [attr.aria-describedby]=\"\n icon[0] === selectedIcon ? 'delete-hint-' + icon[0] : null\n \"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"\n $event.stopPropagation();\n icon[0] === selectedIcon || onDeleteIconClicked(icon[0])\n \"\n >\n <i\n c8yIcon=\"minus-circle\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (icon[0] === selectedIcon) {\n <span\n class=\"sr-only\"\n [id]=\"'delete-hint-' + icon[0]\"\n >{{ deleteHint }}</span\n >\n }\n </span>\n } @else {\n @let overrideKey = isOverridden ? replaceOverrideLabel : overrideIconLabel;\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n overrideKey | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"overrideKey | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onOverrideIconClicked(icon)\"\n >\n <i\n c8yIcon=\"replace\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (isOverridden) {\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"\n resetOverrideLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"\n resetOverrideLabel | translate: { iconName: icon[0] | iconName }\n \"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onResetOverrideClicked(icon[0])\"\n >\n <i\n c8yIcon=\"undo\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <c8y-ui-empty-state\n class=\"grid__col--fullspan\"\n icon=\"search\"\n [title]=\"'No icons found' | translate\"\n [subtitle]=\"\n 'Try adjusting your search or filter to find what you\\'re looking for.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </section>\n }\n <!-- end @else iconsLoading -->\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "component", type: SelectComponent, selector: "c8y-select", inputs: ["placeholder", "items", "selected", "container", "multi", "canSelectWithSpace", "disabled", "autoClose", "insideClick", "required", "canDeselect", "name", "icon", "filterItems"], outputs: ["onSelect", "onDeselect", "onIconClick"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: IconNamePipe, name: "iconName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1545
1551
|
}
|
|
1546
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1552
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorComponent, decorators: [{
|
|
1547
1553
|
type: Component,
|
|
1548
1554
|
args: [{ selector: 'c8y-icon-selector', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1549
1555
|
FormsModule,
|
|
@@ -1556,7 +1562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1556
1562
|
LoadingComponent,
|
|
1557
1563
|
SelectComponent,
|
|
1558
1564
|
TooltipModule
|
|
1559
|
-
], template: "<div\n class=\"p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom sticky-top\"\n style=\"background: var(--c8y-root-component-background-default); z-index: 2\"\n>\n <div class=\"row d-flex-sm\">\n <div class=\"col-sm-5 m-b-8\">\n <div\n class=\"input-group-search input-group\"\n style=\"width: auto\"\n >\n <label\n class=\"sr-only\"\n for=\"filter-icons\"\n translate\n >Filter icons</label\n >\n <input\n class=\"form-control\"\n id=\"filter-icons\"\n placeholder=\"{{ 'Type to filter icons\u2026' | translate }}\"\n type=\"search\"\n [ngModel]=\"searchTerm$ | async\"\n (ngModelChange)=\"onSearchChange($event)\"\n />\n @if (searchTerm$ | async) {\n <button\n class=\"input-group-addon\"\n [attr.aria-label]=\"'Clear search' | translate\"\n type=\"button\"\n (click)=\"onSearchChange('')\"\n >\n <i\n c8yIcon=\"times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n } @else {\n <span\n class=\"input-group-addon\"\n aria-hidden=\"true\"\n >\n <i\n c8yIcon=\"search\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n </div>\n </div>\n <div class=\"col-sm-7 m-b-8\">\n <div class=\"d-flex a-i-center j-c-end gap-16 text-left\">\n <div class=\"d-flex a-i-center flex-grow\">\n <label\n class=\"m-b-0 m-r-8 flex-no-shrink\"\n id=\"icon-category-filter-label\"\n translate\n >Collection</label\n >\n <c8y-select\n class=\"flex-grow\"\n [attr.aria-labelledby]=\"'icon-category-filter-label'\"\n [items]=\"availableIconCategoryItems$ | async\"\n [selected]=\"selectedIconCategory$ | async\"\n [canDeselect]=\"true\"\n (onSelect)=\"onCategoryFilterChanged($any($event).value)\"\n (onDeselect)=\"onCategoryFilterChanged(allIconCategory)\"\n ></c8y-select>\n </div>\n\n @if (isAdmin()) {\n <button\n class=\"btn btn-clean p-l-8 p-r-8 flex-no-shrink\"\n [title]=\"'Add custom icon' | translate\"\n [attr.aria-label]=\"'Add custom icon' | translate\"\n type=\"button\"\n (click)=\"onAddIconClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n aria-hidden=\"true\"\n ></i>\n <span translate>Add icon</span>\n </button>\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Import icons from ZIP' | translate\"\n [tooltip]=\"'Import icons from ZIP' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onImportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-import\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Import`verb, imports icons from a ZIP file`' | translate }}</span>\n </button>\n @if (hasCustomIcons()) {\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Export custom icons as ZIP' | translate\"\n [tooltip]=\"'Export custom icons as ZIP' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onExportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-export\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Export`verb, exports custom icons as a ZIP file`' | translate }}</span>\n </button>\n }\n }\n </div>\n </div>\n </div>\n\n @if (isSaving()) {\n <div\n class=\"p-absolute m-t-4 p-b-4 overflow-hidden\"\n style=\"left: 0; right: 0\"\n [attr.aria-label]=\"'Saving\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading layout=\"page\"></c8y-loading>\n </div>\n }\n</div>\n\n<div class=\"p-16\">\n @if (iconsLoading()) {\n <div\n class=\"d-flex a-i-center j-c-center p-32\"\n [attr.aria-label]=\"'Loading icons\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n } @else {\n <p\n class=\"sr-only\"\n role=\"status\"\n >\n @if (filteredIconCount() === 0) {\n {{ 'No icons found' | translate }}\n } @else {\n {{ '{{count}} icon(s) found' | translate: { count: filteredIconCount() } }}\n }\n </p>\n <section\n class=\"dtm-icon-grid\"\n [attr.aria-label]=\"'Icon grid' | translate\"\n [attr.aria-busy]=\"visibleDefinitions().length === 0 ? 'true' : null\"\n role=\"region\"\n >\n @for (iconDefinition of visibleDefinitions(); track iconDefinition.label) {\n <div\n class=\"d-contents\"\n [attr.aria-label]=\"iconDefinition.label | translate\"\n role=\"group\"\n >\n <div class=\"legend form-block center grid__col--fullspan d-flex a-i-center gap-8\">\n {{ iconDefinition.label | translate }}\n @if (customCategoryLabels().has(iconDefinition.label)) {\n <span class=\"tag tag--info m-l-4 m-t-0 m-b-0\">{{\n 'Custom`badge indicating a user-added icon category`' | translate\n }}</span>\n }\n </div>\n\n @for (icon of iconDefinition.icons; track icon[0]) {\n @let isCustom = isCustomIcon(icon[0]);\n @let isOverridden = isIconOverridden(icon[0]);\n @let overriddenLabel = gettext('{{name}} (overridden)');\n @let deleteHint = 'Select a different icon before deleting this one.' | translate;\n <div class=\"d-contents\">\n <div\n class=\"dtm-icon-grid__item\"\n [class.dtm-icon-grid__item--selected]=\"selectedIcon && icon[0] === selectedIcon\"\n [class.dtm-icon-grid__item--overridden]=\"isOverridden\"\n >\n <button\n class=\"dtm-icon-grid__btn\"\n [title]=\"icon[0] | iconName\"\n [attr.aria-label]=\"\n isOverridden\n ? (overriddenLabel | translate: { name: icon[0] | iconName })\n : (icon[0] | iconName)\n \"\n [attr.aria-current]=\"selectedIcon && icon[0] === selectedIcon ? 'true' : null\"\n (click)=\"onIconClicked(icon)\"\n >\n <i\n class=\"icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon[0]\"\n aria-hidden=\"true\"\n ></i>\n @if (showIconClass) {\n <small\n class=\"d-block text-center text-break-word\"\n aria-hidden=\"true\"\n >\n {{ icon[0] | iconName }}\n </small>\n }\n </button>\n\n @if (isOverridden) {\n <span\n class=\"dtm-icon-grid__override-marker\"\n [tooltip]=\"'Overridden icon' | translate\"\n placement=\"top\"\n container=\"body\"\n aria-hidden=\"true\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"replace\"></i>\n </span>\n }\n\n @if (isAdmin()) {\n <div\n class=\"dtm-icon-grid__actions\"\n [attr.aria-label]=\"'{{name}} actions' | translate: { name: icon[0] | iconName }\"\n role=\"group\"\n >\n @if (isCustom) {\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n 'Edit {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"'Edit {{name}}' | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onEditIconClicked(icon[0])\"\n >\n <i\n c8yIcon=\"pencil\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <span\n [tooltip]=\"icon[0] === selectedIcon ? deleteHint : null\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n >\n <button\n class=\"btn btn-dot btn-dot--danger m-0\"\n [class.disabled]=\"icon[0] === selectedIcon\"\n [attr.aria-label]=\"\n 'Delete {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"'Delete {{name}}' | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n [attr.aria-disabled]=\"icon[0] === selectedIcon ? 'true' : null\"\n [attr.aria-describedby]=\"\n icon[0] === selectedIcon ? 'delete-hint-' + icon[0] : null\n \"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"\n $event.stopPropagation();\n icon[0] === selectedIcon || onDeleteIconClicked(icon[0])\n \"\n >\n <i\n c8yIcon=\"minus-circle\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (icon[0] === selectedIcon) {\n <span\n class=\"sr-only\"\n [id]=\"'delete-hint-' + icon[0]\"\n >{{ deleteHint }}</span\n >\n }\n </span>\n } @else {\n @let overrideKey =\n isOverridden\n ? gettext('Replace override for {{name}}')\n : gettext('Override {{name}}');\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"overrideKey | translate: { name: icon[0] | iconName }\"\n [tooltip]=\"overrideKey | translate: { name: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onOverrideIconClicked(icon)\"\n >\n <i\n c8yIcon=\"replace\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (isOverridden) {\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"\n 'Reset override for {{name}}' | translate: { name: icon[0] | iconName }\n \"\n [tooltip]=\"\n 'Reset override for {{name}}' | translate: { name: icon[0] | iconName }\n \"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onResetOverrideClicked(icon[0])\"\n >\n <i\n c8yIcon=\"undo\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <c8y-ui-empty-state\n class=\"grid__col--fullspan\"\n icon=\"search\"\n [title]=\"'No icons found' | translate\"\n [subtitle]=\"\n 'Try adjusting your search or filter to find what you\\'re looking for.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </section>\n }\n <!-- end @else iconsLoading -->\n</div>\n" }]
|
|
1565
|
+
], template: "<div\n class=\"p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom sticky-top\"\n style=\"background: var(--c8y-root-component-background-default); z-index: 2\"\n>\n <div class=\"row d-flex-sm\">\n <div class=\"col-sm-5 m-b-8\">\n <div\n class=\"input-group-search input-group\"\n style=\"width: auto\"\n >\n <label\n class=\"sr-only\"\n for=\"filter-icons\"\n translate\n >Filter icons</label\n >\n <input\n class=\"form-control\"\n id=\"filter-icons\"\n placeholder=\"{{ 'Type to filter icons\u2026' | translate }}\"\n type=\"search\"\n [ngModel]=\"searchTerm$ | async\"\n (ngModelChange)=\"onSearchChange($event)\"\n />\n @if (searchTerm$ | async) {\n <button\n class=\"input-group-addon\"\n [attr.aria-label]=\"'Clear search' | translate\"\n type=\"button\"\n (click)=\"onSearchChange('')\"\n >\n <i\n c8yIcon=\"times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n } @else {\n <span\n class=\"input-group-addon\"\n aria-hidden=\"true\"\n >\n <i\n c8yIcon=\"search\"\n aria-hidden=\"true\"\n ></i>\n </span>\n }\n </div>\n </div>\n <div class=\"col-sm-7 m-b-8\">\n <div class=\"d-flex a-i-center j-c-end gap-16 text-left\">\n <div class=\"d-flex a-i-center flex-grow\">\n <label\n class=\"m-b-0 m-r-8 flex-no-shrink\"\n id=\"icon-category-filter-label\"\n translate\n >Collection</label\n >\n <c8y-select\n class=\"flex-grow\"\n [attr.aria-labelledby]=\"'icon-category-filter-label'\"\n [items]=\"availableIconCategoryItems$ | async\"\n [selected]=\"selectedIconCategory$ | async\"\n [canDeselect]=\"true\"\n (onSelect)=\"onCategoryFilterChanged($any($event).value)\"\n (onDeselect)=\"onCategoryFilterChanged(allIconCategory)\"\n ></c8y-select>\n </div>\n\n @if (isAdmin()) {\n <button\n class=\"btn btn-clean p-l-8 p-r-8 flex-no-shrink\"\n [title]=\"'Add custom icon' | translate\"\n [attr.aria-label]=\"'Add custom icon' | translate\"\n type=\"button\"\n (click)=\"onAddIconClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n aria-hidden=\"true\"\n ></i>\n <span translate>Add icon</span>\n </button>\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Import icons from ZIP file' | translate\"\n [tooltip]=\"'Import icons from ZIP file' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onImportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-import\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Import`verb, imports icons from a ZIP file`' | translate }}</span>\n </button>\n @if (hasCustomIcons()) {\n <button\n class=\"btn btn-clean flex-no-shrink\"\n [attr.aria-label]=\"'Export custom icons as ZIP file' | translate\"\n [tooltip]=\"'Export custom icons as ZIP file' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"onExportClicked()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"data-export\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ 'Export`verb, exports custom icons as a ZIP file`' | translate }}</span>\n </button>\n }\n }\n </div>\n </div>\n </div>\n\n @if (isSaving()) {\n <div\n class=\"p-absolute m-t-4 p-b-4 overflow-hidden\"\n style=\"left: 0; right: 0\"\n [attr.aria-label]=\"'Saving\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading layout=\"page\"></c8y-loading>\n </div>\n }\n</div>\n\n<div class=\"p-16\">\n @if (iconsLoading()) {\n <div\n class=\"d-flex a-i-center j-c-center p-32\"\n [attr.aria-label]=\"'Loading icons\u2026' | translate\"\n role=\"status\"\n >\n <c8y-loading></c8y-loading>\n </div>\n } @else {\n <p\n class=\"sr-only\"\n role=\"status\"\n >\n @if (filteredIconCount() === 0) {\n {{ 'No icons found' | translate }}\n } @else {\n {{ '{{count}} icon(s) found' | translate: { count: filteredIconCount() } }}\n }\n </p>\n <section\n class=\"dtm-icon-grid\"\n [attr.aria-label]=\"'Icon grid' | translate\"\n [attr.aria-busy]=\"visibleDefinitions().length === 0 ? 'true' : null\"\n role=\"region\"\n >\n @for (iconDefinition of visibleDefinitions(); track iconDefinition.label) {\n <div\n class=\"d-contents\"\n [attr.aria-label]=\"iconDefinition.label | translate\"\n role=\"group\"\n >\n <div class=\"legend form-block center grid__col--fullspan d-flex a-i-center gap-8\">\n {{ iconDefinition.label | translate }}\n @if (customCategoryLabels().has(iconDefinition.label)) {\n <span class=\"tag tag--info m-l-4 m-t-0 m-b-0\">{{\n 'Custom`badge indicating a user-added icon category`' | translate\n }}</span>\n }\n </div>\n\n @for (icon of iconDefinition.icons; track icon[0]) {\n @let isCustom = isCustomIcon(icon[0]);\n @let isOverridden = isIconOverridden(icon[0]);\n @let deleteHint = 'Select a different icon before deleting this one.' | translate;\n <div class=\"d-contents\">\n <div\n class=\"dtm-icon-grid__item\"\n [class.dtm-icon-grid__item--selected]=\"selectedIcon && icon[0] === selectedIcon\"\n [class.dtm-icon-grid__item--overridden]=\"isOverridden\"\n >\n <button\n class=\"dtm-icon-grid__btn\"\n [title]=\"icon[0] | iconName\"\n [attr.aria-label]=\"\n isOverridden\n ? (overriddenIconLabel | translate: { iconName: icon[0] | iconName })\n : (icon[0] | iconName)\n \"\n [attr.aria-current]=\"selectedIcon && icon[0] === selectedIcon ? 'true' : null\"\n (click)=\"onIconClicked(icon)\"\n >\n <i\n class=\"icon-40 c8y-icon-duocolor\"\n [c8yIcon]=\"icon[0]\"\n aria-hidden=\"true\"\n ></i>\n @if (showIconClass) {\n <small\n class=\"d-block text-center text-break-word\"\n aria-hidden=\"true\"\n >\n {{ icon[0] | iconName }}\n </small>\n }\n </button>\n\n @if (isOverridden) {\n <span\n class=\"dtm-icon-grid__override-marker\"\n [tooltip]=\"'Overridden icon' | translate\"\n placement=\"top\"\n container=\"body\"\n aria-hidden=\"true\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"replace\"></i>\n </span>\n }\n\n @if (isAdmin()) {\n <div\n class=\"dtm-icon-grid__actions\"\n [attr.aria-label]=\"\n iconActionsLabel | translate: { iconName: icon[0] | iconName }\n \"\n role=\"group\"\n >\n @if (isCustom) {\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n editIconLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"editIconLabel | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onEditIconClicked(icon[0])\"\n >\n <i\n c8yIcon=\"pencil\"\n aria-hidden=\"true\"\n ></i>\n </button>\n <span\n [tooltip]=\"icon[0] === selectedIcon ? deleteHint : null\"\n placement=\"top\"\n container=\"body\"\n [delay]=\"500\"\n >\n <button\n class=\"btn btn-dot btn-dot--danger m-0\"\n [class.disabled]=\"icon[0] === selectedIcon\"\n [attr.aria-label]=\"\n deleteIconLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"deleteIconLabel | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n [attr.aria-disabled]=\"icon[0] === selectedIcon ? 'true' : null\"\n [attr.aria-describedby]=\"\n icon[0] === selectedIcon ? 'delete-hint-' + icon[0] : null\n \"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"\n $event.stopPropagation();\n icon[0] === selectedIcon || onDeleteIconClicked(icon[0])\n \"\n >\n <i\n c8yIcon=\"minus-circle\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (icon[0] === selectedIcon) {\n <span\n class=\"sr-only\"\n [id]=\"'delete-hint-' + icon[0]\"\n >{{ deleteHint }}</span\n >\n }\n </span>\n } @else {\n @let overrideKey = isOverridden ? replaceOverrideLabel : overrideIconLabel;\n <button\n class=\"btn btn-dot\"\n [attr.aria-label]=\"\n overrideKey | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"overrideKey | translate: { iconName: icon[0] | iconName }\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onOverrideIconClicked(icon)\"\n >\n <i\n c8yIcon=\"replace\"\n aria-hidden=\"true\"\n ></i>\n </button>\n @if (isOverridden) {\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"\n resetOverrideLabel | translate: { iconName: icon[0] | iconName }\n \"\n [tooltip]=\"\n resetOverrideLabel | translate: { iconName: icon[0] | iconName }\n \"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); onResetOverrideClicked(icon[0])\"\n >\n <i\n c8yIcon=\"undo\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <c8y-ui-empty-state\n class=\"grid__col--fullspan\"\n icon=\"search\"\n [title]=\"'No icons found' | translate\"\n [subtitle]=\"\n 'Try adjusting your search or filter to find what you\\'re looking for.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n </section>\n }\n <!-- end @else iconsLoading -->\n</div>\n" }]
|
|
1560
1566
|
}], ctorParameters: () => [], propDecorators: { iconCategoriesToExclude: [{
|
|
1561
1567
|
type: Input
|
|
1562
1568
|
}], showIconClass: [{
|
|
@@ -1596,10 +1602,10 @@ class IconSelectorModalComponent {
|
|
|
1596
1602
|
this.selectionExplicitlySet = true;
|
|
1597
1603
|
this.cdr.markForCheck();
|
|
1598
1604
|
}
|
|
1599
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1600
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
1605
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1606
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.19", type: IconSelectorModalComponent, isStandalone: true, selector: "c8y-icon-selector-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title | translate\"\n (onDismiss)=\"close()\"\n (onClose)=\"saveChanges()\"\n headerClasses=\"text-center\"\n [disabled]=\"!selectionExplicitlySet\"\n [labels]=\"{ cancel: 'Cancel', ok: saveButtonLabel | translate }\"\n>\n <c8y-icon-selector\n [selectedIcon]=\"currentSelection\"\n [iconCategoriesToExclude]=\"iconCategoriesToExclude\"\n [showIconClass]=\"showIconClass\"\n (onSelect)=\"selectionChange($event)\"\n ></c8y-icon-selector>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: IconSelectorComponent, selector: "c8y-icon-selector", inputs: ["iconCategoriesToExclude", "showIconClass", "selectedIcon"], outputs: ["onSelect"] }, { kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1601
1607
|
}
|
|
1602
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1608
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModalComponent, decorators: [{
|
|
1603
1609
|
type: Component,
|
|
1604
1610
|
args: [{ selector: 'c8y-icon-selector-modal', changeDetection: ChangeDetectionStrategy.OnPush, imports: [IconSelectorComponent, C8yTranslatePipe, ModalComponent], template: "<c8y-modal\n [title]=\"title | translate\"\n (onDismiss)=\"close()\"\n (onClose)=\"saveChanges()\"\n headerClasses=\"text-center\"\n [disabled]=\"!selectionExplicitlySet\"\n [labels]=\"{ cancel: 'Cancel', ok: saveButtonLabel | translate }\"\n>\n <c8y-icon-selector\n [selectedIcon]=\"currentSelection\"\n [iconCategoriesToExclude]=\"iconCategoriesToExclude\"\n [showIconClass]=\"showIconClass\"\n (onSelect)=\"selectionChange($event)\"\n ></c8y-icon-selector>\n</c8y-modal>\n" }]
|
|
1605
1611
|
}] });
|
|
@@ -1622,10 +1628,10 @@ class IconSelectorService {
|
|
|
1622
1628
|
const content = modal.content;
|
|
1623
1629
|
return content.result;
|
|
1624
1630
|
}
|
|
1625
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1626
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1631
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorService, deps: [{ token: i1$1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1632
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorService, providedIn: 'root' }); }
|
|
1627
1633
|
}
|
|
1628
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorService, decorators: [{
|
|
1629
1635
|
type: Injectable,
|
|
1630
1636
|
args: [{ providedIn: 'root' }]
|
|
1631
1637
|
}], ctorParameters: () => [{ type: i1$1.BsModalService }] });
|
|
@@ -1713,8 +1719,8 @@ class IconSelectorWrapperComponent {
|
|
|
1713
1719
|
// nothing to do
|
|
1714
1720
|
}
|
|
1715
1721
|
}
|
|
1716
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1717
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1722
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1723
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: IconSelectorWrapperComponent, isStandalone: true, selector: "c8y-icon-selector-wrapper", inputs: { canRemoveIcon: "canRemoveIcon", selectedIcon: "selectedIcon", iconSize: "iconSize" }, outputs: { onSelect: "onSelect" }, providers: [
|
|
1718
1724
|
{
|
|
1719
1725
|
provide: NG_VALUE_ACCESSOR,
|
|
1720
1726
|
useExisting: forwardRef(() => IconSelectorWrapperComponent),
|
|
@@ -1722,7 +1728,7 @@ class IconSelectorWrapperComponent {
|
|
|
1722
1728
|
}
|
|
1723
1729
|
], ngImport: i0, template: "<div class=\"d-flex a-i-center j-c-center p-relative\">\n @if (selectedIcon) {\n <div class=\"icon-{{ iconSize }} text-center fit-w fit-h\">\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"selectedIcon\"\n aria-hidden=\"true\"\n ></i>\n </div>\n }\n\n @if (!selectedIcon) {\n <div\n class=\"icon-{{ iconSize }} text-muted text-center a-s-stretch fit-w\"\n style=\"border: 2px dashed var(--c8y-root-component-border-color)\"\n >\n <span class=\"d-flex a-i-center j-c-center text-12 fit-h\">\n <em>{{ 'Auto`icon-selector: automatic / default icon`' | translate }}</em>\n </span>\n </div>\n }\n <div class=\"showOnHover d-flex j-c-center a-i-center p-absolute fit-h fit-w\">\n @if (!selectedIcon) {\n <button\n class=\"btn btn-clean btn-icon btn-sm m-0\"\n title=\"{{ 'Select icon' | translate }}\"\n [attr.aria-label]=\"'Select icon' | translate\"\n type=\"button\"\n (click)=\"openIconSelector()\"\n >\n {{ 'Select' | translate }}\n </button>\n }\n @if (selectedIcon) {\n <button\n class=\"btn-dot btn-icon m-0 fit-h\"\n [attr.aria-label]=\"'Change icon' | translate\"\n tooltip=\"{{ 'Change icon' | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"openIconSelector()\"\n >\n <i\n [c8yIcon]=\"'replace'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n @if (selectedIcon && canRemoveIcon) {\n <button\n class=\"btn-dot btn-dot--danger btn-icon fit-h m-0\"\n [attr.aria-label]=\"'Remove icon and use default icon' | translate\"\n tooltip=\"{{ 'Remove icon and use default icon' | translate }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeIcon()\"\n >\n <i\n [c8yIcon]=\"'trash'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1724
1730
|
}
|
|
1725
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1731
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorWrapperComponent, decorators: [{
|
|
1726
1732
|
type: Component,
|
|
1727
1733
|
args: [{ selector: 'c8y-icon-selector-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
1728
1734
|
{
|
|
@@ -1742,8 +1748,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
1742
1748
|
}] } });
|
|
1743
1749
|
|
|
1744
1750
|
class IconSelectorModule {
|
|
1745
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1746
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.
|
|
1751
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1752
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModule, imports: [FormsModule,
|
|
1747
1753
|
DropAreaModule,
|
|
1748
1754
|
TooltipModule,
|
|
1749
1755
|
IconSelectorComponent,
|
|
@@ -1753,13 +1759,13 @@ class IconSelectorModule {
|
|
|
1753
1759
|
IconSelectorModalComponent,
|
|
1754
1760
|
IconNamePipe,
|
|
1755
1761
|
IconSelectorWrapperComponent] }); }
|
|
1756
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.
|
|
1762
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModule, imports: [FormsModule,
|
|
1757
1763
|
DropAreaModule,
|
|
1758
1764
|
TooltipModule,
|
|
1759
1765
|
IconSelectorComponent,
|
|
1760
1766
|
IconSelectorModalComponent] }); }
|
|
1761
1767
|
}
|
|
1762
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1768
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: IconSelectorModule, decorators: [{
|
|
1763
1769
|
type: NgModule,
|
|
1764
1770
|
args: [{
|
|
1765
1771
|
imports: [
|