@yuuvis/client-framework 2.20.1 → 3.0.0-beta.20.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/actions/index.d.ts +230 -9
- package/app-bar/index.d.ts +50 -1
- package/autocomplete/index.d.ts +89 -3
- package/breadcrumb/index.d.ts +112 -2
- package/clipboard/index.d.ts +19 -1
- package/common/index.d.ts +536 -7
- package/datepicker/index.d.ts +380 -6
- package/fesm2022/yuuvis-client-framework-actions.mjs +31 -32
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-app-bar.mjs +14 -17
- package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs +23 -23
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +7 -8
- package/fesm2022/yuuvis-client-framework-breadcrumb.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-clipboard.mjs +8 -10
- package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-common.mjs +191 -234
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +110 -145
- package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-forms.mjs +283 -250
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +18 -19
- package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-list.mjs +59 -57
- package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-master-details.mjs +23 -18
- package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -9
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +32 -32
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +129 -120
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +67 -59
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +58 -60
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +64 -47
- package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +206 -183
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +42 -42
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-versions.mjs +28 -29
- package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs +10 -10
- package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +16 -16
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-pagination.mjs +7 -8
- package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-popout.mjs +55 -57
- package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-query-list.mjs +29 -29
- package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-renderer.mjs +71 -68
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +20 -25
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-simple-search.mjs +31 -33
- package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sort.mjs +57 -37
- package/fesm2022/yuuvis-client-framework-sort.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-split-view.mjs +39 -38
- package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +119 -121
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-token-search.mjs +22 -22
- package/fesm2022/yuuvis-client-framework-token-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tree.mjs +32 -44
- package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs +22 -26
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-widget-grid.mjs +80 -77
- package/fesm2022/yuuvis-client-framework-widget-grid.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework.mjs +23 -23
- package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
- package/forms/index.d.ts +633 -13
- package/icons/index.d.ts +79 -4
- package/index.d.ts +909 -6
- package/list/index.d.ts +380 -4
- package/master-details/index.d.ts +69 -3
- package/metadata-form/index.d.ts +189 -6
- package/metadata-form-defaults/index.d.ts +14 -2
- package/object-details/index.d.ts +321 -9
- package/object-flavor/index.d.ts +86 -6
- package/object-form/index.d.ts +288 -4
- package/object-preview/index.d.ts +82 -2
- package/object-relationship/index.d.ts +120 -5
- package/object-summary/index.d.ts +105 -4
- package/object-versions/index.d.ts +43 -2
- package/overflow-hidden/index.d.ts +28 -2
- package/overflow-menu/index.d.ts +52 -3
- package/package.json +12 -12
- package/pagination/index.d.ts +31 -2
- package/popout/index.d.ts +106 -5
- package/query-list/index.d.ts +497 -2
- package/renderer/index.d.ts +117 -10
- package/sequence-list/index.d.ts +60 -2
- package/simple-search/index.d.ts +57 -1
- package/sort/index.d.ts +36 -2
- package/split-view/index.d.ts +197 -4
- package/tile-list/index.d.ts +789 -10
- package/token-search/index.d.ts +72 -3
- package/tree/index.d.ts +68 -2
- package/upload-progress/index.d.ts +44 -2
- package/widget-grid/index.d.ts +299 -7
- package/actions/lib/actions/copy-action/copy-action.d.ts +0 -17
- package/actions/lib/actions/cut-action/cut-action.d.ts +0 -17
- package/actions/lib/actions/delete-action/delete/delete.component.d.ts +0 -22
- package/actions/lib/actions/delete-action/delete-action.d.ts +0 -18
- package/actions/lib/actions/download-action/download-action.d.ts +0 -17
- package/actions/lib/actions.icon.d.ts +0 -7
- package/actions/lib/actions.interface.d.ts +0 -86
- package/actions/lib/actions.module.d.ts +0 -11
- package/actions/lib/actions.service.d.ts +0 -58
- package/actions/lib/components/contextmenu/contextmenu.component.d.ts +0 -16
- package/actions/lib/components/contextmenu/contextmenu.model.d.ts +0 -9
- package/actions/lib/components/contextmenu/contextmenuTrigger.directive.d.ts +0 -12
- package/app-bar/lib/app-bar.component.d.ts +0 -47
- package/autocomplete/lib/autocomplete.component.d.ts +0 -74
- package/autocomplete/lib/autocomplete.interface.d.ts +0 -4
- package/autocomplete/lib/autocomplete.module.d.ts +0 -7
- package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +0 -94
- package/breadcrumb/lib/models/breadcrumb-item.model.d.ts +0 -14
- package/breadcrumb/lib/models/index.d.ts +0 -1
- package/clipboard/lib/clipboard.component.d.ts +0 -16
- package/common/lib/common.module.d.ts +0 -21
- package/common/lib/common.utils.d.ts +0 -2
- package/common/lib/components/busy-overlay/busy-overlay.component.d.ts +0 -9
- package/common/lib/components/busy-overlay/busy-overlay.interface.d.ts +0 -4
- package/common/lib/components/confirm/confirm.component.d.ts +0 -8
- package/common/lib/components/confirm/confirm.interface.d.ts +0 -9
- package/common/lib/components/confirm/confirm.service.d.ts +0 -9
- package/common/lib/components/dialog/dialog.component.d.ts +0 -10
- package/common/lib/components/dialog/dialog.options.d.ts +0 -7
- package/common/lib/components/halo-focus/halo-focus.component.d.ts +0 -5
- package/common/lib/components/index.d.ts +0 -8
- package/common/lib/components/retention-badge/retention-badge.component.d.ts +0 -9
- package/common/lib/components/scroll-buttons/scroll-buttons.component.d.ts +0 -25
- package/common/lib/directives/autofocus-child.directive.d.ts +0 -13
- package/common/lib/directives/autofocus-delayed.directive.d.ts +0 -18
- package/common/lib/directives/busy-overlay.directive.d.ts +0 -68
- package/common/lib/directives/click-double.directive.d.ts +0 -17
- package/common/lib/directives/container-size.directive.d.ts +0 -30
- package/common/lib/directives/drag-scroll.directive.d.ts +0 -20
- package/common/lib/directives/drag-select.directive.d.ts +0 -21
- package/common/lib/directives/file-drop-zone/file-drop-zone.directive.d.ts +0 -17
- package/common/lib/directives/file-drop-zone/file-drop-zone.interface.d.ts +0 -5
- package/common/lib/directives/focus-within.directive.d.ts +0 -36
- package/common/lib/directives/index.d.ts +0 -13
- package/common/lib/directives/light-dismiss.directive.d.ts +0 -19
- package/common/lib/directives/longpress.directive.d.ts +0 -13
- package/common/lib/directives/noop-value-accessor.directive.d.ts +0 -10
- package/common/lib/directives/scroll-buttons.directive.d.ts +0 -20
- package/common/lib/mat-form-field.abstract.d.ts +0 -41
- package/common/lib/services/file-drop/file-drop.service.d.ts +0 -7
- package/common/lib/services/form-translate/form-translate.service.d.ts +0 -15
- package/common/lib/services/index.d.ts +0 -4
- package/common/lib/services/layout-settings/layout-settings.interface.d.ts +0 -1
- package/common/lib/services/layout-settings/layout-settings.service.d.ts +0 -40
- package/common/lib/services/theme/index.d.ts +0 -3
- package/common/lib/services/theme/theme.models.d.ts +0 -16
- package/common/lib/services/theme/theme.provider.d.ts +0 -4
- package/common/lib/services/theme/theme.service.d.ts +0 -16
- package/datepicker/lib/calendar/calendar.component.d.ts +0 -70
- package/datepicker/lib/date-input/date-input-element/date-input-element.component.d.ts +0 -44
- package/datepicker/lib/date-input/date-input-hour-element/date-input-hour-element.component.d.ts +0 -11
- package/datepicker/lib/date-input/date-input.component.d.ts +0 -60
- package/datepicker/lib/datepicker-calendar/datepicker-calendar-trigger.component.d.ts +0 -7
- package/datepicker/lib/datepicker-calendar/datepicker-calendar.component.d.ts +0 -12
- package/datepicker/lib/datepicker.component.d.ts +0 -80
- package/datepicker/lib/datepicker.interface.d.ts +0 -34
- package/datepicker/lib/datepicker.module.d.ts +0 -9
- package/datepicker/lib/datepicker.service.d.ts +0 -46
- package/datepicker/lib/datepicker.utils.d.ts +0 -23
- package/datepicker/lib/time-input/time-input.component.d.ts +0 -32
- package/datepicker/lib/time-input/time-input.interface.d.ts +0 -6
- package/forms/lib/elements/catalog/catalog.component.d.ts +0 -34
- package/forms/lib/elements/data-grid/data-grid/data-grid.component.d.ts +0 -46
- package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +0 -22
- package/forms/lib/elements/data-grid/model/data-grid.interface.d.ts +0 -20
- package/forms/lib/elements/datetime/datetime.component.d.ts +0 -41
- package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +0 -38
- package/forms/lib/elements/i18n-catalog/i18n-catalog.component.d.ts +0 -43
- package/forms/lib/elements/index.d.ts +0 -12
- package/forms/lib/elements/number/number.component.d.ts +0 -69
- package/forms/lib/elements/number-range/number-range.component.d.ts +0 -73
- package/forms/lib/elements/organization/organization.component.d.ts +0 -66
- package/forms/lib/elements/organization-set/organization-set.component.d.ts +0 -61
- package/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.d.ts +0 -13
- package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +0 -38
- package/forms/lib/elements/range-select-date/range-select-date.interface.d.ts +0 -5
- package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +0 -33
- package/forms/lib/elements/range-select-filesize/range-select-filesize.interface.d.ts +0 -5
- package/forms/lib/elements/string/string.component.d.ts +0 -100
- package/forms/lib/forms.module.d.ts +0 -17
- package/forms/lib/forms.utils.d.ts +0 -4
- package/icons/lib/icon.component.d.ts +0 -24
- package/icons/lib/icon.service.d.ts +0 -39
- package/icons/lib/icons.d.ts +0 -1
- package/icons/lib/object-type-icon/object-type-icon.component.d.ts +0 -11
- package/lib/config/halo-focus-defaults/halo-excluded-elements.const.d.ts +0 -26
- package/lib/config/halo-focus-defaults/halo-focus-navigation-keys.const.d.ts +0 -25
- package/lib/config/halo-focus-defaults/halo-focus-offset.const.d.ts +0 -25
- package/lib/config/halo-focus-defaults/halo-focus-styles.const.d.ts +0 -26
- package/lib/config/halo-focus-defaults/index.d.ts +0 -4
- package/lib/config/index.d.ts +0 -2
- package/lib/config/session/index.d.ts +0 -3
- package/lib/config/session/session-activity-window-before-end.const.d.ts +0 -43
- package/lib/config/session/session-default-duration.const.d.ts +0 -47
- package/lib/config/session/session-popup-before-end.const.d.ts +0 -47
- package/lib/enums/channel-message.enum.d.ts +0 -4
- package/lib/enums/index.d.ts +0 -1
- package/lib/models/halo-focus-config/halo-focus-config.model.d.ts +0 -48
- package/lib/models/halo-focus-config/index.d.ts +0 -1
- package/lib/models/index.d.ts +0 -3
- package/lib/models/session/channel-payload.model.d.ts +0 -5
- package/lib/models/session/index.d.ts +0 -1
- package/lib/models/snack-bar/index.d.ts +0 -3
- package/lib/models/snack-bar/snack-bar-data.model.d.ts +0 -6
- package/lib/models/snack-bar/snack-bar-level.model.d.ts +0 -1
- package/lib/models/snack-bar/snack-bar-options.model.d.ts +0 -9
- package/lib/providers/halo-focus/index.d.ts +0 -1
- package/lib/providers/halo-focus/provide-halo-focus.d.ts +0 -62
- package/lib/providers/index.d.ts +0 -2
- package/lib/providers/session/index.d.ts +0 -1
- package/lib/providers/session/provide-session.provider.d.ts +0 -43
- package/lib/services/halo-focus/halo-focus.service.d.ts +0 -95
- package/lib/services/halo-utility/halo-utility.service.d.ts +0 -245
- package/lib/services/index.d.ts +0 -4
- package/lib/services/session/session.service.d.ts +0 -113
- package/lib/services/snack-bar/snack-bar.service.d.ts +0 -22
- package/lib/yuuvis-client-framework.module.d.ts +0 -7
- package/list/lib/list-item.directive.d.ts +0 -40
- package/list/lib/list-tile/list-tile.component.d.ts +0 -14
- package/list/lib/list.component.d.ts +0 -320
- package/list/lib/list.module.d.ts +0 -9
- package/master-details/lib/master-details.component.d.ts +0 -52
- package/master-details/lib/master-details.interface.d.ts +0 -7
- package/master-details/lib/master-details.module.d.ts +0 -7
- package/metadata-form/lib/metadata-form-element-registry.service.d.ts +0 -60
- package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +0 -25
- package/metadata-form/lib/metadata-form-field/metadata-form-field.interface.d.ts +0 -19
- package/metadata-form/lib/object-metadata-element-error.directive.d.ts +0 -17
- package/metadata-form/lib/object-metadata-element-label.directive.d.ts +0 -29
- package/metadata-form/lib/object-metadata-element-template.directive.d.ts +0 -45
- package/metadata-form-defaults/lib/metadata-default-templates/metadata-default-templates.component.d.ts +0 -5
- package/metadata-form-defaults/lib/metadata-form-defaults.module.d.ts +0 -7
- package/object-details/lib/object-audit/object-audit.component.d.ts +0 -49
- package/object-details/lib/object-details-header/object-details-header.component.d.ts +0 -43
- package/object-details/lib/object-details-shell/object-details-shell.component.d.ts +0 -34
- package/object-details/lib/object-details-shell/object-details-shell.service.d.ts +0 -14
- package/object-details/lib/object-details.component.d.ts +0 -47
- package/object-details/lib/object-details.module.d.ts +0 -12
- package/object-details/lib/object-metadata/form-section-group.pipe.d.ts +0 -8
- package/object-details/lib/object-metadata/object-metadata-section/object-metadata-section.component.d.ts +0 -19
- package/object-details/lib/object-metadata/object-metadata-section/object-metadata-section.interface.d.ts +0 -9
- package/object-details/lib/object-metadata/object-metadata.component.d.ts +0 -75
- package/object-details/lib/object-metadata/object-metadata.interface.d.ts +0 -26
- package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +0 -11
- package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +0 -13
- package/object-flavor/lib/default-apply-flavor/default-apply-flavor.component.d.ts +0 -19
- package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +0 -13
- package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +0 -23
- package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +0 -10
- package/object-form/lib/form-scripting.api.interface.d.ts +0 -131
- package/object-form/lib/form-scripting.service.d.ts +0 -30
- package/object-form/lib/object-form-element/object-form-element.component.d.ts +0 -23
- package/object-form/lib/object-form-extension.interface.d.ts +0 -22
- package/object-form/lib/object-form-group/object-form-group.component.d.ts +0 -20
- package/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.d.ts +0 -10
- package/object-form/lib/object-form-script/object-form-script.service.d.ts +0 -45
- package/object-form/lib/object-form-script/object-form-scripting-scope.d.ts +0 -50
- package/object-form/lib/object-form.component.d.ts +0 -61
- package/object-form/lib/object-form.interface.d.ts +0 -69
- package/object-form/lib/object-form.module.d.ts +0 -7
- package/object-form/lib/object-form.service.d.ts +0 -41
- package/object-form/lib/object-form.utils.d.ts +0 -20
- package/object-form/lib/object-form.validation.d.ts +0 -21
- package/object-preview/lib/components/index.d.ts +0 -2
- package/object-preview/lib/components/object-email-preview/object-email-preview.component.d.ts +0 -16
- package/object-preview/lib/components/object-preview/object-preview.component.d.ts +0 -24
- package/object-preview/lib/services/object-preview.service.d.ts +0 -40
- package/object-relationship/lib/actions/add-relationship/add-relationship.component.d.ts +0 -37
- package/object-relationship/lib/actions/relationship-target-search/relationship-target-search.component.d.ts +0 -36
- package/object-relationship/lib/node-summary/node-summary.component.d.ts +0 -26
- package/object-relationship/lib/object-relationship-graph/object-relationship-graph.component.d.ts +0 -30
- package/object-relationship/lib/object-relationship-list/object-relationship-list-item/object-relationship-list-item.component.d.ts +0 -14
- package/object-relationship/lib/object-relationship-list/object-relationship-list.component.d.ts +0 -13
- package/object-relationship/lib/object-relationship.component.d.ts +0 -28
- package/object-relationship/lib/object-relationship.const.d.ts +0 -10
- package/object-relationship/lib/object-relationship.interface.d.ts +0 -38
- package/object-relationship/lib/object-relationship.module.d.ts +0 -7
- package/object-relationship/lib/object-relationship.service.d.ts +0 -26
- package/object-summary/lib/multi-object-summary/multi-object-summary.component.d.ts +0 -7
- package/object-summary/lib/object-summary/object-summary.component.d.ts +0 -64
- package/object-summary/lib/object-summary-data/object-summary-data.component.d.ts +0 -28
- package/object-summary/lib/object-summary.module.d.ts +0 -9
- package/object-versions/lib/object-versions.component.d.ts +0 -34
- package/object-versions/lib/object-versions.module.d.ts +0 -7
- package/overflow-hidden/lib/overflow-hidden.component.d.ts +0 -19
- package/overflow-hidden/lib/overflow-hidden.module.d.ts +0 -7
- package/overflow-menu/lib/overflow-menu.component.d.ts +0 -33
- package/overflow-menu/lib/overflow-menu.interface.d.ts +0 -10
- package/overflow-menu/lib/overflow-menu.module.d.ts +0 -7
- package/pagination/lib/pagination.component.d.ts +0 -21
- package/pagination/lib/pagination.interface.d.ts +0 -5
- package/popout/lib/fullscreen.directive.d.ts +0 -4
- package/popout/lib/popout-trigger/popout-trigger.component.d.ts +0 -13
- package/popout/lib/popout.component.d.ts +0 -59
- package/popout/lib/popout.interface.d.ts +0 -24
- package/popout/lib/popout.module.d.ts +0 -9
- package/query-list/lib/query-list.component.d.ts +0 -488
- package/query-list/lib/query-list.module.d.ts +0 -7
- package/renderer/lib/property-renderer/abstract.renderer.d.ts +0 -14
- package/renderer/lib/property-renderer/boolean.renderer.component.d.ts +0 -6
- package/renderer/lib/property-renderer/datetime.renderer.d.ts +0 -6
- package/renderer/lib/property-renderer/decimal.renderer.component.d.ts +0 -6
- package/renderer/lib/property-renderer/filesize.renderer.component.d.ts +0 -7
- package/renderer/lib/property-renderer/icon.renderer.component.d.ts +0 -8
- package/renderer/lib/property-renderer/index.d.ts +0 -11
- package/renderer/lib/property-renderer/integer.renderer.component.d.ts +0 -6
- package/renderer/lib/property-renderer/organization.renderer.d.ts +0 -13
- package/renderer/lib/property-renderer/string.renderer.component.d.ts +0 -6
- package/renderer/lib/property-renderer/table.renderer.component.d.ts +0 -17
- package/renderer/lib/property-renderer/unknown.renderer.d.ts +0 -6
- package/renderer/lib/renderer.directive.d.ts +0 -13
- package/renderer/lib/services/renderer/renderer.interface.d.ts +0 -4
- package/renderer/lib/services/renderer/renderer.service.d.ts +0 -35
- package/sequence-list/lib/sequence-list.component.d.ts +0 -40
- package/sequence-list/lib/sequence-list.interface.d.ts +0 -17
- package/simple-search/lib/models/index.d.ts +0 -1
- package/simple-search/lib/models/object-type-aggregation.model.d.ts +0 -14
- package/simple-search/lib/simple-search/simple-search.component.d.ts +0 -40
- package/sort/lib/sort/models/index.d.ts +0 -1
- package/sort/lib/sort/models/sort.interface.d.ts +0 -7
- package/sort/lib/sort/sort.component.d.ts +0 -25
- package/split-view/lib/split-area-cover.directive.d.ts +0 -15
- package/split-view/lib/split-area.directive.d.ts +0 -21
- package/split-view/lib/split-view.component.d.ts +0 -159
- package/split-view/lib/split-view.interface.d.ts +0 -11
- package/split-view/lib/split-view.module.d.ts +0 -8
- package/tile-list/lib/tile-actions-menu/tile-actions-menu.component.d.ts +0 -11
- package/tile-list/lib/tile-config/action-select/action-select.component.d.ts +0 -13
- package/tile-list/lib/tile-config/icon-select/icon-select.component.d.ts +0 -11
- package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +0 -26
- package/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.d.ts +0 -20
- package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +0 -17
- package/tile-list/lib/tile-config/tile-config.component.d.ts +0 -48
- package/tile-list/lib/tile-extension/directive/tile-extension.directive.d.ts +0 -11
- package/tile-list/lib/tile-extension/extensions/email.extension.d.ts +0 -10
- package/tile-list/lib/tile-extension/tile-extension.service.d.ts +0 -16
- package/tile-list/lib/tile-list/tile-list.component.d.ts +0 -637
- package/tile-list/lib/tile-list/tile-list.interface.d.ts +0 -18
- package/token-search/lib/token-search.component.d.ts +0 -35
- package/token-search/lib/token-search.interface.d.ts +0 -27
- package/token-search/lib/token-search.module.d.ts +0 -7
- package/tree/lib/tree-node/tree-node.component.d.ts +0 -21
- package/tree/lib/tree.component.d.ts +0 -53
- package/tree/lib/tree.interface.d.ts +0 -11
- package/tree/lib/tree.service.d.ts +0 -35
- package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +0 -12
- package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +0 -33
- package/upload-progress/lib/upload-progress/upload-progress.module.d.ts +0 -7
- package/widget-grid/lib/widget-grid-event.service.d.ts +0 -10
- package/widget-grid/lib/widget-grid-registry.service.d.ts +0 -81
- package/widget-grid/lib/widget-grid-workspaces/widget-grid-workspaces.component.d.ts +0 -53
- package/widget-grid/lib/widget-grid-workspaces/widget-grid-workspaces.interface.d.ts +0 -17
- package/widget-grid/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.d.ts +0 -10
- package/widget-grid/lib/widget-grid.component.d.ts +0 -52
- package/widget-grid/lib/widget-grid.interface.d.ts +0 -51
- package/widget-grid/lib/widget-grid.module.d.ts +0 -8
- package/widget-grid/lib/widget-grid.service.d.ts +0 -45
- package/widget-grid/lib/widget-grid.utils.d.ts +0 -18
- package/widget-grid/lib/widget-picker/widget-picker.component.d.ts +0 -38
- package/widget-grid/lib/widgets/noop/noop.component.d.ts +0 -7
|
@@ -1,36 +1,35 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, input, effect, computed, signal, forwardRef, Component, Injectable, viewChild, output, model, NgModule } from '@angular/core';
|
|
3
|
-
import * as i1$3 from '@angular/common';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
5
3
|
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
6
4
|
import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';
|
|
7
5
|
import * as i1$2 from '@angular/material/icon';
|
|
8
6
|
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import * as i2
|
|
7
|
+
import * as i2 from '@angular/material/tooltip';
|
|
10
8
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
|
-
import
|
|
12
|
-
import { SearchService, BaseObjectTypeField, Operator, TranslateModule, SystemService, DmsService, EventService, TranslateService, RelationshipTypeField, YuvEventType, SystemType, DmsObject } from '@yuuvis/client-core';
|
|
9
|
+
import { SearchService, BaseObjectTypeField, Operator, TranslatePipe, SystemService, DmsService, EventService, TranslateService, RelationshipTypeField, YuvEventType, SystemType, DmsObject } from '@yuuvis/client-core';
|
|
13
10
|
import { DialogComponent, BusyOverlayDirective, ConfirmService, LayoutSettingsService } from '@yuuvis/client-framework/common';
|
|
14
11
|
import { YmtIconButtonDirective, YmtButtonDirective } from '@yuuvis/material';
|
|
15
|
-
import * as
|
|
12
|
+
import * as i3 from '@yuuvis/material/panes';
|
|
16
13
|
import { YmtPanesModule } from '@yuuvis/material/panes';
|
|
17
14
|
import { takeUntilDestroyed, toSignal, rxResource } from '@angular/core/rxjs-interop';
|
|
18
15
|
import * as i1$1 from '@angular/forms';
|
|
19
16
|
import { FormControl, Validators, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormGroup } from '@angular/forms';
|
|
20
|
-
import * as
|
|
17
|
+
import * as i5 from '@angular/material/chips';
|
|
21
18
|
import { MatChipsModule } from '@angular/material/chips';
|
|
22
|
-
import * as
|
|
19
|
+
import * as i4 from '@angular/material/form-field';
|
|
23
20
|
import { MatFormFieldModule, MatError } from '@angular/material/form-field';
|
|
24
21
|
import { MatSelectModule } from '@angular/material/select';
|
|
25
|
-
import * as
|
|
22
|
+
import * as i4$1 from '@yuuvis/client-framework/list';
|
|
26
23
|
import { YuvListModule } from '@yuuvis/client-framework/list';
|
|
27
24
|
import { tap, switchMap, map, of, catchError } from 'rxjs';
|
|
28
25
|
import * as i1 from '@yuuvis/client-framework/autocomplete';
|
|
29
26
|
import { YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';
|
|
27
|
+
import { SnackBarService } from '@yuuvis/client-framework';
|
|
30
28
|
import { DataSet, Network } from 'vis-network/standalone';
|
|
31
|
-
import
|
|
29
|
+
import * as i1$3 from '@angular/common';
|
|
30
|
+
import { CommonModule } from '@angular/common';
|
|
32
31
|
import { Router } from '@angular/router';
|
|
33
|
-
import {
|
|
32
|
+
import { RendererDirective } from '@yuuvis/client-framework/renderer';
|
|
34
33
|
|
|
35
34
|
class RelationshipTargetSearchComponent {
|
|
36
35
|
#searchService;
|
|
@@ -38,27 +37,27 @@ class RelationshipTargetSearchComponent {
|
|
|
38
37
|
#configQA;
|
|
39
38
|
constructor() {
|
|
40
39
|
this.#searchService = inject(SearchService);
|
|
41
|
-
this.supportedRelationships = input.required();
|
|
40
|
+
this.supportedRelationships = input.required(...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
42
41
|
// ID of the source object
|
|
43
|
-
this.sourceNode = input.required();
|
|
44
|
-
this.targetTypes = input([]);
|
|
42
|
+
this.sourceNode = input.required(...(ngDevMode ? [{ debugName: "sourceNode" }] : []));
|
|
43
|
+
this.targetTypes = input([], ...(ngDevMode ? [{ debugName: "targetTypes" }] : []));
|
|
45
44
|
this.#availableTargetTypesEffect = effect(() => {
|
|
46
45
|
const att = this.targetTypes();
|
|
47
46
|
if (att.length === 0)
|
|
48
47
|
this.acFormControl.disable();
|
|
49
48
|
else
|
|
50
49
|
this.acFormControl.enable();
|
|
51
|
-
});
|
|
52
|
-
this.config = input.required();
|
|
50
|
+
}, ...(ngDevMode ? [{ debugName: "#availableTargetTypesEffect" }] : []));
|
|
51
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
53
52
|
this.#configQA = computed(() => {
|
|
54
53
|
const qa = {};
|
|
55
54
|
this.config().nodes.forEach((c) => {
|
|
56
55
|
qa[c.objectType] = c;
|
|
57
56
|
});
|
|
58
57
|
return qa;
|
|
59
|
-
});
|
|
58
|
+
}, ...(ngDevMode ? [{ debugName: "#configQA" }] : []));
|
|
60
59
|
this.autocompleteRes = [];
|
|
61
|
-
this.innerValue = signal(undefined);
|
|
60
|
+
this.innerValue = signal(undefined, ...(ngDevMode ? [{ debugName: "innerValue" }] : []));
|
|
62
61
|
this.mappedValue = computed(() => {
|
|
63
62
|
const v = this.innerValue();
|
|
64
63
|
if (!v || !v.value)
|
|
@@ -78,8 +77,8 @@ class RelationshipTargetSearchComponent {
|
|
|
78
77
|
description: configNode.descriptionField ? v.value.data[configNode.descriptionField] : undefined,
|
|
79
78
|
icon: configNode.icon
|
|
80
79
|
};
|
|
81
|
-
});
|
|
82
|
-
this.busy = signal(false);
|
|
80
|
+
}, ...(ngDevMode ? [{ debugName: "mappedValue" }] : []));
|
|
81
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
83
82
|
this.acFormControl = new FormControl(null, Validators.required);
|
|
84
83
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
85
84
|
this.propagateChange = (_) => { };
|
|
@@ -177,18 +176,25 @@ class RelationshipTargetSearchComponent {
|
|
|
177
176
|
this.acFormControl.enable();
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
181
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RelationshipTargetSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
180
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: RelationshipTargetSearchComponent, isStandalone: true, selector: "yuv-relationship-target-search", inputs: { supportedRelationships: { classPropertyName: "supportedRelationships", publicName: "supportedRelationships", isSignal: true, isRequired: true, transformFunction: null }, sourceNode: { classPropertyName: "sourceNode", publicName: "sourceNode", isSignal: true, isRequired: true, transformFunction: null }, targetTypes: { classPropertyName: "targetTypes", publicName: "targetTypes", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.has-value": "!!mappedValue()" } }, providers: [
|
|
182
181
|
{
|
|
183
182
|
provide: NG_VALUE_ACCESSOR,
|
|
184
183
|
useExisting: forwardRef(() => RelationshipTargetSearchComponent),
|
|
185
184
|
multi: true
|
|
186
185
|
}
|
|
187
|
-
], ngImport: i0, template: "<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n", styles: [":host mat-form-field{width:100%}:host.has-value yuv-autocomplete{display:none}:host .value-node{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host .value-node .icon{grid-area:icon}:host .value-node .label{grid-area:label}:host .value-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: YuvAutocompleteModule }, { kind: "component", type: i1.AutocompleteComponent, selector: "yuv-autocomplete", inputs: ["ariaLabel", "busy", "multiple", "distinctValues", "addOnBlur", "minLength", "maxItems", "forceSelection", "autocompleteValues"], outputs: ["autocompleteFnc", "acBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "ngmodule", type:
|
|
186
|
+
], ngImport: i0, template: "<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n", styles: [":host mat-form-field{width:100%}:host.has-value yuv-autocomplete{display:none}:host .value-node{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host .value-node .icon{grid-area:icon}:host .value-node .label{grid-area:label}:host .value-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: YuvAutocompleteModule }, { kind: "component", type: i1.AutocompleteComponent, selector: "yuv-autocomplete", inputs: ["ariaLabel", "busy", "multiple", "distinctValues", "addOnBlur", "minLength", "maxItems", "forceSelection", "autocompleteValues"], outputs: ["autocompleteFnc", "acBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
188
187
|
}
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RelationshipTargetSearchComponent, decorators: [{
|
|
190
189
|
type: Component,
|
|
191
|
-
args: [{ selector: 'yuv-relationship-target-search', imports: [
|
|
190
|
+
args: [{ selector: 'yuv-relationship-target-search', imports: [
|
|
191
|
+
YuvAutocompleteModule,
|
|
192
|
+
ReactiveFormsModule,
|
|
193
|
+
MatIconModule,
|
|
194
|
+
YmtIconButtonDirective,
|
|
195
|
+
TranslatePipe,
|
|
196
|
+
MatFormFieldModule
|
|
197
|
+
], providers: [
|
|
192
198
|
{
|
|
193
199
|
provide: NG_VALUE_ACCESSOR,
|
|
194
200
|
useExisting: forwardRef(() => RelationshipTargetSearchComponent),
|
|
@@ -197,7 +203,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
197
203
|
], host: {
|
|
198
204
|
'[class.has-value]': '!!mappedValue()'
|
|
199
205
|
}, template: "<mat-form-field>\n <mat-label>{{ 'yuv.object-relationship.add-relationship.target-search.label' | translate }}</mat-label>\n\n <yuv-autocomplete\n [required]=\"true\"\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"false\"\n >\n <!-- template for option -->\n <ng-template #optionTemplate let-item>\n <div class=\"label\">{{ item.label }}</div>\n <div class=\"meta\" style=\"font: var(--ymt-font-body-subtle); color: var(--ymt-text-color-subtle)\">{{ item.value.description }}</div>\n </ng-template>\n </yuv-autocomplete>\n\n @let v = mappedValue();\n @if (v) {\n <div class=\"value-node\" aria-live=\"polite\">\n @if (v.icon) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon>{{ v.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ v.title }}</strong>\n <div class=\"description\">{{ v.description }}</div>\n\n <button\n type=\"button\"\n ymtIconButton\n icon-button-size=\"small\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-search.clear' | translate\"\n (click)=\"reset()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</mat-form-field>\n", styles: [":host mat-form-field{width:100%}:host.has-value yuv-autocomplete{display:none}:host .value-node{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host .value-node .icon{grid-area:icon}:host .value-node .label{grid-area:label}:host .value-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"] }]
|
|
200
|
-
}], ctorParameters: () => [] });
|
|
206
|
+
}], ctorParameters: () => [], propDecorators: { supportedRelationships: [{ type: i0.Input, args: [{ isSignal: true, alias: "supportedRelationships", required: true }] }], sourceNode: [{ type: i0.Input, args: [{ isSignal: true, alias: "sourceNode", required: true }] }], targetTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "targetTypes", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
|
|
201
207
|
|
|
202
208
|
class AddRelationshipComponent {
|
|
203
209
|
constructor() {
|
|
@@ -209,13 +215,15 @@ class AddRelationshipComponent {
|
|
|
209
215
|
this.translate = inject(TranslateService);
|
|
210
216
|
this.targetTypeLabels = {};
|
|
211
217
|
this.targetTypeFilterControl = new FormControl([]);
|
|
212
|
-
this.targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, {
|
|
213
|
-
|
|
214
|
-
|
|
218
|
+
this.targetTypeFilterValue = toSignal(this.targetTypeFilterControl.valueChanges, {
|
|
219
|
+
initialValue: this.targetTypeFilterControl.value || null
|
|
220
|
+
});
|
|
221
|
+
this.object = input(this.#dialogData.object, ...(ngDevMode ? [{ debugName: "object" }] : []));
|
|
222
|
+
this.config = input(this.#dialogData.config, ...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
215
223
|
this.supportedRelationships = computed(() => {
|
|
216
224
|
const obj = this.object();
|
|
217
225
|
return obj ? this.#system.getSupportedRelationships(obj, true) : [];
|
|
218
|
-
});
|
|
226
|
+
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
219
227
|
this.filteredRelationships = computed(() => {
|
|
220
228
|
// filter the supported relationships of the object by the allowed target types
|
|
221
229
|
// if target types are selected
|
|
@@ -223,7 +231,7 @@ class AddRelationshipComponent {
|
|
|
223
231
|
return this.supportedRelationships().filter((r) => {
|
|
224
232
|
return !tt || r.allowedTargetTypes.some((t) => tt.includes(t));
|
|
225
233
|
});
|
|
226
|
-
});
|
|
234
|
+
}, ...(ngDevMode ? [{ debugName: "filteredRelationships" }] : []));
|
|
227
235
|
// get the target types from the relationships
|
|
228
236
|
this.availableTargetTypes = computed(() => {
|
|
229
237
|
const rel = this.supportedRelationships();
|
|
@@ -234,8 +242,8 @@ class AddRelationshipComponent {
|
|
|
234
242
|
}, {});
|
|
235
243
|
this.targetTypeFilterControl.patchValue(types);
|
|
236
244
|
return types;
|
|
237
|
-
});
|
|
238
|
-
this.labeledTargetTypes = computed(() => this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t })));
|
|
245
|
+
}, ...(ngDevMode ? [{ debugName: "availableTargetTypes" }] : []));
|
|
246
|
+
this.labeledTargetTypes = computed(() => this.availableTargetTypes().map((t) => ({ id: t, label: this.targetTypeLabels[t] || t })), ...(ngDevMode ? [{ debugName: "labeledTargetTypes" }] : []));
|
|
239
247
|
this.sourceNode = computed(() => {
|
|
240
248
|
const obj = this.object();
|
|
241
249
|
const config = this.config();
|
|
@@ -244,7 +252,7 @@ class AddRelationshipComponent {
|
|
|
244
252
|
description: obj.data[config.rootNode.descriptionField || ''],
|
|
245
253
|
icon: config.rootNode.icon
|
|
246
254
|
};
|
|
247
|
-
});
|
|
255
|
+
}, ...(ngDevMode ? [{ debugName: "sourceNode" }] : []));
|
|
248
256
|
this.#relationMatchesTargetObjectValidator = (control) => {
|
|
249
257
|
const targetObject = control.get('targetObject')?.value;
|
|
250
258
|
const relation = control.get('relation')?.value;
|
|
@@ -261,10 +269,13 @@ class AddRelationshipComponent {
|
|
|
261
269
|
};
|
|
262
270
|
this.form = new FormGroup({
|
|
263
271
|
relation: new FormControl(null, { nonNullable: true, validators: [Validators.required] }),
|
|
264
|
-
targetObject: new FormControl(null, {
|
|
272
|
+
targetObject: new FormControl(null, {
|
|
273
|
+
nonNullable: true,
|
|
274
|
+
validators: [Validators.required]
|
|
275
|
+
})
|
|
265
276
|
}, { validators: this.#relationMatchesTargetObjectValidator });
|
|
266
|
-
this.busy = signal(false);
|
|
267
|
-
this.error = signal(null);
|
|
277
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
278
|
+
this.error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
268
279
|
}
|
|
269
280
|
#system;
|
|
270
281
|
#dialogData;
|
|
@@ -304,15 +315,14 @@ class AddRelationshipComponent {
|
|
|
304
315
|
close() {
|
|
305
316
|
this.#dialogRef.close();
|
|
306
317
|
}
|
|
307
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
308
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: AddRelationshipComponent, isStandalone: true, selector: "yuv-add-relationship", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media (width < 750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: RelationshipTargetSearchComponent, selector: "yuv-relationship-target-search", inputs: ["supportedRelationships", "sourceNode", "targetTypes", "config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i5$1.ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "selfHandleClick", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i5$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i6.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i6.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }] }); }
|
|
318
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AddRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
319
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AddRelationshipComponent, isStandalone: true, selector: "yuv-add-relationship", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media not (min-width:750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitle", "headertitel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "component", type: RelationshipTargetSearchComponent, selector: "yuv-relationship-target-search", inputs: ["supportedRelationships", "sourceNode", "targetTypes", "config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i4$1.ListComponent, selector: "yuv-list", inputs: ["preventChangeUntil", "multiselect", "selfHandleSelection", "selfHandleClick", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i4$1.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i5.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
309
320
|
}
|
|
310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AddRelationshipComponent, decorators: [{
|
|
311
322
|
type: Component,
|
|
312
323
|
args: [{ selector: 'yuv-add-relationship', imports: [
|
|
313
|
-
CommonModule,
|
|
314
324
|
ReactiveFormsModule,
|
|
315
|
-
|
|
325
|
+
TranslatePipe,
|
|
316
326
|
DialogComponent,
|
|
317
327
|
MatSelectModule,
|
|
318
328
|
MatIconModule,
|
|
@@ -324,31 +334,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
324
334
|
BusyOverlayDirective,
|
|
325
335
|
YuvListModule,
|
|
326
336
|
MatChipsModule
|
|
327
|
-
], template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media (width
|
|
328
|
-
}] });
|
|
337
|
+
], template: "<yuv-dialog class=\"not-separated\" [headertitle]=\"'yuv.object-relationship.add-relationship.headline' | translate\">\n <main [yuvBusyOverlay]=\"busy()\">\n @let sn = sourceNode();\n <form id=\"addRelationshipForm\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <section class=\"source\">\n @if (sn) {\n <div class=\"source-node ymt-panel\">\n @if (sn.icon) {\n <div class=\"icon\">\n <mat-icon>{{ sn.icon }}</mat-icon>\n </div>\n }\n <strong class=\"label\">{{ sn.title }}</strong>\n <div class=\"description\">{{ sn.description }}</div>\n </div>\n }\n </section>\n\n <section class=\"connect\" aria-hidden=\"true\">\n <div class=\"link\"></div>\n <div class=\"dot\"></div>\n <div class=\"link\"></div>\n </section>\n\n <!-- available relationships -->\n <section class=\"relationships ymt-panel\">\n <h3>{{ 'yuv.object-relationship.action.add-link.search.relation.label' | translate }}</h3>\n\n @let tt = labeledTargetTypes();\n @if (tt.length > 1) {\n <div class=\"target-filter\">\n <span>{{ 'yuv.object-relationship.add-relationship.target-type.filter.label' | translate }}</span>\n\n <mat-chip-listbox\n [multiple]=\"true\"\n [formControl]=\"targetTypeFilterControl\"\n [attr.aria-label]=\"'yuv.object-relationship.add-relationship.target-type.filter.label' | translate\"\n >\n @for (t of tt; track t) {\n <mat-chip-option [value]=\"t.id\">{{ t.label }}</mat-chip-option>\n }\n </mat-chip-listbox>\n </div>\n }\n <!-- list of filtered relationships -->\n <yuv-list (itemSelect)=\"onRelationSelect($event)\">\n @for (r of filteredRelationships(); track r.id) {\n <div class=\"relationship\" yuvListItem>\n {{ r.label }}\n\n <div class=\"targets\">\n @for (t of r.allowedTargetTypes; track t) {\n <span>{{ targetTypeLabels[t] }}</span>\n }\n </div>\n </div>\n }\n </yuv-list>\n </section>\n\n <!-- relationship target select -->\n <section class=\"target\">\n <yuv-relationship-target-search\n class=\"ymt-panel\"\n formControlName=\"targetObject\"\n [sourceNode]=\"object().id\"\n [config]=\"config()\"\n [targetTypes]=\"form.get('relation')!.value?.allowedTargetTypes || []\"\n [supportedRelationships]=\"supportedRelationships()\"\n ></yuv-relationship-target-search>\n </section>\n\n <section class=\"error\">\n @if (form.hasError('invalidRelationTargetCombination') && (form.touched || form.dirty)) {\n <mat-error class=\"error\">{{ 'yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination' | translate }}</mat-error>\n }\n @if (error()) {\n <mat-error class=\"error\">{{ error() }}</mat-error>\n }\n </section>\n </form>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"close()\" [disabled]=\"busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" type=\"submit\" form=\"addRelationshipForm\" [disabled]=\"form.invalid || busy()\">\n {{ 'yuv.object-relationship.add-relationship.action.submit' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n", styles: ["@charset \"UTF-8\";:host main form{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;grid-template-areas:\"source relationships\" \"connect relationships\" \"target relationships\" \"error error\";background-color:var(--ymt-surface-container-highest);padding:var(--ymt-spacing-m)}@media not (min-width:750px){:host main form{grid-template-columns:1fr;grid-template-areas:\"source\" \"relationships\" \"target\" \"error\"}:host main form .connect{display:none!important}:host main form .relationships{margin:var(--ymt-spacing-xl)}}:host main form .source{grid-area:source;padding:0 var(--ymt-spacing-xl);display:flex;flex-direction:column;align-items:center;justify-content:end}:host main form .source .source-node{min-width:31ch;border:2px solid var(--ymt-outline);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-xs);outline:4px solid rgb(from var(--ymt-outline) r g b/.3);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon label button\" \"icon description description\";column-gap:var(--ymt-spacing-xs);align-items:center}:host main form .source .source-node .icon{grid-area:icon}:host main form .source .source-node .label{grid-area:label}:host main form .source .source-node .description{grid-area:description;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main form .connect{grid-area:connect;display:flex;flex-flow:column;align-items:center}:host main form .connect .dot{width:100%;height:2rem;position:relative;flex:0 0 auto}:host main form .connect .dot:after{content:\"\";position:absolute;width:calc(50% - .5rem);height:calc(1rem + 1px);inset-inline-end:0;border-block-end:2px dotted var(--ymt-outline)}:host main form .connect .dot:before{content:\"\";position:absolute;width:1rem;height:1rem;border-radius:50%;margin:auto;inset-inline-end:calc(50% - .5rem);inset-block-start:calc(50% - .5rem);border:2px solid var(--ymt-outline);outline:4px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .relationships{grid-area:relationships;border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3);overflow:hidden;max-height:300px;min-width:300px;display:flex;flex-direction:column}:host main form .relationships h3{margin:0;padding:var(--ymt-spacing-m);font:var(--ymt-font-title-small)}:host main form .relationships .target-filter{flex:0 0 auto;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);padding:0 var(--ymt-spacing-m);display:flex;gap:var(--ymt-spacing-m);align-items:center;justify-content:space-between;border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships yuv-list{flex:1;overflow-y:auto}:host main form .relationships .relationship{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;padding:var(--ymt-spacing-s) var(--ymt-spacing-m);border-block-end:1px solid var(--ymt-outline-variant)}:host main form .relationships .relationship span{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);outline:1px solid var(--ymt-text-color-subtle);border-radius:var(--ymt-corner-xs);padding:0 var(--ymt-spacing-2xs);display:inline-flex;align-items:center;gap:var(--ymt-spacing-2xs)}:host main form .relationships .relationship span:before{content:\"\\bb\"}:host main form .target{grid-area:target;padding:0 var(--ymt-spacing-xl)}:host main form .target yuv-relationship-target-search{min-width:31ch;display:block;margin-block-start:2px;padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-s);border:1px solid var(--ymt-outline);outline:3px solid rgb(from var(--ymt-outline) r g b/.3)}:host main form .error{grid-area:error}:host main form .error mat-error{margin-block-start:var(--ymt-spacing-m);background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container);width:100%;padding:var(--ymt-spacing-m);border-radius:var(--ymt-spacing-xs)}:host main .link{width:2px;flex:1;background-color:var(--ymt-outline);margin-block-end:3px;min-height:2em;position:relative}:host main .link:before{content:\"\";position:absolute;transform:rotate(135deg);width:8px;inset-block-end:0;translate:-3px 2px;height:8px;border:4px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"] }]
|
|
338
|
+
}], propDecorators: { object: [{ type: i0.Input, args: [{ isSignal: true, alias: "object", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
|
|
329
339
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
340
|
+
/**
|
|
341
|
+
* Component to display a summary of a node's object properties.
|
|
342
|
+
*/
|
|
343
|
+
class NodeSummaryComponent {
|
|
344
|
+
constructor() {
|
|
345
|
+
this.#system = inject(SystemService);
|
|
346
|
+
this.#router = inject(Router);
|
|
347
|
+
this.object = input(...(ngDevMode ? [undefined, { debugName: "object" }] : []));
|
|
348
|
+
this.nodeConfig = input(...(ngDevMode ? [undefined, { debugName: "nodeConfig" }] : []));
|
|
349
|
+
this.actions = input(null, ...(ngDevMode ? [{ debugName: "actions" }] : []));
|
|
350
|
+
this.nodeSummary = computed(() => {
|
|
351
|
+
const obj = this.object();
|
|
352
|
+
const config = this.nodeConfig();
|
|
353
|
+
return obj && config
|
|
354
|
+
? {
|
|
355
|
+
title: obj.data[config.labelField],
|
|
356
|
+
description: config.descriptionField ? obj.data[config.descriptionField] : undefined,
|
|
357
|
+
properties: (config.summaryFields || [])
|
|
358
|
+
.map((field) => this.#propertyToRendererInput(field, obj))
|
|
359
|
+
.filter((p) => !!p),
|
|
360
|
+
link: config.objectLink ? config.objectLink.replace('{{id}}', obj.id) : undefined
|
|
361
|
+
}
|
|
362
|
+
: null;
|
|
363
|
+
}, ...(ngDevMode ? [{ debugName: "nodeSummary" }] : []));
|
|
364
|
+
}
|
|
365
|
+
#system;
|
|
366
|
+
#router;
|
|
367
|
+
openObject(link) {
|
|
368
|
+
this.#router.navigateByUrl(link);
|
|
369
|
+
}
|
|
370
|
+
#propertyToRendererInput(propertyName, object) {
|
|
371
|
+
const metaKeys = Object.keys(object.data).filter((key) => {
|
|
372
|
+
return key.startsWith(`${propertyName}_`);
|
|
373
|
+
});
|
|
374
|
+
const sr = this.#system.system?.allFields[propertyName];
|
|
375
|
+
if (!sr)
|
|
376
|
+
return undefined;
|
|
377
|
+
return {
|
|
378
|
+
label: this.#system.getLocalizedLabel(propertyName.replace('_title', '')) || propertyName,
|
|
379
|
+
rendererInput: {
|
|
380
|
+
propertyName,
|
|
381
|
+
value: object.data[propertyName],
|
|
382
|
+
rendererType: this.#system.getInternalFormElementType(propertyName, sr.classifications || []),
|
|
383
|
+
meta: metaKeys.reduce((metaObj, key) => {
|
|
384
|
+
metaObj[key] = object.data[key];
|
|
385
|
+
return metaObj;
|
|
386
|
+
}, {})
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NodeSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
391
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: NodeSummaryComponent, isStandalone: true, selector: "yuv-node-summary", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, nodeConfig: { classPropertyName: "nodeConfig", publicName: "nodeConfig", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RendererDirective, selector: "[yuvRenderer]", inputs: ["yuvRenderer"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
392
|
+
}
|
|
393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NodeSummaryComponent, decorators: [{
|
|
394
|
+
type: Component,
|
|
395
|
+
args: [{ selector: 'yuv-node-summary', imports: [CommonModule, RendererDirective, TranslatePipe, YmtButtonDirective], template: "@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"] }]
|
|
396
|
+
}], propDecorators: { object: [{ type: i0.Input, args: [{ isSignal: true, alias: "object", required: false }] }], nodeConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeConfig", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }] } });
|
|
352
397
|
|
|
353
398
|
class ObjectRelationshipService {
|
|
354
399
|
#search;
|
|
@@ -364,15 +409,15 @@ class ObjectRelationshipService {
|
|
|
364
409
|
this.#confirm = inject(ConfirmService);
|
|
365
410
|
this.translate = inject(TranslateService);
|
|
366
411
|
this.#relationQA = {};
|
|
367
|
-
this.objectId = signal(undefined);
|
|
412
|
+
this.objectId = signal(undefined, ...(ngDevMode ? [{ debugName: "objectId" }] : []));
|
|
368
413
|
this.#relationsResource = rxResource({
|
|
369
|
-
|
|
370
|
-
|
|
414
|
+
params: this.objectId,
|
|
415
|
+
stream: ({ params }) => this.fetchRelations(params)
|
|
371
416
|
});
|
|
372
417
|
this.relations = this.#relationsResource.value;
|
|
373
|
-
this.busy = signal(false);
|
|
418
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
374
419
|
// the DmsObject representing the originId
|
|
375
|
-
this.object = signal(null);
|
|
420
|
+
this.object = signal(null, ...(ngDevMode ? [{ debugName: "object" }] : []));
|
|
376
421
|
this.#eventService
|
|
377
422
|
.on(YuvEventType.RELATIONSHIP_CREATED, YuvEventType.RELATIONSHIP_DELETED)
|
|
378
423
|
.pipe(takeUntilDestroyed())
|
|
@@ -443,68 +488,35 @@ class ObjectRelationshipService {
|
|
|
443
488
|
}
|
|
444
489
|
}));
|
|
445
490
|
}
|
|
446
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
447
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
492
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipService }); }
|
|
448
493
|
}
|
|
449
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipService, decorators: [{
|
|
450
495
|
type: Injectable
|
|
451
496
|
}], ctorParameters: () => [] });
|
|
452
497
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
}
|
|
476
|
-
#system;
|
|
477
|
-
#router;
|
|
478
|
-
openObject(link) {
|
|
479
|
-
this.#router.navigateByUrl(link);
|
|
480
|
-
}
|
|
481
|
-
#propertyToRendererInput(propertyName, object) {
|
|
482
|
-
const metaKeys = Object.keys(object.data).filter((key) => {
|
|
483
|
-
return key.startsWith(`${propertyName}_`);
|
|
484
|
-
});
|
|
485
|
-
const sr = this.#system.system?.allFields[propertyName];
|
|
486
|
-
if (!sr)
|
|
487
|
-
return undefined;
|
|
488
|
-
return {
|
|
489
|
-
label: this.#system.getLocalizedLabel(propertyName.replace('_title', '')) || propertyName,
|
|
490
|
-
rendererInput: {
|
|
491
|
-
propertyName,
|
|
492
|
-
value: object.data[propertyName],
|
|
493
|
-
rendererType: this.#system.getInternalFormElementType(propertyName, sr.classifications || []),
|
|
494
|
-
meta: metaKeys.reduce((metaObj, key) => {
|
|
495
|
-
metaObj[key] = object.data[key];
|
|
496
|
-
return metaObj;
|
|
497
|
-
}, {})
|
|
498
|
-
}
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: NodeSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
502
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: NodeSummaryComponent, isStandalone: true, selector: "yuv-node-summary", inputs: { object: { classPropertyName: "object", publicName: "object", isSignal: true, isRequired: false, transformFunction: null }, nodeConfig: { classPropertyName: "nodeConfig", publicName: "nodeConfig", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RendererDirective, selector: "[yuvRenderer]", inputs: ["yuvRenderer"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }] }); }
|
|
503
|
-
}
|
|
504
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: NodeSummaryComponent, decorators: [{
|
|
505
|
-
type: Component,
|
|
506
|
-
args: [{ selector: 'yuv-node-summary', imports: [CommonModule, RendererDirective, TranslateModule, YmtButtonDirective], template: "@let ns = nodeSummary();\n@if (ns) {\n <header>\n <h2>{{ ns?.title }}</h2>\n <p class=\"desc\">{{ ns?.description }}</p>\n </header>\n <main>\n <div class=\"properties\">\n @for (p of ns?.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.rendererInput\"></ng-container>\n </div>\n </div>\n }\n </div>\n </main>\n <footer>\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"actions()\"></ng-container>\n </div>\n\n @if (ns.link) {\n <button ymtButton=\"primary\" (click)=\"openObject(ns.link)\">\n {{ 'yuv.object-relationship.node-summary.open-object.button' | translate }}\n </button>\n }\n </footer>\n}\n", styles: [":host{display:flex;flex-direction:column}:host header{flex:0 0 auto}:host header h2{margin-block-end:0}:host header .desc{margin:0;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host main{flex:1;overflow-y:auto}:host footer{flex:0 0 auto;align-items:center;display:flex}:host footer .actions{flex:1;display:flex;align-items:center}:host .properties{container:section/inline-size;margin-block-start:var(--ymt-spacing-xl);display:flex;flex-direction:column}:host .properties .row{display:flex;flex-flow:column}:host .properties .row .label{font:var(--ymt-font-body-subtle);flex:0 1 33%;font-weight:700;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host .properties .row .value{flex:1;word-break:break-all;font:var(--ymt-font-body-subtle);margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 300px){:host .properties .row{flex-flow:row}}\n"] }]
|
|
507
|
-
}] });
|
|
498
|
+
const ROOT_NODE_SETTINGS = {
|
|
499
|
+
size: 30,
|
|
500
|
+
borderWidth: 4,
|
|
501
|
+
borderWidthSelected: 6
|
|
502
|
+
};
|
|
503
|
+
const ROOT_NODE_FONT_SETTINGS = {
|
|
504
|
+
size: 14
|
|
505
|
+
};
|
|
506
|
+
const NODE_SETTINGS = {
|
|
507
|
+
borderWidthSelected: 2
|
|
508
|
+
};
|
|
509
|
+
const NODE_FONT_SETTINGS = {
|
|
510
|
+
size: 12
|
|
511
|
+
};
|
|
512
|
+
const EDGE_SETTINGS = {};
|
|
513
|
+
const EDGE_FONT_SETTINGS = {
|
|
514
|
+
size: 10
|
|
515
|
+
};
|
|
516
|
+
// add relationship dialog settings
|
|
517
|
+
const ADD_RELATIONSHIP_DIALOG_OPTIONS = {
|
|
518
|
+
maxWidth: '90vw'
|
|
519
|
+
};
|
|
508
520
|
|
|
509
521
|
class ObjectRelationshipGraphComponent {
|
|
510
522
|
constructor() {
|
|
@@ -528,18 +540,18 @@ class ObjectRelationshipGraphComponent {
|
|
|
528
540
|
return 'light';
|
|
529
541
|
}
|
|
530
542
|
}
|
|
531
|
-
});
|
|
543
|
+
}, ...(ngDevMode ? [{ debugName: "#mode" }] : []));
|
|
532
544
|
this.#relations = this.#objectRelationshipService.relations;
|
|
533
545
|
this.#relationsEffect = effect(() => {
|
|
534
546
|
const rel = this.#relations();
|
|
535
547
|
if (!rel)
|
|
536
548
|
return;
|
|
537
549
|
this.#_updateGraph(rel.originId, rel.relations, rel.objects);
|
|
538
|
-
});
|
|
550
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
539
551
|
/**
|
|
540
552
|
* Configuration for the relations component.
|
|
541
553
|
*/
|
|
542
|
-
this.config = input.required();
|
|
554
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
543
555
|
this.objectSelected = output();
|
|
544
556
|
this.relationSelected = output();
|
|
545
557
|
this.#network = null;
|
|
@@ -547,23 +559,23 @@ class ObjectRelationshipGraphComponent {
|
|
|
547
559
|
this.#relationQA = {};
|
|
548
560
|
this.#nodes = new DataSet([]);
|
|
549
561
|
this.#edges = new DataSet([]);
|
|
550
|
-
this.busy = signal(false);
|
|
551
|
-
this.selectedRelation = signal(null);
|
|
562
|
+
this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
|
|
563
|
+
this.selectedRelation = signal(null, ...(ngDevMode ? [{ debugName: "selectedRelation" }] : []));
|
|
552
564
|
this.#selectedRelationEffect = effect(() => {
|
|
553
565
|
this.relationSelected.emit(this.selectedRelation());
|
|
554
|
-
});
|
|
555
|
-
this.selectedObject = signal(null);
|
|
566
|
+
}, ...(ngDevMode ? [{ debugName: "#selectedRelationEffect" }] : []));
|
|
567
|
+
this.selectedObject = signal(null, ...(ngDevMode ? [{ debugName: "selectedObject" }] : []));
|
|
556
568
|
this.#selectedObjectEffect = effect(() => {
|
|
557
569
|
const so = this.selectedObject();
|
|
558
570
|
if (so)
|
|
559
571
|
this.selectedRelation.set(null);
|
|
560
572
|
this.objectSelected.emit(so);
|
|
561
|
-
});
|
|
573
|
+
}, ...(ngDevMode ? [{ debugName: "#selectedObjectEffect" }] : []));
|
|
562
574
|
this.detailsNode = computed(() => {
|
|
563
575
|
const object = this.selectedObject();
|
|
564
576
|
const config = this.#getNodeConfig(object);
|
|
565
577
|
return object && config ? { object, config } : null;
|
|
566
|
-
});
|
|
578
|
+
}, ...(ngDevMode ? [{ debugName: "detailsNode" }] : []));
|
|
567
579
|
}
|
|
568
580
|
#dialog;
|
|
569
581
|
#system;
|
|
@@ -613,8 +625,12 @@ class ObjectRelationshipGraphComponent {
|
|
|
613
625
|
const targetNodeId = deletedEdge.to;
|
|
614
626
|
this.#edges.remove(this.selectedRelation().id);
|
|
615
627
|
// check if the source/target node of the deleted edge has other connections to another node in the current graph
|
|
616
|
-
const otherEdgesForSource = this.#edges
|
|
617
|
-
|
|
628
|
+
const otherEdgesForSource = this.#edges
|
|
629
|
+
.get()
|
|
630
|
+
.filter((edge) => edge.from === sourceNodeId || edge.to === sourceNodeId);
|
|
631
|
+
const otherEdgesForTarget = this.#edges
|
|
632
|
+
.get()
|
|
633
|
+
.filter((edge) => edge.from === targetNodeId || edge.to === targetNodeId);
|
|
618
634
|
if (sourceNodeId && otherEdgesForSource.length === 0) {
|
|
619
635
|
this.#nodes.remove(sourceNodeId);
|
|
620
636
|
}
|
|
@@ -743,7 +759,8 @@ class ObjectRelationshipGraphComponent {
|
|
|
743
759
|
};
|
|
744
760
|
}
|
|
745
761
|
#toEdge(item, from, to, direction) {
|
|
746
|
-
const label = this.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID)) ||
|
|
762
|
+
const label = this.#system.getLocalizedLabel(item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID)) ||
|
|
763
|
+
item.fields.get(BaseObjectTypeField.OBJECT_TYPE_ID);
|
|
747
764
|
return {
|
|
748
765
|
...EDGE_SETTINGS,
|
|
749
766
|
id: item.fields.get(BaseObjectTypeField.OBJECT_ID),
|
|
@@ -859,13 +876,20 @@ class ObjectRelationshipGraphComponent {
|
|
|
859
876
|
this.#network.destroy();
|
|
860
877
|
}
|
|
861
878
|
}
|
|
862
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
863
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
879
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
880
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ObjectRelationshipGraphComponent, isStandalone: true, selector: "yuv-object-relationship-graph", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { objectSelected: "objectSelected", relationSelected: "relationSelected" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["graphContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"relations\" [yuvBusyOverlay]=\"busy()\">\n <div class=\"toolbar\">\n <button ymtIconButton (click)=\"download()\" [matTooltip]=\"'yuv.object-relationship.download.tooltip' | translate\">\n <mat-icon>download</mat-icon>\n </button>\n @if (selectedRelation()) {\n <button ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n <div class=\"graph-container\" #graphContainer></div>\n\n @let dn = detailsNode();\n @if (dn) {\n <div class=\"selected\">\n <yuv-node-summary [object]=\"dn.object\" [nodeConfig]=\"dn.config\" [actions]=\"additionalSummaryActions\"></yuv-node-summary>\n </div>\n }\n</div>\n\n<ng-template #additionalSummaryActions>\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.object-relationship.selected.add-relationship.tooltip' | translate\"\n (click)=\"addRelationship()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{--_container-background-color: var(--container-background-color, var(--ymt-surface));--_node-background-color: var(--node-background-color, var(--ymt-surface-container));--_node-border-color: var(--node-border-color, var(--ymt-outline));--_node-font-color: var(--node-font-color, var(--ymt-text-color));--_node-background-color-highlight: var(--node-background-color-highlight, var(--ymt-primary-container));--_node-color-highlight: var(--node-color-highlight, var(--ymt-on-primary-container));--_edge-font-color: var(--edge-font-color, var(--ymt-text-color-subtle));--_edge-color: var(--edge-color, var(--ymt-outline));--_edge-color-highlight: var(--edge-color-highlight, var(--ymt-primary));--_edge-color-hover: var(--edge-color-hover, var(--ymt-primary))}:host .relations{position:relative;display:block;height:100%}:host .relations .toolbar{position:absolute;inset-block-start:var(--ymt-spacing-2xs);inset-inline-start:var(--ymt-spacing-s);z-index:10}:host .relations .graph-container{background-color:var(--_container-background-color);width:100%;height:100%}:host .relations .selected{position:absolute;inset-inline-end:var(--ymt-spacing-m);inset-block-start:var(--ymt-spacing-m);inset-block-end:var(--ymt-spacing-m);padding:var(--ymt-spacing-s) var(--ymt-spacing-m);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background-color:rgb(from var(--ymt-surface) r g b/.8);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-s);max-width:33%;z-index:10;min-width:200px}:host .relations .selected yuv-node-summary{height:100%}\n"], dependencies: [{ kind: "component", type: NodeSummaryComponent, selector: "yuv-node-summary", inputs: ["object", "nodeConfig", "actions"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
864
881
|
}
|
|
865
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
882
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipGraphComponent, decorators: [{
|
|
866
883
|
type: Component,
|
|
867
|
-
args: [{ selector: 'yuv-object-relationship-graph', imports: [
|
|
868
|
-
|
|
884
|
+
args: [{ selector: 'yuv-object-relationship-graph', imports: [
|
|
885
|
+
NodeSummaryComponent,
|
|
886
|
+
BusyOverlayDirective,
|
|
887
|
+
MatIconModule,
|
|
888
|
+
MatTooltipModule,
|
|
889
|
+
TranslatePipe,
|
|
890
|
+
YmtIconButtonDirective
|
|
891
|
+
], template: "<div class=\"relations\" [yuvBusyOverlay]=\"busy()\">\n <div class=\"toolbar\">\n <button ymtIconButton (click)=\"download()\" [matTooltip]=\"'yuv.object-relationship.download.tooltip' | translate\">\n <mat-icon>download</mat-icon>\n </button>\n @if (selectedRelation()) {\n <button ymtIconButton (click)=\"deleteRelationship()\" [matTooltip]=\"'yuv.object-relationship.delete-relation.tooltip' | translate\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n <div class=\"graph-container\" #graphContainer></div>\n\n @let dn = detailsNode();\n @if (dn) {\n <div class=\"selected\">\n <yuv-node-summary [object]=\"dn.object\" [nodeConfig]=\"dn.config\" [actions]=\"additionalSummaryActions\"></yuv-node-summary>\n </div>\n }\n</div>\n\n<ng-template #additionalSummaryActions>\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.object-relationship.selected.add-relationship.tooltip' | translate\"\n (click)=\"addRelationship()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.selected.expand.tooltip' | translate\" (click)=\"expandSelected()\">\n <mat-icon>open_with</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{--_container-background-color: var(--container-background-color, var(--ymt-surface));--_node-background-color: var(--node-background-color, var(--ymt-surface-container));--_node-border-color: var(--node-border-color, var(--ymt-outline));--_node-font-color: var(--node-font-color, var(--ymt-text-color));--_node-background-color-highlight: var(--node-background-color-highlight, var(--ymt-primary-container));--_node-color-highlight: var(--node-color-highlight, var(--ymt-on-primary-container));--_edge-font-color: var(--edge-font-color, var(--ymt-text-color-subtle));--_edge-color: var(--edge-color, var(--ymt-outline));--_edge-color-highlight: var(--edge-color-highlight, var(--ymt-primary));--_edge-color-hover: var(--edge-color-hover, var(--ymt-primary))}:host .relations{position:relative;display:block;height:100%}:host .relations .toolbar{position:absolute;inset-block-start:var(--ymt-spacing-2xs);inset-inline-start:var(--ymt-spacing-s);z-index:10}:host .relations .graph-container{background-color:var(--_container-background-color);width:100%;height:100%}:host .relations .selected{position:absolute;inset-inline-end:var(--ymt-spacing-m);inset-block-start:var(--ymt-spacing-m);inset-block-end:var(--ymt-spacing-m);padding:var(--ymt-spacing-s) var(--ymt-spacing-m);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background-color:rgb(from var(--ymt-surface) r g b/.8);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-s);max-width:33%;z-index:10;min-width:200px}:host .relations .selected yuv-node-summary{height:100%}\n"] }]
|
|
892
|
+
}], propDecorators: { container: [{ type: i0.ViewChild, args: ['graphContainer', { isSignal: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], objectSelected: [{ type: i0.Output, args: ["objectSelected"] }], relationSelected: [{ type: i0.Output, args: ["relationSelected"] }] } });
|
|
869
893
|
|
|
870
894
|
class ObjectRelationshipListItemComponent {
|
|
871
895
|
constructor() {
|
|
@@ -873,10 +897,10 @@ class ObjectRelationshipListItemComponent {
|
|
|
873
897
|
this.#snack = inject(SnackBarService);
|
|
874
898
|
this.#objectRelationshipService = inject(ObjectRelationshipService);
|
|
875
899
|
this.translate = inject(TranslateService);
|
|
876
|
-
this.link = input.required();
|
|
877
|
-
this.direction = input.required();
|
|
878
|
-
this.enableSourceLink = input(false);
|
|
879
|
-
this.enableTargetLink = input(false);
|
|
900
|
+
this.link = input.required(...(ngDevMode ? [{ debugName: "link" }] : []));
|
|
901
|
+
this.direction = input.required(...(ngDevMode ? [{ debugName: "direction" }] : []));
|
|
902
|
+
this.enableSourceLink = input(false, ...(ngDevMode ? [{ debugName: "enableSourceLink" }] : []));
|
|
903
|
+
this.enableTargetLink = input(false, ...(ngDevMode ? [{ debugName: "enableTargetLink" }] : []));
|
|
880
904
|
}
|
|
881
905
|
#router;
|
|
882
906
|
#snack;
|
|
@@ -892,13 +916,13 @@ class ObjectRelationshipListItemComponent {
|
|
|
892
916
|
if (link && !skip)
|
|
893
917
|
this.#router.navigateByUrl(link);
|
|
894
918
|
}
|
|
895
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
896
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
919
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
920
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ObjectRelationshipListItemComponent, isStandalone: true, selector: "yuv-object-relationship-list-item", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: true, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: true, transformFunction: null }, enableSourceLink: { classPropertyName: "enableSourceLink", publicName: "enableSourceLink", isSignal: true, isRequired: false, transformFunction: null }, enableTargetLink: { classPropertyName: "enableTargetLink", publicName: "enableTargetLink", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let lnk = link();\n\n<button\n class=\"node source\"\n (click)=\"open(lnk.source.objectLink, !enableSourceLink())\"\n [attr.aria-readonly]=\"!enableSourceLink() || !lnk.source.objectLink\"\n [class.self]=\"direction() === 'out'\"\n>\n @if (lnk.source.icon) {\n <mat-icon>{{ lnk.source.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.source.label }}</span>\n <span class=\"description\">{{ lnk.source.description }}</span>\n</button>\n\n<div class=\"line\" [class.arr]=\"direction() === 'in'\"></div>\n<div class=\"relation\">{{ lnk.type.label }}</div>\n<div class=\"line\" [class.arr]=\"direction() === 'out'\"></div>\n\n<button\n class=\"node target\"\n (click)=\"open(lnk.target.objectLink, !enableTargetLink())\"\n [attr.aria-readonly]=\"!enableTargetLink() || !lnk.target.objectLink\"\n [class.self]=\"direction() === 'in'\"\n>\n @if (lnk.target.icon) {\n <mat-icon>{{ lnk.target.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.target.label }}</span>\n <span class=\"description\">{{ lnk.target.description }}</span>\n</button>\n\n<div class=\"actions\"> \n <button ymtIconButton icon-button-size=\"small\" (click)=\"deleteRelationship()\"><mat-icon>delete</mat-icon></button>\n</div>\n", styles: [":host{margin-block-end:var(--ymt-spacing-xs);display:grid;grid-template-columns:auto 1fr auto 1fr auto auto;align-items:center;grid-template-areas:\"source line relation arrow target actions\";column-gap:var(--ymt-spacing-xs);background-color:var(--ymt-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-2xs);border:1px solid var(--ymt-outline-variant)}:host .relation{color:var(--ymt-text-color-subtle);text-align:center;line-height:1.1em}:host>button{grid-area:source;display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;grid-template-areas:\"icon label\" \"icon desc\";border-radius:var(--ymt-corner-xs);border:2px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-xs);font:var(--ymt-font-title-smallest);background-color:transparent;text-align:start}:host>button mat-icon{grid-area:icon;scale:.6;margin-inline-end:var(--ymt-spacing-xs)}:host>button .title{grid-area:label}:host>button .description{grid-area:desc;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host>button.self{background-color:var(--ymt-surface-container);color:var(--ymt-on-surface)}:host>button:not(.self):hover{background-color:var(--ymt-hover-background)}:host>button:not([aria-readonly=true]){cursor:pointer}:host>button.target{grid-area:target}:host>button:not([aria-readonly]){cursor:pointer}:host .line{grid-area:line;height:2px;position:relative;background-color:var(--ymt-outline);opacity:.5;min-width:1em}:host .line.arr{grid-area:arrow}:host .line.arr:before{content:\"\";position:absolute;transform:rotate(45deg);transform-origin:top right;width:7px;inset-inline-end:0;translate:2px 1px;height:7px;border:3.5px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }] }); }
|
|
897
921
|
}
|
|
898
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
922
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipListItemComponent, decorators: [{
|
|
899
923
|
type: Component,
|
|
900
|
-
args: [{ selector: 'yuv-object-relationship-list-item', imports: [
|
|
901
|
-
}] });
|
|
924
|
+
args: [{ selector: 'yuv-object-relationship-list-item', imports: [MatIconModule, YmtIconButtonDirective], template: "@let lnk = link();\n\n<button\n class=\"node source\"\n (click)=\"open(lnk.source.objectLink, !enableSourceLink())\"\n [attr.aria-readonly]=\"!enableSourceLink() || !lnk.source.objectLink\"\n [class.self]=\"direction() === 'out'\"\n>\n @if (lnk.source.icon) {\n <mat-icon>{{ lnk.source.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.source.label }}</span>\n <span class=\"description\">{{ lnk.source.description }}</span>\n</button>\n\n<div class=\"line\" [class.arr]=\"direction() === 'in'\"></div>\n<div class=\"relation\">{{ lnk.type.label }}</div>\n<div class=\"line\" [class.arr]=\"direction() === 'out'\"></div>\n\n<button\n class=\"node target\"\n (click)=\"open(lnk.target.objectLink, !enableTargetLink())\"\n [attr.aria-readonly]=\"!enableTargetLink() || !lnk.target.objectLink\"\n [class.self]=\"direction() === 'in'\"\n>\n @if (lnk.target.icon) {\n <mat-icon>{{ lnk.target.icon }}</mat-icon>\n }\n <span class=\"title\">{{ lnk.target.label }}</span>\n <span class=\"description\">{{ lnk.target.description }}</span>\n</button>\n\n<div class=\"actions\"> \n <button ymtIconButton icon-button-size=\"small\" (click)=\"deleteRelationship()\"><mat-icon>delete</mat-icon></button>\n</div>\n", styles: [":host{margin-block-end:var(--ymt-spacing-xs);display:grid;grid-template-columns:auto 1fr auto 1fr auto auto;align-items:center;grid-template-areas:\"source line relation arrow target actions\";column-gap:var(--ymt-spacing-xs);background-color:var(--ymt-surface);border-radius:var(--ymt-corner-s);padding:var(--ymt-spacing-2xs);border:1px solid var(--ymt-outline-variant)}:host .relation{color:var(--ymt-text-color-subtle);text-align:center;line-height:1.1em}:host>button{grid-area:source;display:grid;grid-template-rows:auto auto;grid-template-columns:auto 1fr;align-items:center;grid-template-areas:\"icon label\" \"icon desc\";border-radius:var(--ymt-corner-xs);border:2px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-xs);font:var(--ymt-font-title-smallest);background-color:transparent;text-align:start}:host>button mat-icon{grid-area:icon;scale:.6;margin-inline-end:var(--ymt-spacing-xs)}:host>button .title{grid-area:label}:host>button .description{grid-area:desc;font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}:host>button.self{background-color:var(--ymt-surface-container);color:var(--ymt-on-surface)}:host>button:not(.self):hover{background-color:var(--ymt-hover-background)}:host>button:not([aria-readonly=true]){cursor:pointer}:host>button.target{grid-area:target}:host>button:not([aria-readonly]){cursor:pointer}:host .line{grid-area:line;height:2px;position:relative;background-color:var(--ymt-outline);opacity:.5;min-width:1em}:host .line.arr{grid-area:arrow}:host .line.arr:before{content:\"\";position:absolute;transform:rotate(45deg);transform-origin:top right;width:7px;inset-inline-end:0;translate:2px 1px;height:7px;border:3.5px solid transparent;border-block-start-color:var(--ymt-outline);border-inline-end-color:var(--ymt-outline)}\n"] }]
|
|
925
|
+
}], propDecorators: { link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: true }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: true }] }], enableSourceLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableSourceLink", required: false }] }], enableTargetLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTargetLink", required: false }] }] } });
|
|
902
926
|
|
|
903
927
|
class ObjectRelationshipListComponent {
|
|
904
928
|
constructor() {
|
|
@@ -908,16 +932,16 @@ class ObjectRelationshipListComponent {
|
|
|
908
932
|
/**
|
|
909
933
|
* Configuration for the relations component.
|
|
910
934
|
*/
|
|
911
|
-
this.config = input.required();
|
|
912
|
-
this.incomingLinks = signal([]);
|
|
913
|
-
this.outgoingLinks = signal([]);
|
|
935
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
936
|
+
this.incomingLinks = signal([], ...(ngDevMode ? [{ debugName: "incomingLinks" }] : []));
|
|
937
|
+
this.outgoingLinks = signal([], ...(ngDevMode ? [{ debugName: "outgoingLinks" }] : []));
|
|
914
938
|
this.#relations = this.#objectRelationshipService.relations;
|
|
915
939
|
this.#relationsEffect = effect(() => {
|
|
916
940
|
const rel = this.#relations();
|
|
917
941
|
if (!rel)
|
|
918
942
|
return;
|
|
919
943
|
this.#createLists(rel.originId, rel.relations, rel.objects);
|
|
920
|
-
});
|
|
944
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
921
945
|
this.#objectQA = {};
|
|
922
946
|
}
|
|
923
947
|
#search;
|
|
@@ -981,13 +1005,13 @@ class ObjectRelationshipListComponent {
|
|
|
981
1005
|
return undefined;
|
|
982
1006
|
return cfg.nodes.find((n) => object.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS].includes(n.objectType));
|
|
983
1007
|
}
|
|
984
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
985
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1008
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1009
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ObjectRelationshipListComponent, isStandalone: true, selector: "yuv-object-relationship-list", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let incoming = incomingLinks();\n@let outgoing = outgoingLinks();\n\n@if (incoming.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.incoming' | translate }}</h3>\n @for (n of incoming; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"true\"\n [enableTargetLink]=\"false\"\n [link]=\"n\"\n direction=\"in\"\n ></yuv-object-relationship-list-item>\n }\n}\n@if (outgoing.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.outgoing' | translate }}</h3>\n @for (n of outgoing; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"false\"\n [enableTargetLink]=\"true\"\n [link]=\"n\"\n direction=\"out\"\n ></yuv-object-relationship-list-item>\n }\n}\n", styles: [":host{display:block;padding:var(--ymt-spacing-m)}\n"], dependencies: [{ kind: "component", type: ObjectRelationshipListItemComponent, selector: "yuv-object-relationship-list-item", inputs: ["link", "direction", "enableSourceLink", "enableTargetLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
986
1010
|
}
|
|
987
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1011
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipListComponent, decorators: [{
|
|
988
1012
|
type: Component,
|
|
989
|
-
args: [{ selector: 'yuv-object-relationship-list', imports: [
|
|
990
|
-
}] });
|
|
1013
|
+
args: [{ selector: 'yuv-object-relationship-list', imports: [ObjectRelationshipListItemComponent, TranslatePipe], template: "@let incoming = incomingLinks();\n@let outgoing = outgoingLinks();\n\n@if (incoming.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.incoming' | translate }}</h3>\n @for (n of incoming; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"true\"\n [enableTargetLink]=\"false\"\n [link]=\"n\"\n direction=\"in\"\n ></yuv-object-relationship-list-item>\n }\n}\n@if (outgoing.length > 0) {\n <h3>{{ 'yuv.object-relationship.list.outgoing' | translate }}</h3>\n @for (n of outgoing; track n.id) {\n <yuv-object-relationship-list-item\n [enableSourceLink]=\"false\"\n [enableTargetLink]=\"true\"\n [link]=\"n\"\n direction=\"out\"\n ></yuv-object-relationship-list-item>\n }\n}\n", styles: [":host{display:block;padding:var(--ymt-spacing-m)}\n"] }]
|
|
1014
|
+
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
|
|
991
1015
|
|
|
992
1016
|
class ObjectRelationshipComponent {
|
|
993
1017
|
constructor() {
|
|
@@ -997,29 +1021,29 @@ class ObjectRelationshipComponent {
|
|
|
997
1021
|
/**
|
|
998
1022
|
* Display mode for the relationship view.
|
|
999
1023
|
*/
|
|
1000
|
-
this.mode = model('graph');
|
|
1024
|
+
this.mode = model('graph', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
1001
1025
|
this.empty = computed(() => {
|
|
1002
1026
|
const rel = this.#relations();
|
|
1003
1027
|
return rel && rel.relations.totalNumItems === 0;
|
|
1004
|
-
});
|
|
1028
|
+
}, ...(ngDevMode ? [{ debugName: "empty" }] : []));
|
|
1005
1029
|
/**
|
|
1006
1030
|
* ID of the object to display relations for.
|
|
1007
1031
|
*/
|
|
1008
|
-
this.objectId = input.required();
|
|
1032
|
+
this.objectId = input.required(...(ngDevMode ? [{ debugName: "objectId" }] : []));
|
|
1009
1033
|
this.#objectIdEffect = effect(() => {
|
|
1010
1034
|
const oid = this.objectId();
|
|
1011
1035
|
this.#objectRelationshipService.objectId.set(oid);
|
|
1012
|
-
});
|
|
1036
|
+
}, ...(ngDevMode ? [{ debugName: "#objectIdEffect" }] : []));
|
|
1013
1037
|
/**
|
|
1014
1038
|
* Configuration for the relations component.
|
|
1015
1039
|
*/
|
|
1016
|
-
this.config = input.required();
|
|
1040
|
+
this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
1017
1041
|
// the DmsObject representing the originId
|
|
1018
|
-
this.originObject = signal(null);
|
|
1042
|
+
this.originObject = signal(null, ...(ngDevMode ? [{ debugName: "originObject" }] : []));
|
|
1019
1043
|
this.supportedRelationships = computed(() => {
|
|
1020
1044
|
const obj = this.originObject();
|
|
1021
1045
|
return obj ? this.#system.getSupportedRelationships(obj) : [];
|
|
1022
|
-
});
|
|
1046
|
+
}, ...(ngDevMode ? [{ debugName: "supportedRelationships" }] : []));
|
|
1023
1047
|
this.busy = this.#objectRelationshipService.busy;
|
|
1024
1048
|
this.#relations = this.#objectRelationshipService.relations;
|
|
1025
1049
|
this.#relationsEffect = effect(() => {
|
|
@@ -1032,8 +1056,8 @@ class ObjectRelationshipComponent {
|
|
|
1032
1056
|
const originItem = rel.objects?.items.find((item) => item.fields.get(BaseObjectTypeField.OBJECT_ID) === originId);
|
|
1033
1057
|
// TODO: use linked signal instead
|
|
1034
1058
|
this.originObject.set(originItem ? new DmsObject(originItem) : null);
|
|
1035
|
-
});
|
|
1036
|
-
this.relationActions = input(null);
|
|
1059
|
+
}, ...(ngDevMode ? [{ debugName: "#relationsEffect" }] : []));
|
|
1060
|
+
this.relationActions = input(null, ...(ngDevMode ? [{ debugName: "relationActions" }] : []));
|
|
1037
1061
|
}
|
|
1038
1062
|
#objectRelationshipService;
|
|
1039
1063
|
#system;
|
|
@@ -1054,16 +1078,15 @@ class ObjectRelationshipComponent {
|
|
|
1054
1078
|
}
|
|
1055
1079
|
});
|
|
1056
1080
|
}
|
|
1057
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1058
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1081
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1082
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ObjectRelationshipComponent, isStandalone: true, selector: "yuv-object-relationship", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, relationActions: { classPropertyName: "relationActions", publicName: "relationActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mode: "modeChange" }, providers: [ObjectRelationshipService], ngImport: i0, template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: YmtPanesModule }, { kind: "component", type: i3.YmtPaneComponent, selector: "ymt-pane", inputs: ["topBarActions", "busy", "noAnimation", "plain"] }, { kind: "component", type: i3.YmtPaneBodyComponent, selector: "ymt-pane-body" }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "component", type: ObjectRelationshipGraphComponent, selector: "yuv-object-relationship-graph", inputs: ["config"], outputs: ["objectSelected", "relationSelected"] }, { kind: "component", type: ObjectRelationshipListComponent, selector: "yuv-object-relationship-list", inputs: ["config"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay", "yuvBusyOverlayConfig", "yuvBusyError"], outputs: ["yuvBusyErrorDismiss"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
1059
1083
|
}
|
|
1060
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1084
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ObjectRelationshipComponent, decorators: [{
|
|
1061
1085
|
type: Component,
|
|
1062
1086
|
args: [{ selector: 'yuv-object-relationship', imports: [
|
|
1063
|
-
CommonModule,
|
|
1064
1087
|
MatIconModule,
|
|
1065
1088
|
MatTooltipModule,
|
|
1066
|
-
|
|
1089
|
+
TranslatePipe,
|
|
1067
1090
|
MatButtonToggleModule,
|
|
1068
1091
|
YmtPanesModule,
|
|
1069
1092
|
YmtIconButtonDirective,
|
|
@@ -1072,15 +1095,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
1072
1095
|
YmtIconButtonDirective,
|
|
1073
1096
|
BusyOverlayDirective
|
|
1074
1097
|
], providers: [ObjectRelationshipService], template: "<ymt-pane [plain]=\"true\" [topBarActions]=\"topBarActions\">\n <ymt-pane-body [yuvBusyOverlay]=\"busy()\">\n @if (empty()) {\n <div class=\"no-relations\" inert>\n <mat-icon>link_off</mat-icon>\n <p>{{ 'yuv.object-relationship.no-relations' | translate }}</p>\n </div>\n } @else {\n @switch (mode()) {\n @case ('graph') {\n <yuv-object-relationship-graph [config]=\"config()\"></yuv-object-relationship-graph>\n }\n @case ('list') {\n <yuv-object-relationship-list [config]=\"config()\"> </yuv-object-relationship-list>\n }\n }\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<ng-template #topBarActions>\n @if (supportedRelationships().length > 0) {\n <button ymt-icon-button icon-button-size=\"small\" [matTooltip]=\"'yuv.object-relationship.add.tooltip' | translate\" (click)=\"addRelationship()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"mode() === 'list' ? ('yuv.object-relationship.mode.graph.tooltip' | translate) : ('yuv.object-relationship.mode.list.tooltip' | translate)\"\n (click)=\"toggleMode()\"\n >\n <mat-icon>{{ mode() === 'list' ? 'graph_3' : 'list' }}</mat-icon>\n </button>\n</ng-template>\n", styles: [":host{display:block;position:relative;height:100%;background-color:var(--ymt-surface)}:host .toggle{position:absolute;inset-block-start:var(--ymt-spacing-s);inset-inline-end:var(--ymt-spacing-s);z-index:10;background-color:var(--ymt-surface);padding:var(--ymt-spacing-xs);border-radius:var(--ymt-corner-full)}:host yuv-object-relationship-list,:host yuv-object-relationship-graph{height:100%}:host .no-relations{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:var(--ymt-spacing-l);gap:var(--ymt-spacing-m);overflow:hidden}:host .no-relations mat-icon{scale:4;color:var(--ymt-text-color-subtle);opacity:.5;transform:translateY(-.5em)}\n"] }]
|
|
1075
|
-
}] });
|
|
1098
|
+
}], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }, { type: i0.Output, args: ["modeChange"] }], objectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectId", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], relationActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "relationActions", required: false }] }] } });
|
|
1076
1099
|
|
|
1077
1100
|
const cmp = [ObjectRelationshipComponent];
|
|
1078
1101
|
class YuvObjectRelationshipModule {
|
|
1079
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1080
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
1081
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
1102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvObjectRelationshipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1103
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: YuvObjectRelationshipModule, imports: [ObjectRelationshipComponent], exports: [ObjectRelationshipComponent] }); }
|
|
1104
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvObjectRelationshipModule, imports: [cmp] }); }
|
|
1082
1105
|
}
|
|
1083
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvObjectRelationshipModule, decorators: [{
|
|
1084
1107
|
type: NgModule,
|
|
1085
1108
|
args: [{
|
|
1086
1109
|
imports: [...cmp],
|