ngx-bimplus-components 0.0.205 → 0.0.207

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-bimplus-components.mjs","sources":["../../../projects/ngx-bimplus-components/src/lib/ngx-bimplus-components.service.ts","../../../projects/ngx-bimplus-components/src/lib/ngx-bimplus-components.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-localized-widget/bimplus-localized-widget.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/loading-spinner/loading-spinner.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/loading-spinner/loading-spinner.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel/expansion-panel.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel/expansion-panel.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header/expansion-panel-header.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header/expansion-panel-header.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header-actions/expansion-panel-header-actions.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header-actions/expansion-panel-header-actions.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-text-message/bimplus-text-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-text-message/bimplus-text-message.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component.html","../../../projects/ngx-bimplus-components/src/lib/services/resize-observer.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/local-storage.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/layout-manager.service.ts","../../../projects/ngx-bimplus-components/src/lib/utils/utils.ts","../../../projects/ngx-bimplus-components/src/lib/directives/resizable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar/bimplus-floating-bar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar/bimplus-floating-bar.component.html","../../../projects/ngx-bimplus-components/src/lib/directives/draggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-body/bimplus-floating-bar-body.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-body/bimplus-floating-bar-body.component.html","../../../projects/ngx-bimplus-components/src/lib/components/project-models/project-models.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/project-models/project-models.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-panel-toolbar/bimplus-panel-toolbar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-panel-toolbar/bimplus-panel-toolbar.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-message/bimplus-overlay-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-message/bimplus-overlay-message.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/pxsuffix.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/directives/x-draggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav/bimplus-sidenav.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav/bimplus-sidenav.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/svg-generator.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-item/tool-hub-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-item/tool-hub-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-sub-item/tool-hub-sub-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-sub-item/tool-hub-sub-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/bimplus-tool-hub.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/bimplus-tool-hub.component.html","../../../projects/ngx-bimplus-components/src/lib/directives/click-outside/click-outside.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-context-menu/bimplus-context-menu.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-context-menu/bimplus-context-menu.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-flat-tree/bimplus-flat-tree.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-flat-tree/bimplus-flat-tree.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/filter-criterium/filter-criterium.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/filter-criterium/filter-criterium.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.interface.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/format-value.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/datetime.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/object-filter-result/object-filter-result.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/object-filter-result/object-filter-result.component.html","../../../projects/ngx-bimplus-components/src/lib/utils/filterString.ts","../../../projects/ngx-bimplus-components/src/lib/utils/filterStructureFetcher.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component.html","../../../projects/ngx-bimplus-components/src/lib/services/language-strings.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/cursors.service.ts","../../../projects/ngx-bimplus-components/src/lib/directives/component-draggable/componentsDraggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.html","../../../projects/ngx-bimplus-components/src/lib/components/resizable-panel/resizable-panel.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/resizable-panel/resizable-panel.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-header/object-properties-header.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-header/object-properties-header.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/round.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/get-attribute-value-as-string.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/utils/objectProperties.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-property-value/object-property-value.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-property-value/object-property-value.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-checkbox/bimplus-input-checkbox.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-checkbox/bimplus-input-checkbox.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-number/bimplus-input-number.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-number/bimplus-input-number.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-combobox/bimplus-input-combobox.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-combobox/bimplus-input-combobox.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-date/bimplus-input-date.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-date/bimplus-input-date.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-properties-group.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-properties-group.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/get-attribute-value.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/validators/double.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/integer.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/guid.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/double-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-preview/object-preview.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-preview/object-preview.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.service.ts","../../../projects/ngx-bimplus-components/src/lib/validators/guid-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/string-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/string-combobox.validator.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.html","../../../projects/ngx-bimplus-components/src/lib/services/decorators.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/links-to-documents/links-to-documents.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/links-to-documents/links-to-documents.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks/object-hyperlinks.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks/object-hyperlinks.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/bit-converter.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/services/bimplus-attachments.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/auto-resize-textarea.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/bimplus-textarea.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/bimplus-textarea.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-comment/bimplus-comment.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-comment/bimplus-comment.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.component.html","../../../projects/ngx-bimplus-components/src/lib/testing/bimplus-missing-translatetranslation-handler.ts","../../../projects/ngx-bimplus-components/src/public-api.ts","../../../projects/ngx-bimplus-components/src/ngx-bimplus-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxBimplusComponentsService {\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\n selector: 'lib-ngx-bimplus-components',\n imports: [],\n template: `\r\n <p>\r\n ngx-bimplus-components works!\r\n </p>\r\n `,\n styles: ``\n})\r\nexport class NgxBimplusComponentsComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\n\nexport class BimplusConnectionDesignerService {\n private _activeStep: number = 0;\n\n activeStepChange$: Subject<number> = new Subject<number>();\n\n set activeStep(activeStep: number) {\n this._activeStep = activeStep;\n this.activeStepChange$.next(this._activeStep);\n }\n\n get activeStep(): number {\n return this._activeStep;\n }\n\n constructor() { }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ViewEncapsulation, Input, signal, WritableSignal, inject } from '@angular/core';\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { LocalizedStrings } from './../../types/types'\r\n\r\n@Component({\r\n selector: 'lib-bimplus-localized-widget',\r\n imports: [CommonModule, TranslateModule],\r\n providers: [TranslateService],\r\n template: `\r\n <p>\r\n localized widget works!\r\n </p>\r\n `,\r\n styles: [],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusLocalizedWidgetComponent {\r\n translateService = inject(TranslateService);\r\n\r\n\r\n _selectedLanguage: WritableSignal<string> = signal('en');\r\n get selectedLanguage(): string {\r\n return this._selectedLanguage();\r\n }\r\n @Input() set selectedLanguage(value: string) {\r\n this._selectedLanguage.set(value);\r\n this.translateService.use(value);\r\n try {\r\n this.translateService.setTranslation(this.selectedLanguage, this._localizedStrings());\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n _localizedStrings: WritableSignal<LocalizedStrings> = signal({} as LocalizedStrings);\r\n get localizedStrings(): LocalizedStrings {\r\n return this._localizedStrings();\r\n }\r\n @Input() set localizedStrings(value: LocalizedStrings) {\r\n this._localizedStrings.set(value);\r\n this.translateService.use(this.selectedLanguage);\r\n try {\r\n this.translateService.setTranslation(this.selectedLanguage, value);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n","import { Component, Input, booleanAttribute, computed, input } from '@angular/core';\n\ntype SpinnerTexts = string[] | null | undefined;\ntype SpinnerText = string | null | undefined;\n\n@Component({\n selector: 'lib-loading-spinner',\n templateUrl: './loading-spinner.component.html',\n styleUrl: './loading-spinner.component.less'\n})\nexport class LoadingSpinnerComponent {\n @Input({ transform: booleanAttribute }) spinnerSpinActive: boolean = false;\n @Input({ transform: booleanAttribute }) spinnerHoverEnabled: boolean = false;\n @Input({ transform: booleanAttribute }) spinnerDisabled: boolean = false;\n spinnerText = input<SpinnerText>(undefined);\n spinnerTexts = input<SpinnerTexts>(undefined);\n\n protected readonly isSpinnerTextsArray = computed(() => {\n const spinnerTexts = this.spinnerTexts();\n return !!(spinnerTexts && typeof spinnerTexts === 'object' && Array.isArray(spinnerTexts) && Boolean(spinnerTexts.length))\n });\n}\n","<div class=\"loading-spinner\">\n <div class=\"spinner-conatiner\">\n <div\n class=\"spinner-icon\"\n [class.spinner-spin-active]=\"spinnerSpinActive\"\n [class.spinner-disabled]=\"spinnerDisabled\"\n [class.hover-enabled]=\"spinnerHoverEnabled && !spinnerDisabled\"\n ></div>\n @if (spinnerText(); as spinnerText) {\n <div class=\"spinner-text\" data-test=\"spinner-text\">\n {{ spinnerText }}\n </div>\n }\n @if (isSpinnerTextsArray()) {\n <div class=\"spinner-texts\" data-test=\"spinner-texts\">\n @for (_spinnerText of spinnerTexts(); track _spinnerText) {\n <div class=\"spinner-text\">\n {{ _spinnerText }}\n </div>\n }\n </div>\n }\n </div>\n</div>","import { Component, input, Input, ViewEncapsulation } from '@angular/core';\r\nimport { LoadingSpinnerComponent } from '../loading-spinner/loading-spinner.component';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-sidenav-drawer-content',\r\n imports: [\r\n LoadingSpinnerComponent\r\n ],\r\n templateUrl: './bimplus-sidenav-drawer-content.component.html',\r\n styleUrl: './bimplus-sidenav-drawer-content.component.less',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class BimplusSidenavDrawerContentComponent {\r\n header = input<string>('');\r\n isLoading = input<boolean>(false);\r\n @Input() loadingSpinnerText: string = \"\"\r\n}\r\n","<div class=\"sidenav-drawer-content-layout\">\n @if (header(); as header) {\n <div class=\"sidenav-drawer-header\">\n <div class=\"sidenav-drawer-header-title\">\n <span>{{ header }}</span>\n </div>\n </div>\n }\n\n <div class=\"sidenav-drawer-content-offset\">\n <ng-content></ng-content>\n </div>\n @if(isLoading()){\n <div class=\"sidenav-drawer-loading-overlay\">\n <lib-loading-spinner\n [spinnerHoverEnabled]=\"false\"\n [spinnerSpinActive]=\"true\"\n [spinnerDisabled]=\"false\"\n [spinnerText]=\"loadingSpinnerText\"\n >\n </lib-loading-spinner>\n </div>\n }\n</div>\n","import { Observable } from \"rxjs\";\n\nexport interface BimplusButtonRowItem {\n id: string;\n iconClass?: string;\n icon?: string;\n title?: string;\n tooltip?: string;\n disabled?: boolean | Observable<boolean>;\n buttonStyle?: 'primary' | 'secondary';\n buttonType?: 'text' | 'icon' | 'combined';\n type?: typeof BimplusButtonType['FILE' | 'TEXT'];\n}\n\nexport interface BimplusButtonClickEvent {\n id: string;\n}\n\nexport const BimplusButtonType = {\n FILE: 'file',\n TEXT: 'text'\n} as const;","import { Observable, take } from 'rxjs';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport {\n BimplusButtonRowItem,\n BimplusButtonClickEvent,\n BimplusButtonType,\n} from './bimplus-buttons-row.interface';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, EventEmitter, Output, Input, input } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-buttons-row',\n imports: [NgTemplateOutlet, AsyncPipe],\n templateUrl: './bimplus-buttons-row.component.html',\n styleUrl: './bimplus-buttons-row.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusButtonsRowComponent extends BimplusLocalizedWidgetComponent {\n protected readonly BimplusButtonType = BimplusButtonType;\n @Input () isMultiple = false;\n items = input<BimplusButtonRowItem[]>([]);\n canUpdateObject = input<boolean>(false);\n\n @Output() fileChanged = new EventEmitter<File[]>();\n @Output() buttonClicked = new EventEmitter<BimplusButtonClickEvent>();\n\n protected onChange(event: Event, inputElement: HTMLInputElement) {\n const files = (event.target as unknown as { files: File[] }).files; \n\n if (files) {\n this.fileChanged.emit(files);\n // reset value to be able select same value again\n inputElement.value = '';\n }\n }\n\n protected _buttonClicked(item: BimplusButtonRowItem) {\n if (item.disabled && this.isObservable(item.disabled)) {\n // evaluate observable once\n item.disabled.pipe(take(1)).subscribe((disabled) => {\n if (!disabled) {\n this.buttonClicked.emit({ id: item.id });\n }\n });\n return;\n }\n if (item.disabled) {\n return;\n }\n this.buttonClicked.emit({ id: item.id });\n }\n\n protected isObservable(value: Observable<boolean> | boolean): value is Observable<boolean> {\n return typeof value === 'object' && 'subscribe' in value;\n }\n}\n","<div class=\"button-row\">\n @for(item of items(); track item.id; let last=$last; let first=$first;) {\n @switch(item.type) {\n @case (BimplusButtonType.FILE) {\n <ng-container\n *ngTemplateOutlet=\"fileButton; context: { $implicit: item, last, first }\"\n ></ng-container>\n } @default {\n <ng-container\n *ngTemplateOutlet=\"button; context: { $implicit: item, last, first }\"\n ></ng-container>\n }\n }\n }\n</div>\n\n<ng-template #fileButton let-item let-last=\"last\" let-first=\"first\">\n <input\n #fileInput\n hidden\n type=\"file\"\n (change)=\"onChange($event, fileInput)\"\n [id]=\"item.id\"\n [attr.multiple]=\"isMultiple ? true : null\"\n />\n <ng-container\n *ngTemplateOutlet=\"\n button;\n context: { $implicit: item, last, first, fileInput }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #button\n let-item\n let-last=\"last\"\n let-first=\"first\"\n let-fileInput=\"fileInput\"\n>\n <button\n data-test=\"button\"\n [class.last]=\"last\"\n [class.first]=\"first\"\n [class.primary-button]=\"\n item.buttonStyle === undefined || item.buttonStyle === 'primary'\n \"\n [class.secondary-button]=\"item.buttonStyle === 'secondary'\"\n [class.text-button]=\"\n item.buttonType === undefined || item.buttonType === 'text'\n \"\n [class.icon-button]=\"item.buttonType === 'icon'\"\n [class.combined-button]=\"item.buttonType === 'combined'\"\n [class.disabled]=\"item.disabled === true\"\n (click)=\"fileInput ? fileInput.click() : _buttonClicked(item)\"\n title=\"{{ item.tooltip }}\"\n [disabled]=\"isObservable(item.disabled) ? !!(item.disabled | async) : !!item.disabled\"\n >\n {{ item.title }}\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusConnectionDesignerService } from \"./bimplus-connection-designer.service\"\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusSidenavDrawerContentComponent } from '../bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonRowItem, BimplusButtonClickEvent } from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport { DesignCode } from './bimplus-connection-designer.interface';\n\n@Component({\n selector: 'lib-bimplus-connection-designer',\n imports: [\n CommonModule,\n FormsModule,\n NgSelectModule,\n TranslateModule,\n BimplusSidenavDrawerContentComponent,\n BimplusButtonsRowComponent,\n BimplusSidenavDrawerContentComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-connection-designer.component.html',\n styleUrl: './bimplus-connection-designer.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusConnectionDesignerComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n protected connectionDesignerService = inject(BimplusConnectionDesignerService);\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n config: Array<BimplusButtonRowItem> = [];\n constructor() {\n super();\n\n const connectionDesignerService = this.connectionDesignerService;\n\n connectionDesignerService.activeStepChange$.subscribe((step) => {\n if (step === 0) {\n this.resetDesignCode();\n }\n });\n }\n\n ngOnInit(): void {\n this.config.push({\n id: \"next\"\n , title: this.translateService.instant('_Next')\n , tooltip: this.translateService.instant('_Next')\n , disabled: true\n , buttonStyle: 'primary'\n });\n this.buttonRowItems = this.config;\n }\n\n // #region Design codes\n\n chooseCode: string = \"_Choose_a_design_code\"; // Message for drop down list\n\n // Design method codes defined in SDS2 (see WebSdk Connexis service for possible values)\n @Input() designCodes: Array<DesignCode> = [\n { id: \"0\", name: \"EN 1993-1-8 (Eurocode 3)\", code: \"EURO05\", codeNumber: 9 },\n { id: \"1\", name: \"AISC 360-22 (16th Ed.): LRFD\", code: \"LRFD16\", codeNumber: 19 },\n { id: \"2\", name: \"AISC 360-22 (16th Ed.): ASD\", code: \"ASD16\", codeNumber: 18 },\n { id: \"3\", name: \"CSA S16:19 (CISC 12th Ed.)\", code: \"CSA12\", codeNumber: 17 },\n ];\n @Input() currentDesignCode: DesignCode | null = null;\n\n @Output() designCodeChanged = new EventEmitter<DesignCode | null>();\n\n set activeDesignCode(value: DesignCode | null) {\n this.currentDesignCode = value;\n this.designCodeChanged.emit(this.currentDesignCode);\n }\n\n get activeDesignCode(): DesignCode | null {\n return this.currentDesignCode;\n }\n\n private _updateButtonState(buttonId: string, disabled: boolean) {\n const _button = this.config.find(btn => btn.id === buttonId);\n if (!_button) {\n return;\n }\n _button.disabled = disabled;\n }\n\n private _calculationCanBeStarted: boolean = true;\n @Input()\n set calculationCanBeStarted(value: boolean) {\n this._calculationCanBeStarted = value;\n this._updateButtonState(\"next\", !value);\n }\n get calculationCanBeStarted() {\n return this._calculationCanBeStarted;\n }\n\n @Output() startCalculationClicked = new EventEmitter<void>();\n\n buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"next\") {\n this.connectionDesignerService.activeStep = 1;\n if (this._calculationCanBeStarted) {\n this.startCalculationClicked.emit();\n }\n }\n }\n\n resetDesignCode() {\n this.activeDesignCode = null;\n }\n // #endregion\n}\n","<lib-bimplus-sidenav-drawer-content\n [header]=\"'_Connection_designer' | translate\"\n>\n <div class=\"connection-designer-content\">\n @if(connectionDesignerService.activeStep === 0) {\n <div class=\"cross-button\">\n <div class=\"cross\"\n (click)=\"resetDesignCode()\"\n (keypress)=\"resetDesignCode()\"\n >\n </div>\n </div>\n <div class=\"title\">\n {{ \"_Select_the_code\" | translate }}\n </div>\n <div class=\"description\">\n {{ \"_Activate_all_objects_to_make_a_connection\" | translate }}\n </div>\n <div class=\"note\">\n {{ \"_Activate_all_objects_note\" | translate }}\n </div>\n\n @if(designCodes.length > 0){\n <div class=\"design-codes\">\n <ng-select\n class=\"design-codes-dropdown\"\n [(ngModel)]=\"activeDesignCode\"\n [clearable]=\"false\"\n [searchable]=\"false\"\n [placeholder]=\"chooseCode | translate\"\n >\n <ng-option *ngFor=\"let code of designCodes\" [value]=\"code\">{{\n code.name\n }}</ng-option>\n </ng-select>\n </div>\n } @else {\n <div class=\"no-design-codes\">\n {{ \"_No_design_codes_defined\" | translate }}\n </div>\n }\n\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n ></lib-bimplus-buttons-row>\n\n } @else {\n <ng-content select=\"lib-bimplus-connection-designer-results\"></ng-content>\n }\n </div>\n</lib-bimplus-sidenav-drawer-content>\n","import { CommonModule } from '@angular/common';\r\nimport { Component, model } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel',\r\n imports: [CommonModule],\r\n templateUrl: './expansion-panel.component.html',\r\n styleUrl: './expansion-panel.component.less'\r\n})\r\nexport class ExpansionPanelComponent {\r\n // #region public fields\r\n expanded = model<boolean>(true);\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n toggleExpand(){\r\n this.expanded.update(value => !value);\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"expansion-panel\">\n <div class=\"expansion-panel-header-row\">\n <div \n class=\"expansion-panel-expander-icon\" \n data-test=\"expansion-panel\"\n [ngClass]=\"expanded() ? 'open' : 'closed'\" \n (click)=\"toggleExpand()\"\n (keypress)=\"toggleExpand()\"\n ></div>\n <div class=\"expansion-panel-header-content\">\n <ng-content select=\"lib-expansion-panel-header\"></ng-content>\n </div>\n </div>\n <div class=\"expansion-panel-content-container\" [ngClass]=\"expanded() ? '' : 'collapsed'\">\n <ng-content></ng-content>\n </div>\n</div>\n\n","import { Component, HostBinding, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel-header',\r\n imports: [],\r\n templateUrl: './expansion-panel-header.component.html',\r\n styleUrl: './expansion-panel-header.component.less',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ExpansionPanelHeaderComponent {\r\n @HostBinding('class.expansion-panel-header-container') centerMenuButtonClass: boolean = true;\r\n}\r\n"," <div class=\"expansion-panel-header-title\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div>\r\n <ng-content select=\"lib-expansion-panel-header-actions\"></ng-content>\r\n </div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel-header-actions',\r\n imports: [],\r\n templateUrl: './expansion-panel-header-actions.component.html',\r\n styleUrl: './expansion-panel-header-actions.component.less'\r\n})\r\nexport class ExpansionPanelHeaderActionsComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\r\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-text-message',\n templateUrl: './bimplus-text-message.component.html',\n styleUrl: './bimplus-text-message.component.less'\n})\nexport class BimplusTextMessageComponent {\n message = input<string | undefined>(undefined);\n}\n","@if(message(); as message) {\n <div class=\"message\">\n {{ message }}\n </div>\n}","import { Component, ViewEncapsulation, ElementRef, AfterViewInit, AfterViewChecked, inject } from '@angular/core';\n\nimport SimpleBar from 'simplebar';\n\n@Component({\n selector: 'lib-bimplus-scrollable-container',\n imports: [],\n templateUrl: './bimplus-scrollable-container.component.html',\n styleUrl: './bimplus-scrollable-container.component.less',\n encapsulation: ViewEncapsulation.None\n})\n\nexport class BimplusScrollableContainerComponent implements AfterViewInit, AfterViewChecked {\n private readonly elementRef = inject(ElementRef);\n\n _simpleBar!: SimpleBar;\n _element: HTMLElement;\n protected _scrollableContainerClassName: string = '.scrollable-container';\n\n constructor(){\n this._element = this.elementRef.nativeElement;\n }\n\n private _initializationSimpleScrollBar(): void {\n // init simple bar scrollbar\n const scrollableContainer: HTMLElement | null = this._element?.querySelector(this._scrollableContainerClassName);\n if (!scrollableContainer) {\n console.error('No scrollable container found in the element.');\n return;\n }\n this._simpleBar = new SimpleBar(scrollableContainer);\n }\n\n ngAfterViewInit(): void {\n this._initializationSimpleScrollBar();\n }\n\n private _recalculateScrollbar(): void {\n if(!this._element) {\n return;\n }\n const _element = this._element;\n const barElem = _element?.querySelector(this._scrollableContainerClassName);\n if (!barElem){\n return;\n }\n\n if (!this._simpleBar) {\n console.error('No scrollable container found in the element.');\n return;\n }\n\n this._simpleBar.recalculate();\n }\n\n ngAfterViewChecked(): void {\n this._recalculateScrollbar();\n }\n}\n","<div class=\"scrollable-container\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, OnInit, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonRowItem, BimplusButtonClickEvent } from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport { ConnexisResultsRoot, ConnexisResultList, ConnexisResult } from './bimplus-connection-designer-results.interface';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\nimport { BimplusConnectionDesignerService } from \"../bimplus-connection-designer/bimplus-connection-designer.service\";\nimport { BimplusTextMessageComponent } from \"../bimplus-text-message/bimplus-text-message.component\";\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\n\n@Component({\n selector: 'lib-bimplus-connection-designer-results',\n imports: [\n TranslateModule,\n CommonModule,\n BimplusButtonsRowComponent,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n BimplusTextMessageComponent,\n BimplusScrollableContainerComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-connection-designer-results.component.html',\n styleUrl: './bimplus-connection-designer-results.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusConnectionDesignerResultsComponent extends BimplusLocalizedWidgetComponent\n implements OnInit, OnChanges {\n protected connectionDesignerService = inject(BimplusConnectionDesignerService);\n\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n\n @Input() errorMessage: string = \"\";\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.buttonRowItems = [\n {\n id: \"done\"\n , title: this.translateService.instant('_Done')\n , tooltip: this.translateService.instant('_Done')\n , disabled: false\n , buttonStyle: 'primary'\n }\n ];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const changedResults = changes['results']?.currentValue as ConnexisResultsRoot | null;\n if (changedResults === null) {\n this.connectionDesignerService.activeStep = 0;\n }\n }\n\n @Output() doneClicked = new EventEmitter<void>();\n\n buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"done\") {\n this.connectionDesignerService.activeStep = 0;\n this.doneClicked.emit();\n }\n }\n\n // #region Results\n @Input() resultTreeRootTitle: string = \"\"; // Tooltip root node of tree\n @Input() resultTreeRootName: string = \"\"; // Visible root node name of tree\n @Input() expandedTreeRoot: boolean = false; // Root tree is expanded\n @Input() expandedResultTrees: boolean = false; // failed and passed sub-tree expanded\n @Input() results: ConnexisResultsRoot | null = null; // Root for all result lists (failed, passed)\n @Output() toggleVisibilityResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() toggleVisibilityResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() toggleVisibilityResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() clickedResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() clickedResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() clickedResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() doubleClickedResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() doubleClickedResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() doubleClickedResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() mouseEnteredResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() mouseLeftResult = new EventEmitter<ConnexisResult>(); // children nodes\n\n totalResults(): number {\n let totalCount = 0;\n if (!this.results) return totalCount;\n for (const resultList of this.results.resultList) {\n totalCount += resultList.results.length;\n }\n return totalCount\n }\n private statusMessage(result: ConnexisResult): string {\n let message = \"\\n\";\n message += result.isValid ? \"PASSED : \" : \"FAILED : \";\n message += \"Unity Ratio \" + result.unityRatio;\n return message;\n }\n private infoMessage(result: ConnexisResult): string {\n if (!result.message) {\n return \"\";\n }\n\n let message = \"\\n\";\n message += \"Message: \";\n message += result.message;\n return message;\n }\n\n getTitle(result: ConnexisResult): string {\n return `${result.name}${this.statusMessage(result)}${this.infoMessage(result)}`;\n }\n // #endregion\n}\n","<div class=\"connection-designer-content-result\">\n <div class=\"title\">\n {{ \"_Connection_Designer_results_title\" | translate }}\n </div>\n <div class=\"description\">\n {{ \"_Connection_Designer_results_description\" | translate }}\n </div>\n\n @if(results !== null){\n <lib-bimplus-scrollable-container>\n <div class=\"scrollable-content-container\">\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedTreeRoot\"\n >\n <lib-expansion-panel-header\n [title]=\"resultTreeRootTitle ? resultTreeRootTitle : results.name + ' (' + totalResults() + ')'\"\n (click)=\"clickedResultsRoot.emit(results)\"\n (keypress)=\"clickedResultsRoot.emit(results)\"\n (dblclick)=\"doubleClickedResultsRoot.emit(results)\"\n >\n <span class=\"project-navigator-root-node\">\n {{ results.name }} ({{ totalResults() }})\n </span>\n \n <lib-expansion-panel-header-actions>\n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_results'\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: results.isVisible,\n invisible: !results.isVisible,\n semivisible: results.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResultsRoot.emit(results)\"\n ></div> -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n \n <!-- Show all result lists as expansion panels -->\n <!-- lib-bimplus-flat-tree can't be used for that at the moment -->\n <div *ngFor=\"let resultList of results?.resultList\">\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedResultTrees\"\n >\n <lib-expansion-panel-header>\n <span\n class=\"project-navigator-model-node\"\n [ngClass]=\"{\n visible: resultList.isVisible\n }\"\n [style.color]=\"resultList.colorHexCode\"\n [title]=\"resultList.name + ' (' + resultList.results.length + ')'\"\n (click)=\"clickedResultList.emit(resultList)\"\n (keypress)=\"clickedResultList.emit(resultList)\"\n (dblclick)=\"doubleClickedResultList.emit(resultList)\"\n >\n {{ resultList.name }} ({{ resultList.results.length }})\n </span>\n \n <lib-expansion-panel-header-actions>\n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_resultlist_' + resultList.id\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: resultList.isVisible,\n invisible: !resultList.isVisible,\n semivisible: resultList.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResultList.emit(resultList)\"\n ></div> -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n \n <!-- Content of panel -->\n <div\n class=\"project-navigator-layer-node\"\n *ngFor=\"let result of resultList.results\"\n >\n <div\n class=\"project-navigator-layer-node-name\"\n [class.selected-node]=\"result.isSelected\"\n [attr.data-test]=\"'result' + result.id\"\n [ngClass]=\"{\n visible: result.isVisible\n }\"\n [title]=\"getTitle(result)\"\n (click)=\"clickedResult.emit(result)\"\n (keypress)=\"clickedResult.emit(result)\" \n (dblclick)=\"doubleClickedResult.emit(result)\"\n (mouseenter)=\"mouseEnteredResult.emit(result)\"\n (mouseleave)=\"mouseLeftResult.emit(result)\"\n >\n {{ result.name }}\n </div>\n \n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_result_' + result.id\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: result.isVisible,\n invisible: !result.isVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResult.emit(result)\"\n ></div> -->\n </div>\n </lib-expansion-panel>\n </div>\n </lib-expansion-panel>\n </div>\n </lib-bimplus-scrollable-container>\n\n } @else {\n <lib-bimplus-text-message\n class=\"error-message\"\n *ngIf=\"errorMessage\"\n [message]=\"errorMessage\"\n >\n </lib-bimplus-text-message>\n }\n\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n >\n </lib-bimplus-buttons-row>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeObserverService {\n\n private rectSize$: BehaviorSubject<DOMRect |undefined > = new BehaviorSubject<DOMRect|undefined>(undefined);\n private internalRectSize :DOMRect = new DOMRect(1,1,1,1);\n // Observable that components can subscribe to\n public parentAppRect$: Observable<DOMRect | undefined> = this.rectSize$.asObservable();\n\n constructor() { }\n\n public setSize(newValue: DOMRect): void {\n this.rectSize$.next(newValue); \n this.internalRectSize = newValue; \n }\n\n public getParentAppRect ():DOMRect{\n if( this.internalRectSize.width<=1 || this.internalRectSize?.height<=1 ) { // not set up with real data yet\n const parentView:HTMLElement|null = document.querySelector('.mainView');\n if(!parentView){\n return this.internalRectSize;\n }\n return parentView.getBoundingClientRect();\n }\n return this.internalRectSize;\n } \n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorageService {\n\n private storageSubject = new BehaviorSubject<{ key: string, value: unknown } | null>(null);\n\n constructor() { }\n\n // Set a string value in localStorage\n setItem(key: string, value: string): void {\n try {\n localStorage.setItem(key, value);\n this.storageSubject.next({ key, value });\n } catch (e) {\n console.error('Error saving to localStorage', e);\n }\n }\n\n // Get a string value from localStorage\n getItem(key: string): string | null {\n try {\n return localStorage.getItem(key);\n } catch (e) {\n console.error('Error reading from localStorage', e);\n return null;\n }\n }\n\n // Remove an item from localStorage\n removeItem(key: string): void {\n try {\n localStorage.removeItem(key);\n this.storageSubject.next({ key, value: null });\n } catch (e) {\n console.error('Error removing from localStorage', e);\n }\n }\n\n // Clear all items in localStorage\n clear(): void {\n try {\n localStorage.clear();\n this.storageSubject.next(null);\n } catch (e) {\n console.error('Error clearing localStorage', e);\n }\n }\n\n // Set an object in localStorage\n setObject(key: string, value: unknown): void {\n this.setItem(key, JSON.stringify(value));\n }\n\n // Get an object from localStorage\n getObject(key: string): unknown {\n const value = this.getItem(key);\n return value ? JSON.parse(value) : null;\n }\n\n // Watch for changes in localStorage\n watchStorage(): Observable<{ key: string, value: unknown } | null> {\n return this.storageSubject.asObservable();\n }\n}\n","import { ElementRef, Injectable, inject } from '@angular/core';\nimport { ResizeObserverService } from './resize-observer.service';\nimport { LocalStorageService } from './local-storage.service';\nimport { BehaviorSubject } from 'rxjs';\n//import { ItemsList } from '@ng-select/ng-select/lib/items-list';\n//import { NotFoundError } from 'rxjs';\n\n\nexport interface LayoutManagerItem {\n element:ElementRef;\n id: string;\n selector?:string;\n isCollapsed:boolean;\n rememberPosition?:boolean\n left?: number;\n top?:number;\n width?:number;\n height?:number;\n}\n\nexport interface LayoutManagerConfigItem {\n id: string;\n isCollapsed:boolean; \n left?: number;\n top?:number; \n width?:number;\n height?:number;\n}\n\n\ninterface LayoutManagerConfig {\n [key:string]: LayoutManagerConfigItem\n}\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutManagerService {\n private resizeObserverService = inject(ResizeObserverService);\n private localStorageService = inject(LocalStorageService);\n\n\n registeredItems$: BehaviorSubject<LayoutManagerItem[]> = new BehaviorSubject<LayoutManagerItem[]>([])\n private registeredItems:LayoutManagerItem[] = [];\n \n get RegisteredItems(): LayoutManagerItem[] {\n return this.registeredItems;\n }\n CONFIG:string = 'layoutManagerConfig';\n\n \n/**--------------------------------------------------------------------------\n * register object. object must have unique id or elementId\n --------------------------------------------------------------------------*/\n registerObject(obj:ElementRef, id:string, selector:string | undefined, rememberPosition:boolean,left:number = 100, top:number = 100,width:number = 0, height:number = 0) {\n let foundIndex = -1;\n if(this.registeredItems.some((item,index) => {\n const retval = item.id === id;\n if(retval){\n foundIndex = index;\n }\n return retval;\n })){\n if(foundIndex >= 0){\n this.registeredItems.splice(foundIndex,1);\n } \n }\n const newItem: LayoutManagerItem = { \n element:obj,\n id:id,\n selector:selector,\n rememberPosition:!!rememberPosition,\n left:left,\n top:top,\n width:width,\n height:height,\n isCollapsed: false \n };\n\n this.registeredItems.push(newItem);\n this.registeredItems$.next(this.registeredItems);\n this._initObject(newItem);\n }\n \n _initObject(obj:LayoutManagerItem){\n this._adjustObjectByConfig(obj);\n this._adjustObjectByWindowSize(obj);\n \n }\n /**--------------------------------------------------------------------------\n * get object configuration\n * return {left, top, width, heigth}\n --------------------------------------------------------------------------*/\n _getObjectConfig(obj:LayoutManagerItem):LayoutManagerConfigItem|null {\n if(!obj){\n return null;\n }\n const configValue = this.localStorageService.getItem(this.CONFIG);\n const config = configValue ? JSON.parse(configValue) : {};\n const objId = obj.id ;\n let configObj = config[objId];\n if(!configObj) {\n configObj = {id:objId,left:obj.left,top:obj.top,width:obj.width,height:obj.height}; \n }\n return configObj;\n }\n\n _adjustObjectByConfig(obj:LayoutManagerItem){\n const config:LayoutManagerConfigItem|null = this._getObjectConfig(obj);\n if(!config){\n return; \n }\n const parentElement = this._getDomParentElement(obj);\n const internalElement = this._getDomInternalElement(obj,'');\n if(!parentElement || !internalElement){\n return;\n }\n parentElement.style.left = (config.left) + 'px';\n parentElement.style.top = (config.top) + 'px';\n if(config.width && config.width > 0){\n internalElement.style.width = config.width + 'px';\n }\n if(config.height && config.height > 0){\n internalElement.style.height = config.height + 'px';\n }\n \n this.checkPosition(obj.id,\"\",undefined,0,0,true); \n }\n\n _adjustObjectByWindowSize(obj:LayoutManagerItem){\n this.checkPosition(obj.id,\"\",undefined,0,0,true); \n }\n \n /**--------------------------------------------------------------------------\n * returns object registered in the layout manager \n --------------------------------------------------------------------------*/\n getItem(id: string ):LayoutManagerItem|null { \n let foundItem:LayoutManagerItem|null = null;\n this.registeredItems.forEach(item =>{\n if(item.id === id){\n foundItem = item;\n }\n });\n return foundItem;\n }\n\n /**--------------------------------------------------------------------------\n * set object configuration\n --------------------------------------------------------------------------*/\n _setObjectConfig(obj:LayoutManagerItem, left:number,top:number,width:number,height:number) {\n const objId = obj?.id ;\n if (!objId) {\n return;\n }\n let config = this.localStorageService.getObject(this.CONFIG) as LayoutManagerConfig;\n //let config = configValue && JSON.parse(configValue) as LayoutManagerConfig;\n if (!config) {\n config = {};\n }\n if(obj?.isCollapsed){ // do not overtake collapsed size\n if (!config[objId]) { \n config[objId] = obj;\n }\n config[objId].left = left;\n config[objId].top = top;\n //config[objId].width = width;\n //config[objId].height = height ;\n this.localStorageService.setObject(this.CONFIG, config);\n return;\n }\n\n const newItem :LayoutManagerConfigItem = {\n id: objId,\n isCollapsed: false,\n left: left,\n top: top,\n width: width,\n height: height\n };\n config[objId] = newItem;\n this.localStorageService.setObject(this.CONFIG,config);\n }\n \n getDomParentElement(id:string ):HTMLElement|null {\n const item:LayoutManagerItem|null = this.getItem(id);\n if(item){\n return this._getDomParentElement(item);\n }\n return null;\n }\n\n _getDomParentElement(item:LayoutManagerItem ):HTMLElement|null {\n let element:HTMLElement;\n if(item.element?.nativeElement?.shadowRoot){\n element = item.element?.nativeElement?.shadowRoot.querySelector(item.selector);\n } else {\n element = item.element?.nativeElement; \n }\n if(!element){\n console.error('_getDomParentElement: missing element');\n return null;\n }\n return element; \n }\n\n _getDomInternalElement(item:LayoutManagerItem,selector:string | undefined ):HTMLElement|null {\n const element:HTMLElement = item.element?.nativeElement?.shadowRoot || item.element?.nativeElement; \n if(!element){\n console.error('_getDomInternalElement: missing element');\n return null;\n }\n const mySelector =selector && selector?.length > 0 ?selector:item.selector; \n const retval: HTMLElement|null= mySelector?element.querySelector(mySelector):element;\n if(!retval){\n console.error(`_getDomInternalElement: selection of element ${element} failed with selector ${mySelector}`);\n }\n return retval;\n }\n\n\n _getElementRect(item:LayoutManagerItem,selector:string | undefined ,parentRectangle:DOMRect |undefined ):DOMRect | null{\n const selectedObj : HTMLElement|null = this._getDomInternalElement(item,selector);\n if(!selectedObj){\n console.error('_getElementRect: missing selected object');\n return null;\n }\n\n const parentRect:DOMRect = parentRectangle || this.resizeObserverService.getParentAppRect();\n if( !parentRect || parentRect?.width<=1 || parentRect?.height<=1 ) {\n console.log('_getElementRect: missing parent rect');\n }\n const elementRect:DOMRect|null = selectedObj.getBoundingClientRect();\n if(!elementRect){\n console.error('_getElementRect: missing bounding rect');\n }\n return elementRect;\n }\n\n // checks whether element or element with additional selection of subelement is placed within the give rectangle\n // if not then calculates the offset to be moved to fit in\n checkPosition(id:string,selector:string,parentRectangle:DOMRect|undefined ,deltaX:number,deltaY:number,forceCheck:boolean = false){\n if(!id){\n return {deltaX:0,deltaY:0};\n }\n const e1 = this.getItem(id);\n if(!e1){\n return {deltaX:0,deltaY:0};\n }\n const parentRect:DOMRect = parentRectangle || this.resizeObserverService.getParentAppRect();\n const elementRect:DOMRect | null = this._getElementRect(e1,selector,parentRect);\n if(!elementRect){\n console.error('checkPosition: missing elementRect');\n return {deltaX:0,deltaY:0};\n }\n \n if(!elementRect?.width || !elementRect?.height){\n console.error('checkPosition:element rect empty ');\n return {deltaX:0,deltaY:0};\n } \n \n let checkAll = true;\n if(parentRect?.width < 2 || parentRect?.height < 2){ // empty parent rect , (after init before first usefull info) nothing to check \n checkAll = false; \n } \n if(checkAll){\n let checkBoundaries = true;\n if(this._isInsideRect(elementRect, parentRect) === false && !forceCheck) {\n checkBoundaries = false;\n }\n \n // copy of real element rectangle to perform calculation over before set to the real element\n const elementDOMRect = DOMRect.fromRect(elementRect);\n\n //set the element rectangle by deltas\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n\n if(checkBoundaries) {\n if(this._isInsideRect(elementDOMRect, parentRect) === false) {\n const newElementPos = this.getAlignedPosition(elementDOMRect, parentRect);\n deltaX = newElementPos.x - elementRect.x;\n deltaY = newElementPos.y - elementRect.y;\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n }\n } else {\n if (this._isInsideLeftTopRect(parentRect, elementDOMRect) === false) {\n const newElementPos = this._getAlignedLeftTopPosition(elementDOMRect, parentRect);\n deltaX = newElementPos.x - elementRect.x;\n deltaY = newElementPos.y - elementRect.y;\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n }\n }\n }\n\n const selectedElement = this._getDomParentElement(e1);\n if(!selectedElement){\n return;\n }\n const computedStyle = window.getComputedStyle(selectedElement);\n const top = parseInt(computedStyle.top, 10);\n const left = parseInt(computedStyle.left, 10);\n selectedElement.style.top = (top + deltaY) + 'px';\n selectedElement.style.left = (left + deltaX) + 'px';\n return {deltaX,deltaY};\n }\n /**--------------------------------------------------------------------------\n * find if rectangle 1 is inside rectangle 2\n --------------------------------------------------------------------------*/\n _isInsideRect(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return false;\n }\n return r2.left <= r1.left && r2.top <= r1.top && r2.right >= r1.right && r2.bottom >= r1.bottom;\n }\n\n /**--------------------------------------------------------------------------\n * find if rectangles do not overlap the left and top sides\n --------------------------------------------------------------------------*/\n _isInsideLeftTopRect(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return false;\n }\n const r1Inside = r2.left <= r1.left && r2.top <= r1.top;\n const r2Inside = r1.left <= r2.left && r1.top <= r2.top;\n return r1Inside || r2Inside;\n }\n\n /**--------------------------------------------------------------------------\n * get position of r1 aligned with the r2 sides\n --------------------------------------------------------------------------*/\n getAlignedPosition(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return {x:0,y:0};\n }\n const to = { x: r1.x, y: r1.y };\n //align left or right sides. preferably left\n if(r1.left < r2.left) {\n to.x = r2.x;\n } else if(r1.right > r2.right) {\n to.x = r2.right - r1.width;\n }\n //align top or bottom. preferably top\n if(r1.top < r2.top) {\n to.y = r2.y;\n } else if(r1.bottom > r2.bottom) {\n to.y = r2.bottom - r1.height;\n }\n return to;\n }\n \n /**--------------------------------------------------------------------------\n * get position of r1 aligned with the r2 left, top sides\n --------------------------------------------------------------------------*/\n _getAlignedLeftTopPosition(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return {x:0,y:0};\n }\n\n const to = { x: r1.x, y: r1.y };\n //align left\n if(r1.left < r2.left) {\n to.x = r2.x;\n }\n //align top\n if(r1.top < r2.top) {\n to.y = r2.y;\n }\n return to;\n }\n\n /**--------------------------------------------------------------------------\n * translate rectangle by x, y\n --------------------------------------------------------------------------*/\n _translateRectangle(rect:DOMRect, translateX:number, translateY:number) {\n if(!rect) {\n return;\n }\n rect.x += translateX;\n rect.y += translateY;\n return rect;\n }\n \n updateCollapsed(value:boolean, id:string = ''):void{ \n const foundItem = this.getItem(id);\n if(!foundItem){\n return;\n }\n foundItem.isCollapsed = value;\n this.registeredItems$.next(this.registeredItems);\n setTimeout(()=>{ \n this.checkPosition(foundItem.id,\"\",undefined,0,0,true); \n });\n } \n\n\n handleDragEnd(id:string){//},left:number,top:number){\n this.finalizeObjectChanges(id);\n }\n\n /**--------------------------------------------------------------------------\n * finalize object changes (position). object must be registered in the layout manager\n * object: object to finalize \n --------------------------------------------------------------------------*/\n finalizeObjectChanges(id:string):void {\n const item:LayoutManagerItem|null = this.getItem(id);\n if(!item){\n return;\n }\n const element = this._getDomParentElement(item);\n if(!element){\n return;\n }\n const computedStyle = window.getComputedStyle(element); \n const top = parseInt(computedStyle.top, 10);\n const left = parseInt(computedStyle.left, 10);\n \n const elementRect = this._getElementRect(item,undefined,undefined);\n this._setObjectConfig(item,left,top,\n elementRect && elementRect.width > 0 ? elementRect.width:0 ,\n elementRect && elementRect.height > 0 ? elementRect.height:0);\n }\n}\n\n","// Define the type of the window.BimPlus object\nexport interface BimPlusObject {\n [key: string]: (dataDetail: { detail: unknown }) => void;\n}\nexport interface Source {\n [key: string]: { emit: (arg0: unknown) => void; };\n}\n\n\n/**--------------------------------------------------------------------------\n* fire event from component in two ways : \n - fire custom event from component in standard recommended way via. this.eventName.emit function\n \n - call window.BimPlus.eventName function directly on window object (eventName is name\n of the event we want to fire e.g. bimplusNavbarClicked so it will be window.BimPlus.bimplusNavbarClicked).\n Function must be defined in app. where we are using our components.\n This was implemented because MS Edge browser has problems with custom events and in some \n situations(e.g. after file download) it stops handling custom events.\n Disadvantage is that we can have only one event handler which is shared between the multiple components.\n--------------------------------------------------------------------------*/\nexport function fireEvent(source: unknown, eventName: string, data: unknown = null){\n if ( !eventName ) {\n console.error(\"ERROR: Missing event name in fireEvent function in Bimplus components!\");\n return;\n }\n // Check if eventName exists on window.BimPlus and if it's a function\n const bimPlus = ('BimPlus' in window) && typeof window.BimPlus === 'object' && (window.BimPlus as BimPlusObject);\n if (bimPlus && typeof bimPlus[eventName] === 'function') {\n bimPlus[eventName]({detail: data});\n }\n\n const _source = (source as Source);\n if (eventName in _source) {\n _source[eventName].emit(data);\n }\n}","import { Directive, ElementRef, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { LayoutManagerService } from '../services/layout-manager.service';\nimport { ResizeObserverService } from '../services/resize-observer.service';\nimport { fireEvent } from '../utils/utils';\n\ninterface ResizerItem {\n 'className' : string ,\n 'resizeStrategy' : string \n}\n\nexport interface ResizableElement extends HTMLElement{\n resizeStrategy?: string;\n}\n\n@Directive({\n selector: '[libResizable]',\n standalone: true\n})\n\nexport class ResizableDirective implements OnDestroy, OnInit{\n private elementRef = inject(ElementRef);\n private layoutManagerService = inject(LayoutManagerService);\n private resizeObserverService = inject(ResizeObserverService);\n\n resizeContactPointX = 0;\n resizeContactPointY = 0;\n resizableElements:ResizableElement[] = [];\n resizeEnabled = true;\n resizeStarted = false;\n resizeStart : (event: MouseEvent | TouchEvent) => void;\n resizeInProgress: (event: MouseEvent | TouchEvent) => void; \n boundResizeStart: (event: MouseEvent | TouchEvent) => void;\n boundResizeInProgress: (event: MouseEvent | TouchEvent) => void;\n boundResizeEnd: (event: MouseEvent | TouchEvent) => void;\n \n _element:HTMLElement; \n actResizeStrategy = \"se\";\n \n\n @Output()\n resizedEnd = new EventEmitter<MouseEvent>();\n\n\n // list of resizers, resizers are specified by class name\n resizersList:ResizerItem[] = [ \n { className : \"resizer-nw\" , resizeStrategy : \"nw\" },\n { className : \"resizer-n\" , resizeStrategy: \"n\" },\n { className : \"resizer-ne\" , resizeStrategy: \"ne\" },\n { className : \"resizer-e\" , resizeStrategy: \"e\" },\n { className : \"resizer-se\" , resizeStrategy: \"se\" },\n { className : \"resizer-s\" , resizeStrategy: \"s\" },\n { className : \"resizer-sw\" , resizeStrategy: \"sw\" },\n { className : \"resizer-w\" , resizeStrategy: \"w\" }\n ];\n \n constructor() {\n const elementRef = this.elementRef;\n const layoutManagerService = this.layoutManagerService;\n \n \n this._element = elementRef.nativeElement;\n this.layoutManagerService = layoutManagerService;\n \n this.resizeStart = (event:MouseEvent|TouchEvent) => {\n //get mouse/finger X Y positions\n event.stopPropagation();\n if(this.resizeStarted){\n return;\n }\n this.resizeStarted = true;\n const touchList = (event as TouchEvent).targetTouches? (event as TouchEvent).targetTouches: [];\n const clientX = event.type === 'touchstart' ? touchList[0]?.clientX : (event as MouseEvent).clientX;\n const clientY = event.type === 'touchstart' ? touchList[0]?.clientY : (event as MouseEvent).clientY;\n this.resizeContactPointX = clientX;\n this.resizeContactPointY = clientY;\n this.openDocumentListenersResize(); \n this.setupResizeStrategy(event);\n }\n \n /**--------------------------------------------------------------------------\n * calcuates and sets the new position\n --------------------------------------------------------------------------*/\n this.resizeInProgress = (event:MouseEvent|TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n //get mouse/finger X Y positions\n const touchList = (event as TouchEvent).targetTouches ? (event as TouchEvent).targetTouches: [];\n const clientX = event.type === 'touchmove' ? touchList[0]?.clientX : (event as MouseEvent).clientX;\n const clientY = event.type === 'touchmove' ? touchList[0]?.clientY : (event as MouseEvent).clientY;\n //const clientX = (event as MouseEvent).clientX;\n //const clientY = (event as MouseEvent).clientY;\n\n const moved = this.resizeFromTo(this._element,this.resizeContactPointX, this.resizeContactPointY,clientX,clientY, this.actResizeStrategy);\n if(moved) {\n this.resizeContactPointX = clientX;\n this.resizeContactPointY = clientY;\n }\n }\n this.boundResizeStart = this.resizeStart.bind(this);\n this.boundResizeInProgress = this.resizeInProgress.bind(this);\n this.boundResizeEnd = this.resizeEnd.bind(this);\n this.resizeInProgress.bind(this);\n this.setResizers(this._element); \n }\n ngOnInit(): void {\n this.boundResizeStart = this.resizeStart.bind(this);\n this.boundResizeInProgress = this.resizeInProgress.bind(this);\n this.boundResizeEnd = this.resizeEnd.bind(this);\n }\n\n ngOnDestroy(): void {\n this.closeAllListenersResize(); \n }\n\n resizeEnd(){ \n //this.closeDocumentListenersResize();\n if(!this.resizeStarted){\n return;\n } \n this.resizeStarted = false;\n this.closeAllListenersResize(); \n this.openElementListenersResize();\n fireEvent(this, \"resizedEnd\", ['$event']); \n }\n \n // Unused function at the moment\n // _getViewRect() {\n // const view = document.getElementById('#containerView'); // we should get here the parent object selector as input parameter\n // if(view){\n // return view.getBoundingClientRect();\n // }\n // return new DOMRect(0,0,0,0);\n // }\n\n/**--------------------------------------------------------------------------\n * find if rectangle 1 is inside rectangle 2\n --------------------------------------------------------------------------*/\n isInsideRect(rect1:DOMRect, rect2:DOMRect) {\n if(!rect1 || !rect2) {\n return false;\n }\n const rect1Inside:boolean = rect2.left <= rect1.left\n && rect2.top <= rect1.top \n && rect2.right >= rect1.right \n && rect2.bottom >= rect1.bottom;\n\n return rect1Inside;\n }\n /**--------------------------------------------------------------------------\n * resize rectangle by x, y\n --------------------------------------------------------------------------*/\n _resizeRectangle(rect:DOMRect, resizeX:number, resizeY:number, resizeStrategy:string) {\n if(!rect) {\n return;\n }\n\n if(['nw','w', 'sw'].includes(resizeStrategy)) {\n rect.x += resizeX;\n resizeX = resizeX * -1;\n }\n\n if(['nw','n', 'ne'].includes(resizeStrategy)) {\n rect.y += resizeY;\n resizeY = resizeY * -1;\n }\n\n if(typeof(resizeX) === 'number' && !['n','s'].includes(resizeStrategy)) {\n rect.width += resizeX;\n }\n\n if(typeof(resizeY) === 'number' && !['w','e'].includes(resizeStrategy)) {\n rect.height += resizeY;\n }\n\n return rect;\n }\n\n _maxHeightReset(obj:HTMLElement, elementRect:DOMRect) { \n this.resizeFromTo(obj, elementRect.right, elementRect.bottom, elementRect.left,elementRect.top, \"se\");\n }\n\n /*--------------------------------------------------------------------\n * resize object from {x,y} to {x,y} based on resize strategy\n --------------------------------------------------------------------------*/\n resizeFromTo (obj:HTMLElement, fromX:number, fromY:number, toX:number,toY:number, resizeStrategy:string){\n const posXDelta = toX - fromX;\n const posYDelta = toY - fromY;\n const element = obj ?? this._element;\n const elementRect = element.getBoundingClientRect();\n //const viewRect = this._getViewRect();\n const viewRect = this.resizeObserverService.getParentAppRect();\n \n let checkBoundaries = true;\n\n resizeStrategy = resizeStrategy || \"se\";\n\n //if the object is outside the view rect because it's bigger, do not check boundaries,\n //allow moving outside the view rect\n if(this.isInsideRect(elementRect, viewRect) === false) {\n checkBoundaries = false; \n }\n\n this._resizeRectangle(elementRect, posXDelta, posYDelta, resizeStrategy);\n\n if (checkBoundaries && this.isInsideRect(elementRect, viewRect) === false) {\n return false;\n }\n \n const computedStyle = window.getComputedStyle(element);\n let top = parseInt(computedStyle.top, 10);\n let left = parseInt(computedStyle.left, 10);\n let width = parseInt(computedStyle.width, 10);\n let height = parseInt(computedStyle.height, 10);\n \n if(['nw','w', 'sw'].includes(resizeStrategy)) {\n left = left + posXDelta; \n }\n\n if(['nw','n', 'ne'].includes(resizeStrategy)) {\n top = top + posYDelta; \n }\n\n if(!['n','s'].includes(resizeStrategy)) {\n width = elementRect.width;\n }\n \n if( viewRect.height < elementRect.height ){\n this._maxHeightReset(element, elementRect);\n }\n else if(!['w','e'].includes(resizeStrategy)) {\n height = elementRect.height;\n }\n\n \n element.style.top = top + 'px';\n element.style.left = left + 'px';\n element.style.width = width + 'px';\n element.style.height = height + 'px';\n\n return true;\n }\n/**--------------------------------------------------------------------------\n * resize start at the layout managaer\n * open document listeners\n --------------------------------------------------------------------------*/\n \n /**--------------------------------------------------------------------------\n * set the elements used for resizing\n --------------------------------------------------------------------------*/\n setResizers(element:HTMLElement) {\n const setResizableElements = () => {\n let resizableElements:ResizableElement[] = [];\n // get dom elements of all resizers\n this.resizersList.forEach( item => {\n const resizeElems = element.getElementsByClassName(item.className);\n if( resizeElems?.length ) {\n // set resize strategy in each element so we know in which direction to resize\n const decoratedResizeElems: ResizableElement[] = Array.from(resizeElems).map( elem => {\n const resizableElem = elem as ResizableElement;\n resizableElem.resizeStrategy = item.resizeStrategy;\n return resizableElem;\n });\n\n // add it to list of all resizers\n resizableElements = [...resizableElements, ...decoratedResizeElems];\n }\n });\n\n this.resizableElements = [...resizableElements];\n this.openElementListenersResize();\n }\n setTimeout(()=>{\n setResizableElements();\n });\n }\n\n /**--------------------------------------------------------------------------\n * open mousedown, touchstart listeners on all elements allowed for resizing\n --------------------------------------------------------------------------*/\n openElementListenersResize() {\n this.resizableElements.forEach(element => {\n element.addEventListener('mousedown', this.boundResizeStart);\n element.addEventListener('touchstart', this.boundResizeStart);\n });\n }\n /**--------------------------------------------------------------------------\n * open mouseup, touchend and mousemove, touchmove on document\n --------------------------------------------------------------------------*/\n openDocumentListenersResize() {\n document.addEventListener('mouseup', this.boundResizeEnd);\n document.addEventListener('touchend', this.boundResizeEnd);\n document.addEventListener('mousemove', this.boundResizeInProgress);\n document.addEventListener('touchmove', this.boundResizeInProgress); \n }\n \n /**--------------------------------------------------------------------------\n * close mouseup, touchend and mousemove, touchmove on document\n --------------------------------------------------------------------------*/\n closeDocumentListenersResize() {\n document.removeEventListener('mousemove', this.boundResizeInProgress);\n document.removeEventListener('touchmove', this.boundResizeInProgress);\n document.removeEventListener('mouseup', this.boundResizeEnd);\n document.removeEventListener('touchend', this.boundResizeEnd);\n }\n\n/**--------------------------------------------------------------------------\n * close mousedown, touchstart listeners on all elements allowed for resizing\n --------------------------------------------------------------------------*/\n closeElementListenersResize() {\n this.resizableElements.forEach(element => {\n element.removeEventListener('mousedown', this.boundResizeStart);\n element.removeEventListener('touchstart', this.boundResizeStart);\n element.removeEventListener('mousemove', this.boundResizeInProgress);\n element.removeEventListener('touchmove', this.boundResizeInProgress); \n element.removeEventListener('mouseup', this.boundResizeEnd);\n element.removeEventListener('touchend', this.boundResizeEnd);\n });\n }\n\n /**--------------------------------------------------------------------------\n * close all listeners\n --------------------------------------------------------------------------*/\n closeAllListenersResize() {\n this.closeElementListenersResize();\n this.closeDocumentListenersResize();\n }\n\n /**--------------------------------------------------------------------------\n * setup actual resize strategy\n --------------------------------------------------------------------------*/\n setupResizeStrategy(event: MouseEvent | TouchEvent) {\n if( !event ) {\n return;\n }\n\n // find on which element resize started so we know in which direction to resize\n let resizeStrategy:string = \"se\";\n const resizeSourceElem = event?.target;\n\n if( resizeSourceElem ) {\n const foundElem = this.resizableElements.find( item => item === resizeSourceElem );\n if (foundElem?.resizeStrategy) {\n resizeStrategy = foundElem?.resizeStrategy;\n }\n }\n\n this.actResizeStrategy = resizeStrategy;\n }\n}\n","import { Component, Input, ElementRef, AfterViewChecked, ChangeDetectorRef, OnInit, OnDestroy, AfterViewInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { ResizableDirective } from '../../directives/resizable.directive'\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\nimport { ResizeObserverService } from '../../services/resize-observer.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar',\n imports: [\n CommonModule,\n ResizableDirective\n ],\n templateUrl: './bimplus-floating-bar.component.html',\n styleUrl: './bimplus-floating-bar.component.less'\n})\n\nexport class BimplusFloatingBarComponent extends BimplusLocalizedWidgetComponent implements OnInit, OnDestroy, AfterViewChecked,AfterViewInit\n{\n private layoutManagerService = inject(LayoutManagerService);\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private resizeObserverService = inject(ResizeObserverService);\n\n constructor() {\n super();\n }\n\n @Input() noBody: boolean = false;\n \n @Input() isFocused: boolean = false;\n\n @Input() resizeEnabled: boolean = false;\n @Input() autoCollapse: boolean = false;\n @Input() focusSelector: string = '';\n @Input() isVisible = false; \n @Input() id: string = '';\n \n private subscription: Subscription | null = null; // Initialize to null\n private hasViewChecked: boolean = false;\n \n //@Input() isCollapsed: boolean = false;\n isCollapsed: boolean = false;\n\n get canNotResize(): boolean {\n return !(this.resizeEnabled && !this.isCollapsed);\n }\n\n ngOnInit():void{\n \n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.id); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n }) \n \n }\n ngOnDestroy(): void {\n // Unsubscribe to avoid memory leaks\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n ngAfterViewInit(){\n // if the component wants to be registered in layout manager system\n // Subscribe to the observable\n this.subscription = this.resizeObserverService.parentAppRect$.subscribe(value => {\n this.handleParentAppRectSizeChange(value);\n });\n }\n\n ngAfterViewChecked() {\n if (!this.hasViewChecked && !this.isCollapsed) {\n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n //this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.id,\"\",undefined,0,0,true);\n });\n }\n }\n\n handleParentAppRectSizeChange(parentRect:DOMRect | undefined):void{ \n this.layoutManagerService.checkPosition(this.id,'.floating-panel.visible',parentRect,0,0,true); \n }\n \n onResizedEnd(){\n this.layoutManagerService.finalizeObjectChanges(this.id);\n }\n\n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.id);\n }\n}\n\n","<div\n class=\"floating-panel\"\n [class.visible]=\"isVisible\"\n [class.no-body]=\"noBody\"\n [class.is-focused]=\"isFocused\"\n [class.collapsed]=\"isCollapsed\" \n libResizable\n (resizedEnd)=\"onResizedEnd()\"\n (dragEnd)=\"onDragEnd()\"\n>\n <ng-content select=\".floating-bar-header-logo\"></ng-content>\n <ng-content select=\".floating-bar-header-content\"></ng-content>\n <ng-content select=\".floating-bar-dragger\"></ng-content>\n <ng-content select=\".floating-bar-body\"></ng-content>\n <div \n class=\"resizer-ne floating-panel__resizerNE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-e floating-panel__resizerE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-se floating-panel__resizerSE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-s floating-panel__resizerS\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n</div>\n\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\nimport { fireEvent } from '../utils/utils';\r\n\r\n@Directive({\r\n selector: '[libDraggable]',\r\n standalone: true\r\n})\r\nexport class DraggableDirective {\r\n\r\n oldX = 0;\r\n oldY = 0;\r\n isDragging = false;\r\n wasDragging = false;\r\n isMouseDown = false;\r\n\r\n @Output()\r\n dragging = new EventEmitter<[number,number]>();\r\n\r\n @Output()\r\n dragEnd = new EventEmitter<MouseEvent>();\r\n\r\n @Output()\r\n clicked = new EventEmitter<MouseEvent>();\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging && !this.isMouseDown) {\r\n return;\r\n }\r\n\r\n const deltaX = (event.clientX - this.oldX);\r\n const deltaY = (event.clientY - this.oldY);\r\n\r\n if(!this.isDragging){\r\n if(Math.abs(deltaX) > 2 || Math.abs(deltaY) > 2){\r\n this.isDragging = true;\r\n this.wasDragging = true;\r\n }else{\r\n return;\r\n }\r\n }\r\n fireEvent(this, \"dragging\", [deltaX,deltaY]);\r\n\r\n this.oldX = event.clientX;\r\n this.oldY = event.clientY;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseUp() {\r\n if(this.isDragging || this.isMouseDown){\r\n fireEvent(this, \"dragEnd\", ['$event']);\r\n }\r\n this.isDragging = false;\r\n this.isMouseDown = false; \r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n this.isMouseDown = true;\r\n this.wasDragging = false;\r\n this.oldX = event.clientX;\r\n this.oldY = event.clientY; \r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onMouseClick(event: MouseEvent) {\r\n if(!this.wasDragging){\r\n fireEvent(this, \"clicked\", event);\r\n }\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LayoutManagerService } from '../../services/layout-manager.service';\n@Component({\n selector: 'lib-bimplus-floating-bar-dragger',\n imports: [\n CommonModule,\n DraggableDirective,\n ],\n templateUrl: './bimplus-floating-bar-dragger.component.html',\n styleUrl: './bimplus-floating-bar-dragger.component.less'\n})\nexport class BimplusFloatingBarDraggerComponent {\n private layoutManagerService = inject(LayoutManagerService);\n\n // Define isCollapsed as a boolean property\n @Input() isCollapsed: boolean = false;\n @Input() parentId:string = '';\n \n // Define icon as a string property with a default value\n draggerIcon: string = 'ui-icon-drag';\n \n \n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__dragger dragger\"\n [ngClass] = \"isCollapsed ? 'collapsed' : ''\"\n [className]=\"draggerIcon\"\n libDraggable \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n>\n</div>\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, input, Input, Output, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LayoutManagerService, LayoutManagerItem } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-header-content',\n imports: [\n CommonModule,\n DraggableDirective,\n TranslateModule,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './bimplus-floating-bar-header-content.component.html',\n styleUrl: './bimplus-floating-bar-header-content.component.less'\n})\nexport class BimplusFloatingBarHeaderContentComponent extends BimplusLocalizedWidgetComponent {\n private readonly layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n }) \n }\n\n @Input() isCollapsed: boolean = false;\n @Input() parentId:string = '';\n @Output() actionClicked = new EventEmitter<string>();\n items = input<FloatingBarItem[]>([]);\n\n findItemById(id: string): FloatingBarItem | undefined {\n return this.items().find(x => x.buttonId === id);\n }\n\n onItemClicked(action: string) {\n const item = this.findItemById(action);\n if (!item || item?.disabled) {\n return;\n }\n this.actionClicked.emit(action);\n }\n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__header-content dragger\"\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\n libDraggable \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n>\n <div class=\"menu-content\">\n <div *ngFor=\"let item of items()\">\n <div\n [attr.data-test]=\"'floating_bar_item_' + item.buttonId\"\n class=\"fp-block-item fp-block-icon-item\"\n [ngClass]=\"{\n active: item.active\n }\"\n [className]=\"item.iconClass\"\n [title]=\"item.title | translate\"\n (click)=\"onItemClicked(item.buttonId)\"\n (keypress)=\"onItemClicked(item.buttonId)\" \n ></div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, HostBinding, OnInit, inject } from '@angular/core';\nimport { DraggableDirective } from '../../directives/draggable.directive'\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-header-logo',\n imports: [\n CommonModule,\n DraggableDirective,\n TranslateModule,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './bimplus-floating-bar-header-logo.component.html',\n styleUrl: './bimplus-floating-bar-header-logo.component.less'\n})\nexport class BimplusFloatingBarHeaderLogoComponent extends BimplusLocalizedWidgetComponent implements OnInit\n{\n private readonly layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n }\n\n @Input() icon: string = \"\";\n @HostBinding('class.isCollapsed')\n @Input() isCollapsed: boolean = false;\n @Input() parentId: string = '';\n\n @Input() title: string = \"\";\n\n ngOnInit(){\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n })\n }\n\n onLogoClicked(){\n this.layoutManagerService.updateCollapsed(!this.isCollapsed,this.parentId)\n }\n \n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__header-logo\"\n [ngClass]=\"isCollapsed ? 'collapsed' : ''\"\n [className]=\"icon\"\n [title]=\"title | translate\"\n libDraggable\n (clicked)=\"onLogoClicked()\" \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n></div>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef, AfterViewInit, model, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { LayoutManagerService } from '../../services/layout-manager.service';\n\nconst DEFAULT_POSITION_LEFT = 355;\nconst DEFAULT_POSITION_TOP = 355;\n@Component({\n selector: 'lib-bimplus-floating-bar-hide-objects',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n TranslateModule,\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-hide-objects.component.html',\n styleUrl: './bimplus-floating-bar-hide-objects.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusFloatingBarHideObjectsComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit {\n private readonly element = inject(ElementRef);\n\n \n @Output() actionClicked = new EventEmitter<string>();\n @Input() noBody: boolean = true; \n @Input() isFocused: boolean = true;\n\n items = model<FloatingBarItem[]>([]);\n\n protected layoutManagerService: LayoutManagerService;\n\n componentId = 'hide-menu-fp-id'\n icon = 'ui-icon-hide-menu';\n title: string = \"\"; // no tooltip info on Logo icon\n focusSelectorId: string = 'hide-menu-id';\n\n constructor(){\n const layoutManagerService = inject(LayoutManagerService);\n\n super();\n this.layoutManagerService = layoutManagerService;\n }\n \n ngAfterViewInit() {\n // Subscribe to the observable\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP); \n } \n}\n","<lib-bimplus-floating-bar\n id=\"hide-menu-fp-id\"\n [id] = \"componentId\"\n class=\"hide-menu\"\n [noBody]=\"noBody\"\n [isFocused]=\"isFocused\"\n [resizeEnabled]=\"false\"\n [focusSelector]=\"focusSelectorId\"\n [isVisible]=\"true\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\" \n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [icon]=\"icon\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [parentId] = \"componentId\"\n class=\"floating-bar-header-content\"\n [items]=\"items()\" \n (actionClicked)=\"actionClicked.emit($event)\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\" \n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n</lib-bimplus-floating-bar>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef, AfterViewChecked, ChangeDetectorRef, AfterViewInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { LayoutManagerService} from '../../services/layout-manager.service';\n\nconst DEFAULT_POSITION_LEFT =355;\nconst DEFAULT_POSITION_TOP = 320;\n\n@Component({\n selector: 'lib-bimplus-floating-bar-isolation-objects',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n TranslateModule,\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-isolation-objects.component.html',\n styleUrl: './bimplus-floating-bar-isolation-objects.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusFloatingBarIsolationObjectsComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit, AfterViewChecked{\n private layoutManagerService = inject(LayoutManagerService);\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor(){\n super();\n }\n private hasViewChecked: boolean = false;\n\n \n @Output() actionClicked = new EventEmitter<string>();\n\n @Input() noBody: boolean = true;\n @Input() isFocused: boolean = true;\n\n // Items for the header content sub component\n @Input() items: Array<FloatingBarItem> = [];\n\n icon = 'ui-icon-isolation-menu';\n title: string = \"\"; // no tooltip info on Logo icon\n focusSelectorId: string = 'isolation-menu-id';\n componentId = 'isolation-menu-fp-id';\n \n ngAfterViewInit(){\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP,); \n }\n\n ngAfterViewChecked() {\n if (!this.hasViewChecked) {\n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.componentId,'.floating-panel.visible',undefined,0,0,true); \n });\n }\n }\n}\n","<lib-bimplus-floating-bar\n id=\"isolation-menu-fp-id\"\n [id] = \"componentId\"\n class=\"isolation-menu\"\n [noBody]=\"noBody\"\n [isFocused]=\"isFocused\"\n [resizeEnabled]=\"false\"\n [focusSelector]=\"focusSelectorId\"\n [isVisible]=\"true\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [icon]=\"icon\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [parentId] = \"componentId\" \n class=\"floating-bar-header-content\"\n [items]=\"items\"\n (actionClicked)=\"actionClicked.emit($event)\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\"\n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n</lib-bimplus-floating-bar>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-body',\n imports: [\n CommonModule,\n TranslateModule,\n ],\n templateUrl: './bimplus-floating-bar-body.component.html',\n styleUrl: './bimplus-floating-bar-body.component.less'\n})\nexport class BimplusFloatingBarBodyComponent extends BimplusLocalizedWidgetComponent implements OnInit{\n private layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n }\n\n @Input() isCollapsed: boolean = false;\n @Input() parentId: string = '';\n \n ngOnInit(){\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n })\n }\n}\n\n\n","<div\n libDraggable\n class=\"floating-panel__body\"\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\n>\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, input, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { ProjectNavigatorModel, ProjectNavigatorLayer } from './project-models.interface';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\n\n@Component({\n selector: 'lib-project-models',\n imports: [\n CommonModule,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n TranslateModule,\n ],\n templateUrl: './project-models.component.html',\n styleUrl: './project-models.component.less'\n})\nexport class ProjectModelsComponent extends BimplusLocalizedWidgetComponent {\n constructor() {\n super();\n }\n\n @Input() modelTreeRootTitle: string = \"_Divisions\";\n @Input() modelTreeRootName: string = \"_Divisions\";\n\n @Input() expandedModelTree: boolean = false;\n\n models = input<ProjectNavigatorModel[]>([]);\n\n @Output() clickedModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() clickedLayer = new EventEmitter<ProjectNavigatorLayer>();\n\n @Output() toggleOpacityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleOpacityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n\n @Output() toggleVisibilityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleVisibilityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n}\n","<lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedModelTree\"\n>\n <lib-expansion-panel-header [title]=\"modelTreeRootTitle\">\n <span class=\"project-navigator-root-node\">{{\n modelTreeRootName | translate\n }}</span>\n <lib-expansion-panel-header-actions>\n <!-- no action buttons for root -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <!-- Show all models also as expansion panels -->\n <!-- lib-bimplus-flat-tree can't be used for that at the moment -->\n @for(model of models(); track model) {\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"model.isExpanded\"\n >\n <lib-expansion-panel-header>\n <span\n class=\"project-navigator-model-node\"\n [ngClass]=\"{\n visible: model.isVisible\n }\"\n [title]=\"model.name + ' (Rev: ' + model.currentRevision + ')'\"\n (click)=\"clickedModel.emit(model)\"\n (keypress)=\"clickedModel.emit(model)\"\n >\n {{ model.name }}\n </span>\n\n <lib-expansion-panel-header-actions>\n <div\n [attr.data-test]=\"'toggle_opacity_model_' + model.id\"\n class=\"ui-icon-transparency project-navigator-action-buttons\"\n [ngClass]=\"{\n opaque: model.isOpaque,\n transparent: !model.isOpaque,\n semiopaque: model.isSemiOpaque,\n }\"\n [title]=\"'_Toggle opacity' | translate\"\n (click)=\"toggleOpacityOfModel.emit(model)\"\n (keypress)=\"toggleOpacityOfModel.emit(model)\"\n ></div>\n\n <div\n [attr.data-test]=\"'toggle_visibility_model_' + model.id\"\n class=\"ui-icon-visibility project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: model.isVisible,\n invisible: !model.isVisible,\n semivisible: model.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityOfModel.emit(model)\"\n (keypress)=\"toggleVisibilityOfModel.emit(model)\"\n ></div>\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <!-- Content of panel -->\n <div\n class=\"project-navigator-layer-node\"\n *ngFor=\"let layer of model.layers\"\n >\n <div\n class=\"project-navigator-layer-node-name\"\n [attr.data-test]=\"'floating_bar_layer' + layer.id\"\n [ngClass]=\"{\n visible: layer.isVisible\n }\"\n [title]=\"layer.name | translate\"\n (click)=\"clickedLayer.emit(layer)\"\n (keypress)=\"clickedLayer.emit(layer)\"\n >\n {{ layer.name | translate }}\n </div>\n\n <div\n [attr.data-test]=\"'toggle_opacity_layer_' + layer.id\"\n class=\"ui-icon-transparency project-navigator-action-buttons\"\n [ngClass]=\"{\n opaque: layer.isOpaque,\n transparent: !layer.isOpaque\n }\"\n [title]=\"'_Toggle opacity' | translate\"\n (click)=\"toggleOpacityOfLayer.emit(layer)\"\n (keypress)=\"toggleOpacityOfLayer.emit(layer)\"\n ></div>\n\n <div\n [attr.data-test]=\"'toggle_visibility_layer_' + layer.id\"\n class=\"ui-icon-visibility project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: layer.isVisible,\n invisible: !layer.isVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityOfLayer.emit(layer)\"\n (keypress)=\"toggleVisibilityOfLayer.emit(layer)\"\n ></div>\n </div>\n </lib-expansion-panel>\n }\n</lib-expansion-panel>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-bimplus-panel-toolbar',\n imports: [CommonModule],\n templateUrl: './bimplus-panel-toolbar.component.html',\n styleUrl: './bimplus-panel-toolbar.component.less'\n})\nexport class BimplusPanelToolbarComponent {\n @Input() isPanelToolbarVisible: boolean = false;\n}\n","<div class=\"panel-toolbar\"\n [ngClass]=\"!isPanelToolbarVisible ? 'hidden' : ''\"\n>\n</div>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef,AfterViewChecked,AfterViewInit, ChangeDetectorRef, inject, DestroyRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { BimplusFloatingBarBodyComponent } from '../bimplus-floating-bar-body/bimplus-floating-bar-body.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { ProjectNavigatorModel, ProjectNavigatorLayer, ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { ProjectModelsComponent } from '../project-models/project-models.component';\nimport { BimplusPanelToolbarComponent } from '../bimplus-panel-toolbar/bimplus-panel-toolbar.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\nconst DEFAULT_POSITION_LEFT = 355;\nconst DEFAULT_POSITION_TOP =20;\n@Component({\n selector: 'lib-bimplus-floating-bar-project-navigator',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n BimplusFloatingBarBodyComponent,\n BimplusPanelToolbarComponent,\n ProjectModelsComponent,\n TranslateModule,\n BimplusScrollableContainerComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-project-navigator.component.html',\n styleUrl: './bimplus-floating-bar-project-navigator.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusFloatingBarProjectNavigatorComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit, AfterViewChecked {\n private readonly layoutManagerService = inject(LayoutManagerService);\n private readonly element = inject(ElementRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor()\n {\n super();\n }\n private hasViewChecked: boolean = false;\n \n\n // General bar handling\n @Input() noBody: boolean = false; // Project navigator has a body\n @Input() isCollapsed: boolean = false;\n @Input() noModelsMessage: string | undefined = undefined;\n @Input() isLoading: boolean = false;\n @Input() loadingDataMessage: string | undefined = undefined;\n \n icon = 'ui-icon-project-navigator';\n title: string = '_Project_navigator';\n componentId = 'project-navigator-fp-id';\n // Header content (like IFC export button)\n @Input() items: Array<FloatingBarItem> = [];\n\n @Output() actionClicked = new EventEmitter<string>();\n\n // Body content\n @Input() isPanelToolbarVisible: boolean = false;\n @Input() expandedModelTree: boolean = false;\n @Input() project: ProjectNavigatorProject = { id: \"\", name: \"\", teamSlug: \"\", models: [] };\n @Output() clickedModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() clickedLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() toggleOpacityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleOpacityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() toggleVisibilityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleVisibilityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() logoClicked = new EventEmitter<MouseEvent>(); \n destroyRef = inject(DestroyRef)\n\n ngAfterViewInit(){\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP);\n \n this.layoutManagerService.registeredItems$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({next:(items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.componentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n },complete: () => console.log('completed')});\n }\n // #region General bar handling \n\n ngAfterViewChecked() {\n //if (!this.hasViewChecked && !this.isCollapsed) {\n if (!this.hasViewChecked) { \n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.componentId,'.floating-panel.visible',undefined,0,0,true);\n });\n }\n }\n // #endregion\n}\n","<lib-bimplus-floating-bar\n id=\"project-navigator-fp-id\"\n [id] = \"componentId\"\n class=\"project-navigator-fp floating-panel\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [noBody]=\"noBody\" \n [resizeEnabled]=\"true\"\n [isVisible]=\"true\" \n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [icon]=\"icon\"\n [title]=\"title\" \n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n class=\"floating-bar-header-content\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [items]=\"items\"\n (actionClicked)=\"actionClicked.emit($event)\" \n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\"\n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n\n <lib-bimplus-floating-bar-body\n class=\"floating-bar-body\"\n [parentId] = \"componentId\"\n >\n <lib-bimplus-panel-toolbar\n [isPanelToolbarVisible]=\"isPanelToolbarVisible\"\n ></lib-bimplus-panel-toolbar>\n\n @if(isLoading && loadingDataMessage){\n <span class=\"inline-message\" [innerHtml]=\"loadingDataMessage | translate\"></span>\n }\n @else{ \n @if(project.models.length === 0 && noModelsMessage){\n <span class=\"inline-message\" [innerHtml]=\"noModelsMessage | translate\"></span>\n }@else{\n <lib-bimplus-scrollable-container>\n <lib-project-models\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [models]=\"project.models\"\n [modelTreeRootTitle]=\"project.name + ' - ' + project.teamSlug\"\n [expandedModelTree]=\"expandedModelTree\"\n (clickedModel)=\"clickedModel.emit($event)\"\n (clickedLayer)=\"clickedLayer.emit($event)\"\n (toggleOpacityOfModel)=\"toggleOpacityOfModel.emit($event)\"\n (toggleOpacityOfLayer)=\"toggleOpacityOfLayer.emit($event)\"\n (toggleVisibilityOfModel)=\"toggleVisibilityOfModel.emit($event)\"\n (toggleVisibilityOfLayer)=\"toggleVisibilityOfLayer.emit($event)\"\n >\n </lib-project-models>\n </lib-bimplus-scrollable-container>\n }\n }\n </lib-bimplus-floating-bar-body>\n</lib-bimplus-floating-bar>\n","import { Component, EventEmitter, input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-overlay-message',\n templateUrl: './bimplus-overlay-message.component.html',\n styleUrl: './bimplus-overlay-message.component.less'\n})\nexport class BimplusOverlayMessageComponent {\n title = input<string>(\"\");\n message = input<string>(\"\");\n\n @Output() closeMessage = new EventEmitter<void>();\n\n closeButton() {\n this.closeMessage.emit();\n // (document.activeElement as HTMLElement)?.blur(); // Remove focus of active element\n }\n\n closeKeypressed(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.closeMessage.emit();\n }\n }\n\n}\n","<div class=\"bimplus-overlay-message\">\n <div class=\"overlay-dialog-container\">\n <div class=\"header\">\n\n <div class=\"icon\"></div>\n\n @if (title(); as title) {\n <div class=\"title-text\">\n {{ title }}\n </div>\n }\n\n <button\n class=\"close-button\"\n (click)=\"closeButton()\"\n tabindex=\"0\"\n (keydown)=\"closeKeypressed($event)\">\n </button>\n\n </div>\n\n <div class=\"content\">\n @if (message(); as message) {\n <div class=\"text\" [innerHTML]=\"message\">\n </div>\n }\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'pxsuffix',\r\n standalone: true\r\n})\r\nexport class PxsuffixPipe implements PipeTransform {\r\n\r\n transform(input: number): string{ //string type\r\n return input + 'px';\r\n } \r\n\r\n}\r\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\nimport { fireEvent } from '../utils/utils';\r\n\r\n@Directive({\r\n selector: '[xDraggable]',\r\n standalone: true\r\n})\r\nexport class XDraggableDirective {\r\n\r\n oldX = 0;\r\n isDragging = false;\r\n wasDragging = false;\r\n isMouseDown = false;\r\n\r\n @Output()\r\n dragging = new EventEmitter<number>();\r\n\r\n @Output()\r\n clicked = new EventEmitter<MouseEvent>();\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging && !this.isMouseDown) {\r\n return;\r\n }\r\n\r\n const deltaX = (event.clientX - this.oldX);\r\n\r\n if(!this.isDragging){\r\n if(Math.abs(deltaX) > 2){\r\n this.isDragging = true;\r\n this.wasDragging = true;\r\n }else{\r\n return;\r\n }\r\n }\r\n\r\n fireEvent(this, \"dragging\", deltaX);\r\n\r\n this.oldX = event.clientX;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n this.isMouseDown = false;\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n this.isMouseDown = true;\r\n this.wasDragging = false;\r\n this.oldX = event.clientX;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onMouseClick(event: MouseEvent) {\r\n if(!this.wasDragging){\r\n fireEvent(this, \"clicked\", event);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, Output, EventEmitter, ViewEncapsulation, signal, input, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PxsuffixPipe } from '../../pipes/pxsuffix.pipe';\r\nimport { XDraggableDirective } from '../../directives/x-draggable.directive'\r\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { fireEvent } from '../../utils/utils';\r\n\r\nexport interface SidenavItem {\r\n id: string;\r\n icon?: string;\r\n iconActive?: string;\r\n iconDisabled?: string;\r\n text: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-bimplus-sidenav',\r\n imports: [CommonModule, PxsuffixPipe, XDraggableDirective, TranslateModule],\r\n providers: [TranslateService],\r\n templateUrl: './bimplus-sidenav.component.html',\r\n styleUrl: './bimplus-sidenav.component.less',\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusSidenavComponent extends BimplusLocalizedWidgetComponent {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region public fields\r\n readonly activeItem = signal<string>('');\r\n readonly drawerWidth = signal<number>(300);\r\n readonly drawerExpanded = signal(true);\r\n\r\n @Output() activeItemChanged = new EventEmitter<string>();\r\n @Output() actionClicked = new EventEmitter<string>();\r\n @Output() footerClicked = new EventEmitter<string>();\r\n\r\n items = input<SidenavItem[]>([]);\r\n // we need to wait for the items before we can activate the first item, this is instead of using a lifecycle methods (ngOnInit) or set\r\n private readonly activateItemEffectRef = effect(() => {\r\n if (this.items().length) {\r\n this._activateItem(this.items()[0].id);\r\n // if there is first item, we need to manually destroy this effect to prevent call it again\r\n this.activateItemEffectRef.destroy();\r\n }\r\n }, { manualCleanup: true })\r\n actionItems = input<SidenavItem[]>([]);\r\n footerItem = input<SidenavItem | null>(null);\r\n\r\n\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n _activateItem(item: string) {\r\n this.activeItem.set(item);\r\n const foundItem = this.items().find(x => x.id == item);\r\n if (!foundItem) {\r\n return;\r\n }\r\n\r\n if (!this.drawerExpanded()) {\r\n this._toggleDrawer();\r\n }\r\n fireEvent(this, \"activeItemChanged\", item);\r\n }\r\n\r\n _clickAction(item: string) {\r\n fireEvent(this, \"actionClicked\", item);\r\n }\r\n\r\n _clickFooter(item: string) {\r\n fireEvent(this, \"footerClicked\", item);\r\n }\r\n\r\n _toggleDrawer() {\r\n this.drawerExpanded.update(value => !value);\r\n }\r\n\r\n _onResizeWidth(event: number): void {\r\n const deltaX = event;\r\n this.drawerWidth.update(value => (value + deltaX));\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"sidenav\">\n @for (sideNavItem of items(); track sideNavItem) {\n <div class=\"sidenav-row\">\n @if (sideNavItem.disabled) {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.iconDisabled + ')'\n \"\n [title]=\"sideNavItem.text | translate\"\n (keypress)=\"_toggleDrawer()\"\n ></div>\n } @else { @if (activeItem() === sideNavItem.id) {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.iconActive + ')'\n \"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n [title]=\"sideNavItem.text | translate\"\n ></div>\n } @else {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.icon + ')'\n \"\n (click)=\"_activateItem(sideNavItem.id)\"\n (keypress)=\"_activateItem(sideNavItem.id)\"\n [title]=\"sideNavItem.text | translate\"\n ></div>\n } }\n </div>\n } @if (actionItems().length) {\n <div class=\"sidenav-separator\"></div>\n @for(actionItem of actionItems(); track actionItem) {\n <div class=\"sidenav-row\">\n <div\n [attr.data-test]=\"'sidenav_action_item_' + actionItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + actionItem.icon + ')'\n \"\n (click)=\"_clickAction(actionItem.id)\"\n (keypress)=\"_clickAction(actionItem.id)\"\n [title]=\"actionItem.text | translate\"\n ></div>\n </div>\n } } @if (footerItem(); as footerItem) {\n <div class=\"sidenav-row-footer\">\n <div\n [attr.data-test]=\"'sidenav_footer_item_' + footerItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + footerItem.icon + ')'\n \"\n (click)=\"_clickFooter(footerItem.id)\"\n (keypress)=\"_clickFooter(footerItem.id)\"\n ></div>\n </div>\n }\n</div>\n\n<div\n class=\"sidenav-drawer\"\n [style.width]=\"drawerWidth() | pxsuffix\"\n [ngClass]=\"drawerExpanded() ? '' : 'hidden'\"\n>\n <slot></slot>\n @if (drawerExpanded()) {\n <div\n xDraggable\n class=\"sidenav-resize-border-right\"\n (dragging)=\"_onResizeWidth($event)\"\n ></div>\n <div\n xDraggable\n data-test=\"sidenav-resize-handle\"\n class=\"sidenav-resize-handle-left\"\n (dragging)=\"_onResizeWidth($event)\"\n (clicked)=\"_toggleDrawer()\"\n ></div>\n }\n</div>\n@if (!drawerExpanded()) {\n<div\n data-test=\"sidenav-resize-handle\"\n class=\"sidenav-resize-handle-left collapsed\"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n></div>\n}\n","import { ToolHubVisualSettings, ToolHubItemUnits } from './bimplus-tool-hub.interface';\n\nconst RAD_DEG : number = Math.PI / 180.0;\nconst PI2 : number = 2 * Math.PI;\n\n\nexport class SVGGenerator {\n\n // Constants for drawing arc\n /**\n * @param {Array.<Number>} center\n * @param {Number} R\n * @param {Number} angle\n * @return {Array.<Number>}\n */\n static pointOnArc(center: [number,number], R: number, angle: number) : [number, number] {\n const radians = (angle - 90) * RAD_DEG;\n\n return [center[0] + R * Math.cos(radians), center[1] + R * Math.sin(radians)];\n }\n\n /**\n * Generates arc path\n *\n * @param {Array.<Number>} center\n * @param {Number} radius\n * @param {Number} start\n * @param {Number} end\n * @param {Number} width\n * @param {Number} corner Corner radius\n * @param {Number} canvasWidth - Divisor to have svg with range 0 to 1\n *\n * @return {String|Array.<Number|String>}\n */\n static arc(center: [number,number], radius: number, start: number, end: number, width: number, corner: number, canvasWidth: number) : string {\n\n const innerR = radius - width;\n const circumference = Math.abs(end - start);\n corner = Math.min(width / 2, corner);\n\n if (360 * (corner / (Math.PI * (radius - width))) > Math.abs(start - end)) {\n corner = circumference / 360 * innerR * Math.PI;\n }\n\n // inner and outer radiuses\n const innerR2 = innerR + corner;\n const outerRadius = radius - corner;\n\n // butts corner points\n const oStart = this.pointOnArc(center, outerRadius, start);\n const oEnd = this.pointOnArc(center, outerRadius, end);\n\n const iStart = this.pointOnArc(center, innerR2, start);\n const iEnd = this.pointOnArc(center, innerR2, end);\n\n const iSection = 360 * (corner / (PI2 * innerR));\n const oSection = 360 * (corner / (PI2 * radius));\n\n // arcs endpoints\n const iArcStart = this.pointOnArc(center, innerR, start + iSection);\n const iArcEnd = this.pointOnArc(center, innerR, end - iSection);\n\n const oArcStart = this.pointOnArc(center, radius, start + oSection);\n const oArcEnd = this.pointOnArc(center, radius, end - oSection);\n\n const arcSweep1 = circumference > 180 + 2 * oSection ? 1 : 0;\n const arcSweep2 = circumference > 180 + 2 * iSection ? 1 : 0;\n\n const points : Array<string> = new Array<string>(\n // begin path\n \"M\", (oStart[0] / canvasWidth).toString(), (oStart[1] / canvasWidth).toString(),\n // outer start corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (oArcStart[0] / canvasWidth).toString(), (oArcStart[1] / canvasWidth).toString(),\n // outer main arc\n \"A\", (radius / canvasWidth).toString(), (radius / canvasWidth).toString(), \"0\", (arcSweep1 / canvasWidth).toString(), \"1\", (oArcEnd[0] / canvasWidth).toString(), (oArcEnd[1] / canvasWidth).toString(),\n // outer end corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (oEnd[0] / canvasWidth).toString(), (oEnd[1] / canvasWidth).toString(),\n // end butt\n \"L\", (iEnd[0] / canvasWidth).toString(), (iEnd[1] / canvasWidth).toString(),\n // inner end corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (iArcEnd[0] / canvasWidth).toString(), (iArcEnd[1] / canvasWidth).toString(),\n // inner arc\n \"A\", (innerR / canvasWidth).toString(), (innerR / canvasWidth).toString(), \"0\", (arcSweep2 / canvasWidth).toString(), \"0\", (iArcStart[0] / canvasWidth).toString(), (iArcStart[1] / canvasWidth).toString(),\n // inner start corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (iStart[0] / canvasWidth).toString(), (iStart[1] / canvasWidth).toString(), \"Z\" // end path*/\n );\n\n return points.join(' ');\n }\n\n /*\n * svg units - when \"objectBoundingBox\" is applied, coordinates are relative,\n * use coordinates as ratio (in range 0-1),\n * f.e. (1,1) is botom right corner of element\n */\n static drawMenuItemSvg(svgRadius: number, svgRadiusInner: number, buttonsLength: number, isEMEmbedded: boolean): ToolHubItemUnits {\n \n const radius = isEMEmbedded ? (svgRadius - 5) * 10 : svgRadius * 10;\n const radiusInner = isEMEmbedded ? (svgRadiusInner - 3) * 10 : svgRadiusInner * 10;\n const width = radius * 2;\n // coordinates of points describing one item on menu\n const angle = 360 / ((buttonsLength > 0) ? buttonsLength : 1);\n const halfAngleRadians = (angle * Math.PI) / 360;\n const leftX = radius - Math.sin(halfAngleRadians) * radius;\n const leftY = radius - Math.cos(halfAngleRadians) * radius;\n const rightX = radius + Math.sin(halfAngleRadians) * radius;\n const rightY = radius - Math.cos(halfAngleRadians) * radius;\n \n \n return {\n radius: radius / width,\n radiusInner: radiusInner / width,\n width: 1,\n thick: (radius - radiusInner) / width,\n innerEdgeRight: (radius + radiusInner) / width,\n leftX: leftX / width,\n leftY: leftY / width,\n rightX: rightX / width,\n rightY: rightY / width\n };\n }\n\n \n static generateAnnularSector(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.subMenuCenter[0] * multiplier, settings.subMenuCenter[1] * multiplier],\n settings.subMenuRadius * multiplier,\n settings.subMenuStartAngle,\n settings.subMenuEndAngle,\n settings.subMenuWidth,\n 7,\n 425\n );\n }\n\n static generateAnnularSectorBorder(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.subMenuCenter[0] * multiplier, settings.subMenuCenter[1] * multiplier],\n (settings.subMenuRadius * multiplier) + 1,\n settings.subMenuStartAngle - 0.5,\n settings.subMenuEndAngle + 0.5,\n settings.subMenuWidth + 2,\n 7,\n 425\n );\n }\n\n static generateDeadZoneAnnularSector(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.deadZoneCenter[0] * multiplier, settings.deadZoneCenter[1] * multiplier],\n (settings.deadZoneRadius) * multiplier,\n settings.deadZoneStartAngle,\n settings.deadZoneEndAngle,\n settings.deadZoneWidth,\n 7,\n 700);\n }\n\n static getSVGViewBox(units : ToolHubItemUnits):string{\n return `0 0 ${units.width} ${units.width}`;\n }\n\n static getSVGCenterMenuPath(units : ToolHubItemUnits):string{\n return `M 0 ${units.radius} A ${units.radius} ${units.radius} 0 0 1 ${units.width} ${units.radius} L ${units.width} ${units.radius} A ${units.radius} ${units.radius} 0 0 1 0 ${units.radius} L ${units.thick} ${units.radius} A ${units.radiusInner} ${units.radiusInner} 0 0 0 ${units.innerEdgeRight} ${units.radius} L ${units.innerEdgeRight} ${units.radius} A ${units.radiusInner} ${units.radiusInner} 0 0 0 ${units.thick} ${units.radius} Z`;\n }\n\n static getSVGCenterMenuItemPath(units : ToolHubItemUnits):string{\n return `M ${units.radius} ${units.radius} L ${units.leftX} ${units.leftY} A ${units.radius} ${units.radius} 0 0 1 ${units.rightX} ${units.rightY} L ${units.rightX} ${units.rightY} L ${units.radius} ${units.radius} Z`;\n }\n\n static getSVGCenterSubMenuItemPath(subMenuUnits : ToolHubItemUnits):string{\n return `M ${subMenuUnits.radius} ${subMenuUnits.radius} L ${subMenuUnits.leftX} ${subMenuUnits.leftY} A ${subMenuUnits.radius} ${subMenuUnits.radius} 0 0 1 ${subMenuUnits.rightX} ${subMenuUnits.rightY} L ${subMenuUnits.rightX} ${subMenuUnits.rightY} L ${subMenuUnits.radius} ${subMenuUnits.radius} Z`;\n }\n\n}\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToolHubItem } from '../bimplus-tool-hub.interface';\r\n@Component({\r\n selector: 'lib-tool-hub-item',\r\n imports: [CommonModule],\r\n templateUrl: './tool-hub-item.component.html',\r\n styleUrl: '../bimplus-tool-hub.component.less'\r\n})\r\nexport class ToolHubItemComponent {\r\n @Input()\r\n item : ToolHubItem | null = null;\r\n \r\n @HostBinding('class.active')\r\n @Input() \r\n active : boolean = false;\r\n \r\n @HostBinding('class.enabled')\r\n @Input() \r\n isEnabled : boolean = true;\r\n \r\n @HostBinding('class.centermenu-button') centerMenuButtonClass: boolean = true;\r\n}\r\n"," <div *ngIf=\"item\" class=\"centermenu-button-icon dragger\" [ngClass]=\"{\r\n 'disabled' : !isEnabled,\r\n 'enabled' : isEnabled,\r\n 'active' : active\r\n }\" [className]=\"item.iconClass\">\r\n \r\n <span class=\"centermenu-button-text\">{{item.text}}</span>\r\n</div>","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToolHubSubItem } from '../bimplus-tool-hub.interface';\r\n@Component({\r\n selector: 'lib-tool-hub-sub-item',\r\n imports: [CommonModule],\r\n templateUrl: './tool-hub-sub-item.component.html',\r\n styleUrl: '../bimplus-tool-hub.component.less'\r\n})\r\nexport class ToolHubSubItemComponent {\r\n @Input() item : ToolHubSubItem | null = null;\r\n \r\n @HostBinding('class.active')\r\n @Input() \r\n active : boolean = false;\r\n \r\n @HostBinding('class.enabled')\r\n @Input() \r\n isEnabled : boolean = true;\r\n\r\n @HostBinding('class.centermenu-button') centerMenuButtonClass: boolean = true;\r\n @HostBinding('class.center-sub-menu-button') centerSubMenuButtonClass: boolean = true;\r\n}\r\n","<div\r\n *ngIf=\"item\"\r\n class=\"center-sub-menu-button-icon\"\r\n [ngClass]=\"{\r\n disabled: !isEnabled,\r\n enabled: isEnabled,\r\n active: item.type !== 'separator' && active\r\n }\"\r\n [className]=\"item.iconClass\"\r\n>\r\n <span class=\"centermenu-button-text\">{{ item.text }}</span>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, booleanAttribute, ElementRef, OnInit, AfterViewInit, inject } from '@angular/core';\r\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { SVGGenerator } from './svg-generator';\r\nimport { ToolHubItemComponent } from './tool-hub-item/tool-hub-item.component';\r\nimport { ToolHubSubItemComponent } from './tool-hub-sub-item/tool-hub-sub-item.component';\r\nimport { DraggableDirective } from '../../directives/draggable.directive'\r\nimport { ToolHubItem, ToolHubSubItem, ToolHubVisualSettings, ToolHubItemUnits, ToolHubItemStates } from './bimplus-tool-hub.interface';\r\nimport { LayoutManagerService } from '../../services/layout-manager.service';\r\nimport { ResizeObserverService } from '../../services/resize-observer.service';\r\n\r\nfunction createDefaultVisualSettings(): ToolHubVisualSettings {\r\n const settings: ToolHubVisualSettings = {\r\n subMenuStartAngle: 40,\r\n subMenuEndAngle: 140,\r\n svgRadiusInner: 5.75,\r\n svgRadius: 10.25,\r\n subMenuCenter: [17.25, 17.5],\r\n subMenuRadius: 15.5,\r\n subMenuWidth: 52,\r\n deadZoneCenter: [17, 18],\r\n deadZoneWidth: 140,\r\n deadZoneRadius: 22,\r\n deadZoneStartAngle: 35,\r\n deadZoneEndAngle: 145\r\n }\r\n return settings;\r\n}\r\n\r\n// Use when implementing embedded mode\r\n// function createEmbeddedSettings() : ToolHubVisualSettings{\r\n// const settings : ToolHubVisualSettings = {\r\n// subMenuStartAngle : 40,\r\n// subMenuEndAngle : 140,\r\n// svgRadiusInner : 4,\r\n// svgRadius : 7.25,\r\n// subMenuCenter : [17.25, 17.3],\r\n// subMenuRadius : 16.2,\r\n// subMenuWidth : 62,\r\n// deadZoneCenter : [16.5, 16],\r\n// deadZoneWidth : 120,\r\n// deadZoneRadius : 18,\r\n// deadZoneStartAngle : 35,\r\n// deadZoneEndAngle : 145\r\n// }\r\n// return settings;\r\n// }\r\n\r\nfunction createDefaultItems(): Array<ToolHubItem> {\r\n const items: Array<ToolHubItem> = [\r\n //--- create task ---------------------------------------------------\r\n {\r\n buttonId: 'cmButCreateTask',\r\n iconClass: 'ui-icon-create-task',\r\n text: '_Create_issue_center_menu_tooltip',\r\n tooltip: '_Create_issue_center_menu_tooltip',\r\n tooltipDisabled: '_Create_issue_center_menu_tooltip',\r\n },\r\n\r\n //--- quantity takeoff ---------------------------------------------------\r\n {\r\n buttonId: 'cmButQuantityTakeOff',\r\n iconClass: 'ui-icon-quantity-take-off',\r\n text: '_Quantity_take_Off_center_menu_tooltip',\r\n tooltip: '_Quantity_take_Off_center_menu_tooltip',\r\n tooltipDisabled: '_Quantity_take_Off_center_menu_tooltip',\r\n },\r\n\r\n //--- markup ---------------------------------------------------\r\n {\r\n buttonId: 'cmButMarkup',\r\n iconClass: 'ui-icon-markup',\r\n text: '_Markups_center_menu_tooltip',\r\n tooltip: '_Markups_center_menu_tooltip',\r\n tooltipDisabled: '_Markups_center_menu_tooltip',\r\n },\r\n\r\n //--- section ---------------------------------------------------\r\n {\r\n buttonId: 'cmButSection',\r\n iconClass: 'ui-icon-section',\r\n text: '_Sectioning_center_menu_tooltip',\r\n tooltip: '_Sectioning_center_menu_tooltip',\r\n tooltipDisabled: '_Sectioning_center_menu_tooltip',\r\n },\r\n\r\n //--- hide ---------------------------------------------------\r\n {\r\n buttonId: 'cmButObjTranspMenu',\r\n iconClass: 'ui-icon-obj-transp',\r\n text: '_Hide_objects_center_menu_tooltip',\r\n tooltip: '_Hide_objects_center_menu_tooltip',\r\n tooltipDisabled: '_Hide_objects_center_menu_tooltip',\r\n },\r\n\r\n //--- isolate ---------------------------------------------------\r\n {\r\n buttonId: 'cmButObjSel',\r\n iconClass: 'ui-icon-obj-select',\r\n text: '_Isolate_objects_center_menu_tooltip',\r\n tooltip: '_Isolate_objects_center_menu_tooltip',\r\n tooltipDisabled: '_Isolate_objects_center_menu_tooltip',\r\n },\r\n\r\n //--- navigation map ---------------------------------------------------\r\n {\r\n buttonId: 'cmButNavigationMap',\r\n iconClass: 'ui-icon-navigation-map',\r\n text: '_Navigation_nap_center_menu_tooltip',\r\n tooltip: '_Navigation_nap_center_menu_tooltip',\r\n tooltipDisabled: '_Navigation_nap_center_menu_tooltip',\r\n },\r\n\r\n //--- fullscreen ----------------------------------------------\r\n {\r\n buttonId: 'cmButFullScreen',\r\n iconClass: 'ui-icon-fullscreen',\r\n text: '_Fullscreen_node_center_menu_tooltip',\r\n tooltip: '_Fullscreen_node_center_menu_tooltip',\r\n tooltipDisabled: '_Fullscreen_node_center_menu_tooltip',\r\n },\r\n\r\n //--- project navigator ---------------------------------------\r\n {\r\n buttonId: 'cmButProjectNavigator',\r\n iconClass: 'ui-icon-project-navigator',\r\n text: '_Project_navigator_center_menu_tooltip',\r\n tooltip: '_Project_navigator_center_menu_tooltip',\r\n tooltipDisabled: '_Project_navigator_center_menu_tooltip',\r\n },\r\n\r\n //--- reset ---------------------------------------------------\r\n {\r\n iconClass: 'ui-icon-obj-reset',\r\n buttonId: 'cmButResetObj',\r\n text: '_Reset_viewport_center_menu_tooltip',\r\n tooltip: '_Reset_viewport_center_menu_tooltip',\r\n tooltipDisabled: '_Reset_viewport_center_menu_tooltip',\r\n },\r\n\r\n //--- view ---------------------------------------------------\r\n {\r\n buttonId: 'cmButResetVp',\r\n iconClass: 'ui-icon-reset-vp',\r\n text: '_Select_view_center_menu_tooltip',\r\n tooltip: '_Select_view_center_menu_tooltip',\r\n tooltipDisabled: '_Select_view_center_menu_tooltip',\r\n subMenuId: 'cmb-view-submenu',\r\n subItems: [\r\n //--- Front View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButFrontView',\r\n type: 'button',\r\n iconClass: 'ui-icon-front-view',\r\n text: '_Front_view_center_menu_tooltip',\r\n tooltip: '_Front_view_center_menu_tooltip',\r\n tooltipDisabled: '_Front_view_center_menu_tooltip',\r\n actionClick: 'centerMenuFrontViewClick',\r\n },\r\n //--- Top View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButTopView',\r\n type: 'button',\r\n iconClass: 'ui-icon-top-view',\r\n text: '_Top_view_center_menu_tooltip',\r\n tooltip: '_Top_view_center_menu_tooltip',\r\n tooltipDisabled: '_Top_view_center_menu_tooltip',\r\n actionClick: 'centerMenuTopViewClick',\r\n },\r\n //--- Side View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButSideView',\r\n type: 'button',\r\n iconClass: 'ui-icon-side-view',\r\n text: '_Side_view_center_menu_tooltip',\r\n tooltip: '_Side_view_center_menu_tooltip',\r\n tooltipDisabled: '_Side_view_center_menu_tooltip',\r\n actionClick: 'centerMenuSideViewClick',\r\n },\r\n //--- Perspective View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButPerspectiveView',\r\n type: 'button',\r\n iconClass: 'ui-icon-perspective-view',\r\n text: '_Perspective_view_center_menu_tooltip',\r\n tooltip: '_Perspective_view_center_menu_tooltip',\r\n tooltipDisabled: '_Perspective_view_center_menu_tooltip',\r\n actionClick: 'centerMenuPerspectiveViewClick',\r\n },\r\n //--- Separator ---------------------------------------------------\r\n {\r\n buttonId: 'toolhubSubmenuSeparatorId1',\r\n type: 'separator',\r\n iconClass: 'center-sub-menu-button-icon toolhub-submenu-separator',\r\n text: '',\r\n tooltip: '',\r\n tooltipDisabled: '',\r\n actionClick: '',\r\n },\r\n //--- Toggle button perspective/orthogonal projection --------------------\r\n {\r\n buttonId: 'cmButToggleProjection',\r\n type: 'button',\r\n iconClass: 'ui-icon-orthographic-camera-projection',\r\n text: '_Orthographic_projection_center_menu_tooltip',\r\n tooltip: '_Orthographic_projection_center_menu_tooltip',\r\n tooltipDisabled: '_Orthographic_projection_center_menu_tooltip',\r\n actionClick: 'centerMenuToggleProjection',\r\n },\r\n ]\r\n }\r\n ]\r\n\r\n // Set all tool hub items states to inactive and disabled. Host App must define states\r\n items.forEach(item => { item.active = false; item.disabled = true })\r\n\r\n return items;\r\n}\r\n\r\nconst DEFAULT_POSITION_LEFT = 350;\r\nconst DEFAULT_POSITION_TOP = 670;\r\n@Component({\r\n selector: 'lib-bimplus-tool-hub',\r\n imports: [\r\n TranslateModule,\r\n CommonModule,\r\n ToolHubItemComponent,\r\n ToolHubSubItemComponent,\r\n DraggableDirective\r\n ],\r\n providers: [TranslateService],\r\n templateUrl: './bimplus-tool-hub.component.html',\r\n styleUrl: './bimplus-tool-hub.component.less',\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusToolHubComponent extends BimplusLocalizedWidgetComponent implements OnInit,AfterViewInit {\r\n private layoutManagerService = inject(LayoutManagerService);\r\n private resizeObserverService = inject(ResizeObserverService);\r\n private element = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.items = createDefaultItems();\r\n this._visualSettings = createDefaultVisualSettings();\r\n this._units = this.calculateCurrentMenuItemUnits();\r\n this._subMenuUnits = this.calculateCurrentSubMenuItemUnits();\r\n this._annularSector = SVGGenerator.generateAnnularSector(this._visualSettings);\r\n this._annularSectorBorder = SVGGenerator.generateAnnularSectorBorder(this._visualSettings);\r\n this._deadZoneAnnularSector = SVGGenerator.generateDeadZoneAnnularSector(this._visualSettings);\r\n\r\n }\r\n\r\n // #region public fields\r\n \r\n get itemStates(): Array<ToolHubItemStates> {\r\n return this._itemStates;\r\n }\r\n @Input() set itemStates(value: Array<ToolHubItemStates>) {\r\n this._itemStates = value;\r\n this.setItemStates(this._itemStates);\r\n }\r\n\r\n setItemStates(itemStates: Array<ToolHubItemStates>) {\r\n for (const itemState of itemStates) {\r\n const item = this._items.find(item => item.buttonId === itemState.buttonId);\r\n if (item) {\r\n if (itemState.active != undefined) {\r\n item.active = itemState.active;\r\n }\r\n if (itemState.disabled !== undefined) {\r\n item.disabled = itemState.disabled;\r\n }\r\n }\r\n }\r\n\r\n this._updateActivationState();\r\n }\r\n\r\n\r\n get items(): Array<ToolHubItem> {\r\n return this._items;\r\n }\r\n @Input() set items(value: Array<ToolHubItem>) {\r\n this._items = value;\r\n\r\n const buttonsLength = (this._items?.length) > 0 ? this._items.length : 1;\r\n const rootStyle = document?.documentElement?.style;\r\n if (rootStyle) {\r\n const menuItems = rootStyle.getPropertyValue(\"--menu-items\");\r\n if (parseInt(menuItems) !== buttonsLength) {\r\n rootStyle.setProperty(\"--menu-items\", buttonsLength.toString());\r\n }\r\n }\r\n\r\n // Transfer disabled states, which can defined by host app\r\n this.setItemStates(this._itemStates);\r\n }\r\n\r\n get activeSubItems(): Array<ToolHubSubItem> | null {\r\n return this._activeSubItems;\r\n }\r\n\r\n get isCollapsed(): boolean {\r\n return this._isCollapsed;\r\n }\r\n @Input({ transform: booleanAttribute })\r\n set isCollapsed(value: boolean) {\r\n this._isCollapsed = value;\r\n }\r\n\r\n get isPerspectiveProjection(): boolean {\r\n return this._isPerspectiveProjection;\r\n }\r\n @Input({ transform: booleanAttribute })\r\n set isPerspectiveProjection(value: boolean) {\r\n this._isPerspectiveProjection = value;\r\n }\r\n\r\n get units(): ToolHubItemUnits {\r\n return this._units;\r\n }\r\n\r\n get subMenuUnits(): ToolHubItemUnits {\r\n return this._subMenuUnits;\r\n }\r\n\r\n get annularSector(): string {\r\n return this._annularSector;\r\n }\r\n\r\n get annularSectorBorder(): string {\r\n return this._annularSectorBorder;\r\n }\r\n\r\n get deadZoneAnnularSector(): string {\r\n return this._deadZoneAnnularSector;\r\n }\r\n\r\n @Input({ transform: booleanAttribute }) isEmbedded: boolean = false;\r\n @Input({ transform: booleanAttribute }) isFocused: boolean = false;\r\n @Input({ transform: booleanAttribute }) isActive: boolean = true;\r\n @Output() itemClicked = new EventEmitter<string>();\r\n @Output() subItemClicked = new EventEmitter<string>();\r\n \r\n // Define event handler for reusing draggable also from resize parent \r\n //@Output() resizedragging = new EventEmitter<[number,number]>();\r\n\r\n private componentId = 'center-menu-fp-id';\r\n private subscription: Subscription | null = null; // Initialize to null\r\n\r\n ngOnInit():void{ \r\n this.layoutManagerService.registerObject(this.element,this.componentId,'#center-menu-fp-id',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP);\r\n this.layoutManagerService.registeredItems$.subscribe(items => {\r\n const layoutManagerItem = items.find(item => item.id === this.componentId);\r\n this.isCollapsed = Boolean(layoutManagerItem?.isCollapsed); \r\n });\r\n \r\n }\r\n \r\n ngAfterViewInit():void{\r\n // if the component wants to be registered in layout manager system\r\n // Subscribe to the observable\r\n this.subscription = this.resizeObserverService.parentAppRect$.subscribe(value => {\r\n this.handleParentAppRectSizeChange(value);\r\n });\r\n }\r\n \r\n // #endregion public fields\r\n \r\n // #region public methods\r\n public getSVGViewBox(): string {\r\n return SVGGenerator.getSVGViewBox(this._units);\r\n }\r\n\r\n public getSVGCenterMenuPath(): string {\r\n return SVGGenerator.getSVGCenterMenuPath(this._units);\r\n }\r\n\r\n public getSVGCenterMenuItemPath(): string {\r\n return SVGGenerator.getSVGCenterMenuItemPath(this._units);\r\n }\r\n\r\n public getSVGCenterSubMenuItemPath(): string {\r\n return SVGGenerator.getSVGCenterSubMenuItemPath(this._subMenuUnits);\r\n }\r\n\r\n public toggleMenu() {\r\n this.layoutManagerService.updateCollapsed(!this.isCollapsed,this.componentId);\r\n setTimeout(()=>{\r\n this.layoutManagerService.checkPosition('center-menu-fp-id',this.getSelector(),undefined,0,0,true); \r\n })\r\n }\r\n\r\n findToolHubItemById(id: string): ToolHubItem | undefined {\r\n return this._items.find(x => x.buttonId === id);\r\n }\r\n\r\n clickToolHubItem(action: string) {\r\n const item = this.findToolHubItemById(action);\r\n if (!item || item?.disabled) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(action);\r\n }\r\n\r\n clickToolHubSubItem(action: string) {\r\n if (!this._activeSubItems) {\r\n return;\r\n }\r\n\r\n const item = this._activeSubItems.find(x => x.buttonId === action);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.subItemClicked.emit(action);\r\n this.closeActiveSubItemsView();\r\n }\r\n\r\n toggleToolHubItemActive(buttonId: string) {\r\n const item = this.findToolHubItemById(buttonId);\r\n if (!item || item.disabled) {\r\n return;\r\n }\r\n\r\n item.active = !item.active;\r\n\r\n this._updateActivationState();\r\n }\r\n\r\n toggleSubItemsView(buttonId: string) {\r\n const item = this.findToolHubItemById(buttonId);\r\n if (!item || item.disabled || !item.subItems) {\r\n return;\r\n }\r\n\r\n item.active = !item.active;\r\n if (item.active) {\r\n this._activeSubItemsView = item;\r\n this._activeSubItems = item.subItems;\r\n } else {\r\n this._activeSubItemsView = null;\r\n this._activeSubItems = null;\r\n }\r\n }\r\n\r\n toggleCameraProjection(buttonId: string) {\r\n if (!this._activeSubItems) {\r\n return;\r\n }\r\n\r\n const item = this._activeSubItems.find(x => x.buttonId === buttonId);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.isPerspectiveProjection = !this.isPerspectiveProjection;\r\n\r\n item.iconClass = this.isPerspectiveProjection ? 'ui-icon-orthographic-camera-projection' : 'ui-icon-perspective-camera-projection';\r\n item.text = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n item.tooltip = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n item.tooltipDisabled = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n }\r\n\r\n closeActiveSubItemsView() {\r\n if (this._activeSubItemsView) {\r\n this._activeSubItemsView.active = false;\r\n this._activeSubItemsView = null;\r\n }\r\n this._activeSubItems = null;\r\n }\r\n\r\n setHoveredState(element: string, hovered: boolean) {\r\n const index = this._hoveredElements.indexOf(element);\r\n const storedCountHoverd = this._hoveredElements.length;\r\n\r\n if (index >= 0 && !hovered) {\r\n this._hoveredElements.splice(index, 1);\r\n }\r\n\r\n if (index < 0 && hovered) {\r\n this._hoveredElements.push(element);\r\n }\r\n\r\n if (storedCountHoverd > 0 && this._hoveredElements.length === 0) {\r\n\r\n // If hovered elements count reaches zero, check again a bit delayed. If nothing hovered at that time, close submenu\r\n setInterval(() => {\r\n if (this._hoveredElements.length === 0) {\r\n this.closeActiveSubItemsView();\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n private getSelector():string{\r\n return this.isCollapsed ? '#center-menu-controller':'.center-menu-fp';\r\n }\r\n\r\n dragElement(event: [number, number]): void {\r\n const deltaX1 = event[0];\r\n const deltaY1 = event[1]; \r\n this.layoutManagerService.checkPosition('center-menu-fp-id',this.getSelector(),undefined,deltaX1,deltaY1) \r\n }\r\n\r\n onDragEnd(){\r\n this.layoutManagerService.handleDragEnd('center-menu-fp-id');\r\n }\r\n\r\n // #endregion public methods\r\n\r\n // #region private fields\r\n private _isCollapsed: boolean = false;\r\n private _itemStates: Array<ToolHubItemStates> = Array<ToolHubItemStates>();\r\n private _items: Array<ToolHubItem> = Array<ToolHubItem>();\r\n private _activeSubItemsView: ToolHubItem | null = null;\r\n private _activeSubItems: Array<ToolHubSubItem> | null = null;\r\n private _isPerspectiveProjection = true; // flag about perspective or orthographic camera projection\r\n private _visualSettings: ToolHubVisualSettings;\r\n private _units: ToolHubItemUnits;\r\n private _subMenuUnits: ToolHubItemUnits;\r\n private _annularSector: string;\r\n private _annularSectorBorder: string;\r\n private _deadZoneAnnularSector: string;\r\n private _hoveredElements: Array<string> = Array<string>();\r\n // #endregion private fields\r\n\r\n // #region private methods\r\n private calculateCurrentMenuItemUnits(): ToolHubItemUnits {\r\n return SVGGenerator.drawMenuItemSvg(this._visualSettings.svgRadius, this._visualSettings.svgRadiusInner, this._items.length, this.isEmbedded);\r\n }\r\n\r\n private calculateCurrentSubMenuItemUnits(): ToolHubItemUnits {\r\n return SVGGenerator.drawMenuItemSvg(this._visualSettings.svgRadius, this._visualSettings.svgRadiusInner, 20, this.isEmbedded);\r\n }\r\n\r\n private handleParentAppRectSizeChange(parentRect:DOMRect | undefined):void{\r\n this.layoutManagerService.checkPosition(this.componentId,this.getSelector(),parentRect,0,0,true); \r\n }\r\n\r\n private _oneOrMoreItemsActive(){\r\n for(const item of this.items){\r\n if(item.active === true)\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _updateActivationState(){\r\n if(this._oneOrMoreItemsActive()){\r\n this.isActive = true;\r\n }else{\r\n this.isActive = false;\r\n }\r\n }\r\n // #region private methods\r\n}\r\n","<div class=\"center-menu\">\r\n <div\r\n class=\"center-menu-fp\"\r\n id=\"center-menu-fp-id\"\r\n [ngClass]=\"activeSubItems ? 'submenu-active' : ''\"\r\n >\r\n <div\r\n libDraggable\r\n id=\"center-menu-controller\"\r\n class=\"center-menu-controller dragger\"\r\n data-test=\"toolhub_controller\"\r\n [ngClass]=\"{\r\n opened: !isCollapsed,\r\n active: isActive\r\n }\"\r\n [title]=\"\r\n isCollapsed\r\n ? ('_Show_toolhub_tooltip' | translate)\r\n : ('_Minimize_toolhub_tooltip' | translate)\r\n \"\r\n (clicked)=\"toggleMenu()\"\r\n (dragging)=\"dragElement($event)\"\r\n (dragEnd) =\"onDragEnd()\"\r\n ></div>\r\n <div\r\n class=\"center-menu-circle-border-inner\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n ></div>\r\n <div\r\n class=\"center-menu-circle-border-outer\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('menuCircleBorderOuter', false)\"\r\n (mouseenter)=\"setHoveredState('menuCircleBorderOuter', true)\"\r\n ></div>\r\n <div\r\n libDraggable\r\n class=\"center-menu-circle\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('menuCircle', false)\"\r\n (mouseenter)=\"setHoveredState('menuCircle', true)\"\r\n (dragging)=\"dragElement($event)\"\r\n >\r\n <lib-tool-hub-item\r\n libDraggable\r\n *ngFor=\"let item of items\"\r\n [attr.data-test]=\"'toolhub_item_' + item.buttonId\"\r\n [title]=\"item.tooltip | translate\"\r\n [item]=\"item\"\r\n [active]=\"!!item.active\"\r\n [isEnabled]=\"!item.disabled\"\r\n (clicked)=\"clickToolHubItem(item.buttonId)\"\r\n ></lib-tool-hub-item>\r\n\r\n <svg\r\n class=\"centermenu-button-svg\"\r\n [attr.viewBox]=\"getSVGViewBox()\"\r\n fill=\"none\"\r\n >\r\n <clipPath id=\"svgCenterMenu\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterMenuPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterMenuItem\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterMenuItemPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterSubMenuItem\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterSubMenuItemPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterMenuSubMenu\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"annularSector\" fill=\"none\" />\r\n </clipPath>\r\n <clipPath\r\n id=\"svgCenterMenuSubMenuBorder\"\r\n clipPathUnits=\"objectBoundingBox\"\r\n >\r\n <path [attr.d]=\"annularSectorBorder\" fill=\"none\" />\r\n </clipPath>\r\n <clipPath\r\n id=\"svgCenterMenuSubMenuDeadZone\"\r\n clipPathUnits=\"objectBoundingBox\"\r\n >\r\n <path [attr.d]=\"deadZoneAnnularSector\" fill=\"none\" />\r\n </clipPath>\r\n </svg>\r\n </div>\r\n\r\n @if (activeSubItems) {\r\n <div\r\n class=\"center-menu-sub-menu-border\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('submenuBorder', false)\"\r\n (mouseenter)=\"setHoveredState('submenuBorder', true)\"\r\n ></div>\r\n <div\r\n class=\"center-menu-sub-menu\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('submenu', false)\"\r\n (mouseenter)=\"setHoveredState('submenu', true)\"\r\n >\r\n <ng-container *ngFor=\"let item of activeSubItems\">\r\n <lib-tool-hub-sub-item\r\n *ngIf=\"item.type === 'button'\"\r\n [attr.data-test]=\"'toolhub_subitem_' + item.buttonId\"\r\n [title]=\"item.tooltip | translate\"\r\n [item]=\"item\"\r\n (click)=\"clickToolHubSubItem(item.buttonId)\"\r\n (keypress)=\"clickToolHubSubItem(item.buttonId)\"\r\n ></lib-tool-hub-sub-item>\r\n <!-- this item is added as 6th but is moved back in less file to 5th position -->\r\n <lib-tool-hub-sub-item\r\n *ngIf=\"item.type === 'separator'\"\r\n [attr.data-test]=\"'toolhub_subitem_' + item.buttonId\"\r\n [item]=\"item\"\r\n ></lib-tool-hub-sub-item>\r\n </ng-container>\r\n </div>\r\n <div\r\n class=\"center-menu-sub-menu-dead-zone\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('deadZone', false)\"\r\n (mouseenter)=\"setHoveredState('deadZone', true)\"\r\n ></div>\r\n }\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, Output, EventEmitter, HostListener, inject } from '@angular/core';\n\n@Directive({\n selector: '[libClickOutside]',\n standalone: true\n})\nexport class ClickOutsideDirective {\n private elementRef = inject(ElementRef);\n\n @Output() public clickOutside = new EventEmitter<void>();\n\n @HostListener('document:click', ['$event.target'])\n public onClick(targetElement: HTMLElement) {\n const clickedInside = this.elementRef.nativeElement.contains(targetElement);\n if (!clickedInside) {\n this.clickOutside.emit();\n }\n }\n}\n","import { Component, Input, Output, booleanAttribute, ViewEncapsulation, ElementRef, EventEmitter, signal, model, inject } from '@angular/core';\nimport { NgStyle} from '@angular/common';\nimport { BimplusContextMenuItem, BimplusContextMenuPosition } from './bimplus-context-menu.interface';\nimport { ClickOutsideDirective } from '../../directives/click-outside/click-outside.directive';\nimport { fireEvent } from '../../utils/utils';\n\n@Component({\n selector: 'lib-bimplus-context-menu',\n imports: [\n NgStyle,\n ClickOutsideDirective,\n ],\n templateUrl: './bimplus-context-menu.component.html',\n styleUrl: './bimplus-context-menu.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusContextMenuComponent {\n private readonly el = inject(ElementRef);\n\n @Output() triggerSelected = new EventEmitter();\n @Input({ transform: booleanAttribute }) showIcons: boolean = true;\n @Input() triggerTitle : string = \"\";\n\n protected readonly _showDropdown = signal<boolean>(false);\n protected _data?: object = undefined;;\n protected readonly _position = signal<BimplusContextMenuPosition>({\n posX: -2000,\n posY: -2000\n })\n private readonly _element: HTMLElement;\n private _interval: number | undefined;\n items = model<BimplusContextMenuItem[] | null | undefined>([]);\n\n constructor() {\n this._element = this.el.nativeElement.shadowRoot;\n }\n\n get data(): undefined | object {\n return this._data;\n }\n @Input() set data(data: object) {\n this._data = data;\n }\n\n protected _clickOutside() {\n this._stopTriggerPositionTracking();\n this._showDropdown.set(false);\n }\n\n protected _actionClick(item: BimplusContextMenuItem) {\n this._showDropdown.set(false);\n\n if(typeof item.disabled === 'function') {\n if(item.disabled?.(this._data)) {\n return;\n }\n item.action?.(this._data);\n return;\n }\n\n if(item.disabled) {\n return;\n }\n item.action?.(this._data);\n }\n\n protected _disabled(item: BimplusContextMenuItem): boolean {\n if(!item.disabled) {\n return false;\n }\n if(typeof item.disabled === 'function') {\n return item.disabled?.(this._data);\n }\n return item.disabled;\n }\n\n protected _calculateContextMenuPosition() {\n const _triggerElament = this._element.querySelector(\".context-menu-trigger\");\n if(!_triggerElament) {\n return;\n }\n\n const { right: posX, top: posY } = _triggerElament.getBoundingClientRect();\n this._position.set({ posX, posY });\n }\n\n protected _stopTriggerPositionTracking(): void {\n if(!this._interval){\n return;\n }\n\n clearInterval(this._interval);\n this._interval = undefined;\n }\n\n protected _startTriggerPositionTracking(): void {\n if(this._interval){\n return;\n }\n this._interval = setInterval(() => {\n this._calculateContextMenuPosition();\n }, 50) as unknown as number;\n }\n\n protected _toggleDropdown(event: Event) {\n this._showDropdown.update(value => !value);\n this._calculateContextMenuPosition();\n this._startTriggerPositionTracking();\n fireEvent(this, \"triggerSelected\");\n event.stopPropagation();\n }\n}\n","<div class=\"basic-context-menu\" libClickOutside (clickOutside)=\"_clickOutside()\">\n <div class=\"context-menu-trigger\" \n (click)=\"_toggleDropdown($event)\"\n (keypress)=\"_toggleDropdown($event)\"\n title=\"{{triggerTitle}}\"\n data-test=\"context-menu\"\n >\n @if (_showDropdown()) {\n <ul\n class=\"basic-context-menu__list\"\n data-test=\"basic-context-menu__list\"\n [ngStyle]=\"{\n 'top.px': _position().posY\n , 'left.px': _position().posX\n , 'minWidth.px': 125\n , 'backgroundColor': 'white'\n }\"\n >\n @for(item of items(); track item) {\n @if (item.id !== 'separator') {\n <li \n class=\"basic-context-menu__item\"\n data-test=\"basic-context-menu__item\"\n [class.basic-context-menu__item--disabled]=\"_disabled(item)\"\n (click)=\"_actionClick(item)\"\n (keypress)=\"_actionClick(item)\"\n >\n @if (showIcons) {\n <div class=\"basic-context-menu__item__icon\" data-test=\"basic-context-menu__item__icon\" [style.background-image]=\"'url(' + item.icon + ')'\">\n </div>\n }\n <div class=\"basic-context-menu__item__label\" data-test=\"basic-context-menu__item__label\" title=\"{{item.tooltip ? item.tooltip : item.title}}\">\n {{item.title}}\n </div>\n </li>\n } @else {\n <div class=\"basic-context-menu__item__separator\" data-test=\"basic-context-menu__item__separator\"></div>\n }\n }\n </ul>\n }\n</div>\n","import { ElementRef, Component, OnInit, Input, OnChanges, SimpleChange, booleanAttribute, Output, EventEmitter, TemplateRef, input, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\nimport { SelectionModel} from '@angular/cdk/collections';\nimport { CdkTreeModule, FlatTreeControl } from '@angular/cdk/tree';\nimport { CommonModule } from '@angular/common';\nimport { fireEvent } from '../../utils/utils';\nimport { TreeNode, FlatNode, FlatTreeContextMenus } from './bimplus-flat-tree.interface';\nimport { BimplusContextMenuComponent } from '../bimplus-context-menu/bimplus-context-menu.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\ninterface BimplusFlatTreeComponentAttribute {\n [key: string]: unknown; // Add index signature allowing string indexing\n //Other properties and methods...\n}\n\n@Component({\n selector: 'lib-bimplus-flat-tree',\n imports: [MatTreeModule,\n MatButtonModule,\n MatIconModule,\n CdkTreeModule,\n BimplusContextMenuComponent,\n CommonModule,\n DragDropModule\n ],\n templateUrl: './bimplus-flat-tree.component.html',\n styleUrl: './bimplus-flat-tree.component.less'\n})\n\nexport class BimplusFlatTreeComponent implements OnInit, OnChanges{\n private readonly el = inject(ElementRef);\n\n @Input() treeDataStringified: string | null = null;\n treeTitle = input<string | undefined>(undefined);\n @Input() paddingIndent : string = \"2.8rem\"\n @Input({ transform: booleanAttribute }) multiSelect: boolean = false;\n @Input({ transform: booleanAttribute }) oneLevelMultiSelect: boolean = false;\n @Input({ transform: booleanAttribute }) showFoldersIcons: boolean = false;\n @Input({ transform: booleanAttribute }) showObjectsIcons: boolean = false;\n @Input({ transform: booleanAttribute }) enableSelect: boolean = true;\n @Input({ transform: booleanAttribute }) enableParentHighlighting: boolean = true;\n @Input({ transform: booleanAttribute }) enableDragAndDrop: boolean = false;\n @Input() dataTestPrefix : string = \"\";\n @Input() contextMenus: FlatTreeContextMenus | null | undefined = null;\n @Input({ transform: booleanAttribute }) hasCheckBox1:boolean = false;\n @Input({ transform: booleanAttribute }) hasCheckBox2:boolean = false;\n\n get treeData() : Array<TreeNode>{\n return this._dataSource.data;\n }\n\n @Input() set treeData(data: Array<TreeNode>) {\n this.treeDataStringified = null;\n this._dataSource.data = data;\n }\n customNodeTemplate = input<TemplateRef<unknown> | null>(null);\n\n @Output() selectedNodes = new EventEmitter<FlatNode[]>();\n @Output() checked1Nodes = new EventEmitter<FlatNode[]>();\n @Output() checked2Nodes = new EventEmitter<FlatNode[]>();\n\n private _selectionList: SelectionModel<FlatNode> | undefined = undefined;\n\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n if (element) {\n (element as unknown as BimplusFlatTreeComponentAttribute)['get_node'] = this.get_node.bind(this);\n (element as unknown as BimplusFlatTreeComponentAttribute)['select_node'] = this.select_node.bind(this);\n }\n\n this._selectionList = new SelectionModel<FlatNode>(this.multiSelect || this.oneLevelMultiSelect);\n if(this.treeDataStringified){\n this._setNewData(this.treeDataStringified)\n }\n }\n\n public expandTree(){\n this._treeControl.expandAll();\n }\n\n private _getNode(id: string, nodes: Array<TreeNode>): TreeNode | null {\n for(const node of nodes) {\n if(node.id === id) {\n return node;\n }\n if(node.children) {\n const _node: TreeNode | null = this._getNode(id, node.children);\n if(_node) {\n return _node;\n }\n }\n }\n return null;\n }\n\n public get_node(id: { id: string } | string, getDOMElement: boolean = false): TreeNode | Element | null {\n if(typeof id === 'string') {\n return this._getNode(id, this._dataSource.data);\n }\n if(getDOMElement) {\n const _element: Element = this.el.nativeElement.querySelector(`[node-id='${id.id}']`);\n return _element;\n }\n return this._getNode(id.id, this._dataSource.data);\n }\n\n public select_node(id: string, skipEvent: boolean = false) {\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return;\n }\n\n if(!this._selectionList) {\n return;\n }\n\n if(this.oneLevelMultiSelect && this._selectionList.selected.length > 0) {\n if(this._selectionList.selected[0].parent !== node.parent) {\n this._selectionList.clear();\n }\n }\n\n if(this._selectionList.isSelected(node)) {\n return;\n }\n\n this._selectionList.select(node);\n if(!this.multiSelect && !this.oneLevelMultiSelect && !skipEvent) {\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n return;\n }\n\n if(!this.oneLevelMultiSelect) {\n this._toggleDescendantsNodes(node);\n }\n\n if(this.enableParentHighlighting) {\n this._updateParentSelections(node);\n }\n\n if(!skipEvent){\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n }\n\n }\n\n public reset_selection(){\n this._selectionList?.clear();\n }\n\n public expand_node(id : string){\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return;\n }\n\n this._treeControl.expand(node);\n }\n\n public is_expanded(id : string){\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return false;\n }\n\n return this._treeControl.isExpanded(node);\n }\n\n public is_selected(id : string){\n if(!this._selectionList)\n return;\n\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return false;\n }\n\n return this._selectionList?.isSelected(node);\n }\n\n private _setNewData(treeDataStringified: string): void {\n const _tree_data = JSON.parse(treeDataStringified);\n this._dataSource.data = _tree_data ?? [];\n }\n\n private _changedTreeData(change: SimpleChange) {\n this._setNewData(change.currentValue)\n }\n\n ngOnChanges(changes: { [propKey: string]: SimpleChange }): void {\n if(changes['multiSelect'] || changes['oneLevelMultiSelect']) {\n this._selectionList = new SelectionModel<FlatNode>(this.multiSelect || this.oneLevelMultiSelect);\n }\n if(changes['treeDataStringified']) {\n this._changedTreeData(changes['treeDataStringified'])\n }\n }\n\n private _transformer = (node: TreeNode, level: number): FlatNode => {\n return {\n expandable: node.children !== undefined && node.children.length > 0,\n children_count: node.children?.length,\n name: node.name,\n id: node.id,\n level: level,\n parent: node.parent,\n nodeType: node.nodeType,\n isChecked1: true,\n isChecked2: true,\n isUndetermined1: false,\n isUndetermined2: false\n };\n };\n\n protected _treeControl = new FlatTreeControl<FlatNode>(\n node => node.level,\n node => node.expandable,\n );\n\n protected _treeFlattener = new MatTreeFlattener(\n this._transformer,\n node => node.level,\n node => node.expandable,\n node => node.children\n );\n\n protected _dataSource = new MatTreeFlatDataSource(this._treeControl, this._treeFlattener);\n protected _isExpandable = (_: number, node: FlatNode) => node.expandable;\n protected _isCustomNodeType(node: FlatNode): boolean{\n return node.nodeType != undefined && node.nodeType != \"\";\n }\n\n protected _hasChildren(node: FlatNode): boolean {\n if(!node.expandable) {\n return false;\n }\n if(node.children_count === undefined) {\n return false\n }\n return node.children_count > 0\n }\n\n protected _descendantsAllSelected(node: FlatNode): boolean {\n if(!this._selectionList) {\n return false;\n }\n\n const _selectionList: SelectionModel<FlatNode> = this._selectionList;\n\n const _descendants = this._treeControl.getDescendants(node);\n if(_descendants.length === 0) {\n return true;\n }\n const _descAllSelected = _descendants.length > 0 && _descendants.every((child) => {\n return _selectionList.isSelected(child);\n });\n return _descAllSelected;\n }\n\n protected _descendantsPartiallySelected(node: FlatNode): boolean {\n if(!this._selectionList) {\n return false;\n }\n const _selectionList: SelectionModel<FlatNode> = this._selectionList;\n\n const _descendants = this._treeControl.getDescendants(node);\n const _result = _descendants.some((child) => {\n return _selectionList.isSelected(child)\n });\n return _result && !this._descendantsAllSelected(node);\n }\n\n private _toggleDescendantsNodes(node: FlatNode) {\n if(!this._selectionList) {\n return;\n }\n\n const _isNodeSelected = this._selectionList.isSelected(node);\n if(_isNodeSelected) {\n this._selectionList.select(...this._treeControl.getDescendants(node));\n }\n else {\n this._selectionList.deselect(...this._treeControl.getDescendants(node));\n }\n }\n\n private _updateParentSelections(node: FlatNode) {\n if(!this._selectionList) {\n return;\n }\n\n let _parentId = node.parent;\n let _parentNode = this._treeControl.dataNodes.find(n => n.id === _parentId)\n while(_parentNode) {\n if(this._descendantsAllSelected(_parentNode)) {\n this._selectionList.select(_parentNode);\n }\n else{\n this._selectionList.deselect(_parentNode);\n }\n _parentId = _parentNode.parent;\n _parentNode = this._treeControl.dataNodes.find(n => n.id === _parentId);\n }\n }\n\n protected _toggleNode(event: Event, node: FlatNode) {\n if(!node) {\n return;\n }\n\n if(!this.enableSelect) {\n return;\n }\n\n if(!this._selectionList) {\n return;\n }\n\n // Check if event is a MouseEvent before accessing ctrlKey\n const isMouseEvent = event != null && event instanceof MouseEvent;\n if (isMouseEvent && !event?.ctrlKey) {\n this._selectionList.clear();\n }\n\n if(this.oneLevelMultiSelect && this._selectionList.selected.length > 0) {\n if(this._selectionList.selected[0].parent !== node.parent) {\n this._selectionList.clear();\n }\n }\n\n this._selectionList.toggle(node);\n if(!this.multiSelect && !this.oneLevelMultiSelect) {\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n return;\n }\n\n if(!this.oneLevelMultiSelect) {\n this._toggleDescendantsNodes(node);\n }\n\n if(this.enableParentHighlighting) {\n this._updateParentSelections(node);\n }\n\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n }\n\n protected _isSelected(node: FlatNode): boolean{\n if(!this._selectionList) {\n return false;\n }\n return this._selectionList?.isSelected(node);\n }\n \n protected _toggleCheckBox1( event:Event,node: FlatNode) { \n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n node.isChecked1 = !node.isChecked1;\n if(node.expandable){\n this._treeControl.getDescendants(node).forEach(n => {\n n.isChecked1 = node.isChecked1;\n });\n }\n node.isUndetermined1 = false;\n this.checkUndetermined(node,1);\n fireEvent(this, \"checked1Nodes\", [node]);\n }\n \n protected _toggleCheckBox2(event:Event, node: FlatNode) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n node.isChecked2 = !node.isChecked2;\n if(node.expandable){\n this._treeControl.getDescendants(node).forEach(n => {\n n.isChecked2 = node.isChecked2;\n });\n }\n node.isUndetermined2 = false;\n this.checkUndetermined(node,2);\n fireEvent(this, \"checked2Nodes\", [node]);\n }\n \n //simplified version of checkUndetermined\n checkUndetermined(node:FlatNode,checkbox: number){\n if(!this.hasCheckBox1 && checkbox === 1){\n return;\n }\n if(!this.hasCheckBox2 && checkbox === 2){\n return;\n }\n if(!node.parent){\n return;\n }\n let myNode = node; \n while(myNode && myNode.parent){\n const parentNode = this._treeControl.dataNodes.find(n => n.id === myNode.parent); \n if(!parentNode){\n return;\n }\n let checked = 0;\n let unchecked = 0; \n let undetermined = false;\n this._treeControl.getDescendants(parentNode).forEach(n => {\n if(checkbox === 1 ? n.isChecked1: n.isChecked2){ \n checked++;\n } else {\n unchecked++;\n }\n if(checkbox === 1 ? n.isUndetermined1: n.isUndetermined2){ \n undetermined = true; \n }\n if(checked > 0 && unchecked > 0){\n undetermined = true; \n }\n });\n if(checkbox === 1 ){\n parentNode.isUndetermined1 = undetermined;\n parentNode.isChecked1 = !unchecked;\n } else {\n parentNode.isUndetermined2 = undetermined;\n parentNode.isChecked2 = !unchecked;\n }\n myNode = parentNode;\n };\n }\n protected _isUndetermined1(node: FlatNode): boolean{\n return node.isUndetermined1;\n }\n \n protected _isUndetermined2(node: FlatNode): boolean{\n return node.isUndetermined2;\n }\n\n protected _isChecked1(node: FlatNode): boolean{ \n return node.isChecked1;\n }\n protected _isChecked2(node: FlatNode): boolean{ \n return node.isChecked2;\n }\n}\n","<div class=\"tree-container\">\n @if (treeTitle(); as treeTitle) {\n <div class=\"tree-title\">{{treeTitle}}</div>\n }\n <cdk-tree [dataSource]=\"_dataSource\" [treeControl]=\"_treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <cdk-tree-node\n [matTreeNodePaddingIndent]=\"paddingIndent\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n (click)=\"_toggleNode($event, node)\"\n (keypress)=\"_toggleNode($event, node)\"\n class=\"object-node\"\n [class.dragable-node]=\"enableDragAndDrop && node.level > 0\"\n [class.selected-node]=\"_isSelected(node)\"\n [attr.data-test]=\"dataTestPrefix + node.id\"\n [title]=\"node.name\"\n [attr.node-id]=\"node.id\"\n >\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled>\n </button>\n @if (customNodeTemplate() && _isCustomNodeType(node)) {\n <ng-container \n [ngTemplateOutlet]=\"customNodeTemplate()\" \n [ngTemplateOutletContext]=\"{node:node}\">\n </ng-container>\n }@else{\n <div class=\"icon object-icon\" *ngIf=\"showObjectsIcons\">\n </div>\n <span\n class=\"node-label\"\n [class.selected-node]=\"_isSelected(node)\"\n >\n <div class=\"custom-drag-placeholder\" *cdkDragPlaceholder></div>\n <div>\n {{node.name}}\n </div>\n </span>\n }\n <lib-bimplus-context-menu\n [items]=\"contextMenus?.objectContextMenuitems\"\n [data]=\"node\"\n *ngIf=\"contextMenus?.objectContextMenuitems?.length\"\n (triggerSelected)=\"_toggleNode($event, node)\"\n >\n </lib-bimplus-context-menu>\n @if(hasCheckBox1){\n <div\n class=\"custom-checkbox1\"\n [ngClass]=\"{ 'icon-checked': _isChecked1(node), 'icon-unchecked': !_isChecked1(node) }\"\n (click)=\"_toggleCheckBox1($event,node)\"\n (keypress)=\"_toggleCheckBox1($event,node)\"\n ></div>\n }\n @if(hasCheckBox2){\n <div\n class=\"custom-checkbox2\"\n [ngClass]=\"{ 'icon-checked': _isChecked2(node), 'icon-unchecked': !_isChecked2(node) }\"\n (click)=\"_toggleCheckBox2($event,node)\"\n (keypress)=\"_toggleCheckBox2($event,node)\"\n ></div>\n }\n </cdk-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-tree-node [matTreeNodePaddingIndent]=\"paddingIndent\"\n *matTreeNodeDef=\"let node;when: _isExpandable\"\n matTreeNodePadding\n (click)=\"_toggleNode($event, node)\"\n (keypress)=\"_toggleNode($event, node)\"\n class=\"folder-node\"\n [class.dragable-node]=\"enableDragAndDrop && node.level > 0\"\n [class.selected-node]=\"_isSelected(node)\"\n [attr.data-test]=\"dataTestPrefix + node.id\"\n [title]=\"node.name\"\n [attr.node-id]=\"node.id\"\n >\n <button\n mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n >\n <div\n class=\"icon expand-collapse-icon\"\n [class.expand-more-icon]=\"_hasChildren(node) && !_treeControl.isExpanded(node)\"\n [class.collapse-icon]=\"_hasChildren(node) && _treeControl.isExpanded(node)\"\n >\n </div>\n </button> \n @if (customNodeTemplate() && _isCustomNodeType(node)) {\n <ng-container \n [ngTemplateOutlet]=\"customNodeTemplate()\" \n [ngTemplateOutletContext]=\"{node:node}\">\n </ng-container>\n }@else{\n <div class=\"icon folder-icon\" *ngIf=\"showFoldersIcons\">\n </div>\n <span class=\"node-label\"\n [class.selected-node]=\"_isSelected(node)\"\n [class.selected-all-descendants-nodes]=\"_descendantsAllSelected(node) && _isSelected(node) && enableParentHighlighting\"\n [class.selected-partially-descendants-nodes]=\"_descendantsPartiallySelected(node) && enableParentHighlighting\"\n >\n <div class=\"custom-drag-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"node-label\">\n {{node.name}}\n </div>\n </span>\n }\n <lib-bimplus-context-menu\n [items]=\"contextMenus?.folderContextMenuitems\"\n [data]=\"node\"\n *ngIf=\"contextMenus?.folderContextMenuitems?.length\"\n (triggerSelected)=\"_toggleNode($event, node)\"\n >\n </lib-bimplus-context-menu>\n\n @if(hasCheckBox1){\n <div\n class=\"custom-checkbox1\"\n [ngClass]=\"{\n 'icon-undetermined': _isUndetermined1(node),\n 'icon-checked': !_isUndetermined1(node) && _isChecked1(node),\n 'icon-unchecked': !_isUndetermined1(node) && !_isChecked1(node)\n }\"\n (click)=\"_toggleCheckBox1($event,node)\"\n (keypress)=\"_toggleCheckBox1($event,node)\"\n ></div>\n }\n @if(hasCheckBox2){\n <div\n class=\"custom-checkbox2\"\n [ngClass]=\"{\n 'icon-undetermined': _isUndetermined2(node),\n 'icon-checked': !_isUndetermined2(node) && _isChecked2(node),\n 'icon-unchecked': !_isUndetermined2(node) && !_isChecked2(node)\n }\"\n (click)=\"_toggleCheckBox2($event,node)\"\n (keypress)=\"_toggleCheckBox2($event,node)\"\n ></div>\n }\n </cdk-tree-node>\n </cdk-tree>\n</div>\n","\r\nexport interface FilterType{\r\n id: string,\r\n name: string\r\n}\r\n\r\nexport interface FilterCriterium{\r\n name : string,\r\n value? : string | number | boolean | null | undefined,\r\n namedValue? : string, // display name of value in UI\r\n id? : string,\r\n subString : string,\r\n}\r\n\r\nexport enum FilterCriteriaSelectionMode{\r\n None,\r\n SelectObjectProperties,\r\n SelectAttributes\r\n} \r\n\r\nexport const MaxFilterCriteria = 5;","import { Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\r\nimport { FilterCriterium } from '../bimplus-object-navigator.interface';\r\nimport { BimplusLocalizedWidgetComponent } from '../../bimplus-localized-widget/bimplus-localized-widget.component';\r\nimport { TranslateModule} from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-filter-criterium',\r\n imports: [TranslateModule],\r\n templateUrl: './filter-criterium.component.html',\r\n styleUrl: './filter-criterium.component.less'\r\n})\r\nexport class FilterCriteriumComponent extends BimplusLocalizedWidgetComponent {\r\n\r\n constructor (){\r\n super();\r\n }\r\n\r\n // #region public fields\r\n @Input()\r\n criterium : FilterCriterium = { name : \"\", subString:\"\"}\r\n\r\n @HostBinding('style.margin-left.em') @Input() indent: number = 0;\r\n\r\n @Output() deleteCriterium = new EventEmitter<void>();\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n clickedDelete(){\r\n this.deleteCriterium.emit();\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"filter-criterium-row\">\r\n <span class=\"filter-criterium-item\">\r\n {{ criterium.name }}\r\n @if(criterium.namedValue) { &nbsp;&#40;{{ criterium.namedValue }}&#41; }\r\n </span>\r\n <div\r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n ></div>\r\n</div>\r\n","import { Component, computed, EventEmitter, input, Input, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { FlatNode, TreeNode } from '../bimplus-flat-tree/bimplus-flat-tree.interface';\r\nimport { ObjectStructureNode } from './bimplus-object-structure.interface';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-object-structure',\r\n imports: [BimplusFlatTreeComponent],\r\n templateUrl: './bimplus-object-structure.component.html',\r\n styleUrl: './bimplus-object-structure.component.less'\r\n})\r\nexport class BimplusObjectStructureComponent{\r\n @Input() hasCheckBox1:boolean = false;\r\n @Input() hasCheckBox2:boolean = false;\r\n \r\n objectStructure = input<ObjectStructureNode>({\r\n id : \"\",\r\n name : \"\",\r\n parent: \"\",\r\n visible: true,\r\n opaque: true\r\n });\r\n\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n \r\n private _convertObjectStructureNodeToTreeNode(node : ObjectStructureNode) : TreeNode{\r\n\r\n const treeNode : TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent \r\n };\r\n\r\n if(node.children){\r\n treeNode.children = [];\r\n for(const child of node.children){\r\n const childTreeNode = this._convertObjectStructureNodeToTreeNode(child);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n readonly treeData = computed<TreeNode[]>(() => {\r\n const objectStructure = this.objectStructure();\r\n if(!objectStructure){\r\n return [];\r\n }\r\n\r\n const root = this._convertObjectStructureNodeToTreeNode(objectStructure);\r\n if(!root){\r\n return [];\r\n }\r\n\r\n return [root];\r\n })\r\n\r\n\r\n private _findNode(id:string, node : ObjectStructureNode) : ObjectStructureNode | null{\r\n if(node.id == id){\r\n return node;\r\n }\r\n\r\n if(node.children){\r\n for(const child of node.children){\r\n const res = this._findNode(id, child);\r\n if(res){\r\n return res;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n handleSelectedNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const selectedNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(selectedNode){\r\n this.nodeSelected.emit(selectedNode);\r\n }\r\n } \r\n }\r\n \r\n handleVisibleNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const visibleNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(visibleNode){\r\n const outpuData:ObjectStructureNode ={\r\n name:visibleNode.name,\r\n parent: visibleNode.parent, \r\n id: visibleNode.id,\r\n visible: nodes[0].isChecked2,\r\n opaque: nodes[0].isChecked1,\r\n }\r\n this.nodeVisible.emit(outpuData);\r\n }\r\n } \r\n }\r\n \r\n handleOpaqueNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const opaqueNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(opaqueNode){\r\n const outpuData:ObjectStructureNode ={\r\n name:opaqueNode.name,\r\n parent: opaqueNode.parent, \r\n id: opaqueNode.id,\r\n visible: nodes[0].isChecked2,\r\n opaque: nodes[0].isChecked1,\r\n }\r\n this.nodeOpaque.emit(outpuData);\r\n }\r\n } \r\n }\r\n\r\n expandTree(){\r\n this.treeComponent?.expandTree();\r\n }\r\n\r\n @Output() nodeSelected = new EventEmitter<ObjectStructureNode>();\r\n @Output() nodeVisible = new EventEmitter<ObjectStructureNode>();\r\n @Output() nodeOpaque = new EventEmitter<ObjectStructureNode>();\r\n}\r\n","<lib-bimplus-flat-tree\r\n paddingIndent=\"1.4rem\"\r\n [treeData]=\"treeData()\"\r\n enableParentHighlighting=\"false\"\r\n (selectedNodes) = \"handleSelectedNodes($event)\"\r\n (checked2Nodes) = \"handleVisibleNodes($event)\"\r\n (checked1Nodes) = \"handleOpaqueNodes($event)\"\r\n dataTestPrefix=\"object-structure-tree-\"\r\n [hasCheckBox1]=\"hasCheckBox1\"\r\n [hasCheckBox2]=\"hasCheckBox2\"\r\n></lib-bimplus-flat-tree>\r\n","import { Component, computed, EventEmitter, input, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { ComplexPropertiesNode } from './bimplus-object-complex-properties.interface';\r\nimport { FlatNode, TreeNode } from '../bimplus-flat-tree/bimplus-flat-tree.interface';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-object-complex-properties',\r\n imports: [BimplusFlatTreeComponent],\r\n templateUrl: './bimplus-object-complex-properties.component.html',\r\n styleUrl: './bimplus-object-complex-properties.component.less'\r\n})\r\nexport class BimplusObjectComplexPropertiesComponent {\r\n complexProperties = input<ComplexPropertiesNode>({\r\n id: \"\",\r\n name: \"\",\r\n parent: \"\"\r\n });\r\n\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n\r\n readonly treeData = computed<TreeNode[]>(() => {\r\n const complexProperties = this.complexProperties();\r\n if(!complexProperties) {\r\n return [];\r\n }\r\n\r\n const root = this._convertObjectStructureNodeToTreeNode(complexProperties);\r\n if(!root) {\r\n return [];\r\n }\r\n\r\n return [root];\r\n })\r\n\r\n private _convertObjectStructureNodeToTreeNode(node : ComplexPropertiesNode) : TreeNode{\r\n\r\n const treeNode : TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent \r\n };\r\n\r\n if(node.children){\r\n treeNode.children = [];\r\n for(const child of node.children){\r\n const childTreeNode = this._convertObjectStructureNodeToTreeNode(child);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n\r\n private _findNode(id:string, node : ComplexPropertiesNode) : ComplexPropertiesNode | null{\r\n if(node.id == id){\r\n return node;\r\n }\r\n\r\n if(node.children){\r\n for(const child of node.children){\r\n const res = this._findNode(id, child);\r\n if(res){\r\n return res;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n handleSelectedNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const selectedNode = this._findNode(nodes[0].id, this.complexProperties());\r\n if(selectedNode){\r\n this.nodeSelected.emit(selectedNode);\r\n }\r\n } \r\n }\r\n\r\n expandTree(){\r\n this.treeComponent?.expandTree();\r\n }\r\n\r\n @Output() nodeSelected = new EventEmitter<ComplexPropertiesNode>();\r\n}\r\n","<lib-bimplus-flat-tree\r\n paddingIndent=\"1.4rem\"\r\n [treeData]=\"treeData()\"\r\n enableParentHighlighting=\"false\"\r\n (selectedNodes)=\"handleSelectedNodes($event)\"\r\n dataTestPrefix=\"object-complex-properties-tree-\"\r\n></lib-bimplus-flat-tree>\r\n","import * as WebSdk from 'bimplus-websdk';\r\n\r\nexport interface ObjectStructureNode{\r\n id: string;\r\n children? : ObjectStructureNode[];\r\n name: string;\r\n parent: string;\r\n visible: boolean;\r\n opaque: boolean;\r\n}\r\n\r\nexport class ObjectStructureNodeBuilder{\r\n static createFromResponse(response : WebSdk.ObjectTopologyResponse) : ObjectStructureNode{\r\n const node : ObjectStructureNode = {\r\n id : response.id,\r\n name : response.name ? `${response.type}(${response.name})` : response.type,\r\n parent : response.parent,\r\n visible : true,\r\n opaque : true\r\n }\r\n\r\n if(response.children){\r\n node.children = [];\r\n for(const child of response.children){\r\n node.children.push(ObjectStructureNodeBuilder.createFromResponse(child as WebSdk.ObjectTopologyResponse));\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n}","import * as WebSdk from 'bimplus-websdk';\r\n\r\nexport interface ComplexPropertiesNode{\r\n id: string;\r\n children? : ComplexPropertiesNode[];\r\n name: string;\r\n parent: string;\r\n}\r\n\r\nexport class ComplexPropertiesNodeBuilder{\r\n static createFromResponse(response : WebSdk.ObjectComplexPropertyTopologyResponse) : ComplexPropertiesNode{\r\n const node : ComplexPropertiesNode = {\r\n id : response.id,\r\n name : response.type ? response.type : response.name,\r\n parent : response.parent\r\n }\r\n\r\n if(response.children){\r\n node.children = [];\r\n for(const child of response.children){\r\n node.children.push(ComplexPropertiesNodeBuilder.createFromResponse(child as WebSdk.ObjectComplexPropertyTopologyResponse));\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formatValue',\n standalone: true\n})\nexport class FormatValuePipe implements PipeTransform {\n transform(value: number | string | boolean | null | undefined): string {\n if (value === null || value === undefined) {\n return '[null]';\n } else if (value === '') {\n return '[empty]';\n } else if (typeof value === 'boolean') {\n return value ? 'TRUE' : 'FALSE';\n }\n return value.toString(); // Return the value as a string\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport moment from 'moment';\n\n@Pipe({\n name: 'DateTime',\n standalone: true,\n})\nexport class DateTimePipe implements PipeTransform {\n transform(value: string, format: string = \"L\"): string {\n // This UTC date/time 2024-12-11T23:00:00+00:00\n // gets transformed in Germany with timezone shift of +1 by\n // moment(value).format(format) ==> 12/12/2024\n // and by\n // moment.utc(value).format(format) ==> 12/11/2024\n //\n const date = moment(value).format(format);\n return date;\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\r\nimport * as WebSdk from 'bimplus-websdk';\r\nimport { BehaviorSubject, from } from 'rxjs';\r\nimport { BimplusLocalizedWidgetComponent } from '../../bimplus-localized-widget/bimplus-localized-widget.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { ExpansionPanelComponent } from '../../expansion-panel/expansion-panel.component';\r\nimport { ExpansionPanelHeaderComponent } from '../../expansion-panel-header/expansion-panel-header.component';\r\nimport { FilterCriterium, MaxFilterCriteria } from '../bimplus-object-navigator.interface';\r\nimport { BimplusObjectStructureComponent } from '../../bimplus-object-structure/bimplus-object-structure.component';\r\nimport { BimplusObjectComplexPropertiesComponent } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.component';\r\nimport { ObjectStructureNode, ObjectStructureNodeBuilder } from '../../bimplus-object-structure/bimplus-object-structure.interface';\r\nimport { ComplexPropertiesNode, ComplexPropertiesNodeBuilder } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.interface';\r\nimport { CriteriaSelectObjectAttribute, CriteriaSelectObjectAttributeGroup } from './criteria-select-object-properties.interface';\r\nimport { FormatValuePipe } from '../../../pipes/format-value.pipe';\r\nimport { DateTimePipe } from '../../../pipes/datetime.pipe';\r\n\r\n@Component({\r\n selector: 'lib-criteria-select-object-properties',\r\n imports: [ExpansionPanelHeaderComponent, ExpansionPanelComponent, TranslateModule, BimplusObjectStructureComponent, BimplusObjectComplexPropertiesComponent],\r\n providers: [FormatValuePipe, DateTimePipe],\r\n templateUrl: './criteria-select-object-properties.component.html',\r\n styleUrl: './criteria-select-object-properties.component.less'\r\n})\r\nexport class CriteriaSelectObjectPropertiesComponent extends BimplusLocalizedWidgetComponent implements OnInit {\r\n private formatValuePipe = inject(FormatValuePipe);\r\n private datetimePipe = inject(DateTimePipe);\r\n\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this._currentPropertiesObjectId$.subscribe({\r\n next: (id) => {\r\n if (id) {\r\n this._createObjectProperties(id, this.revision)\r\n }\r\n }\r\n });\r\n\r\n this._currentObjectId$.subscribe({\r\n next: (id) => {\r\n this._currentPropertiesObjectId$.next(id);\r\n this._createComplexPropertiestructure(id, this.revision);\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input()\r\n api: WebSdk.Api | null = null;\r\n\r\n @Input()\r\n set rootObjectId(id: string) {\r\n this._currentObjectId$.next(id);\r\n this._createObjectStructure(id, this.revision);\r\n\r\n this._rootObjectId = id;\r\n }\r\n\r\n get rootObjectId(): string {\r\n return this._rootObjectId;\r\n }\r\n\r\n @Input()\r\n revision: number | undefined = undefined;\r\n\r\n private readonly _currentObjectId$ = new BehaviorSubject<string>(\"\");\r\n\r\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string>(\"\");\r\n\r\n objectAttributeGroups: CriteriaSelectObjectAttributeGroup[] = [];\r\n\r\n MaxFilterCriteria = MaxFilterCriteria; // For exposure to template\r\n\r\n private _rootObjectId: string = \"\";\r\n\r\n @Input()\r\n set filterCriteria(criteria: FilterCriterium[]) {\r\n this._filterCriteria = criteria;\r\n this._syncAttributeStatesFromCriteria();\r\n }\r\n\r\n @Output() filterCriteriaChange = new EventEmitter<FilterCriterium[]>();\r\n\r\n get filterCriteria() {\r\n return this._filterCriteria;\r\n }\r\n\r\n private _filterCriteria: FilterCriterium[] = [];\r\n\r\n private _objectStructure: ObjectStructureNode | null = null;\r\n\r\n get objectStructure(): ObjectStructureNode | null {\r\n return this._objectStructure\r\n }\r\n\r\n private _complexProperties: ComplexPropertiesNode | null = null;\r\n\r\n get complexProperties(): ComplexPropertiesNode | null {\r\n return this._complexProperties;\r\n }\r\n\r\n toggleAttribute(attrib: CriteriaSelectObjectAttribute) {\r\n attrib.checked = !attrib.checked;\r\n if (attrib.checked === false) {\r\n attrib.valueChecked = false;\r\n }\r\n\r\n this.handleFilterCriteriumAttributeStateChange(attrib);\r\n }\r\n\r\n toggleAttributeValue(attrib: CriteriaSelectObjectAttribute) {\r\n attrib.valueChecked = !attrib.valueChecked;\r\n attrib.checked = attrib.valueChecked;\r\n\r\n this.handleFilterCriteriumAttributeStateChange(attrib);\r\n }\r\n\r\n _defineFilterString(attrib: CriteriaSelectObjectAttribute) {\r\n let substring = `[I][${attrib.id}].Value`;\r\n\r\n if (attrib.valueChecked) {\r\n substring += `[F][0]=${this.formatValuePipe.transform(attrib.value)}`;\r\n }\r\n return substring;\r\n }\r\n\r\n _addFilterCriteria(attrib: CriteriaSelectObjectAttribute) {\r\n // add a new entry\r\n this.filterCriteria.push({\r\n name: attrib.name,\r\n value: attrib.valueChecked ? attrib.value : undefined,\r\n namedValue: attrib.valueChecked ? this.normalizedValue(attrib, true) : undefined,\r\n id: attrib.id,\r\n subString: this._defineFilterString(attrib),\r\n });\r\n }\r\n\r\n _updateFilterCriteria(attrib: CriteriaSelectObjectAttribute, index: number) {\r\n // update an existing entry\r\n this.filterCriteria[index] = {\r\n ...this.filterCriteria[index],\r\n name: attrib.name,\r\n value: attrib.valueChecked ? attrib.value : undefined,\r\n namedValue: attrib.valueChecked ? this.normalizedValue(attrib, true) : undefined,\r\n subString: this._defineFilterString(attrib),\r\n };\r\n }\r\n\r\n // Helper function for rounding to specified decimals\r\n private roundToDecimal(value: number, decimal: number): number {\r\n const multiplier = Math.pow(10, decimal);\r\n return Math.round(value * multiplier) / multiplier;\r\n }\r\n\r\n titleForAttribute(attribute: CriteriaSelectObjectAttribute): string {\r\n // Translation moved to implementation to not run the translation \r\n // for many values which don't need it\r\n if (attribute.value === null || attribute.value === undefined) {\r\n return this.translateService.instant('_Not_defined');\r\n } else if (attribute.value === '') {\r\n return this.translateService.instant('_Empty_value');\r\n }\r\n return String(attribute.value);\r\n }\r\n\r\n normalizedValue(attribute: CriteriaSelectObjectAttribute, forFilterCriteria: boolean = false): string {\r\n // Translation moved to implementation to not run the translation \r\n // for many values which don't need it\r\n if (attribute.value === null || attribute.value === undefined) {\r\n return forFilterCriteria ? this.translateService.instant(\"_Not_defined\") : \"...\";\r\n }\r\n\r\n if (attribute.value === '') {\r\n return forFilterCriteria ? this.translateService.instant(\"_Empty_value\") : \"''\";\r\n }\r\n\r\n if (attribute?.control === \"Enumeration\" && attribute.enumValues) {\r\n const result: string = String(attribute.enumValues[Number(attribute.value)]);\r\n return result;\r\n }\r\n\r\n // Handle numeric rounding\r\n if (!forFilterCriteria &&\r\n attribute.type === 'double' &&\r\n attribute.decimal &&\r\n typeof (attribute.value) === 'number') {\r\n const roundedValue = this.roundToDecimal(attribute.value, attribute.decimal);\r\n return String(roundedValue);\r\n }\r\n\r\n if (attribute?.control === \"Checkbox\") {\r\n return (attribute.value === 1) ? \"True\" : \"False\";\r\n }\r\n\r\n // Handle datetime transformation\r\n if (attribute?.type === \"datetime\" && typeof (attribute.value) === 'string') {\r\n return this.datetimePipe.transform(attribute.value);\r\n }\r\n\r\n return String(attribute.value);\r\n }\r\n\r\n handleFilterCriteriumAttributeStateChange(attrib: CriteriaSelectObjectAttribute) {\r\n const index = this.filterCriteria.findIndex(x => x.id === attrib.id);\r\n // FILTER CRITERIA ALREADY EXISTS\r\n if (index >= 0) {\r\n if (attrib.checked === false && attrib.valueChecked === false) {\r\n // REMOVE\r\n // filterCriteria no longer used (left / right checkboxes not checked)\r\n this.filterCriteria.splice(index, 1);\r\n } else {\r\n // UPDATE\r\n // filterCriteria still used, but value should be used (right checkbox checked)\r\n this._updateFilterCriteria(attrib, index);\r\n }\r\n this.filterCriteriaChange.emit(this.filterCriteria);\r\n }\r\n // FILTER CRITERIA DOES NOT EXIST and MAX CRITERIA NOT REACHED\r\n else if (this.filterCriteria.length < MaxFilterCriteria) {\r\n // ADD\r\n this._addFilterCriteria(attrib);\r\n this.filterCriteriaChange.emit(this.filterCriteria);\r\n }\r\n }\r\n\r\n handleObjectStructureNodeSelected(node: ObjectStructureNode) {\r\n this._currentObjectId$.next(node.id);\r\n }\r\n\r\n handleComplexPropertyNodeSelected(node: ComplexPropertiesNode) {\r\n this._currentPropertiesObjectId$.next(node.id);\r\n }\r\n\r\n private _createObjectProperties(objectId: string, revision: number | undefined) {\r\n this._loadObjectProperties(objectId, revision)?.subscribe({\r\n\r\n // properties response is badly structured, nearly impossible to create class structure from it. Therefore using shortcut\r\n // any for json response\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (propertiesData: any) => {\r\n \r\n this.objectAttributeGroups = this._createAttributeGroupsFromResponse(propertiesData);\r\n this._syncAttributeStatesFromCriteria();\r\n },\r\n error: () => {\r\n this.objectAttributeGroups = [];\r\n }\r\n }\r\n )\r\n\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _createAttributeGroupsFromResponse(propertiesData: any) {\r\n\r\n const groups: Array<CriteriaSelectObjectAttributeGroup> = [];\r\n let localizedAttribGroups = null;\r\n if (propertiesData.localizedAttributeGroups) {\r\n localizedAttribGroups = propertiesData.localizedAttributeGroups;\r\n }\r\n\r\n if (!propertiesData.attributes) {\r\n return groups;\r\n }\r\n\r\n const attribGroups = propertiesData.attributes;\r\n for (const [groupName, attribsObject] of Object.entries(attribGroups)) {\r\n\r\n const newGroup: CriteriaSelectObjectAttributeGroup = {\r\n name: groupName,\r\n expanded: false,\r\n attributes: []\r\n };\r\n\r\n if (localizedAttribGroups?.[groupName]) {\r\n newGroup.name = localizedAttribGroups[groupName];\r\n }\r\n\r\n if (!attribsObject) {\r\n continue;\r\n }\r\n\r\n for (const attrib of Object.values(attribsObject)) {\r\n\r\n const newAttrib: CriteriaSelectObjectAttribute = {\r\n id: attrib.id,\r\n name: attrib.name,\r\n description: attrib.description,\r\n value: attrib.value,\r\n isChangeable: attrib.isChangeable,\r\n type: attrib.type,\r\n checked: false,\r\n valueChecked: false,\r\n group: attrib.group,\r\n }\r\n\r\n // Add attribute information which is not always present\r\n if (attrib.control) {\r\n newAttrib.control = attrib.control;\r\n }\r\n if (attrib.defaultValue) {\r\n newAttrib.defaultValue = attrib.defaultValue;\r\n }\r\n if (attrib.unit) {\r\n newAttrib.unit = attrib.unit;\r\n }\r\n if (attrib.decimal) {\r\n newAttrib.decimal = attrib.decimal;\r\n }\r\n if (attrib.enumdefinition) {\r\n newAttrib.enumValues = attrib.enumdefinition;\r\n }\r\n\r\n newGroup.attributes.push(newAttrib);\r\n }\r\n\r\n groups.push(newGroup);\r\n }\r\n\r\n return groups;\r\n }\r\n\r\n private _syncAttributeStatesFromCriteria() {\r\n this.objectAttributeGroups.forEach(group => {\r\n group.attributes.forEach(attrib => {\r\n const criteria = this._filterCriteria.find(x => x.id == attrib.id)\r\n if (criteria) {\r\n attrib.checked = true;\r\n attrib.valueChecked = criteria.value !== undefined;\r\n } else {\r\n attrib.checked = false;\r\n attrib.valueChecked = false;\r\n }\r\n })\r\n })\r\n }\r\n\r\n private _loadObjectProperties(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.get(objectId, revision, \"8\", undefined, false, undefined));\r\n }\r\n\r\n private _loadObjectStructure(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.getTopology(objectId, revision, false, false, undefined));\r\n }\r\n\r\n private _loadObjectComplexPropertiesStructure(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.getComplexPropertiesTopology(objectId, revision));\r\n }\r\n\r\n private _createComplexPropertiestructure(objectId: string, revision: number | undefined) {\r\n this._loadObjectComplexPropertiesStructure(objectId, revision)?.subscribe({\r\n next: (structureData) => {\r\n if (structureData) {\r\n const complexProps = ComplexPropertiesNodeBuilder.createFromResponse(structureData);\r\n if (complexProps?.children?.length) {\r\n this._complexProperties = complexProps;\r\n } else {\r\n this._complexProperties = null;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n private _createObjectStructure(objectId: string, revision: number | undefined) {\r\n this._loadObjectStructure(objectId, revision)?.subscribe({\r\n next: (structureData) => {\r\n if (structureData) {\r\n this._objectStructure = ObjectStructureNodeBuilder.createFromResponse(structureData);\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","<!-- Object structure-->\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object structure\" | translate }}</span\n >\n </lib-expansion-panel-header>\n @if(objectStructure){\n <lib-bimplus-object-structure\n [objectStructure]=\"objectStructure\"\n [hasCheckBox1]=\"false\"\n [hasCheckBox2]=\"false\"\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\n >\n </lib-bimplus-object-structure>\n }\n</lib-expansion-panel>\n<!-- End Object structure-->\n\n<!-- Complex properties-->\n@if(complexProperties){\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object multiproperties tree\" | translate }}</span\n >\n </lib-expansion-panel-header>\n <lib-bimplus-object-complex-properties\n [complexProperties]=\"complexProperties\"\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\n >\n </lib-bimplus-object-complex-properties>\n</lib-expansion-panel>\n}\n<!-- End Complex properties-->\n\n<!-- Properties list-->\n@if(objectAttributeGroups.length > 0){\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object properties\" | translate }}</span\n >\n </lib-expansion-panel-header>\n\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-group-header\">\n {{ attribGroup.name }}\n </span>\n </lib-expansion-panel-header>\n <div>\n @for (attrib of attribGroup.attributes; track attrib) {\n <div class=\"criteria-select-object-properties-attrib-row\">\n <div class=\"criteria-select-object-properties-attrib-row-content\">\n <div\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\n >\n <label\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"attrib.checked\"\n [disabled]=\"\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\n \"\n (click)=\"toggleAttribute(attrib)\"\n (keypress)=\"toggleAttribute(attrib)\"\n />\n <span></span>\n </label>\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\n {{ attrib.name }}\n </div>\n </div>\n <div\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\n >\n <label\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"attrib.valueChecked\"\n [disabled]=\"\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\n \"\n (click)=\"toggleAttributeValue(attrib)\"\n (keypress)=\"toggleAttributeValue(attrib)\"\n />\n <span></span>\n </label>\n <div\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\n title=\"{{ titleForAttribute(attrib) }}\"\n >\n {{ normalizedValue(attrib) }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </lib-expansion-panel>\n }\n</lib-expansion-panel>\n}\n<!-- End Properties list-->\n","import { AfterViewInit, Component, EventEmitter, Input, model, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { FlatNode, TreeNode } from '../../bimplus-flat-tree/bimplus-flat-tree.interface';\r\nimport { BimplusOverlayMessageComponent } from '../../bimplus-overlay-message/bimplus-overlay-message.component';\r\nimport * as WebSdk from 'bimplus-websdk';\r\n\r\ntype TreeNodesLookup = Record<string, TreeNode>;\r\ntype TreeNodeObjectCounts = Record<string, number>;\r\n\r\n@Component({\r\n selector: 'lib-object-filter-result',\r\n imports: [\r\n BimplusFlatTreeComponent,\r\n BimplusOverlayMessageComponent,\r\n ],\r\n templateUrl: './object-filter-result.component.html',\r\n styleUrl: './object-filter-result.component.less'\r\n})\r\nexport class ObjectFilterResultComponent implements AfterViewInit {\r\n\r\n // #region public fields\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n\r\n @Input()\r\n set filterResult(res: WebSdk.ObjectFilterStructureResponse | null) {\r\n this._filterResult = res;\r\n this._updateTreeData();\r\n }\r\n\r\n @Input()\r\n set selectedObjects(selectedObjects: string[]) {\r\n this._selectedObjects = selectedObjects;\r\n this._syncSelectedObjects();\r\n }\r\n\r\n isFilterResultInvalid = model<boolean>(false);\r\n\r\n // User has clicked on close button of overlay message\r\n // Set the invalid filter back to false to remove overlay message\r\n public setFilterResultValid() {\r\n this.isFilterResultInvalid.set(false);\r\n }\r\n\r\n @Input() filterResultInvalidTitle: string = \"\";\r\n @Input() filterResultInvalidText: string = \"\";\r\n\r\n get treeData() {\r\n return this._treeData;\r\n }\r\n\r\n @Output() nodeSelectionChanged = new EventEmitter<string[]>();\r\n @Output() nodeDoubleClicked = new EventEmitter<string>();\r\n @Output() nodeMouseEntered = new EventEmitter<string>();\r\n @Output() nodeMouseLeft = new EventEmitter<string>();\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n ngAfterViewInit(): void {\r\n if (this._treeData && this._treeData.length > 0) {\r\n this._expandToObjectLevel(this._treeData[0]);\r\n }\r\n }\r\n\r\n handleSelectedNodes(nodes: FlatNode[]) {\r\n this.nodeSelectionChanged.emit(nodes.map(x => x.id));\r\n }\r\n\r\n getNodeObjectCounter(id: string) {\r\n return this._treeNodeObjectCounts[id];\r\n }\r\n\r\n dblClickedObjectNode(node: TreeNode) {\r\n this.nodeDoubleClicked.emit(node.id);\r\n }\r\n\r\n mouseEnterObjectNode(node: TreeNode) {\r\n this.nodeMouseEntered.emit(node.id);\r\n }\r\n\r\n mouseLeaveObjectNode(node: TreeNode) {\r\n this.nodeMouseLeft.emit(node.id);\r\n }\r\n\r\n expandToObjectLevel() {\r\n if (this.treeData.length === 0)\r\n return;\r\n\r\n this._expandToObjectLevel(this._treeData[0]);\r\n }\r\n\r\n clearFilterResult() {\r\n this._filterResult = null;\r\n this._treeData = [];\r\n }\r\n // #endregion public methods\r\n\r\n // #region private fields\r\n private _filterResult: WebSdk.ObjectFilterStructureResponse | null = null;\r\n private _treeData: TreeNode[] = [];\r\n private _treeNodesLookup: TreeNodesLookup = {};\r\n private _treeNodeObjectCounts: TreeNodeObjectCounts = {};\r\n private _selectedObjects: string[] = [];\r\n // #endregion private fields\r\n\r\n // #region private methods\r\n private _syncSelectedObjects() {\r\n\r\n const nodes: TreeNode[] = []\r\n\r\n for (const id of this._selectedObjects) {\r\n const treeNode = this._treeNodesLookup[id];\r\n if (treeNode) {\r\n nodes.push(treeNode);\r\n }\r\n }\r\n\r\n this.treeComponent?.reset_selection();\r\n\r\n for (const node of nodes) {\r\n this.treeComponent?.select_node(node.id);\r\n }\r\n\r\n }\r\n\r\n private _updateObjectCounters() {\r\n this._treeNodeObjectCounts = {};\r\n this._countObjects(this.treeData[0]);\r\n }\r\n\r\n private _countObjects(node: TreeNode) {\r\n if (node.nodeType && node.nodeType === \"objectNode\")\r\n return 1;\r\n\r\n let count = 0;\r\n if (!node.children)\r\n return 0;\r\n\r\n for (const child of node.children) {\r\n if (!child)\r\n continue;\r\n\r\n count += this._countObjects(child);\r\n }\r\n\r\n this._treeNodeObjectCounts[node.id] = count;\r\n return count;\r\n }\r\n\r\n private _updateTreeData() {\r\n if (!this._filterResult) {\r\n return;\r\n }\r\n\r\n this._treeNodesLookup = {};\r\n this._treeData = [this._convertFilterResultToTreeNode(this._filterResult.structure, this._treeNodesLookup)];\r\n this._updateObjectCounters();\r\n }\r\n\r\n private _convertFilterResultToTreeNode(node: WebSdk.StructureNode, nodesLookup: TreeNodesLookup | undefined = undefined): TreeNode {\r\n\r\n const treeNode: TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent\r\n };\r\n\r\n if (node.children) {\r\n treeNode.children = [];\r\n for (const child of node.children) {\r\n const childTreeNode = this._convertFilterResultToTreeNode(child, nodesLookup);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n if (!treeNode.parent) {\r\n treeNode.nodeType = \"rootNode\";\r\n } else if (node.type === \"Structure\") {\r\n treeNode.nodeType = \"structureNode\";\r\n } else {\r\n treeNode.nodeType = \"objectNode\"\r\n }\r\n\r\n if (nodesLookup) {\r\n nodesLookup[treeNode.id] = treeNode;\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n private _expandToObjectLevel(node: TreeNode) {\r\n if (node.children) {\r\n for (const child of node.children) {\r\n if (child.nodeType && child.nodeType === \"objectNode\") {\r\n return;\r\n } else {\r\n this._expandToObjectLevel(child);\r\n }\r\n\r\n }\r\n }\r\n\r\n this.treeComponent?.expand_node(node.id);\r\n }\r\n // #endregion private methods\r\n\r\n}\r\n","<lib-bimplus-flat-tree\n paddingIndent=\"1.4rem\"\n [treeData]=\"treeData\"\n enableParentHighlighting=\"false\"\n oneLevelMultiSelect=\"false\"\n multiSelect=\"true\"\n dataTestPrefix=\"object-filter-result-tree-\"\n (selectedNodes)=\"handleSelectedNodes($event)\"\n [customNodeTemplate]=\"objFilterResultNode\"\n></lib-bimplus-flat-tree>\n\n@if(isFilterResultInvalid()){\n<div class=\"message-overlay\">\n <lib-bimplus-overlay-message\n [title]=\"filterResultInvalidTitle\"\n [message]=\"filterResultInvalidText\"\n (close)=\"setFilterResultValid()\"\n >\n </lib-bimplus-overlay-message>\n</div>\n}\n\n<ng-template #objFilterResultNode let-node=\"node\">\n @switch (node.nodeType) { @case (\"rootNode\") {\n <div class=\"object-navigator-filter-result-root-node noselect\">\n {{ node.name }} &nbsp;&#40; {{ getNodeObjectCounter(node.id) }} &#41;\n </div>\n } @case (\"structureNode\") {\n <div class=\"noselect\">\n {{ node.name }} &nbsp;&#40; {{ getNodeObjectCounter(node.id) }} &#41;\n </div>\n } @case (\"objectNode\") {\n <span class=\"noselect\">\n <div\n class=\"noselect\"\n (dblclick)=\"dblClickedObjectNode(node)\"\n (mouseenter)=\"mouseEnterObjectNode(node)\"\n (mouseleave)=\"mouseLeaveObjectNode(node)\"\n >\n {{ node.name }}\n </div>\n </span>\n } }\n</ng-template>\n","import { FilterCriterium } from \"../components/bimplus-object-navigator/bimplus-object-navigator.interface\";\n\nconst DivsionIDSubstring = 'tabAttribElement.DivisionID';\n\nexport class FilterString {\n\n constructor(filterString: string = \"\", maxFilterCriteria: number = 5) {\n this._filterString = filterString;\n this._maxFilterCriteria = maxFilterCriteria;\n }\n\n get filterString() {\n return this._filterString;\n }\n\n private _filterString: string = \"\";\n private _maxFilterCriteria: number = 5;\n\n fromFilterCriteria(criteria: FilterCriterium[]) {\n this._filterString = `[I]${DivsionIDSubstring}`;\n\n for (const criterium of criteria) {\n this._filterString += criterium.subString;\n }\n\n return this._filterString;\n }\n\n getReadableValuesFromFilterCriteria(criteria: FilterCriterium[]): Record<string, string> {\n const readableValues: Record<string, string> = {};\n for (const criterium of criteria) {\n if (criterium.id && criterium.name)\n readableValues[criterium.id] = criterium.name;\n }\n\n return readableValues;\n }\n\n toFilterCriteria(readableValues: Record<string, string> | undefined = undefined): FilterCriterium[] {\n const criteria: FilterCriterium[] = [];\n\n let firstModelIdCriteriaSkipped = false;\n\n const parts = this._filterString.split('[I]');\n for (const part of parts) {\n if (part.length === 0) {\n continue;\n }\n\n if (part.includes(DivsionIDSubstring) && !firstModelIdCriteriaSkipped) {\n firstModelIdCriteriaSkipped = true;\n continue;\n }\n\n criteria.push(this._parseFilterSubstring(part, readableValues));\n if (criteria.length === this._maxFilterCriteria) {\n break;\n }\n }\n\n return criteria;\n }\n\n private _parseFilterSubstring(subString: string, readableValues: Record<string, string> | undefined = undefined): FilterCriterium {\n let name = subString;\n let id: string | undefined = undefined;\n\n const indexOpenBrackets = subString.indexOf('[');\n const indexCloseBrackets = subString.indexOf(']');\n\n if (indexOpenBrackets >= 0 && indexCloseBrackets >= 0 && indexCloseBrackets > indexOpenBrackets) {\n const readableId = subString.slice(indexOpenBrackets + 1, indexCloseBrackets);\n id = readableId;\n if (readableId && readableValues) {\n const readableString = readableValues[readableId];\n if (readableString) {\n name = readableString;\n }\n }\n } else if (subString.includes('.')) {\n const splitted = subString.split('.');\n name = splitted[splitted.length - 1];\n }\n\n return {\n name: name,\n subString: \"[I]\" + subString,\n id: id\n }\n }\n\n}\n","import * as WebSdk from 'bimplus-websdk';\nimport { Observable, concatMap, from, map } from 'rxjs';\n\nexport class FilterStructureFetcher {\n\n static fetchObjectFilterStructureFromSelection(projectId: string, filter: WebSdk.ObjectFilter, selectionObject: WebSdk.ExportObject, api: WebSdk.Api): Observable<WebSdk.ObjectFilterStructureResponse> {\n const isTemporary = !filter.id;\n let filterId = filter.id ? filter.id : \"\";\n\n let observeable: Observable<WebSdk.ObjectFilterStructureResponse> | null = null;\n\n if (!isTemporary) {\n observeable = from(api.exportService.createExportSelection(projectId, JSON.stringify(selectionObject))).pipe(\n concatMap(selectionObj => {\n if (!selectionObj?.id) {\n throw new Error('Failed to create selection object');\n }\n return from(api.objectFilters.getSelectionFilteredObjects(selectionObj.id, filterId, undefined, undefined));\n })\n )\n } else {\n observeable = from(api.objectFilters.post(JSON.stringify(filter), projectId)).pipe(\n concatMap(filterObj => {\n if (!filterObj?.id) {\n throw new Error('Failed to create temporary filter object');\n }\n\n filterId = filterObj.id;\n\n return from(api.exportService.createExportSelection(projectId, JSON.stringify(selectionObject)));\n }),\n concatMap(selectionObj => {\n if (!selectionObj?.id) {\n throw new Error('Failed to create selection object');\n }\n return from(api.objectFilters.getSelectionFilteredObjects(selectionObj.id, filterId, undefined, undefined)).pipe(\n map((filterResult) => {\n api.objectFilters.delete(filterId);\n return filterResult;\n })\n );\n })\n )\n }\n return observeable;\n }\n\n}\n","import { Component, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport * as WebSdk from 'bimplus-websdk';\nimport { BehaviorSubject ,from } from 'rxjs';\nimport { CommonModule} from '@angular/common';\nimport { FilterCriteriaSelectionMode, FilterCriterium, FilterType, MaxFilterCriteria } from './bimplus-object-navigator.interface';\nimport { FilterCriteriumComponent } from './filter-criterium/filter-criterium.component';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\n\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { BimplusSidenavDrawerContentComponent } from '../bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CriteriaSelectObjectPropertiesComponent } from './criteria-select-object-properties/criteria-select-object-properties.component';\nimport { ObjectFilterResultComponent } from './object-filter-result/object-filter-result.component';\nimport { BimplusContextMenuComponent } from '../bimplus-context-menu/bimplus-context-menu.component'\nimport { BimplusContextMenuItem } from '../bimplus-context-menu/bimplus-context-menu.interface';\nimport { FilterString } from '../../utils/filterString';\nimport { FilterStructureFetcher } from '../../utils/filterStructureFetcher';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\n\n@Component({\n selector: 'lib-bimplus-object-navigator',\n imports: [CommonModule,\n FormsModule,\n NgSelectModule,\n FilterCriteriumComponent,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n BimplusSidenavDrawerContentComponent,\n TranslateModule,\n CriteriaSelectObjectPropertiesComponent,\n BimplusContextMenuComponent,\n ObjectFilterResultComponent,\n BimplusScrollableContainerComponent\n ],\n templateUrl: './bimplus-object-navigator.component.html',\n styleUrl: './bimplus-object-navigator.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusObjectNavigatorComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n\n constructor(){\n super()\n }\n\n // #region public fields\n @ViewChild(ObjectFilterResultComponent) objectFilterResult: ObjectFilterResultComponent | null = null;\n\n @Input()\n hideFilterContextMenu: boolean = false;\n\n @Input()\n filterContextMenu: Array<BimplusContextMenuItem> = [];\n\n @Input()\n set filterTypes(types : Array<FilterType>){\n this._filterTypes = types;\n if(this._filterTypes.length >0)\n this.activeFilterType = this._filterTypes[0];\n }\n\n get filterTypes():Array<FilterType>{\n return this._filterTypes;\n }\n\n set activeFilterType(value : FilterType | null){\n this.activeFilterTypeSubject$.next(value);\n }\n\n get activeFilterType() : FilterType | null{\n return this.activeFilterTypeSubject$.getValue();\n }\n\n activeFilterTypeSubject$ = new BehaviorSubject<FilterType | null> (null);\n activeFilterSubject$ = new BehaviorSubject<WebSdk.ObjectFilter | null> (null);\n\n set activeFilter(filter : WebSdk.ObjectFilter | null){\n\n // New active filter is selected. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n\n if(filter && !filter.id){ // Switching to custom filter will restore the default custom filter\n this._setDefaultCustomFilterString(filter);\n }\n\n this.activeFilterSubject$.next(filter);\n }\n\n get activeFilter() : WebSdk.ObjectFilter | null{\n return this.activeFilterSubject$.getValue();\n }\n\n @Input()\n filters : WebSdk.ObjectFiltersResponse | null = null;\n\n filterCriteria : FilterCriterium[] = []\n filterCriteriaChanged : boolean = false;\n maxFilterCriteria: number = MaxFilterCriteria;\n\n @Input()\n api : WebSdk.Api | null = null;\n\n @Input()\n projectId : string = ''\n\n @HostBinding('class.object-navigator') objNavClassClass: boolean = true;\n\n filterCriteriaSelectionMode$ = new BehaviorSubject<FilterCriteriaSelectionMode>(FilterCriteriaSelectionMode.None);\n\n @Output()\n filterCriteriaSelectionModeChanged = new EventEmitter<FilterCriteriaSelectionMode>();\n\n @Input()\n selectedObjectId : string | null = null;\n\n @Input()\n selectedRevision : number | undefined = undefined;\n\n @Input()\n selectedObjects : string[] = [];\n\n @Input()\n selectionObject : WebSdk.ExportObject | null = null;\n\n get filterResult(){\n return this._filterResult;\n }\n\n @Output()\n filterResultObjectSelectionChanged = new EventEmitter<string[]>();\n\n @Output()\n filterResultObjectDoubleClicked = new EventEmitter<string>();\n\n @Output()\n filterResultObjectMouseEntered = new EventEmitter<string>();\n\n @Output()\n filterResultObjectMouseLeft = new EventEmitter<string>();\n\n @Output()\n pipetteActiveStatus = new EventEmitter<boolean>();\n\n FilterCriteriaSelectionMode = FilterCriteriaSelectionMode; // Expose enum to template\n\n public isLoadingResults = false;\n\n public filterResultInvalidated = false;\n // #endregion public fields\n\n // #region private fields\n private _filterResult : WebSdk.ObjectFilterStructureResponse | null = null;\n private _filterTypes : Array<FilterType> = [];\n // #endregion private fields\n\n // #region public methods\n ngOnInit() {\n\n this.activeFilterTypeSubject$.subscribe({\n next: (v) => {\n if(!this.projectId || !this.api || !v){\n return;\n }\n\n if (this._filterResult) {\n // Filter results are available and visibility of model/layer was changed\n // Invalidate filter results => show overlay info dailog\n this.filterResultInvalidated = true;\n }\n\n this.activeFilter = null;\n\n this.loadCurrentLayerFilters(this.projectId, v.id)?.subscribe({\n next: (value) => {\n this.filters = [this._createDefaultCustomFilter(v.id), ...value];\n this.activeFilter = this.filters[0];\n this._applyCustomOrStoredFilter();\n },\n error: err => {throw new Error (err)},\n }\n )}\n });\n\n this.activeFilterSubject$.subscribe({\n next: (v) => {\n if(!v)\n return;\n\n this.filterCriteria = this.parseFilterString(v);\n this._applyCustomOrStoredFilter();\n }\n });\n\n this.filterCriteriaSelectionMode$.subscribe({\n next: (v) => {\n this.filterCriteriaSelectionModeChanged.emit(v)\n }\n })\n\n if( this.filterTypes.length > 0){\n this.activeFilterType = this.filterTypes[0];\n }\n }\n\n loadCurrentLayerFilters(projectId : string, layerId : string){\n if(!this.api){\n return;\n }\n return from(this.api.objectFilters.get(layerId,projectId));\n }\n\n parseFilterString(filter : WebSdk.ObjectFilter){\n const filterString = new FilterString(filter.filterString, this.maxFilterCriteria);\n return filterString.toFilterCriteria(filter.readableValues);\n }\n\n deleteFilterCriterium(index: number){\n this.filterCriteria.splice(index, 1);\n this.filterCriteria = [...this.filterCriteria];\n // Filter criteria was removed. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n this.activateModifiedCustomFilter();\n }\n\n setFilterCriteriaSelectionMode(mode: FilterCriteriaSelectionMode) {\n const isSameMode = this.filterCriteriaSelectionMode$.getValue() === mode;\n this.filterCriteriaSelectionMode$.next(isSameMode ? FilterCriteriaSelectionMode.None : mode);\n this.handlePipetteActiveStatus(!isSameMode);\n }\n \n applyFilterDisabled() : boolean {\n // Apply filter button should be disabled when no filter criteria are selected\n // or filter criteria was already applied and no new criteria was selected\n return this.filterCriteria.length === 0 || ! this.filterCriteriaChanged;\n }\n\n applyFilter(){\n this.handlePipetteActiveStatus(false /* disable pipette cursor */);\n this.filterCriteriaSelectionMode$.next(FilterCriteriaSelectionMode.None);\n this._filterResult = null;\n // Filter results will be updated again, so they are no longer invalid\n this.filterResultInvalidated = false;\n\n // Custom filter is selected\n if(this.activeFilter && !this.activeFilter.id){\n this.activeFilter.filterString = new FilterString().fromFilterCriteria(this.filterCriteria);\n }\n\n if(this.selectionObject){\n this._applySelectionObjectFilter(this.activeFilter);\n }\n }\n\n handleFilterResultSelectionChanged(selection : string[]){\n this.filterResultObjectSelectionChanged.emit(selection);\n }\n\n handleFilterResultObjectDoubleClicked(selection : string){\n this.filterResultObjectDoubleClicked.emit(selection);\n }\n\n handleFilterResultObjectMouseEntered(selection : string){\n this.filterResultObjectMouseEntered.emit(selection);\n }\n\n handleFilterResultObjectMouseLeft(selection : string){\n this.filterResultObjectMouseLeft.emit(selection);\n }\n\n handlePipetteActiveStatus(status: boolean) {\n this.pipetteActiveStatus.emit(status);\n }\n\n filterCriteriaWasChanged(/*filterCriteria: FilterCriterium[]*/) {\n // Some new filter criteria was selected. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n }\n\n activateModifiedCustomFilter(){\n // When existing filter is changed, Custom filter will be selected and filter settings need to be cloned. Nothing is done when custom filter is already active\n if(this.activeFilter?.id && this.filters){\n\n // Copy filter string from current criteria settings to custom filter\n this.filters[0].filterString = new FilterString().fromFilterCriteria(this.filterCriteria);\n this.filters[0].readableValues = new FilterString().getReadableValuesFromFilterCriteria(this.filterCriteria);\n\n this.activeFilterSubject$.next(this.filters[0]);\n }\n }\n // #endregion public methods\n\n // #region private methods\n private _applySelectionObjectFilter(activeFilter : WebSdk.ObjectFilter | null){\n\n if(!this.api || !this.selectionObject || !activeFilter){\n return;\n }\n\n this.selectionObject.singleUse = true;\n this.selectionObject.selection.singleuse = true;\n\n this.isLoadingResults = true;\n\n FilterStructureFetcher.fetchObjectFilterStructureFromSelection(this.projectId, activeFilter, this.selectionObject, this.api).subscribe({\n next: (filterResult) => {\n this._filterResult = filterResult;\n this.isLoadingResults = false;\n // Fetching new results finished. Apply filter button should be disabled\n this.filterCriteriaChanged = false;\n }\n });\n }\n\n private _setDefaultCustomFilterString(filter: WebSdk.ObjectFilter){\n const typeAttribId = \"a0e8ae2c-c869-4ec3-9019-25d3704be707\";\n filter.filterString = `[I][${typeAttribId}].Value`;\n filter.readableValues = {};\n filter.readableValues[typeAttribId] = \"Type\"; // Provide readable criterium name for type\n }\n\n private _createDefaultCustomFilter(disciplineID: string) : WebSdk.ObjectFilter{\n\n const filter = {\n module: \"00000000-0000-0000-0000-000000000000\",\n category: \"\",\n disciplineID: disciplineID,\n name: \"Custom filter\",\n filterString: \"\",\n isDefault: false,\n disableSortByModels: false,\n }\n\n this._setDefaultCustomFilterString(filter);\n return filter;\n }\n\n private _applyCustomOrStoredFilter() {\n if(this.activeFilter && this.activeFilter.id){\n // Stored filter is selected. Results must be applied automatically.\n this.applyFilter();\n } else {\n // Custom filter is selected. Properties of selected object must be shown again.\n if (this.selectedObjectId) {\n this.setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties);\n } else {\n this.objectFilterResult?.clearFilterResult();\n }\n }\n }\n // #endregion private methods\n\n}\n","<lib-bimplus-sidenav-drawer-content [header]=\"'_Object navigator' | translate\"\n [isLoading]=\"isLoadingResults\"\n [loadingSpinnerText]=\"'_Loading_Filter_Results' | translate\"\n>\n <div class=\"object-navigator-content-container\">\n @if(filterTypes.length > 0){\n <div class=\"description\">\n {{\"_Select_an_object_using_Object_Picker\" | translate}}\n </div>\n <div class=\"object-navigator-filters-type\">\n <ng-select data-test=\"object-navigator-filter-types-dropdown\" class=\"object-navigator-dropdown\" [(ngModel)]=\"activeFilterType\" [clearable]=\"false\" [searchable]=\"false\">\n <ng-option *ngFor=\"let type of filterTypes\" [value]=\"type\">{{type.name}}</ng-option>\n </ng-select>\n </div>\n <div class=\"object-navigator-filters-name\">\n <ng-select data-test=\"object-navigator-filters-name-dropdown\" class=\"object-navigator-dropdown\" [(ngModel)]=\"activeFilter\" [clearable]=\"false\" [disabled]=\"!filters\" [searchable]=\"false\">\n <ng-option *ngFor=\"let filter of filters\" [value]=\"filter\">{{filter.name}}</ng-option>\n </ng-select>\n\n @if(!hideFilterContextMenu){\n <lib-bimplus-context-menu class=\"object-navigator-filters-name-context-menu\"\n [items]=\"filterContextMenu\"\n *ngIf=\"filterContextMenu?.length\"\n >\n </lib-bimplus-context-menu>\n }\n\n </div>\n\n <lib-expansion-panel class=\"object-navigator-filter-criteria-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-navigator-filter-criteria-header\">\n {{ \"_Assign_Objects_Selection_Mode\" | translate }} &#40;{{ filterCriteria.length }}/{{ maxFilterCriteria }}&#41;\n </span>\n <lib-expansion-panel-header-actions>\n <div class=\"object-navigator-pick-object-button\"\n [ngClass]=\"filterCriteriaSelectionMode$.getValue() === FilterCriteriaSelectionMode.SelectObjectProperties? 'active' : ''\"\n (click)=\"setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties)\"\n (keypress)=\"setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties)\"\n [title]=\"'_Object_Picker'| translate\"\n ></div>\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <div class=\"filter-criteria-container\">\n @for (criterium of filterCriteria; track criterium; let i = $index) {\n <app-filter-criterium\n [criterium] = \"criterium\"\n [indent]=\"i*0.8\"\n (deleteCriterium)=\"deleteFilterCriterium(i)\"\n ></app-filter-criterium>\n }\n </div>\n </lib-expansion-panel>\n\n @switch(filterCriteriaSelectionMode$.getValue()){\n @case(FilterCriteriaSelectionMode.SelectObjectProperties){\n @if(!selectedObjectId){\n <p id=\"NoObjectSelected\">{{ \"_NoObjectSelected\" | translate}}</p>\n }\n }\n }\n\n <div class=\"object-navigator-apply-button-row\">\n <button class=\"primary-button\" \n [class.disabled]=\"applyFilterDisabled()\"\n [disabled]=\"applyFilterDisabled()\"\n (click)=\"applyFilter()\"\n > \n {{\"_Apply filter\" | translate}}\n </button>\n </div>\n\n <div class=\"object-navigator-separator\"></div>\n\n @switch(filterCriteriaSelectionMode$.getValue()){\n @case(FilterCriteriaSelectionMode.SelectObjectProperties){\n @if(selectedObjectId){\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n <lib-criteria-select-object-properties\n [api]=\"api\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [(filterCriteria)]=\"filterCriteria\"\n [rootObjectId]=\"selectedObjectId\"\n [revision]=\"selectedRevision\"\n (filterCriteriaChange)=\"filterCriteriaWasChanged()\"\n >\n </lib-criteria-select-object-properties>\n </lib-bimplus-scrollable-container>\n </div>\n }\n }\n @case(FilterCriteriaSelectionMode.SelectAttributes){\n\n }\n @default{\n @if (filterResult) {\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n <lib-object-filter-result\n [filterResult]=\"filterResult\"\n [selectedObjects]=\"selectedObjects\"\n [isFilterResultInvalid]=\"filterResultInvalidated\"\n [filterResultInvalidTitle]=\"'Result_is_Invalid' | translate\"\n [filterResultInvalidText]=\"'Selection_in_Project_navigator_has_changed' | translate\"\n (nodeSelectionChanged)=\"handleFilterResultSelectionChanged($event)\"\n (nodeDoubleClicked)=\"handleFilterResultObjectDoubleClicked($event)\"\n (nodeMouseEntered)=\"handleFilterResultObjectMouseEntered($event)\"\n (nodeMouseLeft)=\"handleFilterResultObjectMouseLeft($event)\"\n ></lib-object-filter-result>\n </lib-bimplus-scrollable-container>\n </div>\n }\n }\n }\n }\n @else {\n <div data-test=\"object-navigator-no-filter-types-message\" class=\"object-navigator-no-filter-types\"> {{\"_No_visible_models_found\" | translate}} </div>\n }\n </div>\n</lib-bimplus-sidenav-drawer-content>\n","import { Component, ViewEncapsulation, Input, EventEmitter, Output, ElementRef, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClickOutsideDirective } from '../../directives/click-outside/click-outside.directive';\nimport { TooltipMessageData, TooltipMessagePosition } from './bimplus-tooltip-message.interface'\n@Component({\n selector: 'lib-bimplus-tooltip-message',\n imports: [CommonModule, ClickOutsideDirective],\n templateUrl: './bimplus-tooltip-message.component.html',\n styleUrl: './bimplus-tooltip-message.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusTooltipMessageComponent implements OnChanges {\n private el = inject(ElementRef);\n\n private _element: HTMLElement;\n constructor() {\n this._element = this.el.nativeElement.shadowRoot;\n }\n\n // Getter for _element\n public get element(): HTMLElement {\n return this._element;\n }\n\n @Input() messagePosition: TooltipMessagePosition = {\n posX: 0,\n posY: 0,\n };\n\n @Input() messageData: TooltipMessageData = {};\n\n @Input() messageVisibility: boolean = false;\n @Output() messageVisibilityChange = new EventEmitter<boolean>();\n\n protected _clickOutside() {\n this.messageVisibility = false;\n this.messageVisibilityChange.emit(this.messageVisibility)\n }\n\n //<<Calculation of the correct position of the tooltip\n private _resizeObserver!: ResizeObserver;\n protected _messageParentElement!: ElementRef;\n\n protected _parentWidth: number = 0;\n protected _parentHeight: number = 0;\n\n get messageParent(): ElementRef {\n return this._messageParentElement;\n }\n\n @Input() set messageParent(element: ElementRef) {\n this._messageParentElement = element;\n if(!this._messageParentElement) {\n return;\n }\n\n this._resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._parentWidth = width;\n this._parentHeight = height; \n }\n });\n\n this._resizeObserver.observe(this._messageParentElement.nativeElement);\n }\n\n tooltipRectangleIsOutOfParentRectangleX(tooltipRectangle: DOMRect, parentRectangle: DOMRect): boolean {\n return (tooltipRectangle.x + tooltipRectangle.width - parentRectangle.x - parentRectangle.width) > 0;\n }\n tooltipRectangleIsOutOfParentRectangleY(tooltipRectangle: DOMRect, parentRectangle: DOMRect): boolean {\n return (tooltipRectangle.y + tooltipRectangle.height - parentRectangle.y - parentRectangle.height) > 0;\n }\n\n correctTooltipPositionX(oldPosX: number, flippedX: boolean, oldPosY: number, flippedY: boolean): void {\n if(!this._messageParentElement) {\n return;\n }\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(Math.abs(_tooltipRectangle.x + _tooltipRectangle.width - oldPosX - _parentRectangle.left) > 3) {\n this.messagePosition.posX = this.messagePosition.posX + oldPosX - (_tooltipRectangle.x + _tooltipRectangle.width);\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(flippedY && Math.abs(_tooltipRectangle.y + _tooltipRectangle.height - oldPosY - _parentRectangle.top) > 3) {\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(this.tooltipRectangleIsOutOfParentRectangleY(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posY = this.messagePosition.posY - _tooltipRectangle.height;\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, true);\n }, 0);\n }\n }\n\n correctTooltipPositionY(oldPosX: number, flippedX: boolean, oldPosY: number, flippedY: boolean): void {\n if(!this._messageParentElement) {\n return;\n }\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(Math.abs(_tooltipRectangle.y + _tooltipRectangle.height - oldPosY - _parentRectangle.top) > 3) {\n this.messagePosition.posY = this.messagePosition.posY + oldPosY - (_tooltipRectangle.y + _tooltipRectangle.height);\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(flippedX && Math.abs(_tooltipRectangle.x + _tooltipRectangle.width - oldPosX - _parentRectangle.left) > 3) {\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(this.tooltipRectangleIsOutOfParentRectangleX(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posX = this.messagePosition.posX - _tooltipRectangle.width;\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, true, oldPosY, flippedY);\n }, 0);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['messageVisibility']) {\n if(!changes['messageVisibility'].currentValue) {\n return;\n }\n setTimeout(() => {\n if(!this._messageParentElement) {\n return;\n }\n const _oldPosX = this.messagePosition.posX;\n const _oldPosY = this.messagePosition.posY;\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(this.tooltipRectangleIsOutOfParentRectangleX(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posX = this.messagePosition.posX - _tooltipRectangle.width;\n setTimeout(() => {\n this.correctTooltipPositionX(_oldPosX, true, _oldPosY, false);\n }, 0);\n } else if(this.tooltipRectangleIsOutOfParentRectangleY(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posY = this.messagePosition.posY - _tooltipRectangle.height;\n setTimeout(() => {\n this.correctTooltipPositionY(_oldPosX, false, _oldPosY, true);\n }, 0);\n }\n }, 0);\n }\n }\n //Calculation of the correct position of the tooltip>>\n}\n","<div *ngIf=\"messageVisibility\"\n class=\"tooltip-message\"\n libClickOutside\n (clickOutside)=\"_clickOutside()\"\n [ngStyle]=\"{\n 'top.px': messagePosition.posY\n , 'left.px': messagePosition.posX\n }\"\n>\n <ng-content select=\".tooltip-message-title-content\"></ng-content>\n <div\n class=\"tooltip-message-title\"\n *ngIf=\"messageData && messageData.title\"\n >\n {{messageData.title}}\n </div>\n\n <ng-content select=\".tooltip-message-messages-content\"></ng-content>\n <div\n class=\"tooltip-message-messages\"\n *ngIf=\"messageData && messageData.messages\"\n >\n <ng-container *ngFor=\"let message of messageData.messages\">\n <ng-container *ngIf=\"message.separatingLine\">\n <div class=\"separating-line\"></div>\n </ng-container>\n <div class=\"tooltip-message-message\">\n <span\n *ngIf=\"message.label\"\n class=\"label\"\n [class.failed]=\"message.type==='failed'\"\n [class.success]=\"message.type==='success'\"\n >\n {{message.label}}\n </span>\n <span\n *ngIf=\"message.value\"\n class=\"value\"\n >\n <ng-container *ngIf=\"message.label\">:</ng-container>\n {{message.value}}\n </span>\n </div>\n </ng-container>\n </div>\n \n <ng-content select=\".tooltip-message-footer-content\"></ng-content>\n <div\n class=\"tooltip-message-footer\"\n *ngIf=\"messageData && messageData.footer\"\n >\n {{messageData.footer}}\n </div>\n</div>\n","import { Injectable } from '@angular/core';\r\nimport { LocalizedStrings } from './../types/types'\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LanguageStringsService {\r\n\r\n // #region public fields\r\n set languageFilesUri(uri : string){\r\n this._languageFilesUri = uri;\r\n }\r\n private readonly defaultLang: string = 'en';\r\n currentLanguage$ = new BehaviorSubject<string> (this.defaultLang);\r\n currentLanguageStrings$ = new BehaviorSubject<LocalizedStrings>({});\r\n\r\n get currentLanguage() : string {\r\n return this.currentLanguage$.getValue();\r\n }\r\n\r\n set currentLanguageStrings(langStrings : LocalizedStrings){\r\n this.currentLanguageStrings$.next(langStrings);\r\n }\r\n\r\n get currentLanguageStrings() : LocalizedStrings {\r\n return this.currentLanguageStrings$.getValue();\r\n }\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n async setCurrentLanguage(lang : string){\r\n this.currentLanguage$.next(lang);\r\n await this.fetchLanguageStrings(lang); \r\n }\r\n\r\n extractLocalizedStrings(stringIds : Array<string>) : LocalizedStrings {\r\n const obj : LocalizedStrings = {};\r\n for (const [key, value] of Object.entries(this.currentLanguageStrings)) {\r\n if(typeof value == 'string' && stringIds.find(x=>x === key)){\r\n obj[key] = value;\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n async fetchLanguageStrings(lang : string){\r\n const data = await fetch(`${this._languageFilesUri}/strings_${lang}.json`);\r\n console.log(`Language strings loaded from: ${this._languageFilesUri}/strings_${lang}.json`);\r\n console.log(data);\r\n const dataJSON = await data.json();\r\n // add missing translations from default language translations\r\n if (lang !== this.defaultLang) {\r\n const fallbackData = await fetch(`${this._languageFilesUri}/strings_en.json`);\r\n const fallbackDataJSON = await fallbackData?.json?.();\r\n const fallbackDataJSONIndexes = fallbackDataJSON && Object.keys(fallbackDataJSON);\r\n if (fallbackDataJSONIndexes?.length) {\r\n for (const index in fallbackDataJSONIndexes) {\r\n const indexName = fallbackDataJSONIndexes[index];\r\n dataJSON[indexName] ??= fallbackDataJSON[indexName];\r\n }\r\n }\r\n }\r\n this.currentLanguageStrings$.next(dataJSON); \r\n }\r\n // #endregion public methods\r\n\r\n // #region private fields \r\n private _languageFilesUri : string = \"/assets\"\r\n // #endregion private fields\r\n}\r\n","import { Injectable } from '@angular/core';\n\nexport enum CursorType {\n Pick = 'cursor-pick',\n Hide = 'cursor-hide',\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class CursorsService {\n\n // #region private fields\n private _cursorElement: HTMLElement | null = null;\n // #endregion private fields\n\n // #region private methods\n private getCursorElement(): HTMLElement | null {\n if (this._cursorElement) {\n return this._cursorElement;\n } else {\n return this.getMainViewportContainer();\n }\n }\n private getMainViewportContainer() : HTMLElement | null {\n const mainViewportContainer = document.getElementById('mainViewportContainer');\n if (!mainViewportContainer) {\n console.log(\"mainViewportContainer not found\");\n }\n return mainViewportContainer;\n }\n\n private addCursor(cursorType: CursorType) {\n this.getCursorElement()?.classList.add(cursorType);\n }\n\n private removeCursor(cursorType: CursorType) {\n this.getCursorElement()?.classList.remove(cursorType);\n }\n // #endregion\n\n\n // #region public methods\n setCursorElement(cursorElement: HTMLElement | null) {\n this._cursorElement = cursorElement;\n }\n\n showPickCursor(show: boolean) {\n if (show) {\n this.addCursor(CursorType.Pick)\n } else {\n this.removeCursor(CursorType.Pick);\n }\n }\n\n showHideCursor(show: boolean) {\n if (show) {\n this.addCursor(CursorType.Hide)\n } else {\n this.removeCursor(CursorType.Hide);\n }\n }\n // #endregion\n}\n","import { Directive, ElementRef, HostListener, Input, Renderer2, inject } from '@angular/core';\n\n@Directive({\n selector: '[libDraggableComponent]',\n standalone: true\n})\nexport class ComponentDraggableDirective {\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n\n private _isDraggingActive = false;\n private _isDragging = false;\n\n startX: number = 0;\n startY: number = 0;\n\n constructor() {\n if (!this._isDraggingActive) return;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n this.renderer.setStyle(this.el.nativeElement, 'user-drag', 'none');\n }\n\n @Input() set libDraggableComponent(condition: boolean) {\n const element = this.el.nativeElement;\n this._isDraggingActive = condition;\n if (condition) {\n this.renderer.setStyle(element, 'cursor', 'grab');\n this.renderer.setStyle(element, 'user-drag', 'none');\n } else {\n this.renderer.setStyle(element, 'cursor', 'unset');\n this.renderer.setStyle(element, 'user-drag', 'auto');\n }\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent) {\n if (!this._isDraggingActive) return;\n this.startX = event.clientX;\n this.startY = event.clientY;\n this._isDragging = true;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grabbing');\n event.preventDefault();\n }\n\n @HostListener('document:mouseup')\n onMouseUp() {\n if (!this._isDraggingActive) return;\n if (this._isDragging) {\n this._isDragging = false;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n }\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this._isDraggingActive) return;\n\n if (this._isDragging) {\n const newX = this.startX - event.clientX;\n const newY = this.startY - event.clientY;\n\n this.startX = event.clientX;\n this.startY = event.clientY;\n\n const top = this.el.nativeElement.offsetTop - newY;\n const left = this.el.nativeElement.offsetLeft - newX;\n\n this.renderer.setStyle(this.el.nativeElement, 'position', 'absolute');\n this.renderer.setStyle(this.el.nativeElement, 'left', `${left}px`);\n this.renderer.setStyle(this.el.nativeElement, 'top', `${top}px`);\n }\n }\n\n\n /* touch mode */\n @HostListener('touchstart', ['$event']) //corresponding to mousedown\n onTouchStart(event: TouchEvent) {\n if (!this._isDraggingActive) return;\n this.startX = event.targetTouches[0].pageX;\n this.startY = event.targetTouches[0].pageY;\n this._isDragging = true;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grabbing');\n }\n\n @HostListener('document:touchmove', ['$event']) //corresponding to mousemove\n onTouchMove(event: TouchEvent) {\n if (!this._isDraggingActive) return;\n\n if (this._isDragging) {\n const newX = this.startX - event.targetTouches[0].pageX;\n const newY = this.startY - event.targetTouches[0].pageY;\n\n this.startX = event.targetTouches[0].pageX;\n this.startY = event.targetTouches[0].pageY;\n\n const top = this.el.nativeElement.offsetTop - newY;\n const left = this.el.nativeElement.offsetLeft - newX;\n\n this.renderer.setStyle(this.el.nativeElement, 'position', 'absolute');\n this.renderer.setStyle(this.el.nativeElement, 'left', `${left}px`);\n this.renderer.setStyle(this.el.nativeElement, 'top', `${top}px`);\n }\n }\n\n @HostListener('document:touchend', ['$event']) //corresponding to mouseup\n onTouchEnd() {\n if (!this._isDraggingActive) return;\n if (this._isDragging) {\n this._isDragging = false;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n }\n }\n\n}\n","import { AfterContentInit, ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { IDialogOptions } from './bimplus-general-dialog-config-settings';\nimport { ComponentDraggableDirective } from '../../directives/component-draggable/componentsDraggable.directive';\nimport { CommonModule } from '@angular/common';\nimport { DialogService } from './bimplus-general-overlay-dialog.service';\n\n@Component({\n selector: 'app-general-overlay-dialog',\n imports: [ComponentDraggableDirective, CommonModule],\n templateUrl: './bimplus-general-overlay-dialog.component.html',\n styleUrls: ['./bimplus-general-overlay-dialog.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimportalGeneralOverlayDialogComponent implements OnInit, AfterContentInit {\n private readonly dialogService = inject(DialogService);\n private readonly cdref = inject(ChangeDetectorRef);\n\n\n @ViewChild('dialogRefContainer') genDialogRefContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('dialogOverlay') dialogOverlay!: ElementRef<HTMLDivElement>;\n\n options: IDialogOptions | undefined;\n units: string = 'rem';\n\n ngOnInit(): void {\n this.options = this.dialogService.options;\n }\n\n onClose() {\n this.dialogService.close();\n }\n\n ngAfterContentInit() {\n if (this.options) {\n this.cdref.detectChanges();\n this.setOptions();\n }\n }\n\n setOptions() {\n if (this.options) {\n this.setDimensions();\n this.setPosition();\n this.setOverlay();\n }\n }\n\n private setDimensions() {\n const width = this.options?.width && this.options.width.length > 0 ? this.options.width : 'auto';\n const height = this.options?.height && this.options.height.length > 0 ? this.options.height : 'auto';\n this.genDialogRefContainer.nativeElement.style.width = width;\n this.genDialogRefContainer.nativeElement.style.height = height;\n }\n\n private setPosition() {\n if (this.options?.position === 'middle') {\n this.setPositionsMiddle();\n } else if (this.options?.position === 'unset') {\n this.setPositionsUnset();\n }\n }\n\n setPositionsUnset() {\n if (this.options) {\n this.genDialogRefContainer.nativeElement.style.position = 'fixed';\n const top = this.options?.positionOptions?.top ?? '0' + this.units;\n const bottom = this.options?.positionOptions?.bottom ?? '0' + this.units;\n const left = this.options?.positionOptions?.left ?? '0' + this.units;\n const right = this.options?.positionOptions?.right ?? '0' + this.units;\n\n this.genDialogRefContainer.nativeElement.style.position = 'absolute';\n this.genDialogRefContainer.nativeElement.style.top = top;\n this.genDialogRefContainer.nativeElement.style.left = left;\n this.genDialogRefContainer.nativeElement.style.bottom = bottom;\n this.genDialogRefContainer.nativeElement.style.right = right;\n\n this.options.overlayVisibilityEnabled = this.options.overlayVisibilityEnabled ? this.options.overlayVisibilityEnabled : false;\n this.options.overlayClickEnabled = this.options.overlayVisibilityEnabled && this.options.overlayClickEnabled ? this.options.overlayClickEnabled : false;\n }\n }\n\n setPositionsMiddle() {\n if (this.options) {\n this.genDialogRefContainer.nativeElement.className = this.genDialogRefContainer.nativeElement.className + ' middle';\n this.options.draggable = false;\n this.options.overlayVisibilityEnabled = this.options.overlayVisibilityEnabled ? this.options.overlayVisibilityEnabled : true;\n this.options.overlayClickEnabled = this.options.overlayVisibilityEnabled && this.options.overlayClickEnabled ? this.options.overlayClickEnabled : false;\n }\n }\n\n private setOverlay() {\n if (this.options?.overlayVisibilityEnabled) {\n this.dialogOverlay.nativeElement.style.backgroundColor = 'var(--modal-fade-in-background-color)';\n }\n }\n\n onKeyPress(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n if (this.options?.overlayClickEnabled) {\n this.dialogService.close();\n }\n }\n }\n\n}\n\n\n","<div class=\"general-dialog-wrapper\" #generalDialogWrapper *ngIf=\"options\">\n <section class=\"general-dialog-content\" #dialogRefContainer\n [libDraggableComponent]=\"options.draggable ? true : false\">\n <ng-content></ng-content>\n </section>\n <div class=\"general-dialog-overlay\" #dialogOverlay (click)=\"onClose()\" (keypress)=\"onKeyPress($event)\"\n [style.display]=\"options.overlayVisibilityEnabled ? 'block' : 'none'\">\n </div>\n</div>\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable, Type, inject } from '@angular/core';\nimport { IDialogInputData, IDialogOptions } from './bimplus-general-dialog-config-settings';\nimport { Subject } from 'rxjs';\nimport { BimportalGeneralOverlayDialogComponent } from './bimplus-general-overlay-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n\n\n generalDialogComponentBody!: ComponentRef<unknown>; //here will be rendered every component we call inside general dialog\n generalDialog!: ComponentRef<BimportalGeneralOverlayDialogComponent>; //here will be rendered every component we call inside general dialog\n private _isDialogOpen = false;\n\n inputData: unknown;\n private readonly outputData = new Subject<unknown>();\n\n options: IDialogOptions | undefined;\n\n open(componentBody: Type<unknown>, data: IDialogInputData) { //todo pass data to second component\n if (data?.options) {\n this.initializeSettings(data);\n this.createComponentsRef(componentBody); //componentBody is component which is added inside to general dialog and rendered\n }\n }\n\n initializeSettings(data: IDialogInputData) {\n try {\n this.inputData = data?.data;\n this.options = data.options;\n } catch (e) {\n console.log('Missing data in open method', e);\n }\n\n }\n\n createComponentsRef(componentBody: Type<unknown>) {\n this.generalDialogComponentBody = createComponent(componentBody, {\n environmentInjector: this.injector,\n });\n\n this.generalDialog = createComponent(BimportalGeneralOverlayDialogComponent, {\n environmentInjector: this.injector,\n projectableNodes: [[this.generalDialogComponentBody.location.nativeElement]],\n });\n\n document.body.appendChild(this.generalDialog.location.nativeElement);\n\n this.appRef.attachView(this.generalDialogComponentBody.hostView); //first render body of general dialog, it can be any component we create\n this.appRef.attachView(this.generalDialog.hostView); //then render body of general dialog, which we can add in any component, can have different content\n this._isDialogOpen = true;\n }\n\n close(outputData?: unknown) {\n if (outputData) {\n this.setOutputData(outputData);\n } else {\n this.resetSettings();\n }\n this.generalDialogComponentBody.location.nativeElement.remove();\n this.generalDialog.location.nativeElement.remove();\n this._isDialogOpen = false;\n }\n\n resetSettings() {\n this.inputData = null;\n this.options = undefined;\n }\n\n isDialogOpened() {\n return this._isDialogOpen;\n }\n\n setOutputData(data: unknown): void {\n if (this._isDialogOpen) {\n this.outputData.next(data);\n }\n }\n\n getOutputData(): Subject<unknown> {\n return this.outputData;\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, Input, TemplateRef, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\n\nexport interface WarningDialogInputData {\n title: string;\n message: string;\n buttonsRef?: TemplateRef<unknown>;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-warning',\n imports: [CommonModule, TranslateModule, BimplusButtonsRowComponent],\n templateUrl: './bimplus-overlay-dialog-warning.component.html',\n styleUrls: ['./bimplus-overlay-dialog-warning.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogWarningComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n private _title: string = '';\n private _message: string = '';\n private readonly _data: WarningDialogInputData | undefined;\n protected readonly buttonsRef: TemplateRef<unknown> | null = null;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: \"warningDialogAcceptButton\",\n title: this.translateService.instant('_Ok'),\n tooltip: this.translateService.instant('_Ok'),\n disabled: false,\n buttonStyle: 'primary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this._data = this.dialogService.inputData as WarningDialogInputData;\n this.buttonsRef = this._data?.buttonsRef ?? null;\n this._title = this._data?.title || '';\n this._message = this._data?.message || '';\n }\n\n close() {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n buttonRowButtonClicked(): void {\n this.close();\n\n this.acceptCallback?.();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\"></div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{ title }}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div\n class=\"overlay-dialog-container_content_msg\"\n [innerHTML]=\"this.message\"\n ></div>\n <section class=\"overlay-dialog-container_content_buttons\">\n @if(buttonsRef) {\n <ng-container\n *ngTemplateOutlet=\"buttonsRef; context: { close: close.bind(this) }\"\n ></ng-container>\n } @else {\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked()\"\n />\n </div>\n }\n </section>\n </div>\n</div>\n","import { Component, ViewEncapsulation, Input, OnInit, OnDestroy, HostListener } from '@angular/core';\nimport { XDraggableDirective } from '../../directives/x-draggable.directive';\nimport { PxsuffixPipe } from '../../pipes/pxsuffix.pipe';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-resizable-panel',\n imports: [CommonModule, XDraggableDirective, PxsuffixPipe],\n templateUrl: './resizable-panel.component.html',\n styleUrl: './resizable-panel.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ResizablePanelComponent implements OnInit, OnDestroy {\n @Input() position: 'left' | 'right' = 'right';\n @Input() hasDraggableHandle: boolean = false;\n @Input() hasDraggableBorder: boolean = false;\n @Input() minWidth: number | (() => number) | undefined = 350;\n @Input() maxWidth: number | (() => number) | undefined;\n @Input() defaultWidth: number = 350;\n // Function to determine if resizing is allowed\n @Input() canResize: (currentWidth: number, deltaX: number) => boolean = () => true;\n\n drawerWidth: number = this.defaultWidth;\n drawerExpanded: boolean = true;\n\n ngOnInit() {\n this.drawerWidth = this.defaultWidth;\n window.addEventListener('resize', this.handleWindowResize);\n }\n\n ngOnDestroy() {\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n applyWidthConstraints() {\n const minWidth = typeof this.minWidth === 'function' ? this.minWidth() : this.minWidth;\n const maxWidth = typeof this.maxWidth === 'function' ? this.maxWidth() : this.maxWidth;\n\n if (minWidth && this.drawerWidth < minWidth) {\n this.drawerWidth = minWidth;\n } else if (maxWidth && this.drawerWidth > maxWidth) {\n this.drawerWidth = maxWidth;\n }\n }\n\n @HostListener('window:resize')\n handleWindowResize = (): void => {\n this.applyWidthConstraints();\n };\n\n _toggleDrawer() {\n this.drawerExpanded = !this.drawerExpanded;\n if (!this.drawerExpanded) {\n return;\n }\n\n this.applyWidthConstraints();\n }\n\n _onResizeWidth(event: number): void {\n const deltaX = event;\n\n let newWidth = this.drawerWidth;\n if (this.position === 'left') {\n newWidth += deltaX;\n } else if (this.position === 'right') {\n newWidth -= deltaX;\n }\n\n if (this.canResize?.(this.drawerWidth, deltaX) !== false) {\n this.drawerWidth = newWidth;\n\n this.applyWidthConstraints();\n }\n }\n}\n","<div\n class=\"resizable-panel-drawer\"\n [style.width] = \"drawerWidth | pxsuffix\"\n [ngClass]=\"drawerExpanded ? '' : 'hidden'\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n>\n <slot></slot>\n @if (drawerExpanded) {\n @if (hasDraggableBorder) {\n <div\n xDraggable\n class=\"resizable-panel-resize-border\"\n (dragging)=\"_onResizeWidth($event)\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n @if (hasDraggableHandle) {\n <div\n xDraggable\n class=\"resizable-panel-resize-handle\"\n (dragging)=\"_onResizeWidth($event)\"\n (clicked)=\"_toggleDrawer()\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n }\n</div>\n@if (!drawerExpanded) {\n @if (hasDraggableHandle) {\n <div\n class=\"resizable-panel-resize-handle collapsed\"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostListener, Input, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-link-tooltip-message',\n templateUrl: './bimplus-link-tooltip-message.component.html',\n styleUrls: ['./bimplus-link-tooltip-message.component.less'],\n imports: [CommonModule],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusLinkTooltipMessageComponent implements AfterViewInit {\n\n @ViewChild('messageLink') messageLink!: ElementRef<HTMLElement>;\n\n private _enableCopyPressKeys = true;\n private _titleHeader = '';\n private _link = '';\n\n @Input()\n get link(): string {\n return this._link;\n }\n set link(value: string) {\n this._link = value;\n }\n\n @Input()\n get titleHeader(): string {\n return this._titleHeader;\n }\n set titleHeader(value: string) {\n this._titleHeader = value;\n }\n\n @Input()\n get enableCopyPressKeys(): boolean {\n return this._enableCopyPressKeys;\n }\n set enableCopyPressKeys(value: boolean) {\n this._enableCopyPressKeys = value;\n }\n\n @Input()\n arrowPosition = 'right-arrow';\n\n @Input()\n onClose?: () => void;\n\n ngAfterViewInit(): void {\n this.selectText(this.messageLink.nativeElement);\n }\n\n selectText(node: HTMLElement) {\n if (window.getSelection) {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(node);\n selection?.removeAllRanges();\n selection?.addRange(range);\n } else {\n console.log(\"Could not select text in node: Unsupported browser.\");\n }\n }\n\n close() {\n this.onClose?.();\n }\n\n @HostListener('window:keydown.control.c', ['$event'])\n onKeyPress() {\n if (this.messageLink && this.enableCopyPressKeys) {\n navigator.clipboard.writeText(this.messageLink.nativeElement.innerText).catch((err) => {\n console.error(\"Could not copy text in node.\", err);\n });\n }\n }\n}","<div class=\"link-content\" #linkContent>\n <div\n class=\"link-tooltip-message\"\n #linkTooltipMessage\n >\n <div class=\"header\">\n <span class=\"title\">{{titleHeader}}</span>\n <span\n class='tooltip-cross-icon close'\n (click)=\"close()\"\n (keydown)=\"close()\"\n >✕︎</span>\n </div>\n <div class=\"content\">\n <div\n class=\"link\"\n #messageLink\n [innerHTML]=\"link\">\n </div>\n </div>\n </div>\n <div\n class=\"arrow\"\n [ngClass]=\"arrowPosition\"\n ></div>\n</div>\n<div\n class=\"link-tooltip-message-overlay\"\n (click)=\"close()\"\n (keydown)=\"close()\"\n></div>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, SimpleChanges, OnChanges } from '@angular/core';\nimport { CreateLinkData, SelectedObject } from './object-properties-header.interface';\nimport { CommonModule, NgIf} from '@angular/common';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { fireEvent } from '../../utils/utils';\nimport {\n TranslateModule\n , TranslateService\n} from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { BimplusLinkTooltipMessageComponent } from '../bimplus-link-tooltip-message/bimplus-link-tooltip-message.component';\n\n@Component({\n selector: 'lib-object-properties-header',\n imports: [\n CommonModule,\n FormsModule,\n NgSelectModule,\n TranslateModule,\n BimplusLinkTooltipMessageComponent,\n NgIf\n ],\n providers: [TranslateService],\n templateUrl: './object-properties-header.component.html',\n styleUrl: './object-properties-header.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesHeaderComponent extends BimplusLocalizedWidgetComponent implements OnChanges {\n constructor(){\n super();\n }\n\n @Output() selectedObject = new EventEmitter<SelectedObject>();\n\n @Output() closePropertiesPanel = new EventEmitter();\n\n @Input() selectedObjects: Array<SelectedObject> = [];\n\n _activeObject: SelectedObject | null = null;\n openLinkMessage: boolean = false;\n\n @Input()\n onOpenLink?: () => void;\n\n set activeObject(value: SelectedObject | null) {\n this._activeObject = value;\n fireEvent(this, \"selectedObject\", value);\n }\n\n get activeObject(): SelectedObject | null {\n return this._activeObject;\n }\n\n private _linkData: CreateLinkData = {\n link: '',\n titleHeader: '',\n linkMessageVisible: false,\n enableCopyPressKeys: false\n };\n\n @Input()\n get linkData(): CreateLinkData {\n return this._linkData;\n }\n set linkData(value: CreateLinkData) {\n this._linkData = value;\n }\n\n _closePropertiesPanel(event: Event) {\n fireEvent(this, \"closePropertiesPanel\", event);\n event.stopPropagation();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes['selectedObjects']) {\n return;\n }\n const previousValue: SelectedObject[] | null = changes['selectedObjects'].previousValue;\n const currentValue: SelectedObject[] | null = changes['selectedObjects'].currentValue;\n if(currentValue && currentValue.length > 0) {\n this.activeObject = currentValue[currentValue.length - 1];\n }\n console.log(`Data changed from ${previousValue} to ${currentValue}`);\n }\n\n openLink() {\n this.openLinkMessage = true;\n this.onOpenLink?.();\n }\n\n closeLink = () => {\n this.openLinkMessage = false;\n }\n}\n","<div class=\"object-properties-header\">\n <div class=\"object-properties-header-object\">\n <div class=\"object-properties-header-object-select\">\n <ng-select class=\"object-properties-header-object-select-dropdown\" [(ngModel)]=\"activeObject\" [clearable]=\"false\" [searchable]=\"false\">\n <ng-option *ngFor=\"let object of selectedObjects\" [value]=\"object\">\n {{object.type}}\n @if(object.name) {\n ({{object.name}})\n }\n </ng-option>\n </ng-select>\n </div>\n </div>\n <div\n class=\"object-properties-header-link-icon\"\n title=\"{{'_Create link' | translate}}\"\n (click)=\"openLink()\"\n (keydown)=\"openLink()\"\n >\n </div>\n <lib-bimplus-link-tooltip-message\n *ngIf=\"openLinkMessage\"\n [enableCopyPressKeys]=\"linkData.enableCopyPressKeys\"\n [titleHeader]=\"linkData.titleHeader\"\n [link]=\"linkData.link\"\n [onClose]=\"closeLink\"\n />\n <div\n class=\"object-properties-header-close-icon\"\n (click)=\"_closePropertiesPanel($event)\"\n (keydown)=\"_closePropertiesPanel($event)\"\n title=\"{{'_Close_properties_panel_title' | translate}}\"\n >\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'round',\r\n standalone: true\r\n})\r\nexport class RoundPipe implements PipeTransform {\r\n\r\n transform(value: string, decimal: number): string {\r\n const num = parseFloat(value);\r\n const dec = decimal;\r\n\r\n const mult = Math.pow(10, dec);\r\n\r\n return \"\" + Math.round(num * mult) / mult;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObjectAttribute } from '../components/object-properties/object-properties.interface';\nimport { RoundPipe } from './round.pipe';\nimport moment from 'moment';\nimport 'moment/min/locales';\n\n\n@Pipe({\n name: 'getAttributeValueAsString',\n standalone: true\n})\nexport class GetAttributeValueAsString implements PipeTransform {\n\n constructor() {\n const locale = window.navigator.language;\n moment.locale(locale);\n }\n\n _transformDoubleToString(value: ObjectAttribute): string {\n return new RoundPipe().transform(value.value, value.decimal || 2);\n }\n\n _transformDoubleEnumerationToString(value: ObjectAttribute): string {\n if(!value.enumdefinition) {\n return '';\n }\n const _retval = value.enumdefinition[Number(value.value)];\n if(_retval) {\n return `${_retval}`;\n }\n return '';\n }\n\n _transformDatetimeToString(value: ObjectAttribute): string {\n const localeDate: string = moment(value.value).format('L')\n if(localeDate) {\n return localeDate;\n }\n return `${value.value}`;\n }\n\n _transformGUIDToString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformEnumerationToString(value: ObjectAttribute): string {\n if(value.control && /^Enumeration$/i.test(value.control)) {\n if(!value.enumdefinition) {\n return '';\n }\n const _retVal = value.enumdefinition[Number(value.value)];\n if(_retVal) {\n return `${_retVal}`;\n }\n return '';\n }\n return `${value.value}`;\n }\n\n _transformGUIDEnumerationToString(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformIntToString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformIntEnumerationToString(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformStringEnumeration(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformStringCombobox(value: ObjectAttribute): string {\n if(value.control && /^Combobox$/i.test(value.control)) {\n return `${value.value}`;\n }\n return `${value.value}`;\n }\n\n _transformBooleanToString(value: ObjectAttribute): string {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return \"True\";\n }\n return \"False\";\n }\n\n transform(value: ObjectAttribute): string {\n const _value = value.value;\n if (this.isEmpty(_value)) {\n return '';\n }\n\n if (this.isDouble(value)) {\n return this._transformDoubleToString(value);\n }\n\n if (this.isDoubleEnumeration(value)) {\n return this._transformDoubleEnumerationToString(value);\n }\n\n if (this.isDatetime(value)) {\n return this._transformDatetimeToString(value);\n }\n\n if (this.isGUID(value)) {\n return this._transformGUIDToString(value);\n }\n\n if (this.isGUIDEnumeration(value)) {\n return this._transformGUIDEnumerationToString(value);\n }\n\n if (this.isInt(value)) {\n return this._transformIntToString(value);\n }\n\n if (this.isIntEnumeration(value)) {\n return this._transformIntEnumerationToString(value);\n }\n\n if (this.isString(value)) {\n return this._transformString(value);\n }\n\n if (this.isStringEnumeration(value)) {\n return this._transformStringEnumeration(value);\n }\n\n if (this.isStringCombobox(value)) {\n return this._transformStringCombobox(value);\n }\n\n if (this.isBooleanCheckbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n if (this.isBooleanTextbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n return value.value;\n }\n\n private isEmpty(value: string | undefined | null): boolean {\n return value === undefined || value === null || value === '';\n }\n\n private isDouble(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type) && !value.control;\n }\n\n private isDoubleEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isDatetime(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^datetime$/i.test(value.type) && !value.control;\n }\n\n private isGUID(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type) && !value.control;\n }\n\n private isGUIDEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isInt(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type) && !value.control;\n }\n\n private isIntEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isString(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type) && !value.control;\n }\n\n private isStringEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isStringCombobox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^combobox$/i.test(value.control);\n }\n\n private isBooleanCheckbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type)\n && typeof value.control === 'string' && /^checkbox$/i.test(value.control);\n }\n\n private isBooleanTextbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type) && !value.control;\n }\n}\n","import { ObjectAttribute } from '../components/object-properties/object-properties.interface';\n\nexport function isObjectPropertyValueBlank(attrib: ObjectAttribute): boolean {\n return attrib.value === undefined\n || attrib.value === null\n || attrib.value === ''\n || attrib.value === '\\n\\t'\n || attrib.value === '\\n'\n || attrib.value === '\\t';\n}","import { Input, Component, ViewEncapsulation, signal } from '@angular/core';\nimport isURL from 'validator/lib/isURL';\n\n@Component({\n selector: 'lib-object-property-value',\n standalone: true,\n templateUrl: './object-property-value.component.html',\n styleUrls: ['./object-property-value.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ObjectPropertyValueComponent {\n protected _tooltip = signal<string>('');\n protected _value = signal<string>('');\n protected _valueIsUrl = signal<boolean>(false);\n protected _decoratedHyperlink = signal<string>('');\n\n @Input() set value(value: string) {\n this._value.set(value);\n if(this._isUrl(value)) {\n this._valueIsUrl.set(true);\n this._decoratedHyperlink.set(this._decorateHyperlink(value));\n }\n else {\n this._valueIsUrl.set(false);\n }\n }\n\n @Input() set tooltip(tooltip: string) {\n this._tooltip.set(tooltip);\n }\n\n private _isUrl(url: string): boolean {\n if (!url) {\n return false;\n }\n const link = url.trim();\n if(!/^http(s?):\\/\\//.exec(link) && !/^www\\./.exec(link)) {\n return false;\n }\n\n return isURL(link);\n }\n\n private _decorateHyperlink(url: string): string {\n if(!this._isUrl(url)) {\n return '';\n }\n let link = url.trim();\n\n if (link && !/^http(s?):\\/\\//.exec(link)) {\n link = 'https://' + link;\n }\n return link;\n }\n\n constructor() { }\n}\n","@if(_valueIsUrl()) {\n <a class=\"link-detect-automatically\" target=\"_blank\" rel=\"noopener\" href={{_decoratedHyperlink()}} title=\"{{_tooltip()}}\">{{_value()}}</a>\n}\n@else {\n <div class=\"value\" title=\"{{_tooltip()}}\">\n {{_value()}}\n </div>\n}\n","import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, signal, booleanAttribute, ViewChild, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-text-field',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-text-field.component.html',\n styleUrl: './bimplus-input-text-field.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputTextFieldComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputTextFieldComponent implements ControlValueAccessor {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _showClearButton = signal<boolean>(false);\n @Input({ transform: booleanAttribute }) set showClearButton(show_clear_button: boolean) {\n this._showClearButton.set(show_clear_button);\n }\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n value: string = '';\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _clearValue(event: Event): void {\n this.value = \"\";\n this.inputElement.nativeElement.focus();\n this.onChange(this.value);\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div\n class=\"text-input-wrapper\"\n [class.invalid-value]=\"!_validValue()\"\n [class.with-clear-button]=\"_showClearButton()\"\n>\n <input\n type=\"text\"\n [value]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\"\n class=\"text-input\"\n #inputValueBox\n />\n @if(_showClearButton()) {\n <div\n class=\"clear-button\"\n (click)=\"_clearValue($event)\"\n (keydown)=\"handleKeyDown($event)\"\n >\n </div>\n }\n</div>\n","import {\n Component\n , EventEmitter\n , forwardRef\n , Output\n , ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-checkbox',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-checkbox.component.html',\n styleUrl: './bimplus-input-checkbox.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputCheckboxComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputCheckboxComponent implements ControlValueAccessor {\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n value: boolean = false;\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: boolean) => {\n };\n onTouched = () => {\n };\n\n // Called when the checkbox value changes\n onCheckboxChange(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n this.value = checked;\n this.onChange(checked); // Notify the parent form about the change\n this.onTouched(); // Mark the control as touched\n }\n\n writeValue(value: boolean): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n toggleAttributeValue() {\n this.value = !this.value;\n this.onChange(this.value);\n this.onTouched();\n }\n}\n","<div\n class=\"select-checkbox\"\n>\n <div>\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"onCheckboxChange($event)\"\n (click)=\"toggleAttributeValue()\"\n (keypress)=\"toggleAttributeValue()\"\n >\n <span></span>\n </div>\n</div>\n","import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, signal, booleanAttribute, ViewChild, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-number',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-number.component.html',\n styleUrl: './bimplus-input-number.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputNumberComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputNumberComponent implements ControlValueAccessor {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n @Input() minValue: string = '';\n @Input() maxValue: string = '';\n\n value: number = 0;\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: number) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: number): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = parseInt(input.value);\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div\n class=\"text-input-wrapper\"\n [class.invalid-value]=\"!_validValue()\"\n>\n <input\n type=\"number\"\n [value]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\"\n class=\"text-input\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n #inputValueBox\n />\n</div>\n","import { Component\n , EventEmitter\n , forwardRef\n , Input\n , Output\n , ViewEncapsulation\n , signal\n , booleanAttribute\n , ViewChild\n , ElementRef\n , OnInit\n} from '@angular/core';\nimport { ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n , FormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { BehaviorSubject } from 'rxjs';\nimport { CommonModule} from '@angular/common';\n\ninterface EnumDefinition {\n id: string;\n name: string;\n};\n\n@Component({\n selector: 'lib-bimplus-input-combobox',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgSelectModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-combobox.component.html',\n styleUrl: './bimplus-input-combobox.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputComboboxComponent),\n multi: true,\n },\n ]\n})\n\nexport class BimplusInputComboboxComponent implements ControlValueAccessor, OnInit {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n private _type: string = 'enum';\n protected _enumdefinition: Array<EnumDefinition> = [];\n @Input() set enumdefinition(enum_definition: Record<number | string, string> | undefined | Array<string>) {\n if(!enum_definition) {\n return;\n }\n if(Array.isArray(enum_definition)) {\n enum_definition.forEach((value, index) => {\n this._enumdefinition.push({ id: index.toString(), name: value });\n });\n this._type = 'array';\n return;\n }\n Object.keys(enum_definition).forEach((key) => {\n if(typeof key === 'string') {\n this._enumdefinition.push({ id: key, name: enum_definition[key] });\n }\n if(typeof key === 'number') {\n this._enumdefinition.push({ id: key, name: enum_definition[Number(key)] });\n }\n\n });\n }\n\n private _setActiveEnumValue() {\n const sel: EnumDefinition | undefined = this._enumdefinition.find((enumDef) => enumDef.id === this._selectedValue);\n if(!sel){\n return;\n }\n this.activeEnum = sel\n }\n\n _setActiveArrayValue() {\n const sel: EnumDefinition | undefined = this._enumdefinition.find((enumDef) => enumDef.name === this._selectedValue);\n if(!sel){\n return;\n }\n this.activeEnum = sel\n }\n\n private _selectedValue: string | null = null;\n @Input() set selectedValue(value: string | null) {\n this._selectedValue = value;\n if(this._type === 'enum') {\n this._setActiveEnumValue();\n return;\n }\n if(this._type === 'array') {\n this._setActiveArrayValue();\n }\n }\n\n ngOnInit() {\n this.activeEnumSubject$.subscribe({\n next: (value) => {\n if(this._type === 'enum') {\n this.value = value?.id ?? '';\n this.onChange(this.value);\n }\n if(this._type === 'array') {\n this.value = value?.name ?? '';\n this.onChange(this.value);\n }\n }\n });\n }\n\n set activeEnum(value : EnumDefinition | null){\n this.activeEnumSubject$.next(value);\n }\n\n get activeEnum() : EnumDefinition | null {\n return this.activeEnumSubject$.getValue();\n }\n\n activeEnumSubject$ = new BehaviorSubject<EnumDefinition | null> (null);\n\n \n value: string = '';\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div class=\"enum-wrapper\" [class.invalid-value]=\"!_validValue()\">\n <div class=\"double-enumeration\">\n <ng-select\n class=\"enum-dropdown\"\n [(ngModel)]=\"activeEnum\"\n [clearable]=\"false\"\n [searchable]=\"_enumdefinition.length >= 10\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <ng-option *ngFor=\"let val of _enumdefinition\" [value]=\"val\">{{\n val.name\n }}</ng-option>\n </ng-select>\n </div>\n</div>\n","import { Component,\n OnInit,\n forwardRef,\n Input,\n Output,\n booleanAttribute,\n signal,\n EventEmitter,\n ViewChild,\n ElementRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n , FormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { CommonModule} from '@angular/common';\nimport { MatNativeDateModule, DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MomentDateModule, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter} from '@angular/material-moment-adapter';\nimport { MatDatepickerModule, MatDatepickerInputEvent } from '@angular/material/datepicker';\n\nexport const MY_DATE_FORMATS = {\n parse: {\n dateInput: 'L', \n },\n display: {\n dateInput: 'L', \n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'L',\n monthYearA11yLabel: 'MMM YYYY',\n }\n};\n\n@Component({\n selector: 'lib-bimplus-input-date',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n MatDatepickerModule,\n MomentDateModule,\n MatNativeDateModule\n ],\n templateUrl: './bimplus-input-date.component.html',\n styleUrls: ['./bimplus-input-date.component.less'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputDateComponent),\n multi: true,\n },\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_DATE_FORMATS, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n },\n {\n provide: MAT_DATE_FORMATS,\n useValue: MY_DATE_FORMATS\n },\n {\n provide: MAT_DATE_LOCALE,\n useValue: navigator.language\n }, // Set the locale here!\n {\n provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS,\n useValue: {\n useUtc: false\n }\n },\n ],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusInputDateComponent implements ControlValueAccessor, OnInit {\n @ViewChild('inputDateBox', { static: false }) inputDateBox!: ElementRef;\n \n value: string = '';\n dateValue: Date | null = new Date();\n isDisabled: boolean = false;\n\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _showClearButton = signal<boolean>(false);\n @Input({ transform: booleanAttribute }) set showClearButton(show_clear_button: boolean) {\n this._showClearButton.set(show_clear_button);\n }\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n @Input() minValue: string = '';\n @Input() maxValue: string = '';\n\n constructor() { }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n this.dateValue = new Date(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n private readonly STYLE_ID = 'datepicker-styles';\n private injectGlobalStyles(): void {\n // Check if the style tag already exists\n if (document.getElementById(this.STYLE_ID)) {\n return; // Style already injected, skip\n }\n\n // Create the style tag\n const styleElement = document.createElement('style');\n styleElement.id = this.STYLE_ID;\n\n styleElement.textContent = `\n mat-datepicker-content mat-calendar.bimplus-datepicker {\n background-color: var(--brand-white-color);\n border-color: var(--issue-details-view-select-border-color);\n border: .1rem solid;\n }\n\n mat-calendar.bimplus-datepicker .mat-mdc-button {\n font-size: 1.6rem;\n font-weight: 700;\n }\n mat-calendar.bimplus-datepicker .mat-mdc-button:hover {\n border-radius: 0;\n }\n mat-calendar.bimplus-datepicker mat-calendar-header .mat-calendar-controls {\n margin: 0;\n }\n mat-calendar.bimplus-datepicker mat-calendar-header .mat-calendar-header {\n background-color: rgb(236, 239, 241);\n padding: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content {\n padding: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header{\n height: 2rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header tr{\n height: 2rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header tr th{\n height: 2rem;\n padding: 0;\n font-size: 1.3rem;\n font-weight: 700;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-today {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td.mat-calendar-body-label {\n font-size: 1.3rem;\n font-weight: 700;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td.mat-calendar-body-label {\n font-size: 1.3rem;\n font-weight: 700;\n }\n `;\n\n // Append the style tag to document.head\n document.head.appendChild(styleElement);\n }\n ngOnInit() {\n this.injectGlobalStyles();\n console.log('BimplusInputDateComponent ngOnInit'); \n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _clearValue(event: Event): void {\n this.value = \"\";\n this.dateValue = null;\n this.onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _showDatePicker(event: Event): void {\n console.log('BimplusInputDateComponent _showDatePicker');\n }\n \n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n\n onDateChanged(event: MatDatepickerInputEvent<Date>) {\n const selectedDate = event.value;\n\n if (selectedDate) {\n this.value = selectedDate.toISOString();\n this.onChange(this.value);\n console.log('Selected Date (UTC):', selectedDate);\n }\n }\n}\n","<div class=\"date-input-wrapper\">\n <mat-datepicker-toggle matIconPostfix [for]=\"picker\" [disableRipple]=\"true\"></mat-datepicker-toggle>\n <input matInput [matDatepicker]=\"picker\" readonly [(ngModel)]=\"dateValue\" #inputDateBox (dateChange)=\"onDateChanged($event)\" (click)=\"picker.open()\">\n <mat-datepicker #picker [panelClass]=\"'bimplus-datepicker'\"></mat-datepicker>\n <div\n class=\"clear-button\"\n (click)=\"_clearValue($event)\"\n (keydown)=\"handleKeyDown($event)\"\n ></div>\n</div>","import {\n Component\n , Input\n , ViewEncapsulation\n , signal\n} from '@angular/core';\nimport {\n ObjectAttributeGroup\n , ObjectAttribute\n} from '../object-properties/object-properties.interface';\nimport { GetAttributeValueAsString } from '../../pipes/get-attribute-value-as-string.pipe';\nimport { isObjectPropertyValueBlank } from '../../utils/objectProperties';\nimport { ObjectPropertyValueComponent } from './object-property-value/object-property-value.component';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { BimplusInputTextFieldComponent } from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\nimport { BimplusInputCheckboxComponent } from \"../bimplus-input-checkbox/bimplus-input-checkbox.component\";\nimport { BimplusInputNumberComponent } from '../bimplus-input-number/bimplus-input-number.component';\nimport { BimplusInputComboboxComponent } from '../bimplus-input-combobox/bimplus-input-combobox.component';\nimport { BimplusInputDateComponent } from '../bimplus-input-date/bimplus-input-date.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-object-properties-group',\n imports: [\n GetAttributeValueAsString,\n ObjectPropertyValueComponent,\n BimplusInputTextFieldComponent,\n BimplusInputCheckboxComponent,\n BimplusInputNumberComponent,\n BimplusInputComboboxComponent,\n BimplusInputDateComponent,\n ReactiveFormsModule,\n CommonModule\n ],\n templateUrl: './object-properties-group.component.html',\n styleUrls: ['./object-properties-group.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesGroupComponent {\n protected _editMode = signal<boolean>(false);\n\n @Input() set editMode(edit_mode: boolean) {\n this._editMode.set(edit_mode);\n }\n\n @Input() objectPropertiesForm: FormGroup | undefined;\n\n protected _existFormControlForAttibute(attribId: string): boolean {\n if(!this.objectPropertiesForm) {\n return false;\n }\n\n const attrib = this.objectPropertiesForm.get(attribId);\n\n if(!attrib) {\n return false;\n }\n return true;\n }\n\n protected _isValueValid(attribId: string): boolean {\n if(!this.objectPropertiesForm) {\n return false;\n }\n const attrib = this.objectPropertiesForm.get(attribId);\n\n if(!attrib) {\n return false;\n }\n return attrib?.valid;\n }\n\n protected _canUpdateObject = signal<boolean>(false);\n @Input() set canUpdateObject(canUpdateObject: boolean) {\n this._canUpdateObject.set(canUpdateObject);\n }\n\n protected _attributesGroup = signal<ObjectAttributeGroup>({\n name: '',\n attributes: [],\n expanded: false,\n });\n\n @Input() set attributesGroup(value: ObjectAttributeGroup | undefined) {\n if(!value){\n return;\n }\n this._attributesGroup.set(value);\n }\n\n constructor() { }\n\n protected isValueBlank(attrib: ObjectAttribute): boolean {\n return isObjectPropertyValueBlank(attrib);\n }\n protected _isBoleanTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^boolean$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isBoleanCheckBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^boolean$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^checkbox$/i.test(attrib.control));\n }\n protected _isTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isDoubleTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^double$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isIntegerTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^int(32)?$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isGuidTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^guid$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isDoubleEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^double$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isGuidEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^guid$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isIntegerEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^int(32)?$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isStringEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isStringCombobox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^combobox$/i.test(attrib.control));\n }\n protected _isDatetime(attrib: ObjectAttribute): boolean {\n return ((typeof attrib.type === 'string' && /^datetime$/i.test(attrib.type)) && !attrib.control);\n }\n}\n","@if(objectPropertiesForm) {\n <div class=\"object-property-table\"\n [formGroup]=\"objectPropertiesForm\"\n [class.edit-mode] = \"_editMode()\"\n >\n @for (attrib of _attributesGroup().attributes; track attrib) {\n <div class=\"row-wrapper\">\n <div class=\"table-cell object-property-icon uuid-{{attrib.id}}\"></div>\n <div class=\"table-cell object-property-name uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.name}}:</div>\n <div class=\"table-cell object-property-value uuid-{{attrib.id}}\">\n @if(_editMode() && _canUpdateObject() && attrib.isChangeable && _existFormControlForAttibute(attrib.id)) {\n @if(\n _isBoleanTextBox(attrib)\n || _isTextBox(attrib)\n || _isDoubleTextBox(attrib)\n || _isGuidTextBox(attrib)\n ) {\n <lib-bimplus-input-text-field\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [showClearButton]=true\n />\n }\n @else if(\n _isIntegerTextBox(attrib)\n ) {\n <lib-bimplus-input-number\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n minValue=\"{{attrib.minValue}}\"\n maxValue=\"{{attrib.maxValue}}\"\n />\n }\n @else if(\n _isBoleanCheckBox(attrib)\n ) {\n <lib-bimplus-input-checkbox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n />\n }\n @else if(\n _isDoubleEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value | number\"\n />\n }\n @else if(\n _isGuidEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isIntegerEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value | number\"\n />\n }\n @else if(\n _isStringEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isStringCombobox(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isDatetime(attrib)\n ) {\n <lib-bimplus-input-date\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n minValue=\"{{attrib.minValue}}\"\n maxValue=\"{{attrib.maxValue}}\"\n [showClearButton]=true\n />\n }\n }\n @else {\n <lib-object-property-value\n value=\"{{attrib | getAttributeValueAsString}}\"\n tooltip=\"{{attrib.tooltip}}\"\n />\n }\n </div>\n <div class=\"table-cell object-property-unit uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.unit}}</div>\n </div>\n }\n </div>\n}\n@else {\n <div class=\"object-property-table\"\n [class.edit-mode] = \"_editMode()\"\n >\n @for (attrib of _attributesGroup().attributes; track attrib) {\n\n @if(!isValueBlank(attrib)) {\n <div class=\"row-wrapper\">\n <div class=\"table-cell object-property-icon uuid-{{attrib.id}}\"></div>\n <div class=\"table-cell object-property-name uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.name}}:</div>\n <div class=\"table-cell object-property-value uuid-{{attrib.id}}\">\n <lib-object-property-value\n value=\"{{attrib | getAttributeValueAsString}}\"\n tooltip=\"{{attrib.tooltip}}\"\n />\n </div>\n <div class=\"table-cell object-property-unit uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.unit}}</div>\n </div>\n }\n }\n </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObjectAttribute } from '../components/object-properties/object-properties.interface';\nimport { RoundPipe } from './round.pipe';\nimport moment from 'moment';\nimport 'moment/min/locales';\n\n\n@Pipe({\n name: 'getAttributeValue',\n standalone: true\n})\nexport class GetAttributeValue implements PipeTransform {\n\n constructor() {\n const locale = window.navigator.language;\n moment.locale(locale);\n }\n\n _transformDouble(value: ObjectAttribute): string {\n return new RoundPipe().transform(value.value, value.decimal ?? 2);\n }\n\n _transformDoubleEnumeration(value: ObjectAttribute): string {\n return this._transformDouble(value);\n }\n\n _transformDatetime(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformGUID(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformGUIDEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformInt(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformIntEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformString(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformStringEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformStringCombobox(value: ObjectAttribute): string {\n if(value.control && /^combobox$/i.test(value.control)) {\n return value.value;\n }\n return '';\n }\n\n _transformBooleanToBoolean(value: ObjectAttribute): boolean {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return true;\n }\n return false;\n }\n\n _transformBooleanToString(value: ObjectAttribute): string {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return \"True\";\n }\n return \"False\";\n }\n\n transform(value: ObjectAttribute): string | boolean {\n const _value = value.value;\n if (this.isEmpty(_value)) {\n return '';\n }\n\n if (this.isDouble(value)) {\n return this._transformDouble(value);\n }\n\n if (this.isDoubleEnumeration(value)) {\n return this._transformDoubleEnumeration(value);\n }\n\n if (this.isDatetime(value)) {\n return this._transformDatetime(value);\n }\n\n if (this.isGUID(value)) {\n return this._transformGUID(value);\n }\n\n if (this.isGUIDEnumeration(value)) {\n return this._transformGUIDEnumeration(value);\n }\n\n if (this.isInt(value)) {\n return this._transformInt(value);\n }\n\n if (this.isIntEnumeration(value)) {\n return this._transformIntEnumeration(value);\n }\n\n if (this.isString(value)) {\n return this._transformString(value);\n }\n\n if (this.isStringEnumeration(value)) {\n return this._transformStringEnumeration(value);\n }\n\n if (this.isStringCombobox(value)) {\n return this._transformStringCombobox(value);\n }\n\n if (this.isBooleanCheckbox(value)) {\n return this._transformBooleanToBoolean(value);\n }\n\n if (this.isBooleanTextbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n return value.value;\n }\n\n private isEmpty(value: string | undefined | null): boolean {\n return value === undefined || value === null || value === '';\n }\n\n private isDouble(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type) && !value.control;\n }\n\n private isDoubleEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isDatetime(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^datetime$/i.test(value.type) && !value.control;\n }\n\n private isGUID(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type) && !value.control;\n }\n\n private isGUIDEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isInt(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type) && !value.control;\n }\n\n private isIntEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isString(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type) && !value.control;\n }\n\n private isStringEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isStringCombobox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^combobox$/i.test(value.control);\n }\n\n private isBooleanCheckbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type)\n && typeof value.control === 'string' && /^checkbox$/i.test(value.control);\n }\n\n private isBooleanTextbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type) && !value.control;\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function doubleValidator(minValue: string, maxValue: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = control.value;\n const isValidDouble = /^[-+]?\\d*?\\.?\\d+?([eE][-+]?\\d+?)?$/.test(value); //Regex for a double\n\n if(!isValidDouble) {\n return { invalidDouble: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if(isNaN(parseFloat(value))) {\n return { invalidDouble: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if (minValue && parseFloat(value) < parseFloat(minValue)) {\n return { invalidDouble: { value: value, message: `Value must be greater than or equal to ${minValue}.` } };\n }\n if (maxValue && parseFloat(value) > parseFloat(maxValue)) {\n return { invalidDouble: { value: value, message: `Value must be less than or equal to ${maxValue}.` } };\n }\n\n return null;\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function integerValidator(minValue: string, maxValue: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValidInteger = /^[+-]?\\d+$/.test(value); //Regex for a integer\n\n if(!isValidInteger) {\n return { invalidInteger: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if(isNaN(parseInt(value))) {\n return { invalidInteger: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if (minValue && parseInt(value) < parseInt(minValue)) {\n return { invalidInteger: { value: value, message: `Value must be greater than or equal to ${minValue}.` } };\n }\n if (maxValue && parseInt(value) > parseInt(maxValue)) {\n return { invalidInteger: { value: value, message: `Value must be less than or equal to ${maxValue}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function guidValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValidGuid = /^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$/.test(value); //Regex for a guid\n\n if(!isValidGuid) {\n return { invalidGuid: { value: value, message: `Invalid guid format: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function doubleEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AfterViewInit, Component, effect, ElementRef, Input, OnDestroy, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport * as Renderer from 'bimplus-renderer';\nimport * as THREE from 'three';\nimport * as WebSdk from \"bimplus-websdk\";\nimport {TranslatePipe} from \"@ngx-translate/core\";\nimport { PreviewObject } from './object-preview.interface';\n\n@Component({\n selector: 'lib-object-preview',\n imports: [\n TranslatePipe\n ],\n templateUrl: './object-preview.component.html',\n styleUrls: ['./object-preview.component.less'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ObjectPreviewComponent implements AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef);\n\n private resizeObserver: ResizeObserver | null = null;\n viewport: Renderer.Viewport3D | null = null;\n isLoading = true;\n previousWidth = 0;\n previousHeight = 0;\n resizeTimeout: number | undefined;\n\n @ViewChild('rendererviewport') rendererViewportElement!: ElementRef;\n\n @Input() api: WebSdk.Api | null = null;\n\n @Input()\n set objectId(id: string) {\n this._objectId = id;\n this.onObjectIdChanged();\n }\n\n get objectId(): string | undefined {\n return this._objectId;\n }\n\n private _objectId: string | undefined = undefined;\n\n @Input() revision: number | undefined = undefined;\n @Input() set visibleNode(value: PreviewObject){\n if(this.viewport){\n this.viewport.toggleObjectNode({id:value.id, visible:value.visible});\n }\n }\n @Input() set opaqueNode(value: PreviewObject){ \n if(this.viewport){\n this.viewport.toggleObjectNodeOpacity({id:value.id, opacity:value.opaque});\n }\n\n }\n\n private contentLoader: Renderer.BimplusContentLoader | null = null;\n\n private isRendererInitialized: boolean = false;\n\n constructor() {\n effect(()=>{\n if (this.visibleNode) {\n this.processVisibilityNode(this.visibleNode);\n }\n });\n // React to changes in the `opaqueNode` signal\n effect(() => {\n if (this.opaqueNode) {\n this.processOpacityNode(this.opaqueNode);\n }\n });\n }\n \n // Method to process the node\n processVisibilityNode(node: PreviewObject): void {\n console.log('Processing visbility of node in lib-object-preview:', node); \n }\n processOpacityNode(node: PreviewObject): void {\n console.log('Processing opacity of node in lib-object-preview:', node); \n }\n\n ngAfterViewInit(): void {\n const container = this.el.nativeElement;\n \n // Initialize ResizeObserver\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry?.contentRect?.width;\n\n if (width != this.previousWidth) {\n this.previousWidth = width;\n this.recalculatePreviewSize();\n }\n }\n });\n\n // Start observing the component's main container\n this.resizeObserver.observe(container);\n this.initRenderer();\n\n this.contentLoader = new Renderer.BimplusContentLoader(this.api as WebSdk.Api, this.viewport as Renderer.Viewport3D);\n\n this.isRendererInitialized = true;\n\n this.loadObject();\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n this.viewport?.dispose();\n }\n\n recalculatePreviewSize() {\n clearTimeout(this.resizeTimeout);\n\n this.resizeTimeout = setTimeout(() => {\n const width = this.rendererViewportElement?.nativeElement.offsetWidth;\n const height = this.rendererViewportElement?.nativeElement.offsetHeight;\n\n if (width && height) {\n this.viewport?.setViewportSize(width, height);\n this.viewport?.draw();\n } else {\n console.error(\"Viewport size is zero\");\n }\n }, 1) as unknown as number; // Delay execution to avoid rapid resizing and flickering\n }\n\n metricUnits: Renderer.MeasurementUnits = {\n weight: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'kg',\n },\n length: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n width: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n height: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n area: {\n multiplicator: 0.000001,\n precision: 2,\n unit: 'm²',\n },\n volume: {\n multiplicator: 1e-9,\n precision: 2,\n unit: 'm³',\n },\n };\n\n imperialUnits: Renderer.MeasurementUnits = {\n length: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n width: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n height: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n };\n\n viewportSettings: Renderer.ViewportSettings = {\n defaultOpacity: 0.5,\n disciplineOpacity: 0.1,\n pinSizeScaleFactor: 2,\n maxWebGLBufferSize: 350e12,\n mixedModelMode: true,\n useFrameSelection: false,\n pinFlyToDistance: 20000,\n nearClippingPlane: 0.01,\n slideThmbSize: [180, 112],\n units: {\n mm: this.metricUnits,\n inch: {},\n },\n };\n\n units = {\n Metric: this.metricUnits,\n Imperial: this.imperialUnits,\n };\n\n setAmbientOcclusionOptions() {\n if (!this.viewport) {\n return\n }\n\n const viewportOcclusionData = {\n usage: false,\n usageForInteraction: false,\n useShadows: false,\n useShadowsForInteraction: false,\n lightRotation: Math.PI * 35.00 / 180.0,\n lightElevation: Math.PI * 50.00 / 180.0,\n lightColor: new THREE.Color(1.0, 1.0, 1.0),\n ambientLightColor: new THREE.Color(0.6, 0.6, 0.6),\n };\n this.viewport.setAmbientOcclusionOptions(viewportOcclusionData);\n }\n\n setBackgroundOptions() {\n if (!this.viewport) {\n return\n }\n\n const daySkyBackgroundSetting = {\n name: \"day sky\",\n ambientLightColor: 0x868686,\n backgroundType: Renderer.Background.BackgroundType_LinearGradient,\n backgroundParams: {\n alpha: 1.0,\n colorStops: [\n {\n offset: 0.0,\n color: \"#87CDE9\"\n },\n {\n offset: 0.5104,\n color: \"#DDEDFE\"\n },\n {\n offset: 0.9635,\n color: \"#D3D3D4\"\n }\n ]\n }\n };\n this.viewport.setBackground(daySkyBackgroundSetting.backgroundType, daySkyBackgroundSetting.backgroundParams);\n }\n\n setHoverOption(useHoverEffect: boolean = true) {\n if (!this.viewport) {\n return\n }\n this.viewport.setUseHoverEffect(useHoverEffect);\n }\n\n initRenderer() {\n this.viewport = new Renderer.Viewport3D({\n settings: this.viewportSettings,\n units: this.units.Metric,\n domElementId: \"\",\n GPUPick: true,\n api: this.api as WebSdk.Api,\n name: \"objectPreviewRendererViewport\",\n lookupTextureSize: 32,\n ssaoSupported: false, // Disable SSAO support for object details window\n shadowsSupported: false,\n panningScaleFactor: 4.0, //In case of preview window use bigger panning scale factor\n commandPolicies: {\n CommandSelect: {\n noBubble: true, // Don't do a upwards activation\n noTraverse: true // Don't do a downwards activation\n }\n }\n });\n\n this.setBackgroundOptions();\n this.setHoverOption();\n this.viewport.draw();\n\n if (this.viewport?.domElement) {\n this.viewport.domElement.id = \"objectPreviewRendererViewport\";\n const nativeElement = this.el.nativeElement?.shadowRoot || this.el.nativeElement;\n nativeElement?.getElementsByClassName?.(\"rendered-preview\")[0]?.appendChild?.(this.viewport.domElement);\n } else {\n console.error(\"no dom element present for renderer!\");\n }\n }\n\n private onObjectIdChanged() {\n this.loadObject();\n }\n\n private loadObject() {\n if (!this.isRendererInitialized) {\n return;\n }\n\n if (!this.contentLoader) {\n console.error(\"content loader is not there!\");\n return;\n }\n\n console.log('loading object:', this.objectId);\n\n this.isLoading = true;\n\n this.viewport?.resetViewport();\n\n const projectContent = null;\n this.contentLoader.loadObject(this.objectId as string, this.revision, projectContent).then(() => {\n // Set the viewport to project view - reset camera\n this.viewport?.setupProjectView();\n this.isLoading = false;\n });\n }\n}\n","<div class=\"rendered-preview\" #rendererviewport>\n @if (isLoading) {\n <div class=\"loading-spinner-icon\" title=\"{{'_LoadingGeometry' | translate}}\">\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport * as WebSdk from 'bimplus-websdk';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectPropertiesService {\n\n _model: BehaviorSubject<WebSdk.ObjectData | null> = new BehaviorSubject<WebSdk.ObjectData | null>(null);\n\n constructor() { }\n\n get modelValue(): WebSdk.ObjectData | null {\n return this._model.value;\n }\n\n get model$(): BehaviorSubject<WebSdk.ObjectData | null> {\n return this._model;\n }\n\n setModel(model: WebSdk.ObjectData): void {\n this._model.next(model);\n }\n\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function guidEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function stringEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function stringComboboxValidator(arrayData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!arrayData) {\n return null;\n }\n if(!Array.isArray(arrayData)) {\n return null;\n }\n \n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = arrayData.includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { Component, ViewEncapsulation, Input, OnInit, signal, WritableSignal, ChangeDetectorRef, EventEmitter, Output, inject } from '@angular/core';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n ObjectStructureNode,\n ObjectStructureNodeBuilder,\n} from '../bimplus-object-structure/bimplus-object-structure.interface';\nimport { PreviewObject } from '../object-preview/object-preview.interface';\nimport * as WebSdk from 'bimplus-websdk';\nimport {\n from\n , BehaviorSubject\n} from 'rxjs';\nimport { BimplusObjectStructureComponent } from '../bimplus-object-structure/bimplus-object-structure.component';\nimport {\n ComplexPropertiesNode,\n ComplexPropertiesNodeBuilder,\n} from '../bimplus-object-complex-properties/bimplus-object-complex-properties.interface';\nimport { BimplusObjectComplexPropertiesComponent } from '../bimplus-object-complex-properties/bimplus-object-complex-properties.component';\nimport {\n ObjectAttribute,\n ObjectAttributeGroup,\n} from './object-properties.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport {\n BimplusButtonRowItem,\n BimplusButtonClickEvent,\n} from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component';\nimport { ObjectPropertiesGroupComponent } from '../object-properties-group/object-properties-group.component';\nimport { isObjectPropertyValueBlank } from '../../utils/objectProperties';\nimport {\n FormGroup\n , ReactiveFormsModule\n , FormBuilder\n , FormControl\n , Validators\n} from '@angular/forms';\nimport { GetAttributeValue } from '../../pipes/get-attribute-value.pipe';\nimport { doubleValidator } from '../../validators/double.validator';\nimport { integerValidator } from '../../validators/integer.validator';\nimport { guidValidator } from '../../validators/guid.validator';\nimport { doubleEnumValidator } from '../../validators/double-enum.validator';\nimport { ObjectPreviewComponent } from \"../object-preview/object-preview.component\";\nimport { ObjectPropertiesService } from './object-properties.service';\nimport { guidEnumValidator } from '../../validators/guid-enum.validator';\nimport { stringEnumValidator } from '../../validators/string-enum.validator';\nimport { stringComboboxValidator } from '../../validators/string-combobox.validator';\n\n@Component({\n selector: 'lib-object-properties',\n imports: [\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n TranslateModule,\n BimplusObjectStructureComponent,\n BimplusObjectComplexPropertiesComponent,\n BimplusButtonsRowComponent,\n BimplusScrollableContainerComponent,\n ObjectPropertiesGroupComponent,\n ObjectPropertiesGroupComponent,\n ObjectPreviewComponent,\n ReactiveFormsModule\n ],\n templateUrl: './object-properties.component.html',\n styleUrls: ['./object-properties.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesComponent\n extends BimplusLocalizedWidgetComponent\n implements OnInit\n{\n private readonly formBuilder = inject(FormBuilder);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly objectPropertiesService = inject(ObjectPropertiesService);\n\n protected _objectPropertiesForm = new FormGroup({});\n\n protected _objectPropertiesGroupForm(group_name: string): FormGroup {\n const _groupForm: FormGroup = this._objectPropertiesForm;\n return _groupForm.controls[group_name] as FormGroup;\n }\n\n constructor()\n {\n super();\n }\n\n protected _editMode = signal<boolean>(false);\n private _objectStructure: ObjectStructureNode | null = null;\n\n get objectStructure(): ObjectStructureNode | null {\n return this._objectStructure;\n }\n\n private _complexProperties: ComplexPropertiesNode | null = null;\n\n get complexProperties(): ComplexPropertiesNode | null {\n return this._complexProperties;\n }\n\n @Input() api: WebSdk.Api | null = null;\n @Input() revision: number | undefined = undefined;\n\n protected _canUpdateObject = signal<boolean>(false);\n @Input() set canUpdateObject(canUpdateObject: boolean) {\n this._canUpdateObject.set(canUpdateObject);\n }\n\n private _rootObjectId : string = \"\";\n @Input() set rootObjectId(id: string) {\n if(this._rootObjectId === id) {\n return;\n }\n this._cancelEditingProperties();\n\n this._currentObjectId$.next(id);\n this._createObjectStructure(id, this.revision);\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n private readonly isSaveButtonDisabled$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n protected readonly visibleNodeSignal:WritableSignal<PreviewObject> = signal({id:\"\",visible:false,opaque:false});\n protected readonly opaqueNodeSignal:WritableSignal<PreviewObject> = signal({id:\"\",visible:false,opaque:false});\n\n private readonly _currentObjectId$ = new BehaviorSubject<string> (\"\");\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string> (\"\");\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n configEditProperties: Array<BimplusButtonRowItem> = [];\n configEditedProperties: Array<BimplusButtonRowItem> = [];\n\n @Output() updatedObjectProperties = new EventEmitter<{ [key: string]: unknown }>();\n\n _editPropertiesButtonsConfiguration() {\n this.configEditProperties.push({\n id: 'edit-properties',\n title: this.translateService.instant('_Edit_properties'),\n tooltip: this.translateService.instant('_Edit_properties'),\n disabled: !this._canUpdateObject(),\n buttonStyle: 'primary',\n });\n }\n\n _editedPropertiesButtonsConfiguration() {\n this.configEditedProperties.push({\n id: 'save-changed-properties',\n title: this.translateService.instant('_Save'),\n tooltip: this.translateService.instant('_Save'),\n disabled: this.isSaveButtonDisabled$,\n buttonStyle: 'primary',\n });\n this.configEditedProperties.push({\n id: 'cancel-editing-properties',\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'secondary',\n });\n }\n\n ngOnInit() {\n this._editPropertiesButtonsConfiguration();\n this._editedPropertiesButtonsConfiguration();\n\n this.buttonRowItems = this.configEditProperties;\n\n this.subscribeProperties(); \n }\n\n subscribeProperties() {\n this._currentPropertiesObjectId$.subscribe({\n next: (id) => {\n if (id) {\n this._createObjectProperties(id, this.revision);\n }\n },\n });\n\n this._currentObjectId$.subscribe({\n next: (id) => {\n this._currentPropertiesObjectId$.next(id);\n this._createComplexPropertiestructure(id, this.revision);\n },\n });\n }\n\n handleObjectStructureNodeSelected(node: ObjectStructureNode) {\n console.log(node);\n this._currentObjectId$.next(node.id);\n }\n\n handleObjectStructureNodeVisible(node : ObjectStructureNode){\n const objNode: PreviewObject = {\n id:node.id,\n visible: node.visible,\n opaque: node.opaque};\n this.visibleNodeSignal.set(objNode); // Update the signal\n }\n\n handleObjectStructureNodeOpaque(node : ObjectStructureNode){\n const objNode: PreviewObject = {\n id:node.id,\n visible: node.visible,\n opaque: node.opaque};\n this.opaqueNodeSignal.set(objNode); // Update the signal\n }\n \n\n handleComplexPropertyNodeSelected(node : ComplexPropertiesNode){\n console.log(node);\n this._currentPropertiesObjectId$.next(node.id);\n }\n\n private _loadObjectStructure(objectId: string, revision: number | undefined) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.getTopology(objectId, revision, false, false, undefined)\n );\n }\n\n private _createObjectStructure(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectStructure(objectId, revision)?.subscribe({\n next: (structureData) => {\n if (structureData) {\n this._objectStructure =\n ObjectStructureNodeBuilder.createFromResponse(structureData);\n }\n },\n });\n }\n\n private _loadObjectComplexPropertiesStructure(\n objectId: string,\n revision: number | undefined\n ) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.getComplexPropertiesTopology(objectId, revision)\n );\n }\n\n private _createComplexPropertiestructure(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectComplexPropertiesStructure(objectId, revision)?.subscribe({\n next: (structureData) => {\n if (structureData) {\n const complexProps =\n ComplexPropertiesNodeBuilder.createFromResponse(structureData);\n if (complexProps?.children?.length) {\n this._complexProperties = complexProps;\n } else {\n this._complexProperties = null;\n }\n }\n },\n });\n }\n\n protected objectAttributeGroups = signal<ObjectAttributeGroup[]>([]);\n\n private _loadObjectProperties(\n objectId: string,\n revision: number | undefined\n ) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.get(objectId, revision, '8', undefined, false, undefined)\n );\n }\n\n private _createObjectProperties(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectProperties(objectId, revision)?.subscribe({\n // properties response is badly structured, nearly impossible to create class structure from it. Therefore using shortcut\n // any for json response\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (propertiesData: any) => {\n this.objectPropertiesService.setModel(propertiesData);\n this.objectAttributeGroups.set(this._createAttributeGroupsFromResponse(propertiesData));\n },\n error: () => {\n this.objectAttributeGroups.set([]);\n },\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _tooltip(attrib: any): string {\n const nameTitle: string = this.translateService.instant('_Name');\n const name: string = attrib.name ? attrib.name : '';\n const descriptionTitle: string =\n this.translateService.instant('description');\n const description: string = attrib.description;\n const uuidTitle: string = this.translateService.instant('_UUID');\n const uuid: string = attrib.id;\n if (\n description === null ||\n description === undefined ||\n description === ''\n ) {\n return `${nameTitle}: ${name}\\n${uuidTitle}: ${uuid}`;\n }\n return `${nameTitle}: ${name}\\n${descriptionTitle}: ${description}\\n${uuidTitle}: ${uuid}`;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _createAttributeGroupsFromResponse(propertiesData: any) {\n const groups: Array<ObjectAttributeGroup> = [];\n let localizedAttribGroups = null;\n if (propertiesData.localizedAttributeGroups) {\n localizedAttribGroups = propertiesData.localizedAttributeGroups;\n }\n\n if (!propertiesData.attributes) {\n return groups;\n }\n\n const attribGroups = propertiesData.attributes;\n for (const [groupName, attribsObject] of Object.entries(attribGroups)) {\n const newGroup: ObjectAttributeGroup = {\n name: groupName,\n expanded: false,\n attributes: [],\n };\n\n if (localizedAttribGroups?.[groupName]) {\n newGroup.name = localizedAttribGroups[groupName];\n }\n\n if (!attribsObject) {\n continue;\n }\n\n for (const attrib of Object.values(attribsObject)) {\n const newAttrib: ObjectAttribute = {\n id: attrib.id,\n name: attrib.name,\n description: attrib.description,\n value: attrib.value,\n group: attrib.group,\n type: attrib.type,\n unit: attrib.unit,\n decimal: attrib.decimal,\n control: attrib.control,\n enumdefinition: attrib.enumdefinition,\n isChangeable: attrib.isChangeable,\n tooltip: this._tooltip(attrib),\n minValue: attrib.minValue,\n maxValue: attrib.maxValue,\n };\n\n newGroup.attributes.push(newAttrib);\n }\n groups.push(newGroup);\n }\n\n return groups;\n }\n\n _deleteForm() {\n this._objectPropertiesForm = new FormGroup({});\n }\n\n private initialFormValues: string = \"\";\n _createForm() {\n const _getAttributeValue = new GetAttributeValue();\n const _form: { [key: string]: FormGroup } = {};\n this.objectAttributeGroups().forEach(groupAttributes => {\n const _form_group: { [key: string]: FormControl | null } = {};\n groupAttributes.attributes.forEach(attribute => {\n if((typeof attribute.type === 'string' && /^boolean$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [Validators.pattern(/^(false|true|0|1)$/i)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^boolean$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^checkbox$/i.test(attribute.control))\n )\n {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^double$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleValidator(attribute.minValue, attribute.maxValue)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^int(32)?$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [integerValidator(attribute.minValue, attribute.maxValue)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^guid$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [guidValidator()] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^double$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^guid$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [guidEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^int(32)?$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [stringEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^combobox$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [stringComboboxValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^datetime$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [] : []\n );\n return;\n }\n });\n _form[groupAttributes.name] = this.formBuilder.group(_form_group);\n });\n this._objectPropertiesForm = this.formBuilder.group(_form);\n\n this.initialFormValues = JSON.stringify(this._objectPropertiesForm.value);\n this._objectPropertiesForm.valueChanges.subscribe({\n next: (value) => {\n const changed: boolean = JSON.stringify(value) !== this.initialFormValues;\n this.isSaveButtonDisabled$.next(!(this._objectPropertiesForm.valid && changed));\n }\n });\n }\n\n private _getPropertyName(uuid: string): string {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.name;\n }\n }\n }\n return '';\n }\n\n private _getPropertyType(uuid: string): string {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.type;\n }\n }\n }\n return '';\n }\n\n private _getPropertyControl(uuid: string): string | undefined {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.control;\n }\n }\n }\n return '';\n }\n\n private _convertValueToBoolean(value: string): boolean {\n return /^true$/i.test(value) || /^1$/i.test(value);\n }\n\n private _convertValueToDouble(value: string): number {\n return parseFloat(value);\n }\n\n private _hasBeenValueChanged(uuid: string, value: string | number | boolean): boolean {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return value !== attr.value;\n }\n }\n }\n return false;\n }\n\n private _getChangedData(formGroup: FormGroup): { [key: string]: unknown } {\n const changedData: { [key: string]: unknown } = {};\n\n Object.keys(formGroup.controls).forEach(key => {\n const control = formGroup.get(key);\n\n if (control instanceof FormControl) {\n // If it's a FormControl and it's dirty, capture the changed value\n if (control.dirty) {\n const propName: string = this._getPropertyName(key);\n const propType: string = this._getPropertyType(key);\n // const propControl: string = this._getPropertyControl(key);\n if(propName === '') {\n const _newValue = {\n id: key,\n value: control.value\n };\n changedData[key] = _newValue;\n } else {\n if(/^boolean$/i.test(propType)) {\n const _val: boolean = this._convertValueToBoolean(control.value);\n if(this._hasBeenValueChanged(key, _val)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n else if(/^double$/i.test(propType)) {\n const _val: number = this._convertValueToDouble(control.value);\n if(this._hasBeenValueChanged(key, _val)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n else {\n const _val: string = control.value;\n\n if(this._hasBeenValueChanged(key, control.value)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n }\n }\n } else if (control instanceof FormGroup) {\n if(control.dirty) {\n // Recursively get changed data from nested FormGroup\n const nestedChanges = this._getChangedData(control);\n if (Object.keys(nestedChanges).length > 0) {\n changedData[key] = nestedChanges;\n }\n }\n }\n });\n\n return changedData;\n }\n\n private _saveObjectProperties() {\n const saveData: { [key: string]: unknown } = {};\n saveData['id'] = this._currentObjectId$.value;\n saveData['unsaved'] = true;\n saveData['attributes'] = this._getChangedData(this._objectPropertiesForm);\n this.saveObjectProperties(saveData);\n }\n\n private _cancelEditingProperties() {\n this._editMode.set(false);\n this._deleteForm();\n this.buttonRowItems = this.configEditProperties\n }\n\n protected buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'edit-properties') {\n this._editMode.set(true);\n this._createForm();\n console.log('Edit properties clicked');\n this.buttonRowItems = this.configEditedProperties;\n }\n\n if ($event.id === 'save-changed-properties') {\n this._saveObjectProperties();\n this._cancelEditingProperties();\n console.log('Save changed properties clicked');\n }\n\n if ($event.id === 'cancel-editing-properties') {\n this._cancelEditingProperties();\n console.log('Cancel edit properties clicked');\n }\n }\n\n hasSetAnyAttribute(objectAttributeGroup: ObjectAttributeGroup) {\n return objectAttributeGroup.attributes.some((attrib) => {\n return !isObjectPropertyValueBlank(attrib);\n });\n }\n\n protected saveObjectProperties(data: { [key: string]: unknown }): void {\n const selectedObjectId = this._currentPropertiesObjectId$.value;\n if (!data || !selectedObjectId) {\n return;\n }\n\n if (!this.api) {\n return;\n }\n\n from(this.api.objects.put(selectedObjectId, JSON.stringify(data))).subscribe({\n next: (response: { [key: string]: unknown }) => {\n this._createObjectProperties(selectedObjectId, this.revision);\n this._createObjectStructure(selectedObjectId, this.revision);\n this.updatedObjectProperties.emit({ id: selectedObjectId, request: data, response });\n },\n });\n }\n}\n","<lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n/>\n\n<div class=\"object-properties\">\n\n <lib-bimplus-scrollable-container>\n <lib-expansion-panel class=\"object-properties-preview-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-structure-header\">{{\"_3D preview\" | translate}}</span>\n </lib-expansion-panel-header>\n <lib-object-preview \n [api]=\"api\" \n [revision]=\"revision\" \n [objectId]=\"rootObjectId\"\n [visibleNode]=\"visibleNodeSignal()\"\t\n [opaqueNode]=\"opaqueNodeSignal()\"\n />\n </lib-expansion-panel>\n <!-- Object structure-->\n <lib-expansion-panel class=\"object-properties-object-structure-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-structure-header\">{{\"_Object structure\" | translate}}</span>\n </lib-expansion-panel-header>\n @if (objectStructure) {\n <lib-bimplus-object-structure\n [objectStructure]=\"objectStructure\"\n [hasCheckBox1]=\"true\"\n [hasCheckBox2]=\"true\"\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\n (nodeVisible)= \"handleObjectStructureNodeVisible($event)\"\n (nodeOpaque)= \"handleObjectStructureNodeOpaque($event)\"\n />\n }\n </lib-expansion-panel>\n <!-- End Object structure-->\n\n <!-- Complex properties-->\n @if(complexProperties){\n <lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"object-properties-header\"> {{\"_Object multiproperties tree\" | translate}}</span>\n </lib-expansion-panel-header>\n <lib-bimplus-object-complex-properties\n [complexProperties]=\"complexProperties\"\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\n />\n </lib-expansion-panel>\n }\n <!-- End Complex properties-->\n\n @if(objectAttributeGroups().length > 0){\n <lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"object-properties-header\">{{\"_Object properties\" | translate}}</span>\n </lib-expansion-panel-header>\n <form [formGroup]=\"_objectPropertiesForm\" class=\"input-form\">\n @for (attribGroup of objectAttributeGroups(); track attribGroup) {\n @if(_editMode() || hasSetAnyAttribute(attribGroup)){\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\n <lib-expansion-panel-header>\n <span class=\"object-properties-group-header\"> {{attribGroup.name}}</span>\n </lib-expansion-panel-header>\n <lib-object-properties-group\n [attributesGroup]=\"attribGroup\"\n [editMode]=\"_editMode()\"\n [canUpdateObject]=\"_canUpdateObject()\"\n [objectPropertiesForm]=\"_objectPropertiesGroupForm(attribGroup.name)\"\n />\n </lib-expansion-panel>\n }\n }\n </form>\n </lib-expansion-panel>\n }\n </lib-bimplus-scrollable-container>\n</div>\n","import { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport {BimplusButtonsRowComponent} from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport {BimplusButtonClickEvent, BimplusButtonRowItem} from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\n\nexport interface ConfirmDialogInputData {\n title: string;\n message: string;\n acceptButtonLocalizedString: string;\n cancelButtonLocalizedString: string;\n acceptCallback: () => void;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-confirm',\n imports: [\n TranslateModule,\n BimplusButtonsRowComponent\n ],\n templateUrl: './bimplus-overlay-dialog-confirm.component.html',\n styleUrl: './bimplus-overlay-dialog-confirm.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusOverlayDialogConfirmComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n private _title: string = '';\n private _message: string = '';\n acceptButtonLocalizedString: string = '_Accept';\n cancelButtonLocalizedString: string = '_Cancel';\n acceptCallback: (() => void) | undefined;\n protected buttons: BimplusButtonRowItem[] = [];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n const data = this.dialogService.inputData as ConfirmDialogInputData;\n\n if (data) {\n this.title = data.title || '';\n this.message = data.message || '';\n this.acceptButtonLocalizedString = data.acceptButtonLocalizedString || '_Accept';\n this.cancelButtonLocalizedString = data.cancelButtonLocalizedString || '_Cancel';\n this.acceptCallback = data.acceptCallback;\n }\n\n this.initializeButtons();\n }\n\n initializeButtons() {\n this.buttons = [\n {\n id: \"accept\",\n title: this.translateService.instant(this.acceptButtonLocalizedString),\n tooltip: this.translateService.instant(this.acceptButtonLocalizedString),\n disabled: false,\n buttonStyle: 'primary'\n },\n {\n id: \"cancel\",\n title: this.translateService.instant(this.cancelButtonLocalizedString),\n tooltip: this.translateService.instant(this.cancelButtonLocalizedString),\n disabled: false,\n buttonStyle: 'secondary'\n }\n ];\n }\n\n close() {\n this.dialogService.close();\n (document.activeElement as HTMLElement)?.blur();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.dialogService.close();\n }\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n this.dialogService.close();\n\n if ($event.id === \"accept\") {\n this.acceptCallback?.();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"header\">\n <div class=\"icon\"></div>\n <div class=\"title-text\">\n {{ title }}\n </div>\n <div\n class=\"close-button\"\n (click)=\"close()\"\n (keydown)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"content\">\n <div class=\"text\" [innerHTML]=\"message\"></div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\"\n />\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport * as WebSdk from 'bimplus-websdk';\n@Injectable({\n providedIn: 'root'\n})\nexport class DecoratorsService {\n\n constructor() { }\n \n fmt(string: string, ...formats: unknown[]): string {\n let index = 0;\n\n return string.replace(/%@(\\d+)?/g, (match: string, argumentIndex: string) => {\n const argumentIndexN = argumentIndex ? parseInt(argumentIndex, 10) - 1 : index++;\n const _match = formats[argumentIndexN];\n\n if (_match === null) {\n return '(null)';\n }\n if (_match === undefined) {\n return '';\n }\n return _match.toString();\n });\n }\n/**--------------------------------------------------------------------------\n * decorate link\n --------------------------------------------------------------------------*/\n decorateLink(api:WebSdk.Api,link:WebSdk.AttachmentLink,objectIds:[string]):WebSdk.AttachmentLink{\n\n const retval:WebSdk.AttachmentLink = {\n id: link.id,\n name: link.name,\n fileName: link.fileName,\n size: link.size,\n link: link.link,\n fileNameShort: '',\n extension: '',\n objectIds: objectIds,\n version: link.version,\n sizeMB: \"\"\n };\n const access_token = api.getAccessToken();\n const attVersion = \"attachments/%@/versions/%@/download\";\n const url = api.getApiTeamUrl()+attVersion;\n const isEmbeddedAllplanMode = false;\n retval.size = parseFloat((link.size / 1000).toFixed(2));\n retval.link = `${this.fmt(url, link.id, link.version)}?api-token=${access_token}${ isEmbeddedAllplanMode ? '' : '&openInBrowser=true'}`;\n if (link.fileName.length > 20) {\n const fileParts = link.fileName.split('.');\n if (fileParts.length > 1) {\n retval.fileNameShort = fileParts.slice(0, -1).join('.');\n retval.extension = \".\" + fileParts.slice(-1);\n } else {\n retval.fileNameShort = link.fileName;\n }\n } else {\n retval.fileNameShort = link.fileName;\n } \n return retval;\n } \n}\n","import { Component, ViewEncapsulation, Input, OnInit, Renderer2, ElementRef, OnDestroy, booleanAttribute, Output, EventEmitter, inject } from '@angular/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as WebSdk from 'bimplus-websdk';\nimport { from , BehaviorSubject, switchMap, forkJoin } from 'rxjs';\nimport { concatMap } from 'rxjs/operators';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport { ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport {\n BimplusOverlayDialogConfirmComponent\n} from \"../bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport * as WebClient from 'bimplus-webclient';\nimport {NewAttachInfo} from '../bimplus-object-comments-list/bimplus-object-comments-list.interface';\nimport {DecoratorsService } from '../../services/decorators.service';\nexport const EMBEDDED_MODAL_DIALOGE_TYPE_FILE = 'file';\n\nexport const postAttachmentLinks = (newAttachmentIDs: string[], objectId: string, api: WebSdk.Api) => {\n // Create an array of observables for each post request\n const postRequests = newAttachmentIDs.map((id) => \n from(api.objects.postAttachmentLink(objectId, JSON.stringify({ attachmentId: id}))) \n );\n\n // Use forkJoin to wait for all post requests to complete in parallel\n return forkJoin(postRequests)\n .pipe(\n // After all posts are complete, switch to the next call to get updated links\n concatMap(() => from(api.objects.getAttachmentLinks(objectId)))\n )\n}\n\n@Component({\n selector: 'lib-links-to-documents',\n imports: [\n TranslateModule,\n BimplusScrollableContainerComponent,\n BimplusButtonsRowComponent,\n ],\n templateUrl: './links-to-documents.component.html',\n styleUrls: ['./links-to-documents.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class LinksToDocumentsComponent extends BimplusLocalizedWidgetComponent implements OnInit, OnDestroy {\n private readonly dialogService = inject(DialogService);\n private readonly renderer = inject(Renderer2);\n private readonly el = inject(ElementRef);\n private readonly decorators = inject(DecoratorsService);\n\n\n constructor() {\n super();\n\n this.shadowRootElement = this.el.nativeElement.shadowRoot;\n }\n\n private readonly shadowRootElement: HTMLElement;\n private _rootObjectId : string = \"\";\n isDestroyed = false;\n localWormHole:boolean = true;\n //When is true then it means the creation of link is in progress\n inProgress:boolean= false;\n\n @Input({ required: true }) api!: WebSdk.Api | null;\n @Input() canCreateAttachmentLink: boolean = true;\n /** Input Attribute to specify if should show only list of attachments. */\n @Input({ transform: booleanAttribute }) listOnly = false;\n /** Input Attribute to specify if should show message when no attachments found. */\n @Input({ transform: booleanAttribute }) showEmptyMessage: boolean = true;\n /** Input Attribute to tell if show/hide attachemt size information. */\n @Input({ transform: booleanAttribute }) hideAttachmentSize = false;\n\n @Input() inputBaseUrl: string =''; // base url for the embedded modal\n \n _attachments: WebSdk.AttachmentLink[] = [];\n\n @Input()\n set attachments(value: WebSdk.AttachmentLink[]) {\n this._attachments = value;\n this.onAttachmentsChange();\n }\n\n get attachments(): WebSdk.AttachmentLink[] {\n return this._attachments;\n }\n\n onAttachmentsChange() {\n if(this.api && this.rootObjectId){\n this._attachments = this.decorateAttachmentLinks(this.api,this._attachments); \n }\n }\n\n\n @Output() attachmentsChange = new EventEmitter<string[]>();\n @Output() attachmentsLinkChange = new EventEmitter<NewAttachInfo[]>();\n @Input() canDeleteAttachmentLink:boolean = true;\n @Input() project : ProjectNavigatorProject | null = null;\n @Input() wormholeSelector : string | undefined= \"localEmbeddedModalId\"; // calling application can provide a place where the iframe for documents selection will be rendered\n @Input() env : string = 'dev';\n\n @Input()\n set rootObjectId(id : string|undefined){\n if(!id){\n return;\n }\n this._currentObjectId$.next(id);\n this._rootObjectId = id;\n }\n\n get rootObjectId() : string{\n return this._rootObjectId;\n }\n\n private readonly _currentObjectId$ = new BehaviorSubject<string> (\"\");\n _attachmentCount : number = 0;\n buttonRowItems: Array<BimplusButtonRowItem> = [\n {\n id: \"add-documents\"\n , title: this.translateService.instant('_Add_document')\n , tooltip: this.translateService.instant('_Add_document')\n , disabled: !this.canCreateAttachmentLink\n , buttonStyle: 'primary'\n }\n ];\n\n ngOnInit() {\n if (!this.listOnly) {\n this._currentObjectId$.subscribe({\n next: (id) => {\n this._createAttachmentLinkStructure(id);\n }\n });\n }\n };\n\n ngOnDestroy(): void {\n this.isDestroyed = true;\n }\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private decorateAttachmentId(item:any){\n const it:NewAttachInfo = {\n id: item.id,\n name: item.name,\n nameShort: item.name,\n url:'',\n iconClass: '',\n iconTitle: '',\n type: 'AttachmentLink',\n deleteButtonTitle:'' \n }; \n return it;\n }\n\n private decorateAttachmentLinks(api:WebSdk.Api, links:WebSdk.AttachmentLinksResponse):WebSdk.AttachmentLink[]{\n const decoratedLinks = links.map((link) => this.decorators.decorateLink(api,link,[this._currentObjectId$.value]));\n decoratedLinks.sort((a,b) => {\n if(a.fileName.toLowerCase() < b.fileName.toLowerCase() ) return -1;\n if(a.fileName.toLowerCase() > b.fileName.toLowerCase() ) return 1;\n return 0;\n });\n return decoratedLinks;\n }\n\n private _createAttachmentLinkStructure(objectId : string){\n\n this._loadAttachmentLinkStructure(objectId)?.subscribe({\n next :(structureData) => {\n if(structureData){\n //this._attachmentLinkStructure = _attachmentLink StructureBuilder.createFromResponse(structureData);\n this._attachmentCount = structureData?.length;\n if(this.api){\n const retval = this.decorateAttachmentLinks(this.api,structureData);\n if(retval){\n this._attachments = retval;\n }\n }\n }\n }\n })\n }\n\n private _loadAttachmentLinkStructure(objectId : string){\n if(!this.api){\n return;\n }\n\n if(!objectId) {\n return;\n }\n return from(this.api.objects.getAttachmentLinks(objectId));\n }\n\n documentSelection :string[] | null = null;\n isOpened:boolean = false;\n embeddedModalContainer:string = 'embedded-modal';\n\n // show or hide embedded modal\n setModalVisibility(opened = true) {\n if(!this.wormholeSelector){\n return;\n }\n const element = this.localWormHole ? this.shadowRootElement.querySelector(\"#\" + this.wormholeSelector):\n document.getElementById(this.wormholeSelector);\n if (!element) {\n return;\n }\n if(this.localWormHole){\n if(element.parentElement){\n this.renderer.setStyle(element.parentElement,'display',opened?'block':'none')\n }\n } else {\n this.renderer.setStyle(element.parentElement,'display',opened?'block':'none')\n }\n\n ///containerEl.fadeIn(\"fast\") : containerEl.fadeOut(\"fast\");\n this.isOpened = opened;\n }\n\n\n closeEmbeddedModalFileSelection() {\n this.setModalVisibility(false);\n }\n\n _addLink(api:WebSdk.Api, ids:string[]) {\n // filter out already existing attachment links \n const newAttachmentIDs = ids.filter( item => !this.attachments.find(n => n.id === item) );\n if( !newAttachmentIDs.length ){\n return;\n }\n if(this.inProgress){\n console.log('in progress');\n return;\n }\n\n if(!this.rootObjectId){\n // we don't know to which object we want to attach the documents\n // so we will deliver just information about selected documents\n const getRequests = newAttachmentIDs.map((id) => \n from(api.objects.get(id,0,undefined,undefined,undefined,undefined))\n );\n \n forkJoin(getRequests).subscribe({\n next: (results) => {\n // Process the array of results\n (results as WebSdk.AttachmentLink[])?.forEach((item) => {\n if(item?.id && !this.attachments.find(attachment => attachment?.id === item.id)){\n this._attachments.push(item);\n }\n });\n const retval:NewAttachInfo[] = this._attachments.map((item) => this.decorateAttachmentId(item)); \n this.attachmentsLinkChange.emit(retval);\n },\n error: (err) => {\n console.error('Error occurred during requests:', err);\n this._attachments=[];\n }\n });\n return;\n }\n\n // we know to which object we want to attach the documents\n this.inProgress = true;\n postAttachmentLinks(newAttachmentIDs, this.rootObjectId, api)\n .subscribe({\n next: (updatedAttachments) => {\n this._attachments = this.decorateAttachmentLinks(\n api,\n updatedAttachments\n ); // Update attachments in component \n this.inProgress = false; \n this.attachmentsChange.emit(newAttachmentIDs) \n },\n error: (err) => {\n console.error('Failed to add or reload attachments:', err);\n this.inProgress = false;\n }\n });\n }\n\n\n createAttachmentLink(api: WebSdk.Api){\n console.log('createAttachmentLink')\n this.localWormHole = this.wormholeSelector === \"localEmbeddedModalId\";\n const callbackF = (docIDs:string[]):void => {\n const ids = (typeof docIDs === 'string') ? [docIDs] : docIDs;\n const foundDocuments = ids && ids.length > 0;\n if(!this.isDestroyed){\n this.closeEmbeddedModalFileSelection();\n if (foundDocuments) {\n this._addLink(api,ids);\n }\n }\n }\n\n if (typeof callbackF !== \"function\" || !this.project || !this.api) {\n return;\n }\n\n setTimeout(() => {\n const isLocalhost = window.location.href.includes(\"localhost\");\n let access_token :string|null |undefined= '';\n access_token = this.api?.getAccessToken();\n if (!access_token) {\n access_token = window.localStorage.getItem('access_token');\n if (!access_token /*&& isLocalhost*/) {\n return;\n }\n }\n const newClient = new WebClient.ExternalClient('BImplusNGXComponentClient');\n newClient?.initialize();\n // Make embedded windows pointing to the current feature branch with baseUrl setup\n const options:{baseUrl?:string} = {};\n // In case of localhost ommit explicit setup of baseUrl\n if (!isLocalhost) {\n // Remove '/viewer/' from the end of pathname\n let filteredPathname = window.location.pathname.replace(/\\/viewer\\/$/, '/');\n // Remove '/connexis/' from the end of pathname if we use temporary url for connexis like https://portal-dev.bimplus.net/connexis/?embedded...\n filteredPathname = filteredPathname.replace(/\\/connexis\\/$/, '/');\n options.baseUrl = this.inputBaseUrl ? this.inputBaseUrl: window.location.origin + filteredPathname;\n }\n\n ///const env:string=\"dev\"; ///!!! to-do introduce env variable into components\n const clientModule = WebClient.BimFilesSelect;\n if(this.wormholeSelector){\n const documentSelection = new clientModule(this.wormholeSelector, access_token, newClient, this.env, options);\n if (!documentSelection) {\n return;\n }\n documentSelection.onAttachmentSelected = callbackF;\n\n if(this.project){\n if(this.localWormHole){\n documentSelection.loadShadowRoot(this.shadowRootElement,this.project.teamSlug , this.project.id);\n }else{\n documentSelection.load(this.project.teamSlug , this.project.id);\n }\n }\n this.setModalVisibility(true);\n }\n },200);\n\n }\n\n _deleteAttachmentLink(api:WebSdk.Api ,id:string,$event:Event){\n $event.stopPropagation();\n $event.preventDefault();\n const objects = api.objects;\n const objectId = this._currentObjectId$.value;\n from(api.objects.deleteAttachmentLink(this.rootObjectId,id)).pipe(\n switchMap(() => from(objects.getAttachmentLinks(objectId)))\n ).subscribe({\n next: (updatedAttachments) => {\n if(this.api){\n this._attachments = this.decorateAttachmentLinks(this.api,updatedAttachments); // Update attachments in component\n // Process the array of results\n const retval:NewAttachInfo[] = this._attachments?.map((item) => this.decorateAttachmentId(item));\n this.attachmentsLinkChange.emit(retval);\n }\n },\n error: (err) => {\n console.error('Failed to delete or reload attachments:', err);\n }\n });\n }\n\n deleteAttachmentLink(attachment:WebSdk.AttachmentLink,$event:Event){\n if(!this.api){\n return;\n }\n if(!attachment) {\n return;\n }\n const api = this.api;\n this.dialogService.open(BimplusOverlayDialogConfirmComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true\n }, data: {\n title: this.translateService.instant('_Delete_attachmentlink'),\n message: this.translateService.instant('_Attachmentlink_delete_confirmation_message'),\n acceptButtonLocalizedString: \"_Delete\",\n acceptCallback: () => {\n this._deleteAttachmentLink(api,attachment.id,$event);\n }\n }\n });\n }\n\n\n buttonClicked($event: BimplusButtonClickEvent){\n if(!this.api){\n return;\n }\n const api = this.api;\n if($event.id == \"add-documents\"){\n this.createAttachmentLink(api);\n }\n }\n}\n","<div class=\"links-to-documents\">\n @if (canCreateAttachmentLink && !listOnly) {\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n />\n }\n @if (wormholeSelector === 'localEmbeddedModalId'){\n <div class='embedded-modal-container'>\n <iframe id={{wormholeSelector}} [title]=\"\"></iframe>\n </div> \n }\n @if (!_attachments.length && showEmptyMessage) {\n <div \n data-test=\"no-attachment-links\"\n class=\"bim-attachment-not-found\"\n > {{ '_No_attachmentlinks_found' | translate }}\n </div>\n } @else {\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n @for (attachment of _attachments; track attachment; let i = $index) {\n <div class=\"attachment-row\">\n @if (canDeleteAttachmentLink) {\n <span class=\"bim-attachment-delete-button\" (click)=\"deleteAttachmentLink(attachment,$event)\" (keydown)=\"deleteAttachmentLink(attachment,$event)\">\n <div\n title=\"{{ '_Delete_attachmentlink' | translate }}\"\n >\n &#10005;&#xFE0E;\n </div>\n </span>\n }\n <a class=\"bim-attachmentlink-item\" href={{attachment.link}} target='_blank' rel='noopener noreferrer'>\n <div class=\"bim-attachment-name\" title={{attachment.fileName}}>\n {{attachment.name ? attachment.name : attachment.fileName}}\n </div>\n @if (!hideAttachmentSize) {\n <div class=\"bim-attachment-size\" title={{attachment.name}}>\n ({{attachment.size}} kB)\n </div>\n }\n </a>\n </div>\n }\n </lib-bimplus-scrollable-container>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { BimplusLocalizedWidgetComponent } from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-object-hyperlinks-item',\n imports: [\n TranslateModule\n ],\n templateUrl: './object-hyperlinks-item.component.html',\n styleUrl: './object-hyperlinks-item.component.less'\n})\nexport class ObjectHyperlinksItemComponent extends BimplusLocalizedWidgetComponent {\n constructor() {\n super();\n }\n\n @Input() hyperlink: WebSdk.Hyperlink | undefined;\n @Input() deleteButtonEnabled: boolean = true;\n\n @Output() deleteButtonClicked = new EventEmitter<void>();\n\n onDeleteButtonClick(): void {\n this.deleteButtonClicked.emit();\n }\n\n onDeleteButtonKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === ' ') {\n $event.preventDefault();\n\n this.onDeleteButtonClick();\n }\n }\n}\n","<div class=\"hyperlink-item\">\n @if (deleteButtonEnabled) {\n <div class=\"bim-list-button delete\" title=\"{{ '_Hyperlink delete confirmation title' | translate }}\" (click)=\"onDeleteButtonClick()\"\n (keydown)=\"onDeleteButtonKeyDown($event)\">\n &#10005;&#xFE0E;\n </div>\n }\n\n <a href=\"{{ hyperlink?.url }}\" class='bim-hyperlink-url' target=\"_blank\" title=\"{{ hyperlink?.url }}\">\n <div class=\"bim-hyperlink-name\">\n {{ hyperlink?.name }}\n </div>\n </a>\n</div>\n","import { Component, Input, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport {BimplusButtonsRowComponent} from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport {BimplusButtonClickEvent, BimplusButtonRowItem} from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport {BimplusLocalizedWidgetComponent} from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {\n BimplusScrollableContainerComponent\n} from \"../bimplus-scrollable-container/bimplus-scrollable-container.component\";\nimport {ObjectHyperlinksItemComponent} from \"../object-hyperlinks-item/object-hyperlinks-item.component\";\nimport * as WebSdk from \"bimplus-websdk\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {NgForOf} from \"@angular/common\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport {\n BimplusOverlayDialogConfirmComponent\n} from \"../bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component\";\nimport {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BimplusInputTextFieldComponent} from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\n\n@Component({\n selector: 'lib-object-hyperlinks',\n imports: [\n BimplusButtonsRowComponent,\n BimplusScrollableContainerComponent,\n ObjectHyperlinksItemComponent,\n NgForOf,\n TranslateModule,\n ReactiveFormsModule,\n BimplusInputTextFieldComponent\n ],\n templateUrl: './object-hyperlinks.component.html',\n styleUrl: './object-hyperlinks.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ObjectHyperlinksComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n private readonly dialogService = inject(DialogService);\n private readonly formBuilder = inject(FormBuilder);\n\n hyperlinkForm: FormGroup;\n\n constructor() {\n super();\n\n this.hyperlinkForm = this.formBuilder.group({\n name: ['', []],\n url: ['',\n [\n Validators.required,\n Validators.pattern(/^[^<>]*$/), // Do not allow < or >\n Validators.pattern(/^(?!\\s*$).+/) // Do not allow all empty string, but allow text after spaces\n ]\n ]\n });\n\n this.hyperlinkForm.statusChanges.subscribe(status => {\n this.buttonRowItems[0].disabled = status !== 'VALID';\n });\n }\n\n @Input() api: WebSdk.Api | null = null;\n\n @Input()\n set rootObjectId(id: string) {\n this._currentObjectId$.next(id);\n this.loadHyperlinks(id);\n\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n private readonly _currentObjectId$ = new BehaviorSubject<string>(\"\");\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string>(\"\");\n private _rootObjectId: string = \"\";\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n\n @Input() canCreateHyperlinks: boolean = true;\n @Input() canDeleteHyperlinks: boolean = true;\n\n hyperlinks: Array<WebSdk.Hyperlink> = [];\n\n ngOnInit() {\n this.buttonRowItems.push(\n {\n id: \"add-hyperlink\"\n , title: this.translateService.instant('_Add hyperlink')\n , tooltip: this.translateService.instant('_Add hyperlink')\n , disabled: true\n , buttonStyle: 'primary'\n }\n );\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"add-hyperlink\") {\n if (this.hyperlinkForm.valid) {\n this.addHyperlink(this.hyperlinkForm.value['name'], this.hyperlinkForm.value['url'], this._rootObjectId).then(() => {\n this.loadHyperlinks(this._rootObjectId);\n this.hyperlinkForm.reset();\n });\n }\n }\n }\n\n private loadHyperlinks(objectId: string) {\n if (!this.api)\n return;\n\n this.api.objects.getHyperlinks(objectId).then((response: WebSdk.HyperlinksResponse) => {\n this.hyperlinks = response;\n });\n }\n\n private addHyperlink(name: string, url: string, objectId: string): Promise<WebSdk.Hyperlink> {\n if (!this.api)\n return Promise.reject(new Error('API not available'));\n\n let sanitizedUrl: string = url.trim();\n\n if (!RegExp(/^http(s?):\\/\\//).exec(sanitizedUrl)) {\n sanitizedUrl = 'https://' + sanitizedUrl;\n }\n\n let sanitizedName = name?.trim() ?? '';\n\n if (sanitizedName === '') {\n sanitizedName = sanitizedUrl;\n }\n\n sanitizedName = sanitizedName?.replace(/^http(s?):\\/\\//, '');\n\n const data = JSON.stringify({\n name: sanitizedName,\n url: sanitizedUrl,\n objectId: objectId\n });\n\n return this.api.objects.postHyperlink(objectId, data);\n }\n\n onHyperlinkItemDeleteButtonClicked(hyperlink: WebSdk.Hyperlink) {\n this.dialogService.open(BimplusOverlayDialogConfirmComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true\n }, data: {\n title: this.translateService.instant('_Hyperlink delete confirmation title'),\n message: this.translateService.instant('_Hyperlink delete confirmation message'),\n acceptButtonLocalizedString: \"_Delete\",\n acceptCallback: () => {\n this.deleteHyperlink(hyperlink.id);\n }\n }\n });\n }\n\n private deleteHyperlink(id: string) {\n if (!this.api)\n return;\n\n this.api.hyperlinks.delete(id).then(() => {\n this.loadHyperlinks(this._rootObjectId);\n });\n }\n}\n","@if (canCreateHyperlinks) {\n <form [formGroup]=\"hyperlinkForm\" class=\"input-form\">\n <div>\n <lib-bimplus-input-text-field formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\"/>\n </div>\n <div>\n <lib-bimplus-input-text-field formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\"/>\n </div>\n\n <lib-bimplus-buttons-row [items]=\"buttonRowItems\" (buttonClicked)=\"buttonRowButtonClicked($event)\"/>\n </form>\n}\n\n<div class=\"list-anchor\">\n <div class=\"list\">\n <lib-bimplus-scrollable-container>\n @if (hyperlinks.length > 0) {\n <div style=\"padding-left: 8px\" *ngFor=\"let hyperlink of hyperlinks\">\n <lib-object-hyperlinks-item [hyperlink]=\"hyperlink\" [deleteButtonEnabled]=\"canDeleteHyperlinks\"\n (deleteButtonClicked)=\"onHyperlinkItemDeleteButtonClicked(hyperlink)\"/>\n </div>\n } @else {\n <div class=\"no-links\">{{ \"_No hyperlinks found\" | translate }}</div>\n }\n </lib-bimplus-scrollable-container>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\n\nexport interface ErrorDialogInputData {\n title: string;\n message: string;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-error',\n imports: [CommonModule, TranslateModule, BimplusButtonsRowComponent],\n templateUrl: './bimplus-overlay-dialog-error.component.html',\n styleUrls: ['./bimplus-overlay-dialog-error.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogErrorComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n\n private _title: string = '';\n private _message: string = '';\n private readonly _data: ErrorDialogInputData | undefined;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: \"errorDialogAcceptButton\",\n title: this.translateService.instant('_Ok'),\n tooltip: this.translateService.instant('_Ok'),\n disabled: false,\n buttonStyle: 'primary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this._data = this.dialogService.inputData as ErrorDialogInputData;\n this._title = this._data?.title || '';\n this._message = this._data?.message || '';\n }\n\n close() {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n buttonRowButtonClicked(): void {\n this.close();\n\n this.acceptCallback?.();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\">\n </div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{title}}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div class=\"overlay-dialog-container_content_msg\">\n {{this.message}}\n </div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked()\"\n />\n </div>\n </div>\n</div>\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport type BimplusTabComponentModel = {\r\n id: string;\r\n title: string;\r\n img: {\r\n default: string;\r\n active: string;\r\n };\r\n};\r\n\r\nexport const DEFAULT_TAB_SWITCHER_ELEMENTS: BimplusTabComponentModel[] = [\r\n { id: 'object-properties', img: { default: 'ic_models', active: 'ic_models_maincolor' }, title: '_Object properties' },\r\n { id: 'comments', img: { default: 'Comments_18_gray', active: 'Comments_18_maincolor' }, title: '_Comments' },\r\n { id: 'attachments', img: { default: 'Attachment_18_gray', active: 'Attachment_18_maincolor' }, title: '_Attachments' },\r\n { id: 'hyperlinks', img: { default: 'Links_18_gray', active: 'Links_18_maincolor' }, title: 'hyperlinks' },\r\n { id: 'links-to-documents', img: { default: 'Attachmentlink_18_gray', active: 'Attachmentlink_18_maincolor' }, title: '_Links_to_documents' },\r\n];\r\n\r\nexport type BimplusTabsSwitcherConfig = {\r\n defaultTabsSwitcherElements?: BimplusTabComponentModel[];\r\n disabled: Partial<{\r\n all: boolean;\r\n id: string;\r\n }>\r\n};\r\n\r\nexport const BIMPLUS_TABS_SWITCHER_CONFIG = new InjectionToken<BimplusTabsSwitcherConfig>('bimplus-tabs-switcher-config');","import { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { BIMPLUS_TABS_SWITCHER_CONFIG, BimplusTabComponentModel, BimplusTabsSwitcherConfig, DEFAULT_TAB_SWITCHER_ELEMENTS } from '../bimplus-tabs-switcher.interface';\r\n\r\n@Injectable()\r\nexport class BimplusTabsSwitcherService {\n private readonly bimplusTabsSwitcherConfig = inject<Pick<BimplusTabsSwitcherConfig, 'defaultTabsSwitcherElements'>>(BIMPLUS_TABS_SWITCHER_CONFIG, { optional: true });\n\r\n /** Default tab switcher elements. */\r\n private readonly tabSwitcherElements = new BehaviorSubject<\r\n BimplusTabComponentModel[]\r\n >(DEFAULT_TAB_SWITCHER_ELEMENTS);\r\n public readonly tabSwitcherElements$ =\r\n this.tabSwitcherElements.asObservable();\r\n\r\n /** Attribute to indicate active tab. (only for BimplusTabComponent) */\r\n private readonly activeTab = new Subject<string>();\r\n public readonly activeTab$ = this.activeTab.asObservable();\r\n\r\n public setActiveTab(key: string): void {\r\n this.activeTab.next(key);\r\n }\r\n\r\n constructor() {\r\n // if there is new default tabs from configuration token then use them instead of original default tabs\r\n if (this.bimplusTabsSwitcherConfig?.defaultTabsSwitcherElements) {\r\n this.tabSwitcherElements.next(\r\n this.bimplusTabsSwitcherConfig.defaultTabsSwitcherElements\r\n );\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, computed, EventEmitter, HostListener, Input, OnInit, Output, signal, inject } from '@angular/core';\r\nimport { BimplusTabsSwitcherService } from '../../services/bimplus-tabs-switcher.service';\r\nimport { BIMPLUS_TABS_SWITCHER_CONFIG, BimplusTabComponentModel, BimplusTabsSwitcherConfig } from '../../bimplus-tabs-switcher.interface';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nconst DEFAULT_IMAGE_SRC = '../../../../../../';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-tab',\r\n imports: [NgClass, TranslateModule],\r\n templateUrl: './bimplus-tab.component.html',\r\n styleUrl: './bimplus-tab.component.less'\r\n})\r\nexport class BimplusTabComponent implements OnInit {\n private readonly bimplusTabsSwitcherConfig = inject<BimplusTabsSwitcherConfig>(BIMPLUS_TABS_SWITCHER_CONFIG, { optional: true });\n protected readonly bimplusTabsSwitcherService = inject(BimplusTabsSwitcherService);\n\r\n @Input({ required: true }) bimplusTabComponentModel!: BimplusTabComponentModel;\r\n @Input() imageBaseSrc?: string | null = DEFAULT_IMAGE_SRC;\r\n /** Currently active tab. */\r\n @Input() set activeTab(value: string | undefined) {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n this.bimplusTabsSwitcherService.setActiveTab(value);\r\n }\r\n @Output() activeTabChange = new EventEmitter<string>();\r\n\r\n /** Attribute indicating active tab. */\r\n protected readonly activeTabSignal = toSignal(this.bimplusTabsSwitcherService.activeTab$);\r\n /** Indicate that tab is active or not. */\r\n protected readonly isActive = computed(() => this.activeTabSignal() === this.bimplusTabComponentModel.id);\r\n /** Indicate that tab is disabled or not. */\r\n protected readonly isDisabled = signal<boolean>(false);\r\n /** Computed property for image file name based on active/default state. */\r\n protected readonly imgName = computed(() =>\r\n this.isActive() ? this.bimplusTabComponentModel.img.active : this.bimplusTabComponentModel.img.default\r\n )\r\n protected readonly onHoverOver = signal<boolean>(false);\r\n\r\n /** Whether all tabs is disabled based on configuration token. */\r\n private readonly isAllDisabled = this.bimplusTabsSwitcherConfig?.disabled?.all ?? false;\r\n\r\n constructor() {\r\n if (this.isAllDisabled) {\r\n this.isDisabled.set(true);\r\n }\r\n }\r\n\r\n @HostListener('mouseenter')\r\n protected onMouseEnter(): void {\r\n this.onHoverOver.set(true)\r\n }\r\n\r\n @HostListener('mouseleave')\r\n protected onMouseLeave(): void {\r\n this.onHoverOver.set(false)\r\n }\r\n\r\n public ngOnInit(): void {\r\n // wheter specific tab is disabled\r\n if (!this.isAllDisabled && this.bimplusTabsSwitcherConfig?.disabled?.id) {\r\n this.isDisabled.set(this.bimplusTabsSwitcherConfig.disabled?.id === this.bimplusTabComponentModel.id);\r\n }\r\n }\r\n\r\n /**\r\n * Will update active tab to service state.\r\n * @protected\r\n * @returns void\r\n */\r\n protected activate(): void {\r\n if (this.isDisabled()) {\r\n return;\r\n }\r\n\r\n this.bimplusTabsSwitcherService.setActiveTab(this.bimplusTabComponentModel.id);\r\n this.activeTabChange.emit(this.bimplusTabComponentModel.id);\r\n }\r\n}\r\n","<div\r\n class=\"tab-element\"\r\n [title]=\"bimplusTabComponentModel.title | translate\"\r\n [class.disabled]=\"isDisabled()\"\r\n (click)=\"!isDisabled() && activate()\"\r\n (keypress)=\"!isDisabled() && activate()\"\r\n>\r\n <img src=\"{{imageBaseSrc}}assets/images/default/{{imgName()}}.svg\" [alt]=\"imgName()\">\r\n <div\r\n [attr.data-test]=\"'underline-switcher-' + bimplusTabComponentModel.id\"\r\n [ngClass]=\"{\r\n 'underline-switcher': true,\r\n 'highlight': isActive(),\r\n 'hovering': onHoverOver()\r\n }\"\r\n ></div>\r\n</div>\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, signal, Signal, Output, EventEmitter, Input, inject } from '@angular/core';\nimport { BimplusTabsSwitcherService } from './services/bimplus-tabs-switcher.service';\nimport { BimplusTabComponent } from './components/bimplus-tab/bimplus-tab.component';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BimplusTabComponentModel, DEFAULT_TAB_SWITCHER_ELEMENTS } from './bimplus-tabs-switcher.interface';\nimport { APP_BASE_HREF } from '@angular/common';\n\n@Component({\n selector: 'lib-bimplus-tabs-switcher',\n imports: [BimplusTabComponent],\n templateUrl: './bimplus-tabs-switcher.component.html',\n styleUrls: ['./bimplus-tabs-switcher.component.less'],\n providers: [BimplusTabsSwitcherService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusTabsSwitcherComponent {\n private readonly bimplusTabsSwitcherService = inject(BimplusTabsSwitcherService, { optional: true, skipSelf: true });\n\n @Input() activeTab?: string;\n @Output() activeTabChange = new EventEmitter<string>();\n\n /** default tab elements, can be chanaged from outside by BimplusTabsSwitcherService */\n protected readonly tabSwitcherElements: Signal<BimplusTabComponentModel[]>;\n /** app base href */\n protected readonly baseHref = inject(APP_BASE_HREF, { optional: true });\n\n constructor() {\n // will check wheter is used from outside and if not then add default tabs\n if (this.bimplusTabsSwitcherService) {\n this.tabSwitcherElements = toSignal(this.bimplusTabsSwitcherService.tabSwitcherElements$) as Signal<BimplusTabComponentModel[]>\n } else {\n this.tabSwitcherElements = signal<BimplusTabComponentModel[]>(DEFAULT_TAB_SWITCHER_ELEMENTS).asReadonly();\n }\n }\n}\n","<div class=\"tabswitcher-container\">\n @for (tabElement of tabSwitcherElements(); track tabElement.id) {\n <lib-bimplus-tab\n [attr.data-test]=\"tabElement.id\"\n [activeTab]=\"activeTab\"\n [imageBaseSrc]=\"baseHref\"\n (activeTabChange)=\"activeTabChange.emit($event)\"\n [bimplusTabComponentModel]=\"{ id: tabElement.id, title: tabElement.title, img: { active: tabElement.img.active, default: tabElement.img.default }}\"\n />\n }\n <ng-content></ng-content>\n</div>","import { DecimalPipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\nconst MB_SIZE = 1000;\r\n\r\nexport const BitConverterSize = {\r\n KB: 'kB',\r\n GB: 'gib',\r\n MB: 'mb'\r\n // more..\r\n} as const;\r\n\r\ntype SizeType = typeof BitConverterSize['GB' | 'KB' | 'MB'];\r\n\r\n@Pipe({\r\n name: 'bitConverter',\r\n standalone: true\r\n})\r\nexport class BitConverterPipe extends DecimalPipe implements PipeTransform {\r\n override transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\r\n override transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\r\n override transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null;\r\n override transform(value: unknown, sizeToConvert: SizeType = BitConverterSize.KB, digitsInfo: string = '1.2-2', base: number = MB_SIZE): string | null {\r\n if (!this.isNumber(value)) {\r\n throw new Error('[BitConverterPipe]: value is not a number');\r\n }\r\n const size = this.getSizeFromBites(value, sizeToConvert, base);\r\n let decimalValue = super.transform(size, digitsInfo);\r\n decimalValue ??= value.toString();\r\n\r\n return `(${decimalValue} ${sizeToConvert})`;\r\n }\r\n\r\n private getSizeFromBites(value: number, size: SizeType, base: number): number {\r\n switch(size) {\r\n case 'kB':\r\n return value / base;\r\n case 'mb':\r\n return value / (base * base);\r\n case 'gib':\r\n return value / (base * base * base);\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n private isNumber(value: unknown): value is number {\r\n return typeof value === 'number' && !isNaN(value);\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\n\nexport type BimplusAttachmentsConfig = {\n buttons?: BimplusButtonRowItem[];\n hideDeleteAttachmentButton?: boolean;\n showNoAttachmentsFound?: boolean;\n hideAttachmentSize?: boolean;\n};\nexport const BIMPLUS_ATTACHMENTS_CONFIG =\n new InjectionToken<BimplusAttachmentsConfig>('bimplus-attachments-config');\n\nexport interface IAttachment {\n id: string;\n fileName: string;\n size: number | undefined;\n file?: File;\n}\n\nexport class Attachment implements Partial<IAttachment> {\n public id: string;\n public fileName: string;\n public size: number | undefined;\n public file?: File;\n\n constructor(data: Partial<IAttachment>) {\n this.id = data.id ?? '';\n this.fileName = data.fileName ?? '';\n this.size = data.size ?? 0;\n }\n}\n\ntype Builder = typeof AttachmentBuilder;\n\nexport abstract class AttachmentBuilder {\n private static attachment = new Attachment({});\n\n public static create(value: Attachment): Builder {\n this.attachment = new Attachment(value);\n return this;\n }\n\n public static setId(id: string): Builder {\n this.attachment.id = id;\n return this;\n }\n\n public static setFileName(name: string): Builder {\n this.attachment.fileName = name;\n return this;\n }\n\n public static setSize(size: number): Builder {\n this.attachment.size = size;\n return this;\n }\n\n public static setFile(file: File): Builder {\n this.attachment.file = file;\n return this;\n }\n\n public static build(): Attachment {\n const attachmentToReturn = structuredClone(this.attachment);\n this.attachment = new Attachment({});\n\n return attachmentToReturn;\n }\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { BitConverterPipe } from '../../../../pipes/bit-converter.pipe';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n} from '../../bimplus-attachments.interface';\n\nconst BIM_ATTACHMENT_DELETE_BUTTON_WIDTH = 30;\nconst BIM_ATTACHMENT_ITEM_PADDING_LEFT = 28;\n\n@Component({\n selector: 'lib-bimplus-attachment-item',\n imports: [BitConverterPipe, TranslateModule],\n templateUrl: './bimplus-attachment-item.component.html',\n styleUrl: './bimplus-attachment-item.component.less'\n})\nexport class BimplusAttachmentItemComponent\n implements AfterViewInit, OnDestroy\n{\n @Input() closeIconTemplate?: TemplateRef<unknown>;\n @ViewChild('attachmentSizeRef') attachmentSizeRef?: ElementRef<HTMLElement>;\n @ViewChild('attachmentNameRef') attachmentNameRef!: ElementRef<HTMLElement>;\n @Input({ required: true }) attachment!: Attachment;\n @Input() set parentWidth(value: number | undefined) {\n if (!value) {\n return;\n }\n\n this.parentWidthSignal.set(value);\n }\n @Output() deleteAttachment = new EventEmitter<Attachment>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n get type(): string {\n return `.${this.attachment.fileName.split('.').at(-1)}`;\n }\n\n private intersectionObserver?: IntersectionObserver;\n /** Parent element width. */\n private readonly parentWidthSignal = signal<number | undefined>(undefined);\n /** Attachment size text width. */\n private readonly attachmentSizeWidth = signal<number>(0);\n /** Wheter name is fully visible or not based on parent width. */\n protected readonly nameIsFullyVisible = signal<boolean>(false);\n\n protected readonly config = inject(BIMPLUS_ATTACHMENTS_CONFIG, {\n optional: true,\n });\n\n /** Attribute to indicate if show/hide size of File. */\n protected readonly hideSize = !!this.config?.hideAttachmentSize;\n\n /** Width size of file name line. */\n protected readonly nameInfoLineWidth = computed<number>(() => {\n const parentWidth = this.parentWidthSignal();\n const attachmentSizeWidth = this.attachmentSizeWidth();\n const nameIsFullyVisible = this.nameIsFullyVisible();\n\n if (!parentWidth) {\n return 0;\n }\n\n if (nameIsFullyVisible) {\n return parentWidth - BIM_ATTACHMENT_DELETE_BUTTON_WIDTH;\n }\n\n return (\n parentWidth -\n attachmentSizeWidth -\n (BIM_ATTACHMENT_DELETE_BUTTON_WIDTH + BIM_ATTACHMENT_ITEM_PADDING_LEFT)\n );\n });\n\n public ngAfterViewInit(): void {\n if (this.attachmentSizeRef) {\n this.attachmentSizeWidth.set(\n +this.attachmentSizeRef.nativeElement.clientWidth\n );\n this.createIntersectionObserver();\n this.intersectionObserver!.observe(this.attachmentNameRef.nativeElement);\n }\n }\n\n public ngOnDestroy(): void {\n this.intersectionObserver?.unobserve(this.attachmentNameRef.nativeElement);\n }\n\n private createIntersectionObserver(): void {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: '0px',\n threshold: 1.0,\n };\n const callback: IntersectionObserverCallback = (entries) =>\n entries.forEach(({ intersectionRect, boundingClientRect }) => {\n const isWidthFullyVisible = intersectionRect.width === boundingClientRect.width;\n this.nameIsFullyVisible.set(isWidthFullyVisible);\n });\n\n this.intersectionObserver = new IntersectionObserver(callback, options);\n }\n}\n","<div class=\"bim-attachment-item\">\n <div\n data-test=\"bim-attachment\"\n (click)=\"getAttachment.emit(attachment)\"\n (keypress)=\"$event.preventDefault()\"\n title=\"{{ attachment.fileName }}\"\n class=\"bim-attachment-name\"\n [style.width.px]=\"nameInfoLineWidth()\"\n >\n <span #attachmentNameRef>{{ attachment.fileName }}</span>\n @if (nameIsFullyVisible() && !hideSize) {\n <span class=\"bim-attachment-size\">{{ attachment.size | bitConverter:'kB':'1.2-2' }}</span>\n }\n </div>\n @if(!nameIsFullyVisible() && !hideSize) {\n <span>{{ type }} </span>\n <div #attachmentSizeRef class=\"bim-attachment-size\">\n {{ attachment.size | bitConverter:'kB':'1.2-2' }}\n </div>\n }\n @if (!config?.hideDeleteAttachmentButton) {\n <span\n data-test=\"delete-attachment-btn\"\n class=\"bim-attachment-delete-button\"\n title=\"{{ '_Delete attachment' | translate }}\"\n (click)=\"deleteAttachment.emit(attachment)\"\n (keypress)=\"$event.preventDefault()\"\n >\n <span class=\"icon\">✕︎</span>\n </span>\n }\n</div>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusAttachmentItemComponent } from './components/bimplus-attachment-item/bimplus-attachment-item.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n} from './bimplus-attachments.interface';\nimport * as WebSdk from 'bimplus-websdk';\n@Component({\n selector: 'lib-bimplus-attachments',\n imports: [\n TranslateModule,\n BimplusButtonsRowComponent,\n BimplusAttachmentItemComponent,\n BimplusScrollableContainerComponent\n ],\n templateUrl: './bimplus-attachments.component.html',\n styleUrl: './bimplus-attachments.component.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusAttachmentsComponent\n extends BimplusLocalizedWidgetComponent\n implements AfterViewInit, OnDestroy\n{\n @Input() api : WebSdk.Api | null = null;\n /** Attribute for attachments which were saved to server. */\n @Input() attachments: Attachment[] = [];\n @Input() closeIconTemplate?: TemplateRef<unknown>;\n /** Attribute to set if should button display or no. */\n @Input({ transform: booleanAttribute }) listOnly = false;\n @ViewChild('attachmentListRef') attachmentListRef!: ElementRef<HTMLElement>;\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @Output() deleteAttachment = new EventEmitter<Attachment>();\n @Output() addAttachment = new EventEmitter<File>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n private resizeObserver!: ResizeObserver;\n /** Configuration token. */\n protected readonly config = inject(BIMPLUS_ATTACHMENTS_CONFIG, {\n optional: true,\n });\n /** Attachments buttons. */\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: 'add-attachment',\n title: this.translateService.instant('_Add attachment'),\n tooltip: this.translateService.instant('_Add attachment'),\n disabled: false,\n buttonStyle: 'primary',\n type: 'file',\n },\n ];\n /** Width size of file name line. */\n protected readonly attachmentListWidth = signal<number | undefined>(\n undefined\n );\n\n /**\n * Will open window to select File.\n * @return void\n * @public\n */\n public open(): void {\n this.fileInput.nativeElement.click();\n }\n\n public ngAfterViewInit(): void {\n this.createResizeObserver();\n this.resizeObserver.observe(this.attachmentListRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.resizeObserver.unobserve(this.attachmentListRef.nativeElement);\n }\n\n protected onFileChanged(files: File[] | Event, inputElement?: HTMLInputElement): void {\n let filesArray: File[] = [];\n if(files instanceof FileList){\n filesArray = Array.from(files);\n } else if(files instanceof Event){\n const input = files.target as HTMLInputElement;\n if (input?.files) { \n filesArray = Array.from(input.files); \n }\n } \n for (const file of filesArray) {\n if (file instanceof File) {\n this.addAttachment.emit(file);\n } \n } \n // reset value to be able select same value again\n if (inputElement) {\n inputElement.value = ''\n }\n }\n\n private createResizeObserver(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const { width }: DOMRectReadOnly = entries[0].contentRect;\n this.attachmentListWidth.set(width);\n });\n }\n}\n","<div class=\"bim-attachments\">\r\n @if (listOnly) {\r\n <input #fileInput hidden type=\"file\" (change)=\"onFileChanged($event, fileInput)\" multiple>\r\n } @else {\r\n <lib-bimplus-buttons-row [items]=\"config?.buttons ?? buttons\" (fileChanged)=\"onFileChanged($event)\" [isMultiple]=\"true\"/>\r\n }\r\n\r\n @if (listOnly) {\r\n <section #attachmentListRef class=\"bim-attachments-list\">\r\n @if (!attachments.length) {\r\n @if (config?.showNoAttachmentsFound) {\r\n <div\r\n data-test=\"no-attachments\"\r\n class=\"bim-attachments-list-empty\"\r\n >{{ '_No attachments found' | translate }}</div>\r\n }\r\n } @else {\r\n @for (attachment of attachments; track attachment.id) {\r\n <lib-bimplus-attachment-item\r\n [closeIconTemplate]=\"closeIconTemplate\"\r\n [attr.data-test]=\"attachment.id\"\r\n (deleteAttachment)=\"deleteAttachment.emit($event)\"\r\n (getAttachment)=\"getAttachment.emit($event)\"\r\n [parentWidth]=\"attachmentListWidth()\"\r\n [attachment]=\"attachment\"\r\n />\r\n }\r\n }\r\n </section>\r\n } @else {\r\n <div class=\"scrollable-content-container\">\r\n <lib-bimplus-scrollable-container>\r\n <section #attachmentListRef class=\"bim-attachments-list\">\r\n @if (!attachments.length) {\r\n @if (config?.showNoAttachmentsFound) {\r\n <div\r\n data-test=\"no-attachments\"\r\n class=\"bim-attachments-list-empty\"\r\n >{{ '_No attachments found' | translate }}</div>\r\n }\r\n } @else {\r\n @for (attachment of attachments; track attachment.id) {\r\n <lib-bimplus-attachment-item\r\n [closeIconTemplate]=\"closeIconTemplate\"\r\n [attr.data-test]=\"attachment.id\"\r\n (deleteAttachment)=\"deleteAttachment.emit($event)\"\r\n (getAttachment)=\"getAttachment.emit($event)\"\r\n [parentWidth]=\"attachmentListWidth()\"\r\n [attachment]=\"attachment\"\r\n />\r\n }\r\n }\r\n </section>\r\n </lib-bimplus-scrollable-container>\r\n </div> \r\n }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n Attachment,\r\n AttachmentBuilder,\r\n} from '../bimplus-attachments.interface';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BimplusAttachmentsService {\r\n public getAttachment(value: Attachment | File): Attachment {\r\n let attachment: Attachment;\r\n if (value instanceof File) {\r\n attachment = AttachmentBuilder.setFile(value)\r\n .setFileName(value.name)\r\n .build();\r\n } else {\r\n attachment = AttachmentBuilder.create(value).build();\r\n }\r\n\r\n return attachment;\r\n }\r\n\r\n public download(href: string, fileName: string): void {\r\n const anchor: HTMLAnchorElement = document.createElement('a');\r\n anchor.rel = 'noopener noreferrer';\r\n anchor.target = '_blank';\r\n anchor.href = href;\r\n anchor.download = fileName;\r\n anchor.click();\r\n }\r\n}\r\n","import { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\n\nexport interface CommentDialogData {\n title: string;\n message: string;\n acceptCallback: () => void;\n}\n\nconst DELETE_BUTTON_ID = 'delete';\nconst CANCEL_BUTTON_ID = 'cancel';\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-delete',\n templateUrl: './bimplus-overlay-dialog-delete.component.html',\n styleUrls: ['./bimplus-overlay-dialog-delete.component.less'],\n imports: [TranslateModule, BimplusButtonsRowComponent],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogDeleteComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n\n private _title: string = '';\n private _message: string = '';\n private readonly data: CommentDialogData | undefined;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: DELETE_BUTTON_ID,\n title: this.translateService.instant('_Delete'),\n tooltip: this.translateService.instant('_Delete'),\n disabled: false,\n buttonStyle: 'primary'\n },\n {\n id: CANCEL_BUTTON_ID,\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'secondary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this.data = this.dialogService.inputData as CommentDialogData;\n if (this.data) {\n this._title = this.data.title || '';\n this._message = this.data.message || '';\n this.acceptCallback = this.data.acceptCallback;\n }\n }\n\n close(): void {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.dialogService.close();\n }\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent): void {\n this.dialogService.close();\n\n if ($event.id === DELETE_BUTTON_ID) {\n this.acceptCallback?.();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\"></div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{title}}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div\n class=\"overlay-dialog-container_content_msg\"\n [innerHTML]=\"message\">\n </div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\"\n />\n </div>\n </div>\n</div>\n","import { Directive, ElementRef, HostListener, Input, inject } from '@angular/core';\n\n@Directive({\n selector: '[libAutoResizeTextarea]',\n standalone: true\n})\nexport class AutoResizeTextareaDirective {\n private el = inject(ElementRef);\n\n\n private _libAutoResizeTextarea = false;\n private _autoResizeMinRows = 1;\n private _autoResizeMaxRows = 1;\n private currentRows = 1;\n private offsetHeight = 0;\n private readonly input: HTMLTextAreaElement;\n private avgLineHeight = 0;\n\n @Input()\n set autoResizeMinRows(value: number) {\n this._autoResizeMinRows = value > 0 ? value : 1;\n this.currentRows = this.currentRows < value ? value : this.currentRows;\n this.input.rows = value;\n }\n get autoResizeMinRows(): number {\n return this._autoResizeMinRows;\n }\n\n @Input()\n set autoResizeMaxRows(value: number) {\n this._autoResizeMaxRows = value < 1 ? 1 : value;\n }\n get autoResizeMaxRows(): number {\n return this._autoResizeMaxRows;\n }\n\n @Input()\n set libAutoResizeTextarea(condition: boolean) {\n this._libAutoResizeTextarea = condition;\n }\n get libAutoResizeTextarea(): boolean {\n return this._libAutoResizeTextarea;\n }\n\n constructor() {\n this.input = this.el.nativeElement;\n }\n\n @HostListener('input')\n onInput(): void {\n if (this.libAutoResizeTextarea) {\n this.calculateLineHeight();\n this.updateRows();\n }\n }\n\n private calculateLineHeight(): void {\n const style = window.getComputedStyle(this.input, null);\n const lineHeight = style.getPropertyValue('line-height');\n let newLineHeight = 0;\n if (lineHeight === 'normal') {\n newLineHeight = (parseFloat(style.getPropertyValue('font-size')) || 16) * 1.14;\n } else {\n newLineHeight = parseFloat(lineHeight);\n }\n this.avgLineHeight = Math.trunc(newLineHeight);\n }\n\n private updateRows(): void {\n if (this.offsetHeight <= 0) {\n this.offsetHeight = this.input.scrollHeight;\n }\n\n this.input.rows = this._autoResizeMinRows;\n\n const rows = Math.floor(\n (this.input.scrollHeight - this.offsetHeight) /\n this.avgLineHeight\n );\n\n const rowsCount = this._autoResizeMinRows + rows;\n\n this.input.rows = rowsCount > this._autoResizeMaxRows\n ? this._autoResizeMaxRows\n : rowsCount;\n }\n\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { AutoResizeTextareaDirective } from './auto-resize-textarea.directive';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'lib-bimplus-textarea',\n templateUrl: './bimplus-textarea.component.html',\n styleUrls: ['./bimplus-textarea.component.less'],\n imports: [ReactiveFormsModule, AutoResizeTextareaDirective, TranslateModule]\n})\nexport class BimplusTextareaComponent implements OnInit, OnDestroy {\n\n textareaControl = new FormControl();\n\n private _textareaSubscription?: Subscription;\n\n @Output() textAreaValueChange = new EventEmitter<string>();\n\n private _name = '';\n private _placeholder = '';\n private _readonly = false;\n private _required = false;\n private _rows = 1;\n private _activeAutoResizeTextarea = false;\n private _minRows = 1;\n private _maxRows = 1;\n private _clearValue = false;\n\n @Input()\n set name(value: string) {\n this._name = value;\n }\n get name(): string {\n return this._name;\n }\n\n @Input()\n set placeholder(value: string) {\n this._placeholder = value;\n }\n get placeholder(): string {\n return this._placeholder;\n }\n\n @Input()\n set readonly(value: boolean) {\n this._readonly = value;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n @Input()\n set required(value: boolean) {\n this._required = value;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set minRows(value: number) {\n this._minRows = value;\n }\n get minRows(): number {\n return this._minRows;\n }\n\n @Input()\n set maxRows(value: number) {\n this._maxRows = value;\n }\n get maxRows(): number {\n return this._maxRows;\n }\n\n @Input()\n set activeAutoResizeTextarea(value: boolean) {\n this._activeAutoResizeTextarea = value;\n }\n get activeAutoResizeTextarea(): boolean {\n return this._activeAutoResizeTextarea;\n }\n\n @Input()\n set clearValue(clear: boolean) {\n if (clear) {\n this.textareaControl.reset();\n this._clearValue = false;\n } else {\n this._clearValue = clear;\n }\n }\n get clearValue(): boolean {\n return this._clearValue;\n }\n\n @Input()\n set rows(value: number) {\n this._rows = value;\n }\n get rows(): number {\n return this._rows;\n }\n\n constructor() {}\n\n ngOnInit() {\n this._textareaSubscription = this.textareaControl.valueChanges.subscribe(value => {\n this.textAreaValueChange.emit(value);\n });\n }\n\n getTextareaValue() {\n return this.textareaControl.value;\n }\n\n onKeydown(event: KeyboardEvent): boolean {\n const forbiddenKeys = ['<', '>'];\n if (forbiddenKeys.includes(event.key)) {\n event.preventDefault();\n return false;\n }\n return true;\n }\n\n ngOnDestroy() {\n this._textareaSubscription?.unsubscribe();\n }\n}\n","@if(activeAutoResizeTextarea){\n <textarea\n [formControl]=\"textareaControl\"\n [placeholder]=\"placeholder | translate\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (keydown)=\"onKeydown($event)\"\n [libAutoResizeTextarea]=\"activeAutoResizeTextarea\"\n [autoResizeMinRows]=\"minRows\"\n [autoResizeMaxRows]=\"maxRows\"\n ></textarea>\n } @else {\n <textarea\n [formControl]=\"textareaControl\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (keydown)=\"onKeydown($event)\"\n [rows]=\"rows\"\n ></textarea>\n }\n","import { formatDate, NgForOf } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { TranslatePipe } from \"@ngx-translate/core\";\nimport { BimplusAttachmentsComponent } from '../bimplus-attachments/bimplus-attachments.component';\nimport { Attachment, BIMPLUS_ATTACHMENTS_CONFIG, BimplusAttachmentsConfig } from '../bimplus-attachments/bimplus-attachments.interface';\nimport { CommentOutputData } from '../bimplus-object-comments-list/bimplus-object-comments-list.interface';\n\nconst config: BimplusAttachmentsConfig = {\n hideDeleteAttachmentButton: true,\n hideAttachmentSize: true\n}\n\n@Component({\n selector: 'lib-bimplus-comment',\n templateUrl: './bimplus-comment.component.html',\n styleUrls: ['./bimplus-comment.component.less'],\n imports: [NgForOf, TranslatePipe, BimplusAttachmentsComponent],\n providers: [{ provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config }],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusCommentComponent {\n\n @Output() outputActionCommentEvent = new EventEmitter<CommentOutputData>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n private _message: string | undefined = undefined;\n \n @Input() api : WebSdk.Api | null = null;\n\n /** Attachments links to particular comment. */\n @Input() attachmentLinkItems:WebSdk.AttachmentLink[] = []\n\n @Input()\n set message(value: string | undefined) {\n this._message = value;\n }\n get message(): string | undefined {\n return this._message;\n }\n\n private _date = '';\n @Input()\n set date(value: string) {\n const formattedValue = new Intl.DateTimeFormat(undefined, { timeStyle: \"short\" }).format(new Date(value));\n this._date = formattedValue;\n }\n get date(): string {\n return this._date;\n }\n\n private _action = 'close';\n @Input()\n set action(value: string) {\n this._action = value;\n }\n get action(): string {\n return this._action;\n }\n\n private _commentId = '';\n @Input()\n set commentId(value: string) {\n this._commentId = value;\n }\n get commentId(): string {\n return this._commentId;\n }\n\n private _isActUserAuthor = true;\n @Input()\n set isActUserAuthor(value: boolean) {\n this._isActUserAuthor = value;\n }\n get isActUserAuthor(): boolean {\n return this._isActUserAuthor;\n }\n\n private _displayname = '';\n @Input()\n set displayname(value: string) {\n this._displayname = value;\n }\n get displayname(): string {\n return this._displayname;\n }\n\n @Input() hyperlinks: WebSdk.Hyperlink[] | undefined = [];\n\n /** Attachments related to particular comment. */\n @Input() attachments: WebSdk.Attachment[] = [];\n\n emitAction(data: CommentOutputData): void {\n this.outputActionCommentEvent.emit(data);\n }\n\n close(): void {\n const data: CommentOutputData = { action: this.action, data: { commentId: this.commentId } };\n this.emitAction(data);\n }\n\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n formatTime(date: string): string {\n const locale = window.navigator.language;\n const unformattedDate = new Date(date);\n if (locale.includes('en')) {\n return formatDate(unformattedDate, 'hh:mm a', locale);\n }\n return formatDate(unformattedDate, 'hh:mm', locale);\n }\n}\n","@if (message !== undefined) {\n<div \n class=\"comment-item-container\"\n [class]=\"isActUserAuthor ? 'author' : ''\">\n @if (!isActUserAuthor) {\n <div class=\"comment-header\">\n <div class=\"comment-title\">{{isActUserAuthor? '' : displayname}}</div> \n </div>\n }\n @if (isActUserAuthor) {\n <div\n class=\"comment-close\"\n (click)=\"close()\"\n (keydown)=\"onKeyPress($event)\"\n ></div>\n }\n @if (message !== undefined){\n <div class=\"comment-item-text\">{{message}}</div>\n }\n\n @if (attachments.length) {\n <lib-bimplus-attachments \n listOnly \n [attachments]=\"attachments\" \n (getAttachment)=\"getAttachment.emit($event)\"\n />\n }\n\n @if (attachmentLinkItems.length) {\n <a *ngFor=\"let attachmentLink of attachmentLinkItems\" class=\"item-row\" href=\"{{attachmentLink.link}}\" target=\"_blank\">\n <div class=\"attachment-link-icon\" title=\"{{ '_Attachment_link' | translate }}\"></div>\n <div class=\"text\" title=\"{{ attachmentLink.name }}\">{{ attachmentLink.name}}</div>\n </a> \n }\n\n <a *ngFor=\"let link of hyperlinks\" class=\"item-row\" href=\"{{ link.url }}\" target=\"_blank\">\n <div class=\"link-icon\" title=\"{{ '_Hyperlink' | translate }}\"></div>\n <div class=\"text\" title=\"{{ link.url }}\">{{ link.name }}</div>\n </a>\n \n @if (date && date.length > 0){\n <div class=\"comment-item-date\">\n {{date}}\n </div>\n }\n</div>\n}\n","import { inject, Injectable } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport {catchError, defaultIfEmpty, first, forkJoin, from, map, Observable, of, switchMap} from 'rxjs';\nimport { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';\nimport { Attachment } from '../bimplus-attachments/bimplus-attachments.interface';\nimport { postAttachmentLinks } from '../links-to-documents/links-to-documents.component';\nimport {DecoratorsService } from '../../services/decorators.service';\n\n@Injectable()\nexport class BimplusObjectCommentsListService {\n private readonly decorators = inject(DecoratorsService);\n\n public api!: WebSdk.Api;\n\n private readonly bimplusAttachmentsService = inject(BimplusAttachmentsService);\n\n\n public deleteComment(commentId: string) {\n return from(this.api.comments.delete(commentId));\n }\n\n public downloadAttachment(attachment: Attachment) {\n const { id, fileName } = attachment;\n if (!this.api) {\n return;\n }\n const api = this.api;\n const path = `${api.getApiTeamUrl()}attachments/${id}/download?api-token=${api.getAccessToken()}&openInBrowser=true`;\n this.bimplusAttachmentsService.download(path, fileName);\n }\n\n public postComments(\n rootObjectId: string,\n dataText: string,\n hyperlinks: Partial<WebSdk.Hyperlink>[],\n attachments: Attachment[],\n newAttachmentIDs: string[]\n ): Observable<string | null> {\n return from(this.api.objects.postComment(rootObjectId, dataText)).pipe(\n switchMap(createdComment => {\n const { id: createdCommentId } = createdComment;\n\n // Create form data for attachments\n const formData = attachments.map(attachment => {\n const attachmentsPayload = new FormData();\n attachmentsPayload.append('file', attachment.file!);\n attachmentsPayload.append('name', attachment.fileName);\n attachmentsPayload.append('size', attachment.file!.size.toString());\n attachmentsPayload.append('type', attachment.file!.type);\n attachmentsPayload.append('objectId', createdCommentId);\n return attachmentsPayload;\n });\n\n // Post attachments if any, otherwise continue\n const attachmentCalls = formData.length\n ? forkJoin(formData.map(data => from(this.api.objects.postAttachment(createdCommentId, data, undefined, ''))))\n : of([]);\n\n return attachmentCalls.pipe(map(() => createdCommentId));\n }),\n switchMap(createdCommentId => {\n // Post attachment links\n return newAttachmentIDs.length\n ? postAttachmentLinks(newAttachmentIDs, createdCommentId, this.api).pipe(map(() => createdCommentId))\n : of(createdCommentId);\n }),\n switchMap(createdCommentId => {\n // Manage hyperlinks\n return hyperlinks.length\n ? this.manageHyperLinks(createdCommentId, hyperlinks).pipe(map(() => createdCommentId))\n : of(createdCommentId);\n }),\n defaultIfEmpty(null),\n first(),\n catchError(error => {\n console.error('Error in postComments:', error);\n return of(null); // Ensure the stream completes with null in case of an error\n })\n );\n }\n private decorateComment(comment: WebSdk.CommentResponse) {\n if(comment.attachmentLinks && comment.attachmentLinks.length > 0) {\n const decoratedLinks = comment.attachmentLinks.map((link) => this.decorators.decorateLink(this.api!,link, [comment.id])); \n comment.attachmentLinks = decoratedLinks; \n }\n }\n\n private decorateComments(comments: WebSdk.CommentsResponse) { \n comments.forEach((comment) => {\n this.decorateComment(comment);\n });\n return comments;\n }\n\n public loadComments(objectId: string): Observable<WebSdk.CommentsResponse> {\n return from(this.api.objects.getComments(objectId)).pipe(\n map((response: WebSdk.CommentsResponse | undefined) => {\n if (!response) {\n throw new Error('Comments response is undefined'); // Handle undefined response\n }\n // Modify the response here\n return this.decorateComments(response!); \n })\n );\n }\n\n public manageHyperLinks(\n createdCommentId: string,\n hyperlinks: Partial<WebSdk.Hyperlink>[]\n ) {\n const hyperlinkPromises: (Promise<void | WebSdk.Hyperlink> | undefined)[] =\n [];\n\n hyperlinks.forEach((h) => {\n if (!h) {\n return;\n }\n const hyperlinkData = JSON.stringify({\n name: h.name,\n objectId: h.objectId,\n url: h.url\n });\n const promise = this.api?.objects\n .postHyperlink(createdCommentId, hyperlinkData)\n .catch((err) => {\n console.log(err);\n });\n hyperlinkPromises.push(promise);\n });\n\n return from(Promise.all(hyperlinkPromises));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { StatusBarData } from './statusBar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BimplusStatusBarService {\n\n _statusBarData: BehaviorSubject<StatusBarData> = new BehaviorSubject<StatusBarData>({\n title: '',\n statusBarVisible: false\n });\n\n constructor() { }\n\n get statusBarVisible(): boolean {\n return this._statusBarData.value.statusBarVisible;\n }\n\n get title(): string {\n return this._statusBarData.value.title;\n }\n\n get statusBarData(): StatusBarData {\n return this._statusBarData.value;\n }\n\n get statusBarDataSubscription(): BehaviorSubject<StatusBarData> {\n return this._statusBarData;\n }\n\n setStatusBarData(data: StatusBarData): void {\n this._statusBarData.next(data);\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, signal, SimpleChanges, ViewEncapsulation, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BimplusOverlayDialogDeleteComponent } from '../bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AsyncPipe, DatePipe, NgFor } from '@angular/common';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusTextareaComponent } from '../bimplus-textarea/bimplus-textarea.component';\nimport { BimplusCommentComponent } from '../bimplus-comment/bimplus-comment.component';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component';\nimport { CommentData, CommentOutputData, IDialogConfirmClose } from './bimplus-object-comments-list.interface';\nimport { BimplusInputTextFieldComponent } from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { BimplusAttachmentsComponent } from '../bimplus-attachments/bimplus-attachments.component';\nimport { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n BimplusAttachmentsConfig,\n} from '../bimplus-attachments/bimplus-attachments.interface';\nimport { BehaviorSubject, switchMap } from 'rxjs';\nimport { BimplusObjectCommentsListService } from './bimplus-object-comments-list.service';\nimport { LinksToDocumentsComponent } from '../links-to-documents/links-to-documents.component';\nimport { ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { BimplusStatusBarService } from '../bimplus-status-bar/bimplus-status-bar.service';\nimport { NewAttachInfo } from './bimplus-object-comments-list.interface';\n\n\nconst config: BimplusAttachmentsConfig = {\n showNoAttachmentsFound: false,\n hideAttachmentSize: true,\n};\n@Component({\n selector: 'lib-bimplus-object-comments-list',\n templateUrl: './bimplus-object-comments-list.component.html',\n styleUrls: ['./bimplus-object-comments-list.component.less'],\n imports: [\n NgFor,\n CommonModule,\n BimplusTextareaComponent,\n BimplusCommentComponent,\n BimplusButtonsRowComponent,\n TranslateModule,\n BimplusScrollableContainerComponent,\n BimplusInputTextFieldComponent,\n BimplusAttachmentsComponent,\n LinksToDocumentsComponent,\n FormsModule,\n ReactiveFormsModule,\n AsyncPipe,\n ],\n providers: [\n DatePipe,\n BimplusObjectCommentsListService,\n BimplusAttachmentsService,\n { provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusObjectCommentsListComponent\n extends BimplusLocalizedWidgetComponent\n implements OnInit, OnChanges {\n private readonly dialogService = inject(DialogService);\n private readonly datePipe = inject(DatePipe);\n private readonly formBuilder = inject(FormBuilder);\n protected readonly bimplusAttachmentsService = inject(BimplusAttachmentsService);\n private readonly bimplusObjectCommentsListService = inject(BimplusObjectCommentsListService);\n private statusBarService = inject(BimplusStatusBarService);\n\n hyperlinkForm: FormGroup;\n\n @Input({ required: true }) api!: WebSdk.Api | null;\n @Input() project: ProjectNavigatorProject | null = null;\n @Input() wormholeSelector: string = \"localEmbeddedModalId\";\n @Input() env: string = \"prod\";\n @Input() attachmentLinkItems: WebSdk.AttachmentLink[] = []\n @Input() inputBaseUrl: string = '';\n protected readonly commentsList$ = new BehaviorSubject<WebSdk.CommentResponse[]>([]);\n protected readonly loading = signal(false);\n protected readonly attachmentsState = signal<Attachment[]>([]);\n buttonRowItems: BimplusButtonRowItem[] = [];\n hyperlinkButtonRowItems: BimplusButtonRowItem[] = [];\n textAreaValue: string | null = null;\n lastShownDate = '';\n placeholder = '';\n name = '';\n readonly = false;\n autoResizeTextarea = true;\n minRows = 3;\n maxRows = 10;\n clearValue = false;\n statusBarTitleMessage = this.translateService.instant('_Loading');\n\n // attachment ids ready to map to concrete comment\n newAttachmentIDs: string[] = []\n\n isAddingHyperlink: boolean = false;\n\n newCommentAttachments: NewAttachInfo[] = [];\n\n private _rootObjectId = '';\n private _userId = '';\n\n @Input()\n set rootObjectId(id: string) {\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n @Input()\n set userId(id: string) {\n this._userId = id;\n }\n\n get userId(): string {\n return this._userId;\n }\n\n constructor() {\n super();\n\n this.hyperlinkForm = this.formBuilder.group({\n name: ['', []],\n url: [\n '',\n [\n Validators.required,\n Validators.pattern(/^[^<>]*$/), // Do not allow < or >\n Validators.pattern(/^(?!\\s*$).+/), // Do not allow all empty string, but allow text after spaces\n ],\n ],\n });\n }\n\n isCreateButtonDisabled(): boolean {\n return !(\n this.textAreaValue ||\n this.newAttachmentIDs?.length > 0 ||\n this.getHyperlinks(this.rootObjectId)?.length > 0 ||\n this.attachmentsState()?.length > 0\n );\n }\n\n checkCreateButtonState() {\n if (!this.buttonRowItems?.[0]) {\n return;\n }\n this.buttonRowItems[0].disabled = this.isCreateButtonDisabled();\n }\n\n public ngOnInit(): void {\n this.bimplusObjectCommentsListService.api = this.api!;\n this.loadComments();\n const submit: BimplusButtonRowItem[] = [\n {\n id: 'submit',\n title: this.translateService.instant('_Add comment'),\n tooltip: this.translateService.instant('_Add comment'),\n disabled: this.isCreateButtonDisabled(),\n buttonStyle: 'primary',\n },\n ];\n this.placeholder = this.translateService.instant(\n '_Place comment text here'\n );\n this.name = this.translateService.instant('comment');\n this.buttonRowItems = submit;\n\n this.hyperlinkButtonRowItems.push(\n {\n id: 'cancel-hyperlink',\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'primary',\n },\n {\n id: 'add-hyperlink',\n title: this.translateService.instant('_Add hyperlink'),\n tooltip: this.translateService.instant('_Add hyperlink'),\n disabled: true,\n buttonStyle: 'primary',\n }\n );\n\n this.hyperlinkForm.statusChanges.subscribe((status) => {\n this.hyperlinkButtonRowItems[1].disabled = status !== 'VALID';\n });\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rootObjectId'] && !changes['rootObjectId'].firstChange) {\n this.lastShownDate = '';\n this.loadComments();\n }\n }\n\n protected onAttachmentsLinkChange(newAttachments: NewAttachInfo[]): void {\n const newDecoratedAttachments: NewAttachInfo[] = newAttachments.map((attachment) => {\n attachment.iconClass = 'fa fa-link';\n attachment.iconTitle = this.translateService.instant('_Attachment_link');\n attachment.deleteButtonTitle = this.translateService.instant('_Delete_attachmentlink');\n return attachment;\n });\n const newCommentAttachments = this.newCommentAttachments.filter((attachment) => attachment?.type === 'Hyperlink');\n this.newCommentAttachments = [...newCommentAttachments, ...newDecoratedAttachments];\n this.newAttachmentIDs = newAttachments.map((attachment) => attachment.id);\n this.checkCreateButtonState();\n }\n\n\n protected onAddAttachment(file: File): void {\n const attachment = this.bimplusAttachmentsService.getAttachment(file);\n this.attachmentsState.update(attachments => ([...attachments, attachment]));\n this.checkCreateButtonState();\n }\n\n protected onDeleteAttachment(attachment: Attachment): void {\n this.attachmentsState.update(attachments => attachments.filter(a => a !== attachment));\n this.checkCreateButtonState();\n }\n\n /** Event on click attachment. */\n protected onGetAttachment(attachment: Attachment): void {\n this.bimplusObjectCommentsListService.downloadAttachment(attachment);\n }\n\n onTextareaValueChange(value: string) {\n this.textAreaValue = value;\n this.checkCreateButtonState();\n }\n\n handleActionCommentEvent(event: CommentOutputData) {\n if (event.action === 'delete') {\n const data = event.data as CommentData;\n this.openDialogDeleteComment(data.commentId);\n }\n }\n\n actionDialogClose(data: IDialogConfirmClose) {\n this.dialogService.close(data);\n }\n\n openDialogDeleteComment(commentId: string) {\n this.dialogService.open(BimplusOverlayDialogDeleteComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true,\n },\n data: {\n title: this.translateService.instant(\n '_Comment delete confirmation title'\n ),\n message: this.translateService.instant(\n '_Comment delete confirmation message'\n ),\n acceptCallback: () => {\n this.deleteComment(commentId);\n },\n },\n });\n }\n\n isSameDate(date?: string): boolean {\n if (!date) {\n return false;\n }\n const shortDate = this.datePipe.transform(date, 'shortDate');\n if (!shortDate) {\n // Transformation date to shortDate failed\n return false;\n }\n if (this.lastShownDate === shortDate) {\n // Date is identical to the last shown date\n return true;\n }\n // Valid date but not identical to last one\n this.lastShownDate = shortDate;\n return false;\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'submit') {\n if (!this.api || !this.rootObjectId) return;\n this.loading.set(true);\n\n const data = {\n text: this.textAreaValue,\n objectId: this.rootObjectId,\n };\n const dataText = JSON.stringify(data);\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Creating new comment') });\n this.bimplusObjectCommentsListService.postComments(this.rootObjectId, dataText, this.getHyperlinks(this.rootObjectId), this.attachmentsState(), this.newAttachmentIDs)\n .pipe(switchMap(() => this.bimplusObjectCommentsListService.loadComments(this.rootObjectId)))\n .subscribe({\n next: (comments) => this.commentsList$.next(comments),\n complete: () => {\n this.attachmentsState.set([]);\n this.newCommentAttachments = [];\n this.attachmentLinkItems = [];\n this.newAttachmentIDs = [];\n this.textAreaValue = null;\n this.clearValue = true;\n this.buttonRowItems[0].disabled = true;\n this.loading.set(false);\n this.statusBarService.setStatusBarData({ statusBarVisible: false, title: '' });\n }\n });\n }\n }\n\n hyperlinkButtonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'add-hyperlink') {\n this.addNewCommentHyperlink();\n } else if ($event.id === 'cancel-hyperlink') {\n this.hyperlinkForm.reset();\n this.isAddingHyperlink = false;\n }\n }\n\n addNewCommentHyperlink() {\n if (!this.hyperlinkForm.valid) {\n return;\n }\n\n let sanitizedUrl: string = this.hyperlinkForm.value['url'].trim();\n if (!RegExp(/^http(s?):\\/\\//).exec(sanitizedUrl)) {\n sanitizedUrl = 'https://' + sanitizedUrl;\n }\n let sanitizedName = this.hyperlinkForm.value['name']?.trim() ?? '';\n if (sanitizedName === '') {\n sanitizedName = sanitizedUrl;\n }\n const newItem: NewAttachInfo = {\n id: '',\n type: 'Hyperlink',\n nameShort: sanitizedName,\n name: sanitizedName,\n url: sanitizedUrl,\n iconClass: 'fa fa-link',\n iconTitle: this.translateService.instant('_Hyperlink'),\n deleteButtonTitle: this.translateService.instant('_Remove hyperlink'),\n };\n this.newCommentAttachments.push(newItem);\n this.hyperlinkForm.reset();\n this.isAddingHyperlink = false;\n this.checkCreateButtonState();\n }\n\n deleteComment(commentId: string) {\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Deleting the comment') });\n this.bimplusObjectCommentsListService.deleteComment(commentId)\n .subscribe(() => this.loadComments())\n }\n\n addHyperlinkIconClicked() {\n this.isAddingHyperlink = !this.isAddingHyperlink;\n }\n\n addHyperlinkIconKeypress(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n this.addHyperlinkIconClicked();\n }\n }\n\n removeNewCommentAttachment(link: NewAttachInfo) {\n this.newCommentAttachments = this.newCommentAttachments.filter(\n (commentLink) => commentLink.id !== link.id\n );\n if (link?.type !== 'Hyperlink') {\n this.attachmentLinkItems = this.attachmentLinkItems.filter(\n (attachmentLink) => attachmentLink.id !== link.id\n );\n this.newAttachmentIDs = this.newAttachmentIDs.filter(id => id !== link.id)\n }\n this.checkCreateButtonState();\n }\n\n removeNewCommentAttachmentKeypress(\n event: KeyboardEvent,\n link: NewAttachInfo\n ) {\n if (event.key === 'Enter' || event.key === ' ') {\n this.removeNewCommentAttachment(link);\n }\n }\n\n isActUserAuthor(item: WebSdk.CommentResponse) {\n return item.author?.id === this.userId;\n }\n\n displayName(item: WebSdk.CommentResponse): string {\n return item.author?.displayname ? item.author?.displayname : '';\n }\n\n formatDate(date: string): string {\n const locale = window.navigator.language;\n if (locale.includes('en')) {\n const unformattedDate = new Date(date);\n return unformattedDate.getMonth() + '/' + unformattedDate.getDate() + '/' + unformattedDate.getFullYear();\n }\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"short\" }).format(new Date(date));\n }\n\n clearTextareaValue() {\n return this.clearValue;\n }\n\n\n private loadComments() {\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Loading comments list') });\n this.loading.set(true);\n this.bimplusObjectCommentsListService\n .loadComments(this.rootObjectId)\n .subscribe({\n next: comments => {\n this.commentsList$.next(comments)\n },\n\n complete: () => {\n this.loading.set(false);\n this.statusBarService.setStatusBarData({ statusBarVisible: false, title: '' });\n }\n })\n }\n\n private getHyperlinks(objectId: string): Partial<WebSdk.Hyperlink>[] {\n return this.newCommentAttachments\n .filter(h => h?.type === 'Hyperlink') // Filter objects with type 'Hyperlink'\n .map((h) => ({\n ...h,\n objectId,\n }));\n }\n\n onEnterKeyPressedInHyperlinkForm() {\n this.addNewCommentHyperlink();\n }\n}\n","@if (!loading()) {\n<div class=\"comment-tab-container\">\n <div class=\"textarea-container\">\n <lib-bimplus-textarea\n (textAreaValueChange)=\"onTextareaValueChange($event)\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [activeAutoResizeTextarea]=\"true\"\n [minRows]=\"minRows\"\n [maxRows]=\"maxRows\"\n [clearValue]=\"clearTextareaValue()\"\n ></lib-bimplus-textarea>\n </div>\n\n <lib-bimplus-attachments\n #attachments\n listOnly\n [class]=\"['new-comment-attachments']\"\n [attachments]=\"attachmentsState()\"\n (addAttachment)=\"onAddAttachment($event)\"\n (deleteAttachment)=\"onDeleteAttachment($event)\"\n />\n\n <lib-links-to-documents \n #linksToDocuments\n listOnly\n hideAttachmentSize\n showEmptyMessage=\"false\" \n [attachments]=\"attachmentLinkItems\"\n (attachmentsLinkChange)=\"onAttachmentsLinkChange($event)\"\n [api]=\"api\" \n [project]=\"project\"\n [rootObjectId]=''\n [canCreateAttachmentLink]=\"true\"\n [canDeleteAttachmentLink]=\"true\"\n [wormholeSelector]=\"wormholeSelector\"\n [env]=\"env\"\n [inputBaseUrl]=\"inputBaseUrl\"\n />\n\n @if (newCommentAttachments.length > 0) {\n <div class=\"new-comment-attachment-list\">\n <div *ngFor=\"let item of newCommentAttachments\" \n [ngClass]=\"'new-comment-attachment ' + item.type\"\n [title]=\"item.type === 'Hyperlink' ? item.url: item.name\">\n <div \n [ngClass]=\"'icon-small ' + item.type\" \n [title]=\"item.type === 'Hyperlink' ? item.url: item.name\">\n </div>\n <div class=\"text\">{{ item.name }} </div> \n <span class=\"cancel-icon\" title=\"{{ item.deleteButtonTitle}}\" (click)=\"removeNewCommentAttachment(item)\" (keydown)=\"removeNewCommentAttachmentKeypress($event, item)\"></span>\n </div> \n </div>\n }\n\n @if (isAddingHyperlink) {\n <form [formGroup]=\"hyperlinkForm\" class=\"hyperlink-input-form\">\n <div class=\"hyperlink-input-row\">\n <div class=\"link-icon icon-next-to-text-input\"></div>\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\n </div>\n <div class=\"hyperlink-input-row\">\n <div class=\"icon-next-to-text-input\"></div>\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\n </div>\n\n <lib-bimplus-buttons-row [items]=\"hyperlinkButtonRowItems\" (buttonClicked)=\"hyperlinkButtonRowButtonClicked($event)\"/>\n </form>\n }\n\n <div class=\"comments-tab-attachments-section\">\n <div class=\"comments-attachments-list\">\n <div class=\"tab-attachments icon attachments-icon hidden\"></div>\n <div class=\"attachment-icon icon-small interactive\" [title]=\"'_Add attachment' | translate\" (click)=\"attachments.open()\" (keydown)=\"attachments.open()\"></div>\n <div class=\"link-icon icon-small interactive\" [title]=\"'_Add hyperlink' | translate\" (click)=\"addHyperlinkIconClicked()\" (keydown)=\"addHyperlinkIconKeypress($event)\"></div>\n <div class=\"attachment-link-icon icon-small interactive\" [title]=\"'_Add_attachment_link' | translate\" (click)=\"linksToDocuments.createAttachmentLink(api!)\" (keydown)=\"linksToDocuments.createAttachmentLink(api!)\"></div>\n <div class=\"tab-attachmentlinks icon attachments-icon hidden\"></div>\n </div>\n <div class=\"add-comment\">\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\" />\n </div>\n </div>\n\n <div class=\"comments-separator\"></div>\n\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n @if ((commentsList$ | async)?.length === 0) {\n <div class=\"no-comments-found\">\n {{ '_No comments found' | translate }}\n </div>\n } @else {\n @for (item of commentsList$ | async; track item) {\n @if(item.createdAt && !isSameDate(item.createdAt)) {\n <div class=\"comment-list-date\">\n {{formatDate(item.createdAt)}}\n </div>\n }\n <lib-bimplus-comment\n (outputActionCommentEvent)=\"handleActionCommentEvent($event)\"\n (getAttachment)=\"onGetAttachment($event)\"\n [message]=\"item.text\"\n [api]=\"api\"\n [date]=\"item.createdAt ? item.createdAt : ''\"\n action=\"delete\"\n [commentId]=\"item.id\"\n [attachments]=\"item.attachments ?? []\"\n [attachmentLinkItems]=\"item.attachmentLinks ?? []\"\n [hyperlinks]=\"item.hyperlinks\"\n [isActUserAuthor]=\"isActUserAuthor(item)\"\n [displayname]=\"displayName(item)\">\n </lib-bimplus-comment>\n }\n }\n </lib-bimplus-scrollable-container>\n </div>\n</div>\n}\n","import { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { BimplusStatusBarService } from './bimplus-status-bar.service';\nimport { StatusBarData } from './statusBar';\n\n@Component({\n selector: 'lib-bimplus-status-bar',\n templateUrl: './bimplus-status-bar.component.html',\n styleUrls: ['./bimplus-status-bar.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusStatusBarComponent implements OnInit {\n private statusBarService = inject(BimplusStatusBarService);\n\n\n private _title = '';\n get title(): string {\n return this._title;\n }\n\n ngOnInit(): void {\n this.statusBarService.statusBarDataSubscription.subscribe((data: StatusBarData) => {\n this._title = data.title;\n });\n }\n\n closeClick(): void {\n this.statusBarService.setStatusBarData({\n title: '',\n statusBarVisible: false\n });\n }\n\n closeKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Escape') {\n this.closeClick();\n }\n }\n\n}\n","<div\n class=\"statusBar-container\">\n <span \n class=\"status-bar-text\"\n [innerHTML]=\"title\">\n </span>\n <div\n class=\"close-button\"\n title=\"Close\"\n (click)=\"closeClick()\"\n (keydown)=\"closeKeyDown($event)\">\n </div>\n</div>","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\nexport class BimplusMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n console.warn(\"Missing translation string \" + params.key);\n return params.key;\n }\n}\n","/*\n * Public API Surface of ngx-bimplus-components\n */\n\nexport * from './lib/ngx-bimplus-components.service';\nexport * from './lib/ngx-bimplus-components.component';\nexport * from './lib/interfaces/bimplus-opacity-properties.interface';\nexport * from './lib/interfaces/bimplus-visibility-properties.interface';\nexport * from './lib/components/bimplus-connection-designer/bimplus-connection-designer.component';\nexport * from './lib/components/bimplus-connection-designer/bimplus-connection-designer.interface';\nexport * from './lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component';\nexport * from './lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.interface';\nexport * from './lib/components/bimplus-floating-bar/bimplus-floating-bar.interface';\nexport * from './lib/components/project-models/project-models.interface';\nexport * from './lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component';\nexport * from './lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component';\nexport * from './lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component';\nexport * from './lib/components/bimplus-localized-widget/bimplus-localized-widget.component';\nexport * from './lib/components/bimplus-overlay-message/bimplus-overlay-message.component';\nexport * from './lib/components/bimplus-sidenav/bimplus-sidenav.component';\nexport * from './lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nexport * from './lib/components/bimplus-tool-hub/bimplus-tool-hub.component';\nexport * from './lib/components/bimplus-tool-hub/bimplus-tool-hub.interface';\nexport * from './lib/components/bimplus-flat-tree/bimplus-flat-tree.component';\nexport * from './lib/components/bimplus-flat-tree/bimplus-flat-tree.interface';\nexport * from './lib/components/bimplus-context-menu/bimplus-context-menu.component';\nexport * from './lib/components/bimplus-context-menu/bimplus-context-menu.interface';\nexport * from './lib/components/loading-spinner/loading-spinner.component';\nexport * from './lib/components/bimplus-object-navigator/bimplus-object-navigator.component';\nexport * from './lib/components/bimplus-object-navigator/bimplus-object-navigator.interface';\nexport * from './lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component';\nexport * from './lib/components/bimplus-tooltip-message/bimplus-tooltip-message.interface';\nexport * from './lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component';\nexport * from './lib/services/language-strings.service';\nexport * from './lib/services/resize-observer.service';\nexport * from './lib/services/cursors.service';\nexport * from './lib/types/types';\nexport * from './lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component';\nexport * from './lib/components/resizable-panel/resizable-panel.component';\nexport * from './lib/components/object-properties-header/object-properties-header.component';\nexport * from './lib/components/object-properties-header/object-properties-header.interface';\nexport * from './lib/components/object-properties/object-properties.component';\nexport * from './lib/components/links-to-documents/links-to-documents.component';\nexport * from './lib/components/object-hyperlinks/object-hyperlinks.component';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component';\nexport * from './lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component';\nexport * from './lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component';\nexport * from './lib/components/bimplus-input-text-field/bimplus-input-text-field.component';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-dialog-config-settings';\nexport * from './lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component';\nexport * from './lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service';\nexport * from './lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component';\nexport * from './lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface';\nexport * from './lib/components/bimplus-attachments/bimplus-attachments.component';\nexport * from './lib/components/bimplus-attachments/services/bimplus-attachments.service';\nexport * from './lib/components/bimplus-attachments/bimplus-attachments.interface';\nexport * from './lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component';\nexport * from './lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service';\nexport * from './lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component';\nexport * from './lib/components/bimplus-comment/bimplus-comment.component';\nexport * from './lib/components/bimplus-textarea/bimplus-textarea.component';\nexport * from './lib/components/bimplus-status-bar/bimplus-status-bar.component';\nexport * from './lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component';\nexport * from './lib/components/bimplus-status-bar/bimplus-status-bar.service';\nexport * from './lib/components/object-properties/object-properties.service';\nexport * from './lib/utils/utils';\nexport * from './lib/testing/bimplus-missing-translatetranslation-handler';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","DEFAULT_POSITION_LEFT","DEFAULT_POSITION_TOP","i3","BehaviorSubject","concatMap","config"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-bimplus-components.mjs","sources":["../../../projects/ngx-bimplus-components/src/lib/ngx-bimplus-components.service.ts","../../../projects/ngx-bimplus-components/src/lib/ngx-bimplus-components.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-localized-widget/bimplus-localized-widget.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/loading-spinner/loading-spinner.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/loading-spinner/loading-spinner.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer/bimplus-connection-designer.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel/expansion-panel.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel/expansion-panel.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header/expansion-panel-header.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header/expansion-panel-header.component.html","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header-actions/expansion-panel-header-actions.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/expansion-panel-header-actions/expansion-panel-header-actions.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-text-message/bimplus-text-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-text-message/bimplus-text-message.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component.html","../../../projects/ngx-bimplus-components/src/lib/services/resize-observer.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/local-storage.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/layout-manager.service.ts","../../../projects/ngx-bimplus-components/src/lib/utils/utils.ts","../../../projects/ngx-bimplus-components/src/lib/directives/resizable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar/bimplus-floating-bar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar/bimplus-floating-bar.component.html","../../../projects/ngx-bimplus-components/src/lib/directives/draggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-body/bimplus-floating-bar-body.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-body/bimplus-floating-bar-body.component.html","../../../projects/ngx-bimplus-components/src/lib/components/project-models/project-models.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/project-models/project-models.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-panel-toolbar/bimplus-panel-toolbar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-panel-toolbar/bimplus-panel-toolbar.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-message/bimplus-overlay-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-message/bimplus-overlay-message.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/pxsuffix.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/directives/x-draggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav/bimplus-sidenav.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-sidenav/bimplus-sidenav.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/svg-generator.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-item/tool-hub-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-item/tool-hub-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-sub-item/tool-hub-sub-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/tool-hub-sub-item/tool-hub-sub-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/bimplus-tool-hub.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tool-hub/bimplus-tool-hub.component.html","../../../projects/ngx-bimplus-components/src/lib/directives/click-outside/click-outside.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-context-menu/bimplus-context-menu.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-context-menu/bimplus-context-menu.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-flat-tree/bimplus-flat-tree.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-flat-tree/bimplus-flat-tree.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/filter-criterium/filter-criterium.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/filter-criterium/filter-criterium.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-structure/bimplus-object-structure.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.interface.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/format-value.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/datetime.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/object-filter-result/object-filter-result.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/object-filter-result/object-filter-result.component.html","../../../projects/ngx-bimplus-components/src/lib/utils/filterString.ts","../../../projects/ngx-bimplus-components/src/lib/utils/filterStructureFetcher.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component.html","../../../projects/ngx-bimplus-components/src/lib/services/language-strings.service.ts","../../../projects/ngx-bimplus-components/src/lib/services/cursors.service.ts","../../../projects/ngx-bimplus-components/src/lib/directives/component-draggable/componentsDraggable.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.html","../../../projects/ngx-bimplus-components/src/lib/components/resizable-panel/resizable-panel.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/resizable-panel/resizable-panel.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-header/object-properties-header.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-header/object-properties-header.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/round.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/pipes/get-attribute-value-as-string.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/utils/objectProperties.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-property-value/object-property-value.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-property-value/object-property-value.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-checkbox/bimplus-input-checkbox.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-checkbox/bimplus-input-checkbox.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-number/bimplus-input-number.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-number/bimplus-input-number.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-combobox/bimplus-input-combobox.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-combobox/bimplus-input-combobox.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-date/bimplus-input-date.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-input-date/bimplus-input-date.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-properties-group.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties-group/object-properties-group.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/get-attribute-value.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/validators/double.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/integer.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/guid.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/double-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-preview/object-preview.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-preview/object-preview.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.service.ts","../../../projects/ngx-bimplus-components/src/lib/validators/guid-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/string-enum.validator.ts","../../../projects/ngx-bimplus-components/src/lib/validators/string-combobox.validator.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-properties/object-properties.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.html","../../../projects/ngx-bimplus-components/src/lib/services/decorators.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/links-to-documents/links-to-documents.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/links-to-documents/links-to-documents.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks/object-hyperlinks.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/object-hyperlinks/object-hyperlinks.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.html","../../../projects/ngx-bimplus-components/src/lib/pipes/bit-converter.pipe.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.interface.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/bimplus-attachments.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-attachments/services/bimplus-attachments.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/auto-resize-textarea.directive.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/bimplus-textarea.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-textarea/bimplus-textarea.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-comment/bimplus-comment.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-comment/bimplus-comment.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.service.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.html","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.component.ts","../../../projects/ngx-bimplus-components/src/lib/components/bimplus-status-bar/bimplus-status-bar.component.html","../../../projects/ngx-bimplus-components/src/lib/testing/bimplus-missing-translatetranslation-handler.ts","../../../projects/ngx-bimplus-components/src/public-api.ts","../../../projects/ngx-bimplus-components/src/ngx-bimplus-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxBimplusComponentsService {\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\n selector: 'lib-ngx-bimplus-components',\n imports: [],\n template: `\r\n <p>\r\n ngx-bimplus-components works!\r\n </p>\r\n `,\n styles: ``\n})\r\nexport class NgxBimplusComponentsComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\n\nexport class BimplusConnectionDesignerService {\n private _activeStep: number = 0;\n\n activeStepChange$: Subject<number> = new Subject<number>();\n\n set activeStep(activeStep: number) {\n this._activeStep = activeStep;\n this.activeStepChange$.next(this._activeStep);\n }\n\n get activeStep(): number {\n return this._activeStep;\n }\n\n constructor() { }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ViewEncapsulation, Input, signal, WritableSignal, inject } from '@angular/core';\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { LocalizedStrings } from './../../types/types'\r\n\r\n@Component({\r\n selector: 'lib-bimplus-localized-widget',\r\n imports: [CommonModule, TranslateModule],\r\n providers: [TranslateService],\r\n template: `\r\n <p>\r\n localized widget works!\r\n </p>\r\n `,\r\n styles: [],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusLocalizedWidgetComponent {\r\n translateService = inject(TranslateService);\r\n\r\n\r\n _selectedLanguage: WritableSignal<string> = signal('en');\r\n get selectedLanguage(): string {\r\n return this._selectedLanguage();\r\n }\r\n @Input() set selectedLanguage(value: string) {\r\n this._selectedLanguage.set(value);\r\n this.translateService.use(value);\r\n try {\r\n this.translateService.setTranslation(this.selectedLanguage, this._localizedStrings());\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n _localizedStrings: WritableSignal<LocalizedStrings> = signal({} as LocalizedStrings);\r\n get localizedStrings(): LocalizedStrings {\r\n return this._localizedStrings();\r\n }\r\n @Input() set localizedStrings(value: LocalizedStrings) {\r\n this._localizedStrings.set(value);\r\n this.translateService.use(this.selectedLanguage);\r\n try {\r\n this.translateService.setTranslation(this.selectedLanguage, value);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n","import { Component, Input, booleanAttribute, computed, input } from '@angular/core';\n\ntype SpinnerTexts = string[] | null | undefined;\ntype SpinnerText = string | null | undefined;\n\n@Component({\n selector: 'lib-loading-spinner',\n templateUrl: './loading-spinner.component.html',\n styleUrl: './loading-spinner.component.less'\n})\nexport class LoadingSpinnerComponent {\n @Input({ transform: booleanAttribute }) spinnerSpinActive: boolean = false;\n @Input({ transform: booleanAttribute }) spinnerHoverEnabled: boolean = false;\n @Input({ transform: booleanAttribute }) spinnerDisabled: boolean = false;\n spinnerText = input<SpinnerText>(undefined);\n spinnerTexts = input<SpinnerTexts>(undefined);\n\n protected readonly isSpinnerTextsArray = computed(() => {\n const spinnerTexts = this.spinnerTexts();\n return !!(spinnerTexts && typeof spinnerTexts === 'object' && Array.isArray(spinnerTexts) && Boolean(spinnerTexts.length))\n });\n}\n","<div class=\"loading-spinner\">\n <div class=\"spinner-conatiner\">\n <div\n class=\"spinner-icon\"\n [class.spinner-spin-active]=\"spinnerSpinActive\"\n [class.spinner-disabled]=\"spinnerDisabled\"\n [class.hover-enabled]=\"spinnerHoverEnabled && !spinnerDisabled\"\n ></div>\n @if (spinnerText(); as spinnerText) {\n <div class=\"spinner-text\" data-test=\"spinner-text\">\n {{ spinnerText }}\n </div>\n }\n @if (isSpinnerTextsArray()) {\n <div class=\"spinner-texts\" data-test=\"spinner-texts\">\n @for (_spinnerText of spinnerTexts(); track _spinnerText) {\n <div class=\"spinner-text\">\n {{ _spinnerText }}\n </div>\n }\n </div>\n }\n </div>\n</div>","import { Component, input, Input, ViewEncapsulation } from '@angular/core';\r\nimport { LoadingSpinnerComponent } from '../loading-spinner/loading-spinner.component';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-sidenav-drawer-content',\r\n imports: [\r\n LoadingSpinnerComponent\r\n ],\r\n templateUrl: './bimplus-sidenav-drawer-content.component.html',\r\n styleUrl: './bimplus-sidenav-drawer-content.component.less',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class BimplusSidenavDrawerContentComponent {\r\n header = input<string>('');\r\n isLoading = input<boolean>(false);\r\n @Input() loadingSpinnerText: string = \"\"\r\n}\r\n","<div class=\"sidenav-drawer-content-layout\">\n @if (header(); as header) {\n <div class=\"sidenav-drawer-header\">\n <div class=\"sidenav-drawer-header-title\">\n <span>{{ header }}</span>\n </div>\n </div>\n }\n\n <div class=\"sidenav-drawer-content-offset\">\n <ng-content></ng-content>\n </div>\n @if(isLoading()){\n <div class=\"sidenav-drawer-loading-overlay\">\n <lib-loading-spinner\n [spinnerHoverEnabled]=\"false\"\n [spinnerSpinActive]=\"true\"\n [spinnerDisabled]=\"false\"\n [spinnerText]=\"loadingSpinnerText\"\n >\n </lib-loading-spinner>\n </div>\n }\n</div>\n","import { Observable } from \"rxjs\";\n\nexport interface BimplusButtonRowItem {\n id: string;\n iconClass?: string;\n icon?: string;\n title?: string;\n tooltip?: string;\n disabled?: boolean | Observable<boolean>;\n buttonStyle?: 'primary' | 'secondary';\n buttonType?: 'text' | 'icon' | 'combined';\n type?: typeof BimplusButtonType['FILE' | 'TEXT'];\n}\n\nexport interface BimplusButtonClickEvent {\n id: string;\n}\n\nexport const BimplusButtonType = {\n FILE: 'file',\n TEXT: 'text'\n} as const;","import { Observable, take } from 'rxjs';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport {\n BimplusButtonRowItem,\n BimplusButtonClickEvent,\n BimplusButtonType,\n} from './bimplus-buttons-row.interface';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, EventEmitter, Output, Input, input } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-buttons-row',\n imports: [NgTemplateOutlet, AsyncPipe],\n templateUrl: './bimplus-buttons-row.component.html',\n styleUrl: './bimplus-buttons-row.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusButtonsRowComponent extends BimplusLocalizedWidgetComponent {\n protected readonly BimplusButtonType = BimplusButtonType;\n @Input () isMultiple = false;\n items = input<BimplusButtonRowItem[]>([]);\n canUpdateObject = input<boolean>(false);\n\n @Output() fileChanged = new EventEmitter<File[]>();\n @Output() buttonClicked = new EventEmitter<BimplusButtonClickEvent>();\n\n protected onChange(event: Event, inputElement: HTMLInputElement) {\n const files = (event.target as unknown as { files: File[] }).files; \n\n if (files) {\n this.fileChanged.emit(files);\n // reset value to be able select same value again\n inputElement.value = '';\n }\n }\n\n protected _buttonClicked(item: BimplusButtonRowItem) {\n if (item.disabled && this.isObservable(item.disabled)) {\n // evaluate observable once\n item.disabled.pipe(take(1)).subscribe((disabled) => {\n if (!disabled) {\n this.buttonClicked.emit({ id: item.id });\n }\n });\n return;\n }\n if (item.disabled) {\n return;\n }\n this.buttonClicked.emit({ id: item.id });\n }\n\n protected isObservable(value: Observable<boolean> | boolean): value is Observable<boolean> {\n return typeof value === 'object' && 'subscribe' in value;\n }\n}\n","<div class=\"button-row\">\n @for(item of items(); track item.id; let last=$last; let first=$first;) {\n @switch(item.type) {\n @case (BimplusButtonType.FILE) {\n <ng-container\n *ngTemplateOutlet=\"fileButton; context: { $implicit: item, last, first }\"\n ></ng-container>\n } @default {\n <ng-container\n *ngTemplateOutlet=\"button; context: { $implicit: item, last, first }\"\n ></ng-container>\n }\n }\n }\n</div>\n\n<ng-template #fileButton let-item let-last=\"last\" let-first=\"first\">\n <input\n #fileInput\n hidden\n type=\"file\"\n (change)=\"onChange($event, fileInput)\"\n [id]=\"item.id\"\n [attr.multiple]=\"isMultiple ? true : null\"\n />\n <ng-container\n *ngTemplateOutlet=\"\n button;\n context: { $implicit: item, last, first, fileInput }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #button\n let-item\n let-last=\"last\"\n let-first=\"first\"\n let-fileInput=\"fileInput\"\n>\n <button\n data-test=\"button\"\n [class.last]=\"last\"\n [class.first]=\"first\"\n [class.primary-button]=\"\n item.buttonStyle === undefined || item.buttonStyle === 'primary'\n \"\n [class.secondary-button]=\"item.buttonStyle === 'secondary'\"\n [class.text-button]=\"\n item.buttonType === undefined || item.buttonType === 'text'\n \"\n [class.icon-button]=\"item.buttonType === 'icon'\"\n [class.combined-button]=\"item.buttonType === 'combined'\"\n [class.disabled]=\"item.disabled === true\"\n (click)=\"fileInput ? fileInput.click() : _buttonClicked(item)\"\n title=\"{{ item.tooltip }}\"\n [disabled]=\"isObservable(item.disabled) ? !!(item.disabled | async) : !!item.disabled\"\n >\n {{ item.title }}\n </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusConnectionDesignerService } from \"./bimplus-connection-designer.service\"\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusSidenavDrawerContentComponent } from '../bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonRowItem, BimplusButtonClickEvent } from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport { DesignCode } from './bimplus-connection-designer.interface';\n\n@Component({\n selector: 'lib-bimplus-connection-designer',\n imports: [\n CommonModule,\n FormsModule,\n NgSelectModule,\n TranslateModule,\n BimplusSidenavDrawerContentComponent,\n BimplusButtonsRowComponent,\n BimplusSidenavDrawerContentComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-connection-designer.component.html',\n styleUrl: './bimplus-connection-designer.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusConnectionDesignerComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n protected connectionDesignerService = inject(BimplusConnectionDesignerService);\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n config: Array<BimplusButtonRowItem> = [];\n constructor() {\n super();\n\n const connectionDesignerService = this.connectionDesignerService;\n\n connectionDesignerService.activeStepChange$.subscribe((step) => {\n if (step === 0) {\n this.resetDesignCode();\n }\n });\n }\n\n ngOnInit(): void {\n this.config.push({\n id: \"next\"\n , title: this.translateService.instant('_Next')\n , tooltip: this.translateService.instant('_Next')\n , disabled: true\n , buttonStyle: 'primary'\n });\n this.buttonRowItems = this.config;\n }\n\n // #region Design codes\n\n chooseCode: string = \"_Choose_a_design_code\"; // Message for drop down list\n\n // Design method codes defined in SDS2 (see WebSdk Connexis service for possible values)\n @Input() designCodes: Array<DesignCode> = [\n { id: \"0\", name: \"EN 1993-1-8 (Eurocode 3)\", code: \"EURO05\", codeNumber: 9 },\n { id: \"1\", name: \"AISC 360-22 (16th Ed.): LRFD\", code: \"LRFD16\", codeNumber: 19 },\n { id: \"2\", name: \"AISC 360-22 (16th Ed.): ASD\", code: \"ASD16\", codeNumber: 18 },\n { id: \"3\", name: \"CSA S16:19 (CISC 12th Ed.)\", code: \"CSA12\", codeNumber: 17 },\n ];\n @Input() currentDesignCode: DesignCode | null = null;\n\n @Output() designCodeChanged = new EventEmitter<DesignCode | null>();\n\n set activeDesignCode(value: DesignCode | null) {\n this.currentDesignCode = value;\n this.designCodeChanged.emit(this.currentDesignCode);\n }\n\n get activeDesignCode(): DesignCode | null {\n return this.currentDesignCode;\n }\n\n private _updateButtonState(buttonId: string, disabled: boolean) {\n const _button = this.config.find(btn => btn.id === buttonId);\n if (!_button) {\n return;\n }\n _button.disabled = disabled;\n }\n\n private _calculationCanBeStarted: boolean = true;\n @Input()\n set calculationCanBeStarted(value: boolean) {\n this._calculationCanBeStarted = value;\n this._updateButtonState(\"next\", !value);\n }\n get calculationCanBeStarted() {\n return this._calculationCanBeStarted;\n }\n\n @Output() startCalculationClicked = new EventEmitter<void>();\n\n buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"next\") {\n this.connectionDesignerService.activeStep = 1;\n if (this._calculationCanBeStarted) {\n this.startCalculationClicked.emit();\n }\n }\n }\n\n resetDesignCode() {\n this.activeDesignCode = null;\n }\n // #endregion\n}\n","<lib-bimplus-sidenav-drawer-content\n [header]=\"'_Connection_designer' | translate\"\n>\n <div class=\"connection-designer-content\">\n @if(connectionDesignerService.activeStep === 0) {\n <div class=\"cross-button\">\n <div class=\"cross\"\n (click)=\"resetDesignCode()\"\n (keypress)=\"resetDesignCode()\"\n >\n </div>\n </div>\n <div class=\"title\">\n {{ \"_Select_the_code\" | translate }}\n </div>\n <div class=\"description\">\n {{ \"_Activate_all_objects_to_make_a_connection\" | translate }}\n </div>\n <div class=\"note\">\n {{ \"_Activate_all_objects_note\" | translate }}\n </div>\n\n @if(designCodes.length > 0){\n <div class=\"design-codes\">\n <ng-select\n class=\"design-codes-dropdown\"\n [(ngModel)]=\"activeDesignCode\"\n [clearable]=\"false\"\n [searchable]=\"false\"\n [placeholder]=\"chooseCode | translate\"\n >\n <ng-option *ngFor=\"let code of designCodes\" [value]=\"code\">{{\n code.name\n }}</ng-option>\n </ng-select>\n </div>\n } @else {\n <div class=\"no-design-codes\">\n {{ \"_No_design_codes_defined\" | translate }}\n </div>\n }\n\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n ></lib-bimplus-buttons-row>\n\n } @else {\n <ng-content select=\"lib-bimplus-connection-designer-results\"></ng-content>\n }\n </div>\n</lib-bimplus-sidenav-drawer-content>\n","import { CommonModule } from '@angular/common';\r\nimport { Component, model } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel',\r\n imports: [CommonModule],\r\n templateUrl: './expansion-panel.component.html',\r\n styleUrl: './expansion-panel.component.less'\r\n})\r\nexport class ExpansionPanelComponent {\r\n // #region public fields\r\n expanded = model<boolean>(true);\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n toggleExpand(){\r\n this.expanded.update(value => !value);\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"expansion-panel\">\n <div class=\"expansion-panel-header-row\">\n <div \n class=\"expansion-panel-expander-icon\" \n data-test=\"expansion-panel\"\n [ngClass]=\"expanded() ? 'open' : 'closed'\" \n (click)=\"toggleExpand()\"\n (keypress)=\"toggleExpand()\"\n ></div>\n <div class=\"expansion-panel-header-content\">\n <ng-content select=\"lib-expansion-panel-header\"></ng-content>\n </div>\n </div>\n <div class=\"expansion-panel-content-container\" [ngClass]=\"expanded() ? '' : 'collapsed'\">\n <ng-content></ng-content>\n </div>\n</div>\n\n","import { Component, HostBinding, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel-header',\r\n imports: [],\r\n templateUrl: './expansion-panel-header.component.html',\r\n styleUrl: './expansion-panel-header.component.less',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ExpansionPanelHeaderComponent {\r\n @HostBinding('class.expansion-panel-header-container') centerMenuButtonClass: boolean = true;\r\n}\r\n"," <div class=\"expansion-panel-header-title\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div>\r\n <ng-content select=\"lib-expansion-panel-header-actions\"></ng-content>\r\n </div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-expansion-panel-header-actions',\r\n imports: [],\r\n templateUrl: './expansion-panel-header-actions.component.html',\r\n styleUrl: './expansion-panel-header-actions.component.less'\r\n})\r\nexport class ExpansionPanelHeaderActionsComponent {\r\n\r\n}\r\n","<ng-content></ng-content>\r\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-text-message',\n templateUrl: './bimplus-text-message.component.html',\n styleUrl: './bimplus-text-message.component.less'\n})\nexport class BimplusTextMessageComponent {\n message = input<string | undefined>(undefined);\n}\n","@if(message(); as message) {\n <div class=\"message\">\n {{ message }}\n </div>\n}","import { Component, ViewEncapsulation, ElementRef, AfterViewInit, AfterViewChecked, inject } from '@angular/core';\n\nimport SimpleBar from 'simplebar';\n\n@Component({\n selector: 'lib-bimplus-scrollable-container',\n imports: [],\n templateUrl: './bimplus-scrollable-container.component.html',\n styleUrl: './bimplus-scrollable-container.component.less',\n encapsulation: ViewEncapsulation.None\n})\n\nexport class BimplusScrollableContainerComponent implements AfterViewInit, AfterViewChecked {\n private readonly elementRef = inject(ElementRef);\n\n _simpleBar!: SimpleBar;\n _element: HTMLElement;\n protected _scrollableContainerClassName: string = '.scrollable-container';\n\n constructor(){\n this._element = this.elementRef.nativeElement;\n }\n\n private _initializationSimpleScrollBar(): void {\n // init simple bar scrollbar\n const scrollableContainer: HTMLElement | null = this._element?.querySelector(this._scrollableContainerClassName);\n if (!scrollableContainer) {\n console.error('No scrollable container found in the element.');\n return;\n }\n this._simpleBar = new SimpleBar(scrollableContainer);\n }\n\n ngAfterViewInit(): void {\n this._initializationSimpleScrollBar();\n }\n\n private _recalculateScrollbar(): void {\n if(!this._element) {\n return;\n }\n const _element = this._element;\n const barElem = _element?.querySelector(this._scrollableContainerClassName);\n if (!barElem){\n return;\n }\n\n if (!this._simpleBar) {\n console.error('No scrollable container found in the element.');\n return;\n }\n\n this._simpleBar.recalculate();\n }\n\n ngAfterViewChecked(): void {\n this._recalculateScrollbar();\n }\n}\n","<div class=\"scrollable-container\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, OnInit, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonRowItem, BimplusButtonClickEvent } from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport { ConnexisResultsRoot, ConnexisResultList, ConnexisResult } from './bimplus-connection-designer-results.interface';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\nimport { BimplusConnectionDesignerService } from \"../bimplus-connection-designer/bimplus-connection-designer.service\";\nimport { BimplusTextMessageComponent } from \"../bimplus-text-message/bimplus-text-message.component\";\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\n\n@Component({\n selector: 'lib-bimplus-connection-designer-results',\n imports: [\n TranslateModule,\n CommonModule,\n BimplusButtonsRowComponent,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n BimplusTextMessageComponent,\n BimplusScrollableContainerComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-connection-designer-results.component.html',\n styleUrl: './bimplus-connection-designer-results.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusConnectionDesignerResultsComponent extends BimplusLocalizedWidgetComponent\n implements OnInit, OnChanges {\n protected connectionDesignerService = inject(BimplusConnectionDesignerService);\n\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n\n @Input() errorMessage: string = \"\";\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.buttonRowItems = [\n {\n id: \"done\"\n , title: this.translateService.instant('_Done')\n , tooltip: this.translateService.instant('_Done')\n , disabled: false\n , buttonStyle: 'primary'\n }\n ];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const changedResults = changes['results']?.currentValue as ConnexisResultsRoot | null;\n if (changedResults === null) {\n this.connectionDesignerService.activeStep = 0;\n }\n }\n\n @Output() doneClicked = new EventEmitter<void>();\n\n buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"done\") {\n this.connectionDesignerService.activeStep = 0;\n this.doneClicked.emit();\n }\n }\n\n // #region Results\n @Input() resultTreeRootTitle: string = \"\"; // Tooltip root node of tree\n @Input() resultTreeRootName: string = \"\"; // Visible root node name of tree\n @Input() expandedTreeRoot: boolean = false; // Root tree is expanded\n @Input() expandedResultTrees: boolean = false; // failed and passed sub-tree expanded\n @Input() results: ConnexisResultsRoot | null = null; // Root for all result lists (failed, passed)\n @Output() toggleVisibilityResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() toggleVisibilityResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() toggleVisibilityResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() clickedResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() clickedResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() clickedResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() doubleClickedResultsRoot = new EventEmitter<ConnexisResultsRoot>(); // root node\n @Output() doubleClickedResultList = new EventEmitter<ConnexisResultList>(); // sub-nodes\n @Output() doubleClickedResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() mouseEnteredResult = new EventEmitter<ConnexisResult>(); // children nodes\n @Output() mouseLeftResult = new EventEmitter<ConnexisResult>(); // children nodes\n\n totalResults(): number {\n let totalCount = 0;\n if (!this.results) return totalCount;\n for (const resultList of this.results.resultList) {\n totalCount += resultList.results.length;\n }\n return totalCount\n }\n private statusMessage(result: ConnexisResult): string {\n let message = \"\\n\";\n message += result.isValid ? \"PASSED : \" : \"FAILED : \";\n message += \"Unity Ratio \" + result.unityRatio;\n return message;\n }\n private infoMessage(result: ConnexisResult): string {\n if (!result.message) {\n return \"\";\n }\n\n let message = \"\\n\";\n message += \"Message: \";\n message += result.message;\n return message;\n }\n\n getTitle(result: ConnexisResult): string {\n return `${result.name}${this.statusMessage(result)}${this.infoMessage(result)}`;\n }\n // #endregion\n}\n","<div class=\"connection-designer-content-result\">\n <div class=\"title\">\n {{ \"_Connection_Designer_results_title\" | translate }}\n </div>\n <div class=\"description\">\n {{ \"_Connection_Designer_results_description\" | translate }}\n </div>\n\n @if(results !== null){\n <lib-bimplus-scrollable-container>\n <div class=\"scrollable-content-container\">\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedTreeRoot\"\n >\n <lib-expansion-panel-header\n [title]=\"resultTreeRootTitle ? resultTreeRootTitle : results.name + ' (' + totalResults() + ')'\"\n (click)=\"clickedResultsRoot.emit(results)\"\n (keypress)=\"clickedResultsRoot.emit(results)\"\n (dblclick)=\"doubleClickedResultsRoot.emit(results)\"\n >\n <span class=\"project-navigator-root-node\">\n {{ results.name }} ({{ totalResults() }})\n </span>\n \n <lib-expansion-panel-header-actions>\n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_results'\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: results.isVisible,\n invisible: !results.isVisible,\n semivisible: results.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResultsRoot.emit(results)\"\n ></div> -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n \n <!-- Show all result lists as expansion panels -->\n <!-- lib-bimplus-flat-tree can't be used for that at the moment -->\n <div *ngFor=\"let resultList of results?.resultList\">\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedResultTrees\"\n >\n <lib-expansion-panel-header>\n <span\n class=\"project-navigator-model-node\"\n [ngClass]=\"{\n visible: resultList.isVisible\n }\"\n [style.color]=\"resultList.colorHexCode\"\n [title]=\"resultList.name + ' (' + resultList.results.length + ')'\"\n (click)=\"clickedResultList.emit(resultList)\"\n (keypress)=\"clickedResultList.emit(resultList)\"\n (dblclick)=\"doubleClickedResultList.emit(resultList)\"\n >\n {{ resultList.name }} ({{ resultList.results.length }})\n </span>\n \n <lib-expansion-panel-header-actions>\n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_resultlist_' + resultList.id\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: resultList.isVisible,\n invisible: !resultList.isVisible,\n semivisible: resultList.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResultList.emit(resultList)\"\n ></div> -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n \n <!-- Content of panel -->\n <div\n class=\"project-navigator-layer-node\"\n *ngFor=\"let result of resultList.results\"\n >\n <div\n class=\"project-navigator-layer-node-name\"\n [class.selected-node]=\"result.isSelected\"\n [attr.data-test]=\"'result' + result.id\"\n [ngClass]=\"{\n visible: result.isVisible\n }\"\n [title]=\"getTitle(result)\"\n (click)=\"clickedResult.emit(result)\"\n (keypress)=\"clickedResult.emit(result)\" \n (dblclick)=\"doubleClickedResult.emit(result)\"\n (mouseenter)=\"mouseEnteredResult.emit(result)\"\n (mouseleave)=\"mouseLeftResult.emit(result)\"\n >\n {{ result.name }}\n </div>\n \n <!-- toggle buttons should be removed for now see ALBP-24057 -->\n <!-- <div\n [attr.data-test]=\"'toggle_visibility_result_' + result.id\"\n class=\"ui-icon-checkbox-slider project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: result.isVisible,\n invisible: !result.isVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityResult.emit(result)\"\n ></div> -->\n </div>\n </lib-expansion-panel>\n </div>\n </lib-expansion-panel>\n </div>\n </lib-bimplus-scrollable-container>\n\n } @else {\n <lib-bimplus-text-message\n class=\"error-message\"\n *ngIf=\"errorMessage\"\n [message]=\"errorMessage\"\n >\n </lib-bimplus-text-message>\n }\n\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n >\n </lib-bimplus-buttons-row>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeObserverService {\n\n private rectSize$: BehaviorSubject<DOMRect |undefined > = new BehaviorSubject<DOMRect|undefined>(undefined);\n private internalRectSize :DOMRect = new DOMRect(1,1,1,1);\n // Observable that components can subscribe to\n public parentAppRect$: Observable<DOMRect | undefined> = this.rectSize$.asObservable();\n\n constructor() { }\n\n public setSize(newValue: DOMRect): void {\n this.rectSize$.next(newValue); \n this.internalRectSize = newValue; \n }\n\n public getParentAppRect ():DOMRect{\n if( this.internalRectSize.width<=1 || this.internalRectSize?.height<=1 ) { // not set up with real data yet\n const parentView:HTMLElement|null = document.querySelector('.mainView');\n if(!parentView){\n return this.internalRectSize;\n }\n return parentView.getBoundingClientRect();\n }\n return this.internalRectSize;\n } \n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorageService {\n\n private storageSubject = new BehaviorSubject<{ key: string, value: unknown } | null>(null);\n\n constructor() { }\n\n // Set a string value in localStorage\n setItem(key: string, value: string): void {\n try {\n localStorage.setItem(key, value);\n this.storageSubject.next({ key, value });\n } catch (e) {\n console.error('Error saving to localStorage', e);\n }\n }\n\n // Get a string value from localStorage\n getItem(key: string): string | null {\n try {\n return localStorage.getItem(key);\n } catch (e) {\n console.error('Error reading from localStorage', e);\n return null;\n }\n }\n\n // Remove an item from localStorage\n removeItem(key: string): void {\n try {\n localStorage.removeItem(key);\n this.storageSubject.next({ key, value: null });\n } catch (e) {\n console.error('Error removing from localStorage', e);\n }\n }\n\n // Clear all items in localStorage\n clear(): void {\n try {\n localStorage.clear();\n this.storageSubject.next(null);\n } catch (e) {\n console.error('Error clearing localStorage', e);\n }\n }\n\n // Set an object in localStorage\n setObject(key: string, value: unknown): void {\n this.setItem(key, JSON.stringify(value));\n }\n\n // Get an object from localStorage\n getObject(key: string): unknown {\n const value = this.getItem(key);\n return value ? JSON.parse(value) : null;\n }\n\n // Watch for changes in localStorage\n watchStorage(): Observable<{ key: string, value: unknown } | null> {\n return this.storageSubject.asObservable();\n }\n}\n","import { ElementRef, Injectable, inject } from '@angular/core';\nimport { ResizeObserverService } from './resize-observer.service';\nimport { LocalStorageService } from './local-storage.service';\nimport { BehaviorSubject } from 'rxjs';\n//import { ItemsList } from '@ng-select/ng-select/lib/items-list';\n//import { NotFoundError } from 'rxjs';\n\n\nexport interface LayoutManagerItem {\n element:ElementRef;\n id: string;\n selector?:string;\n isCollapsed:boolean;\n rememberPosition?:boolean\n left?: number;\n top?:number;\n width?:number;\n height?:number;\n}\n\nexport interface LayoutManagerConfigItem {\n id: string;\n isCollapsed:boolean; \n left?: number;\n top?:number; \n width?:number;\n height?:number;\n}\n\n\ninterface LayoutManagerConfig {\n [key:string]: LayoutManagerConfigItem\n}\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutManagerService {\n private resizeObserverService = inject(ResizeObserverService);\n private localStorageService = inject(LocalStorageService);\n\n\n registeredItems$: BehaviorSubject<LayoutManagerItem[]> = new BehaviorSubject<LayoutManagerItem[]>([])\n private registeredItems:LayoutManagerItem[] = [];\n \n get RegisteredItems(): LayoutManagerItem[] {\n return this.registeredItems;\n }\n CONFIG:string = 'layoutManagerConfig';\n\n \n/**--------------------------------------------------------------------------\n * register object. object must have unique id or elementId\n --------------------------------------------------------------------------*/\n registerObject(obj:ElementRef, id:string, selector:string | undefined, rememberPosition:boolean,left:number = 100, top:number = 100,width:number = 0, height:number = 0) {\n let foundIndex = -1;\n if(this.registeredItems.some((item,index) => {\n const retval = item.id === id;\n if(retval){\n foundIndex = index;\n }\n return retval;\n })){\n if(foundIndex >= 0){\n this.registeredItems.splice(foundIndex,1);\n } \n }\n const newItem: LayoutManagerItem = { \n element:obj,\n id:id,\n selector:selector,\n rememberPosition:!!rememberPosition,\n left:left,\n top:top,\n width:width,\n height:height,\n isCollapsed: false \n };\n\n this.registeredItems.push(newItem);\n this.registeredItems$.next(this.registeredItems);\n this._initObject(newItem);\n }\n \n _initObject(obj:LayoutManagerItem){\n this._adjustObjectByConfig(obj);\n this._adjustObjectByWindowSize(obj);\n \n }\n /**--------------------------------------------------------------------------\n * get object configuration\n * return {left, top, width, heigth}\n --------------------------------------------------------------------------*/\n _getObjectConfig(obj:LayoutManagerItem):LayoutManagerConfigItem|null {\n if(!obj){\n return null;\n }\n const configValue = this.localStorageService.getItem(this.CONFIG);\n const config = configValue ? JSON.parse(configValue) : {};\n const objId = obj.id ;\n let configObj = config[objId];\n if(!configObj) {\n configObj = {id:objId,left:obj.left,top:obj.top,width:obj.width,height:obj.height}; \n }\n return configObj;\n }\n\n _adjustObjectByConfig(obj:LayoutManagerItem){\n const config:LayoutManagerConfigItem|null = this._getObjectConfig(obj);\n if(!config){\n return; \n }\n const parentElement = this._getDomParentElement(obj);\n const internalElement = this._getDomInternalElement(obj,'');\n if(!parentElement || !internalElement){\n return;\n }\n parentElement.style.left = (config.left) + 'px';\n parentElement.style.top = (config.top) + 'px';\n if(config.width && config.width > 0){\n internalElement.style.width = config.width + 'px';\n }\n if(config.height && config.height > 0){\n internalElement.style.height = config.height + 'px';\n }\n \n this.checkPosition(obj.id,\"\",undefined,0,0,true); \n }\n\n _adjustObjectByWindowSize(obj:LayoutManagerItem){\n this.checkPosition(obj.id,\"\",undefined,0,0,true); \n }\n \n /**--------------------------------------------------------------------------\n * returns object registered in the layout manager \n --------------------------------------------------------------------------*/\n getItem(id: string ):LayoutManagerItem|null { \n let foundItem:LayoutManagerItem|null = null;\n this.registeredItems.forEach(item =>{\n if(item.id === id){\n foundItem = item;\n }\n });\n return foundItem;\n }\n\n /**--------------------------------------------------------------------------\n * set object configuration\n --------------------------------------------------------------------------*/\n _setObjectConfig(obj:LayoutManagerItem, left:number,top:number,width:number,height:number) {\n const objId = obj?.id ;\n if (!objId) {\n return;\n }\n let config = this.localStorageService.getObject(this.CONFIG) as LayoutManagerConfig;\n //let config = configValue && JSON.parse(configValue) as LayoutManagerConfig;\n if (!config) {\n config = {};\n }\n if(obj?.isCollapsed){ // do not overtake collapsed size\n if (!config[objId]) { \n config[objId] = obj;\n }\n config[objId].left = left;\n config[objId].top = top;\n //config[objId].width = width;\n //config[objId].height = height ;\n this.localStorageService.setObject(this.CONFIG, config);\n return;\n }\n\n const newItem :LayoutManagerConfigItem = {\n id: objId,\n isCollapsed: false,\n left: left,\n top: top,\n width: width,\n height: height\n };\n config[objId] = newItem;\n this.localStorageService.setObject(this.CONFIG,config);\n }\n \n getDomParentElement(id:string ):HTMLElement|null {\n const item:LayoutManagerItem|null = this.getItem(id);\n if(item){\n return this._getDomParentElement(item);\n }\n return null;\n }\n\n _getDomParentElement(item:LayoutManagerItem ):HTMLElement|null {\n let element:HTMLElement;\n if(item.element?.nativeElement?.shadowRoot){\n element = item.element?.nativeElement?.shadowRoot.querySelector(item.selector);\n } else {\n element = item.element?.nativeElement; \n }\n if(!element){\n console.error('_getDomParentElement: missing element');\n return null;\n }\n return element; \n }\n\n _getDomInternalElement(item:LayoutManagerItem,selector:string | undefined ):HTMLElement|null {\n const element:HTMLElement = item.element?.nativeElement?.shadowRoot || item.element?.nativeElement; \n if(!element){\n console.error('_getDomInternalElement: missing element');\n return null;\n }\n const mySelector =selector && selector?.length > 0 ?selector:item.selector; \n const retval: HTMLElement|null= mySelector?element.querySelector(mySelector):element;\n if(!retval){\n console.error(`_getDomInternalElement: selection of element ${element} failed with selector ${mySelector}`);\n }\n return retval;\n }\n\n\n _getElementRect(item:LayoutManagerItem,selector:string | undefined ,parentRectangle:DOMRect |undefined ):DOMRect | null{\n const selectedObj : HTMLElement|null = this._getDomInternalElement(item,selector);\n if(!selectedObj){\n console.error('_getElementRect: missing selected object');\n return null;\n }\n\n const parentRect:DOMRect = parentRectangle || this.resizeObserverService.getParentAppRect();\n if( !parentRect || parentRect?.width<=1 || parentRect?.height<=1 ) {\n console.log('_getElementRect: missing parent rect');\n }\n const elementRect:DOMRect|null = selectedObj.getBoundingClientRect();\n if(!elementRect){\n console.error('_getElementRect: missing bounding rect');\n }\n return elementRect;\n }\n\n // checks whether element or element with additional selection of subelement is placed within the give rectangle\n // if not then calculates the offset to be moved to fit in\n checkPosition(id:string,selector:string,parentRectangle:DOMRect|undefined ,deltaX:number,deltaY:number,forceCheck:boolean = false){\n if(!id){\n return {deltaX:0,deltaY:0};\n }\n const e1 = this.getItem(id);\n if(!e1){\n return {deltaX:0,deltaY:0};\n }\n const parentRect:DOMRect = parentRectangle || this.resizeObserverService.getParentAppRect();\n const elementRect:DOMRect | null = this._getElementRect(e1,selector,parentRect);\n if(!elementRect){\n console.error('checkPosition: missing elementRect');\n return {deltaX:0,deltaY:0};\n }\n \n if(!elementRect?.width || !elementRect?.height){\n console.error('checkPosition:element rect empty ');\n return {deltaX:0,deltaY:0};\n } \n \n let checkAll = true;\n if(parentRect?.width < 2 || parentRect?.height < 2){ // empty parent rect , (after init before first usefull info) nothing to check \n checkAll = false; \n } \n if(checkAll){\n let checkBoundaries = true;\n if(this._isInsideRect(elementRect, parentRect) === false && !forceCheck) {\n checkBoundaries = false;\n }\n \n // copy of real element rectangle to perform calculation over before set to the real element\n const elementDOMRect = DOMRect.fromRect(elementRect);\n\n //set the element rectangle by deltas\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n\n if(checkBoundaries) {\n if(this._isInsideRect(elementDOMRect, parentRect) === false) {\n const newElementPos = this.getAlignedPosition(elementDOMRect, parentRect);\n deltaX = newElementPos.x - elementRect.x;\n deltaY = newElementPos.y - elementRect.y;\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n }\n } else {\n if (this._isInsideLeftTopRect(parentRect, elementDOMRect) === false) {\n const newElementPos = this._getAlignedLeftTopPosition(elementDOMRect, parentRect);\n deltaX = newElementPos.x - elementRect.x;\n deltaY = newElementPos.y - elementRect.y;\n this._translateRectangle(elementDOMRect, deltaX, deltaY);\n }\n }\n }\n\n const selectedElement = this._getDomParentElement(e1);\n if(!selectedElement){\n return;\n }\n const computedStyle = window.getComputedStyle(selectedElement);\n const top = parseInt(computedStyle.top, 10);\n const left = parseInt(computedStyle.left, 10);\n selectedElement.style.top = (top + deltaY) + 'px';\n selectedElement.style.left = (left + deltaX) + 'px';\n return {deltaX,deltaY};\n }\n /**--------------------------------------------------------------------------\n * find if rectangle 1 is inside rectangle 2\n --------------------------------------------------------------------------*/\n _isInsideRect(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return false;\n }\n return r2.left <= r1.left && r2.top <= r1.top && r2.right >= r1.right && r2.bottom >= r1.bottom;\n }\n\n /**--------------------------------------------------------------------------\n * find if rectangles do not overlap the left and top sides\n --------------------------------------------------------------------------*/\n _isInsideLeftTopRect(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return false;\n }\n const r1Inside = r2.left <= r1.left && r2.top <= r1.top;\n const r2Inside = r1.left <= r2.left && r1.top <= r2.top;\n return r1Inside || r2Inside;\n }\n\n /**--------------------------------------------------------------------------\n * get position of r1 aligned with the r2 sides\n --------------------------------------------------------------------------*/\n getAlignedPosition(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return {x:0,y:0};\n }\n const to = { x: r1.x, y: r1.y };\n //align left or right sides. preferably left\n if(r1.left < r2.left) {\n to.x = r2.x;\n } else if(r1.right > r2.right) {\n to.x = r2.right - r1.width;\n }\n //align top or bottom. preferably top\n if(r1.top < r2.top) {\n to.y = r2.y;\n } else if(r1.bottom > r2.bottom) {\n to.y = r2.bottom - r1.height;\n }\n return to;\n }\n \n /**--------------------------------------------------------------------------\n * get position of r1 aligned with the r2 left, top sides\n --------------------------------------------------------------------------*/\n _getAlignedLeftTopPosition(r1:DOMRect, r2:DOMRect) {\n if(!r1 || !r2) {\n return {x:0,y:0};\n }\n\n const to = { x: r1.x, y: r1.y };\n //align left\n if(r1.left < r2.left) {\n to.x = r2.x;\n }\n //align top\n if(r1.top < r2.top) {\n to.y = r2.y;\n }\n return to;\n }\n\n /**--------------------------------------------------------------------------\n * translate rectangle by x, y\n --------------------------------------------------------------------------*/\n _translateRectangle(rect:DOMRect, translateX:number, translateY:number) {\n if(!rect) {\n return;\n }\n rect.x += translateX;\n rect.y += translateY;\n return rect;\n }\n \n updateCollapsed(value:boolean, id:string = ''):void{ \n const foundItem = this.getItem(id);\n if(!foundItem){\n return;\n }\n foundItem.isCollapsed = value;\n this.registeredItems$.next(this.registeredItems);\n setTimeout(()=>{ \n this.checkPosition(foundItem.id,\"\",undefined,0,0,true); \n });\n } \n\n\n handleDragEnd(id:string){//},left:number,top:number){\n this.finalizeObjectChanges(id);\n }\n\n /**--------------------------------------------------------------------------\n * finalize object changes (position). object must be registered in the layout manager\n * object: object to finalize \n --------------------------------------------------------------------------*/\n finalizeObjectChanges(id:string):void {\n const item:LayoutManagerItem|null = this.getItem(id);\n if(!item){\n return;\n }\n const element = this._getDomParentElement(item);\n if(!element){\n return;\n }\n const computedStyle = window.getComputedStyle(element); \n const top = parseInt(computedStyle.top, 10);\n const left = parseInt(computedStyle.left, 10);\n \n const elementRect = this._getElementRect(item,undefined,undefined);\n this._setObjectConfig(item,left,top,\n elementRect && elementRect.width > 0 ? elementRect.width:0 ,\n elementRect && elementRect.height > 0 ? elementRect.height:0);\n }\n}\n\n","// Define the type of the window.BimPlus object\nexport interface BimPlusObject {\n [key: string]: (dataDetail: { detail: unknown }) => void;\n}\nexport interface Source {\n [key: string]: { emit: (arg0: unknown) => void; };\n}\n\n\n/**--------------------------------------------------------------------------\n* fire event from component in two ways : \n - fire custom event from component in standard recommended way via. this.eventName.emit function\n \n - call window.BimPlus.eventName function directly on window object (eventName is name\n of the event we want to fire e.g. bimplusNavbarClicked so it will be window.BimPlus.bimplusNavbarClicked).\n Function must be defined in app. where we are using our components.\n This was implemented because MS Edge browser has problems with custom events and in some \n situations(e.g. after file download) it stops handling custom events.\n Disadvantage is that we can have only one event handler which is shared between the multiple components.\n--------------------------------------------------------------------------*/\nexport function fireEvent(source: unknown, eventName: string, data: unknown = null){\n if ( !eventName ) {\n console.error(\"ERROR: Missing event name in fireEvent function in Bimplus components!\");\n return;\n }\n // Check if eventName exists on window.BimPlus and if it's a function\n const bimPlus = ('BimPlus' in window) && typeof window.BimPlus === 'object' && (window.BimPlus as BimPlusObject);\n if (bimPlus && typeof bimPlus[eventName] === 'function') {\n bimPlus[eventName]({detail: data});\n }\n\n const _source = (source as Source);\n if (eventName in _source) {\n _source[eventName].emit(data);\n }\n}","import { Directive, ElementRef, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { LayoutManagerService } from '../services/layout-manager.service';\nimport { ResizeObserverService } from '../services/resize-observer.service';\nimport { fireEvent } from '../utils/utils';\n\ninterface ResizerItem {\n 'className' : string ,\n 'resizeStrategy' : string \n}\n\nexport interface ResizableElement extends HTMLElement{\n resizeStrategy?: string;\n}\n\n@Directive({\n selector: '[libResizable]',\n standalone: true\n})\n\nexport class ResizableDirective implements OnDestroy, OnInit{\n private elementRef = inject(ElementRef);\n private layoutManagerService = inject(LayoutManagerService);\n private resizeObserverService = inject(ResizeObserverService);\n\n resizeContactPointX = 0;\n resizeContactPointY = 0;\n resizableElements:ResizableElement[] = [];\n resizeEnabled = true;\n resizeStarted = false;\n resizeStart : (event: MouseEvent | TouchEvent) => void;\n resizeInProgress: (event: MouseEvent | TouchEvent) => void; \n boundResizeStart: (event: MouseEvent | TouchEvent) => void;\n boundResizeInProgress: (event: MouseEvent | TouchEvent) => void;\n boundResizeEnd: (event: MouseEvent | TouchEvent) => void;\n \n _element:HTMLElement; \n actResizeStrategy = \"se\";\n \n\n @Output()\n resizedEnd = new EventEmitter<MouseEvent>();\n\n\n // list of resizers, resizers are specified by class name\n resizersList:ResizerItem[] = [ \n { className : \"resizer-nw\" , resizeStrategy : \"nw\" },\n { className : \"resizer-n\" , resizeStrategy: \"n\" },\n { className : \"resizer-ne\" , resizeStrategy: \"ne\" },\n { className : \"resizer-e\" , resizeStrategy: \"e\" },\n { className : \"resizer-se\" , resizeStrategy: \"se\" },\n { className : \"resizer-s\" , resizeStrategy: \"s\" },\n { className : \"resizer-sw\" , resizeStrategy: \"sw\" },\n { className : \"resizer-w\" , resizeStrategy: \"w\" }\n ];\n \n constructor() {\n const elementRef = this.elementRef;\n const layoutManagerService = this.layoutManagerService;\n \n \n this._element = elementRef.nativeElement;\n this.layoutManagerService = layoutManagerService;\n \n this.resizeStart = (event:MouseEvent|TouchEvent) => {\n //get mouse/finger X Y positions\n event.stopPropagation();\n if(this.resizeStarted){\n return;\n }\n this.resizeStarted = true;\n const touchList = (event as TouchEvent).targetTouches? (event as TouchEvent).targetTouches: [];\n const clientX = event.type === 'touchstart' ? touchList[0]?.clientX : (event as MouseEvent).clientX;\n const clientY = event.type === 'touchstart' ? touchList[0]?.clientY : (event as MouseEvent).clientY;\n this.resizeContactPointX = clientX;\n this.resizeContactPointY = clientY;\n this.openDocumentListenersResize(); \n this.setupResizeStrategy(event);\n }\n \n /**--------------------------------------------------------------------------\n * calcuates and sets the new position\n --------------------------------------------------------------------------*/\n this.resizeInProgress = (event:MouseEvent|TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n //get mouse/finger X Y positions\n const touchList = (event as TouchEvent).targetTouches ? (event as TouchEvent).targetTouches: [];\n const clientX = event.type === 'touchmove' ? touchList[0]?.clientX : (event as MouseEvent).clientX;\n const clientY = event.type === 'touchmove' ? touchList[0]?.clientY : (event as MouseEvent).clientY;\n //const clientX = (event as MouseEvent).clientX;\n //const clientY = (event as MouseEvent).clientY;\n\n const moved = this.resizeFromTo(this._element,this.resizeContactPointX, this.resizeContactPointY,clientX,clientY, this.actResizeStrategy);\n if(moved) {\n this.resizeContactPointX = clientX;\n this.resizeContactPointY = clientY;\n }\n }\n this.boundResizeStart = this.resizeStart.bind(this);\n this.boundResizeInProgress = this.resizeInProgress.bind(this);\n this.boundResizeEnd = this.resizeEnd.bind(this);\n this.resizeInProgress.bind(this);\n this.setResizers(this._element); \n }\n ngOnInit(): void {\n this.boundResizeStart = this.resizeStart.bind(this);\n this.boundResizeInProgress = this.resizeInProgress.bind(this);\n this.boundResizeEnd = this.resizeEnd.bind(this);\n }\n\n ngOnDestroy(): void {\n this.closeAllListenersResize(); \n }\n\n resizeEnd(){ \n //this.closeDocumentListenersResize();\n if(!this.resizeStarted){\n return;\n } \n this.resizeStarted = false;\n this.closeAllListenersResize(); \n this.openElementListenersResize();\n fireEvent(this, \"resizedEnd\", ['$event']); \n }\n \n // Unused function at the moment\n // _getViewRect() {\n // const view = document.getElementById('#containerView'); // we should get here the parent object selector as input parameter\n // if(view){\n // return view.getBoundingClientRect();\n // }\n // return new DOMRect(0,0,0,0);\n // }\n\n/**--------------------------------------------------------------------------\n * find if rectangle 1 is inside rectangle 2\n --------------------------------------------------------------------------*/\n isInsideRect(rect1:DOMRect, rect2:DOMRect) {\n if(!rect1 || !rect2) {\n return false;\n }\n const rect1Inside:boolean = rect2.left <= rect1.left\n && rect2.top <= rect1.top \n && rect2.right >= rect1.right \n && rect2.bottom >= rect1.bottom;\n\n return rect1Inside;\n }\n /**--------------------------------------------------------------------------\n * resize rectangle by x, y\n --------------------------------------------------------------------------*/\n _resizeRectangle(rect:DOMRect, resizeX:number, resizeY:number, resizeStrategy:string) {\n if(!rect) {\n return;\n }\n\n if(['nw','w', 'sw'].includes(resizeStrategy)) {\n rect.x += resizeX;\n resizeX = resizeX * -1;\n }\n\n if(['nw','n', 'ne'].includes(resizeStrategy)) {\n rect.y += resizeY;\n resizeY = resizeY * -1;\n }\n\n if(typeof(resizeX) === 'number' && !['n','s'].includes(resizeStrategy)) {\n rect.width += resizeX;\n }\n\n if(typeof(resizeY) === 'number' && !['w','e'].includes(resizeStrategy)) {\n rect.height += resizeY;\n }\n\n return rect;\n }\n\n _maxHeightReset(obj:HTMLElement, elementRect:DOMRect) { \n this.resizeFromTo(obj, elementRect.right, elementRect.bottom, elementRect.left,elementRect.top, \"se\");\n }\n\n /*--------------------------------------------------------------------\n * resize object from {x,y} to {x,y} based on resize strategy\n --------------------------------------------------------------------------*/\n resizeFromTo (obj:HTMLElement, fromX:number, fromY:number, toX:number,toY:number, resizeStrategy:string){\n const posXDelta = toX - fromX;\n const posYDelta = toY - fromY;\n const element = obj ?? this._element;\n const elementRect = element.getBoundingClientRect();\n //const viewRect = this._getViewRect();\n const viewRect = this.resizeObserverService.getParentAppRect();\n \n let checkBoundaries = true;\n\n resizeStrategy = resizeStrategy || \"se\";\n\n //if the object is outside the view rect because it's bigger, do not check boundaries,\n //allow moving outside the view rect\n if(this.isInsideRect(elementRect, viewRect) === false) {\n checkBoundaries = false; \n }\n\n this._resizeRectangle(elementRect, posXDelta, posYDelta, resizeStrategy);\n\n if (checkBoundaries && this.isInsideRect(elementRect, viewRect) === false) {\n return false;\n }\n \n const computedStyle = window.getComputedStyle(element);\n let top = parseInt(computedStyle.top, 10);\n let left = parseInt(computedStyle.left, 10);\n let width = parseInt(computedStyle.width, 10);\n let height = parseInt(computedStyle.height, 10);\n \n if(['nw','w', 'sw'].includes(resizeStrategy)) {\n left = left + posXDelta; \n }\n\n if(['nw','n', 'ne'].includes(resizeStrategy)) {\n top = top + posYDelta; \n }\n\n if(!['n','s'].includes(resizeStrategy)) {\n width = elementRect.width;\n }\n \n if( viewRect.height < elementRect.height ){\n this._maxHeightReset(element, elementRect);\n }\n else if(!['w','e'].includes(resizeStrategy)) {\n height = elementRect.height;\n }\n\n \n element.style.top = top + 'px';\n element.style.left = left + 'px';\n element.style.width = width + 'px';\n element.style.height = height + 'px';\n\n return true;\n }\n/**--------------------------------------------------------------------------\n * resize start at the layout managaer\n * open document listeners\n --------------------------------------------------------------------------*/\n \n /**--------------------------------------------------------------------------\n * set the elements used for resizing\n --------------------------------------------------------------------------*/\n setResizers(element:HTMLElement) {\n const setResizableElements = () => {\n let resizableElements:ResizableElement[] = [];\n // get dom elements of all resizers\n this.resizersList.forEach( item => {\n const resizeElems = element.getElementsByClassName(item.className);\n if( resizeElems?.length ) {\n // set resize strategy in each element so we know in which direction to resize\n const decoratedResizeElems: ResizableElement[] = Array.from(resizeElems).map( elem => {\n const resizableElem = elem as ResizableElement;\n resizableElem.resizeStrategy = item.resizeStrategy;\n return resizableElem;\n });\n\n // add it to list of all resizers\n resizableElements = [...resizableElements, ...decoratedResizeElems];\n }\n });\n\n this.resizableElements = [...resizableElements];\n this.openElementListenersResize();\n }\n setTimeout(()=>{\n setResizableElements();\n });\n }\n\n /**--------------------------------------------------------------------------\n * open mousedown, touchstart listeners on all elements allowed for resizing\n --------------------------------------------------------------------------*/\n openElementListenersResize() {\n this.resizableElements.forEach(element => {\n element.addEventListener('mousedown', this.boundResizeStart);\n element.addEventListener('touchstart', this.boundResizeStart);\n });\n }\n /**--------------------------------------------------------------------------\n * open mouseup, touchend and mousemove, touchmove on document\n --------------------------------------------------------------------------*/\n openDocumentListenersResize() {\n document.addEventListener('mouseup', this.boundResizeEnd);\n document.addEventListener('touchend', this.boundResizeEnd);\n document.addEventListener('mousemove', this.boundResizeInProgress);\n document.addEventListener('touchmove', this.boundResizeInProgress); \n }\n \n /**--------------------------------------------------------------------------\n * close mouseup, touchend and mousemove, touchmove on document\n --------------------------------------------------------------------------*/\n closeDocumentListenersResize() {\n document.removeEventListener('mousemove', this.boundResizeInProgress);\n document.removeEventListener('touchmove', this.boundResizeInProgress);\n document.removeEventListener('mouseup', this.boundResizeEnd);\n document.removeEventListener('touchend', this.boundResizeEnd);\n }\n\n/**--------------------------------------------------------------------------\n * close mousedown, touchstart listeners on all elements allowed for resizing\n --------------------------------------------------------------------------*/\n closeElementListenersResize() {\n this.resizableElements.forEach(element => {\n element.removeEventListener('mousedown', this.boundResizeStart);\n element.removeEventListener('touchstart', this.boundResizeStart);\n element.removeEventListener('mousemove', this.boundResizeInProgress);\n element.removeEventListener('touchmove', this.boundResizeInProgress); \n element.removeEventListener('mouseup', this.boundResizeEnd);\n element.removeEventListener('touchend', this.boundResizeEnd);\n });\n }\n\n /**--------------------------------------------------------------------------\n * close all listeners\n --------------------------------------------------------------------------*/\n closeAllListenersResize() {\n this.closeElementListenersResize();\n this.closeDocumentListenersResize();\n }\n\n /**--------------------------------------------------------------------------\n * setup actual resize strategy\n --------------------------------------------------------------------------*/\n setupResizeStrategy(event: MouseEvent | TouchEvent) {\n if( !event ) {\n return;\n }\n\n // find on which element resize started so we know in which direction to resize\n let resizeStrategy:string = \"se\";\n const resizeSourceElem = event?.target;\n\n if( resizeSourceElem ) {\n const foundElem = this.resizableElements.find( item => item === resizeSourceElem );\n if (foundElem?.resizeStrategy) {\n resizeStrategy = foundElem?.resizeStrategy;\n }\n }\n\n this.actResizeStrategy = resizeStrategy;\n }\n}\n","import { Component, Input, ElementRef, AfterViewChecked, ChangeDetectorRef, OnInit, OnDestroy, AfterViewInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { ResizableDirective } from '../../directives/resizable.directive'\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\nimport { ResizeObserverService } from '../../services/resize-observer.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar',\n imports: [\n CommonModule,\n ResizableDirective\n ],\n templateUrl: './bimplus-floating-bar.component.html',\n styleUrl: './bimplus-floating-bar.component.less'\n})\n\nexport class BimplusFloatingBarComponent extends BimplusLocalizedWidgetComponent implements OnInit, OnDestroy, AfterViewChecked,AfterViewInit\n{\n private layoutManagerService = inject(LayoutManagerService);\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private resizeObserverService = inject(ResizeObserverService);\n\n constructor() {\n super();\n }\n\n @Input() noBody: boolean = false;\n \n @Input() isFocused: boolean = false;\n\n @Input() resizeEnabled: boolean = false;\n @Input() autoCollapse: boolean = false;\n @Input() focusSelector: string = '';\n @Input() isVisible = false; \n @Input() id: string = '';\n \n private subscription: Subscription | null = null; // Initialize to null\n private hasViewChecked: boolean = false;\n \n //@Input() isCollapsed: boolean = false;\n isCollapsed: boolean = false;\n\n get canNotResize(): boolean {\n return !(this.resizeEnabled && !this.isCollapsed);\n }\n\n ngOnInit():void{\n \n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.id); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n }) \n \n }\n ngOnDestroy(): void {\n // Unsubscribe to avoid memory leaks\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n ngAfterViewInit(){\n // if the component wants to be registered in layout manager system\n // Subscribe to the observable\n this.subscription = this.resizeObserverService.parentAppRect$.subscribe(value => {\n this.handleParentAppRectSizeChange(value);\n });\n }\n\n ngAfterViewChecked() {\n if (!this.hasViewChecked && !this.isCollapsed) {\n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n //this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.id,\"\",undefined,0,0,true);\n });\n }\n }\n\n handleParentAppRectSizeChange(parentRect:DOMRect | undefined):void{ \n this.layoutManagerService.checkPosition(this.id,'.floating-panel.visible',parentRect,0,0,true); \n }\n \n onResizedEnd(){\n this.layoutManagerService.finalizeObjectChanges(this.id);\n }\n\n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.id);\n }\n}\n\n","<div\n class=\"floating-panel\"\n [class.visible]=\"isVisible\"\n [class.no-body]=\"noBody\"\n [class.is-focused]=\"isFocused\"\n [class.collapsed]=\"isCollapsed\" \n libResizable\n (resizedEnd)=\"onResizedEnd()\"\n (dragEnd)=\"onDragEnd()\"\n>\n <ng-content select=\".floating-bar-header-logo\"></ng-content>\n <ng-content select=\".floating-bar-header-content\"></ng-content>\n <ng-content select=\".floating-bar-dragger\"></ng-content>\n <ng-content select=\".floating-bar-body\"></ng-content>\n <div \n class=\"resizer-ne floating-panel__resizerNE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-e floating-panel__resizerE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-se floating-panel__resizerSE\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n<div \n class=\"resizer-s floating-panel__resizerS\"\n [class.resize-disabled]=\"canNotResize\">\n</div>\n</div>\n\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\nimport { fireEvent } from '../utils/utils';\r\n\r\n@Directive({\r\n selector: '[libDraggable]',\r\n standalone: true\r\n})\r\nexport class DraggableDirective {\r\n\r\n oldX = 0;\r\n oldY = 0;\r\n isDragging = false;\r\n wasDragging = false;\r\n isMouseDown = false;\r\n\r\n @Output()\r\n dragging = new EventEmitter<[number,number]>();\r\n\r\n @Output()\r\n dragEnd = new EventEmitter<MouseEvent>();\r\n\r\n @Output()\r\n clicked = new EventEmitter<MouseEvent>();\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging && !this.isMouseDown) {\r\n return;\r\n }\r\n\r\n const deltaX = (event.clientX - this.oldX);\r\n const deltaY = (event.clientY - this.oldY);\r\n\r\n if(!this.isDragging){\r\n if(Math.abs(deltaX) > 2 || Math.abs(deltaY) > 2){\r\n this.isDragging = true;\r\n this.wasDragging = true;\r\n }else{\r\n return;\r\n }\r\n }\r\n fireEvent(this, \"dragging\", [deltaX,deltaY]);\r\n\r\n this.oldX = event.clientX;\r\n this.oldY = event.clientY;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseUp() {\r\n if(this.isDragging || this.isMouseDown){\r\n fireEvent(this, \"dragEnd\", ['$event']);\r\n }\r\n this.isDragging = false;\r\n this.isMouseDown = false; \r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n this.isMouseDown = true;\r\n this.wasDragging = false;\r\n this.oldX = event.clientX;\r\n this.oldY = event.clientY; \r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onMouseClick(event: MouseEvent) {\r\n if(!this.wasDragging){\r\n fireEvent(this, \"clicked\", event);\r\n }\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LayoutManagerService } from '../../services/layout-manager.service';\n@Component({\n selector: 'lib-bimplus-floating-bar-dragger',\n imports: [\n CommonModule,\n DraggableDirective,\n ],\n templateUrl: './bimplus-floating-bar-dragger.component.html',\n styleUrl: './bimplus-floating-bar-dragger.component.less'\n})\nexport class BimplusFloatingBarDraggerComponent {\n private layoutManagerService = inject(LayoutManagerService);\n\n // Define isCollapsed as a boolean property\n @Input() isCollapsed: boolean = false;\n @Input() parentId:string = '';\n \n // Define icon as a string property with a default value\n draggerIcon: string = 'ui-icon-drag';\n \n \n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__dragger dragger\"\n [ngClass] = \"isCollapsed ? 'collapsed' : ''\"\n [className]=\"draggerIcon\"\n libDraggable \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n>\n</div>\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, input, Input, Output, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LayoutManagerService, LayoutManagerItem } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-header-content',\n imports: [\n CommonModule,\n DraggableDirective,\n TranslateModule,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './bimplus-floating-bar-header-content.component.html',\n styleUrl: './bimplus-floating-bar-header-content.component.less'\n})\nexport class BimplusFloatingBarHeaderContentComponent extends BimplusLocalizedWidgetComponent {\n private readonly layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n }) \n }\n\n @Input() isCollapsed: boolean = false;\n @Input() parentId:string = '';\n @Output() actionClicked = new EventEmitter<string>();\n items = input<FloatingBarItem[]>([]);\n\n findItemById(id: string): FloatingBarItem | undefined {\n return this.items().find(x => x.buttonId === id);\n }\n\n onItemClicked(action: string) {\n const item = this.findItemById(action);\n if (!item || item?.disabled) {\n return;\n }\n this.actionClicked.emit(action);\n }\n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__header-content dragger\"\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\n libDraggable \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n>\n <div class=\"menu-content\">\n <div *ngFor=\"let item of items()\">\n <div\n [attr.data-test]=\"'floating_bar_item_' + item.buttonId\"\n class=\"fp-block-item fp-block-icon-item\"\n [ngClass]=\"{\n active: item.active\n }\"\n [className]=\"item.iconClass\"\n [title]=\"item.title | translate\"\n (click)=\"onItemClicked(item.buttonId)\"\n (keypress)=\"onItemClicked(item.buttonId)\" \n ></div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, HostBinding, OnInit, inject } from '@angular/core';\nimport { DraggableDirective } from '../../directives/draggable.directive'\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-header-logo',\n imports: [\n CommonModule,\n DraggableDirective,\n TranslateModule,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './bimplus-floating-bar-header-logo.component.html',\n styleUrl: './bimplus-floating-bar-header-logo.component.less'\n})\nexport class BimplusFloatingBarHeaderLogoComponent extends BimplusLocalizedWidgetComponent implements OnInit\n{\n private readonly layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n }\n\n @Input() icon: string = \"\";\n @HostBinding('class.isCollapsed')\n @Input() isCollapsed: boolean = false;\n @Input() parentId: string = '';\n\n @Input() title: string = \"\";\n\n ngOnInit(){\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n })\n }\n\n onLogoClicked(){\n this.layoutManagerService.updateCollapsed(!this.isCollapsed,this.parentId)\n }\n \n onDragEnd(){\n this.layoutManagerService.handleDragEnd(this.parentId);\n }\n \n dragBaseElement(event: [number, number]): void {\n const deltaX1 = event[0];\n const deltaY1 = event[1]; \n this.layoutManagerService.checkPosition(this.parentId,\"\",undefined,deltaX1,deltaY1) \n }\n}\n","<div\n class=\"floating-panel__header-logo\"\n [ngClass]=\"isCollapsed ? 'collapsed' : ''\"\n [className]=\"icon\"\n [title]=\"title | translate\"\n libDraggable\n (clicked)=\"onLogoClicked()\" \n (dragEnd)=\"onDragEnd()\"\n (dragging)=\"dragBaseElement($event)\"\n></div>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef, AfterViewInit, model, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { LayoutManagerService } from '../../services/layout-manager.service';\n\nconst DEFAULT_POSITION_LEFT = 355;\nconst DEFAULT_POSITION_TOP = 355;\n@Component({\n selector: 'lib-bimplus-floating-bar-hide-objects',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n TranslateModule,\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-hide-objects.component.html',\n styleUrl: './bimplus-floating-bar-hide-objects.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusFloatingBarHideObjectsComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit {\n private readonly element = inject(ElementRef);\n\n \n @Output() actionClicked = new EventEmitter<string>();\n @Input() noBody: boolean = true; \n @Input() isFocused: boolean = true;\n\n items = model<FloatingBarItem[]>([]);\n\n protected layoutManagerService: LayoutManagerService;\n\n componentId = 'hide-menu-fp-id'\n icon = 'ui-icon-hide-menu';\n title: string = \"\"; // no tooltip info on Logo icon\n focusSelectorId: string = 'hide-menu-id';\n\n constructor(){\n const layoutManagerService = inject(LayoutManagerService);\n\n super();\n this.layoutManagerService = layoutManagerService;\n }\n \n ngAfterViewInit() {\n // Subscribe to the observable\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP); \n } \n}\n","<lib-bimplus-floating-bar\n id=\"hide-menu-fp-id\"\n [id] = \"componentId\"\n class=\"hide-menu\"\n [noBody]=\"noBody\"\n [isFocused]=\"isFocused\"\n [resizeEnabled]=\"false\"\n [focusSelector]=\"focusSelectorId\"\n [isVisible]=\"true\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\" \n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [icon]=\"icon\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [parentId] = \"componentId\"\n class=\"floating-bar-header-content\"\n [items]=\"items()\" \n (actionClicked)=\"actionClicked.emit($event)\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\" \n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n</lib-bimplus-floating-bar>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef, AfterViewChecked, ChangeDetectorRef, AfterViewInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { LayoutManagerService} from '../../services/layout-manager.service';\n\nconst DEFAULT_POSITION_LEFT =355;\nconst DEFAULT_POSITION_TOP = 320;\n\n@Component({\n selector: 'lib-bimplus-floating-bar-isolation-objects',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n TranslateModule,\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-isolation-objects.component.html',\n styleUrl: './bimplus-floating-bar-isolation-objects.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusFloatingBarIsolationObjectsComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit, AfterViewChecked{\n private layoutManagerService = inject(LayoutManagerService);\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor(){\n super();\n }\n private hasViewChecked: boolean = false;\n\n \n @Output() actionClicked = new EventEmitter<string>();\n\n @Input() noBody: boolean = true;\n @Input() isFocused: boolean = true;\n\n // Items for the header content sub component\n @Input() items: Array<FloatingBarItem> = [];\n\n icon = 'ui-icon-isolation-menu';\n title: string = \"\"; // no tooltip info on Logo icon\n focusSelectorId: string = 'isolation-menu-id';\n componentId = 'isolation-menu-fp-id';\n \n ngAfterViewInit(){\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP,); \n }\n\n ngAfterViewChecked() {\n if (!this.hasViewChecked) {\n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.componentId,'.floating-panel.visible',undefined,0,0,true); \n });\n }\n }\n}\n","<lib-bimplus-floating-bar\n id=\"isolation-menu-fp-id\"\n [id] = \"componentId\"\n class=\"isolation-menu\"\n [noBody]=\"noBody\"\n [isFocused]=\"isFocused\"\n [resizeEnabled]=\"false\"\n [focusSelector]=\"focusSelectorId\"\n [isVisible]=\"true\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [icon]=\"icon\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [parentId] = \"componentId\" \n class=\"floating-bar-header-content\"\n [items]=\"items\"\n (actionClicked)=\"actionClicked.emit($event)\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\"\n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n</lib-bimplus-floating-bar>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\n\n@Component({\n selector: 'lib-bimplus-floating-bar-body',\n imports: [\n CommonModule,\n TranslateModule,\n ],\n templateUrl: './bimplus-floating-bar-body.component.html',\n styleUrl: './bimplus-floating-bar-body.component.less'\n})\nexport class BimplusFloatingBarBodyComponent extends BimplusLocalizedWidgetComponent implements OnInit{\n private layoutManagerService = inject(LayoutManagerService);\n\n constructor() {\n super();\n }\n\n @Input() isCollapsed: boolean = false;\n @Input() parentId: string = '';\n \n ngOnInit(){\n this.layoutManagerService.registeredItems$.subscribe((items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.parentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n })\n }\n}\n\n\n","<div\n libDraggable\n class=\"floating-panel__body\"\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\n>\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, input, Input, Output } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { ProjectNavigatorModel, ProjectNavigatorLayer } from './project-models.interface';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\n\n@Component({\n selector: 'lib-project-models',\n imports: [\n CommonModule,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n TranslateModule,\n ],\n templateUrl: './project-models.component.html',\n styleUrl: './project-models.component.less'\n})\nexport class ProjectModelsComponent extends BimplusLocalizedWidgetComponent {\n constructor() {\n super();\n }\n\n @Input() modelTreeRootTitle: string = \"_Divisions\";\n @Input() modelTreeRootName: string = \"_Divisions\";\n\n @Input() expandedModelTree: boolean = false;\n\n models = input<ProjectNavigatorModel[]>([]);\n\n @Output() clickedModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() clickedLayer = new EventEmitter<ProjectNavigatorLayer>();\n\n @Output() toggleOpacityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleOpacityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n\n @Output() toggleVisibilityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleVisibilityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n}\n","<lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"expandedModelTree\"\n>\n <lib-expansion-panel-header [title]=\"modelTreeRootTitle\">\n <span class=\"project-navigator-root-node\">{{\n modelTreeRootName | translate\n }}</span>\n <lib-expansion-panel-header-actions>\n <!-- no action buttons for root -->\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <!-- Show all models also as expansion panels -->\n <!-- lib-bimplus-flat-tree can't be used for that at the moment -->\n @for(model of models(); track model) {\n <lib-expansion-panel\n class=\"project-navigator-model-panel\"\n [expanded]=\"model.isExpanded\"\n >\n <lib-expansion-panel-header>\n <span\n class=\"project-navigator-model-node\"\n [ngClass]=\"{\n visible: model.isVisible\n }\"\n [title]=\"model.name + ' (Rev: ' + model.currentRevision + ')'\"\n (click)=\"clickedModel.emit(model)\"\n (keypress)=\"clickedModel.emit(model)\"\n >\n {{ model.name }}\n </span>\n\n <lib-expansion-panel-header-actions>\n <div\n [attr.data-test]=\"'toggle_opacity_model_' + model.id\"\n class=\"ui-icon-transparency project-navigator-action-buttons\"\n [ngClass]=\"{\n opaque: model.isOpaque,\n transparent: !model.isOpaque,\n semiopaque: model.isSemiOpaque,\n }\"\n [title]=\"'_Toggle opacity' | translate\"\n (click)=\"toggleOpacityOfModel.emit(model)\"\n (keypress)=\"toggleOpacityOfModel.emit(model)\"\n ></div>\n\n <div\n [attr.data-test]=\"'toggle_visibility_model_' + model.id\"\n class=\"ui-icon-visibility project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: model.isVisible,\n invisible: !model.isVisible,\n semivisible: model.isSemiVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityOfModel.emit(model)\"\n (keypress)=\"toggleVisibilityOfModel.emit(model)\"\n ></div>\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <!-- Content of panel -->\n <div\n class=\"project-navigator-layer-node\"\n *ngFor=\"let layer of model.layers\"\n >\n <div\n class=\"project-navigator-layer-node-name\"\n [attr.data-test]=\"'floating_bar_layer' + layer.id\"\n [ngClass]=\"{\n visible: layer.isVisible\n }\"\n [title]=\"layer.name | translate\"\n (click)=\"clickedLayer.emit(layer)\"\n (keypress)=\"clickedLayer.emit(layer)\"\n >\n {{ layer.name | translate }}\n </div>\n\n <div\n [attr.data-test]=\"'toggle_opacity_layer_' + layer.id\"\n class=\"ui-icon-transparency project-navigator-action-buttons\"\n [ngClass]=\"{\n opaque: layer.isOpaque,\n transparent: !layer.isOpaque\n }\"\n [title]=\"'_Toggle opacity' | translate\"\n (click)=\"toggleOpacityOfLayer.emit(layer)\"\n (keypress)=\"toggleOpacityOfLayer.emit(layer)\"\n ></div>\n\n <div\n [attr.data-test]=\"'toggle_visibility_layer_' + layer.id\"\n class=\"ui-icon-visibility project-navigator-action-buttons\"\n [ngClass]=\"{\n visible: layer.isVisible,\n invisible: !layer.isVisible\n }\"\n [title]=\"'_Toggle visibility' | translate\"\n (click)=\"toggleVisibilityOfLayer.emit(layer)\"\n (keypress)=\"toggleVisibilityOfLayer.emit(layer)\"\n ></div>\n </div>\n </lib-expansion-panel>\n }\n</lib-expansion-panel>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-bimplus-panel-toolbar',\n imports: [CommonModule],\n templateUrl: './bimplus-panel-toolbar.component.html',\n styleUrl: './bimplus-panel-toolbar.component.less'\n})\nexport class BimplusPanelToolbarComponent {\n @Input() isPanelToolbarVisible: boolean = false;\n}\n","<div class=\"panel-toolbar\"\n [ngClass]=\"!isPanelToolbarVisible ? 'hidden' : ''\"\n>\n</div>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation, ElementRef,AfterViewChecked,AfterViewInit, ChangeDetectorRef, inject, DestroyRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\n\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\nimport { BimplusFloatingBarComponent } from '../bimplus-floating-bar/bimplus-floating-bar.component';\nimport { BimplusFloatingBarDraggerComponent } from '../bimplus-floating-bar-dragger/bimplus-floating-bar-dragger.component';\nimport { BimplusFloatingBarHeaderContentComponent } from '../bimplus-floating-bar-header-content/bimplus-floating-bar-header-content.component';\nimport { BimplusFloatingBarHeaderLogoComponent } from '../bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component';\nimport { BimplusFloatingBarBodyComponent } from '../bimplus-floating-bar-body/bimplus-floating-bar-body.component';\nimport { FloatingBarItem } from '../bimplus-floating-bar/bimplus-floating-bar.interface';\nimport { ProjectNavigatorModel, ProjectNavigatorLayer, ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { ProjectModelsComponent } from '../project-models/project-models.component';\nimport { BimplusPanelToolbarComponent } from '../bimplus-panel-toolbar/bimplus-panel-toolbar.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport { LayoutManagerItem, LayoutManagerService } from '../../services/layout-manager.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\nconst DEFAULT_POSITION_LEFT = 355;\nconst DEFAULT_POSITION_TOP =20;\n@Component({\n selector: 'lib-bimplus-floating-bar-project-navigator',\n imports: [\n CommonModule,\n BimplusFloatingBarComponent,\n BimplusFloatingBarDraggerComponent,\n BimplusFloatingBarHeaderContentComponent,\n BimplusFloatingBarHeaderLogoComponent,\n BimplusFloatingBarBodyComponent,\n BimplusPanelToolbarComponent,\n ProjectModelsComponent,\n TranslateModule,\n BimplusScrollableContainerComponent\n ],\n providers: [TranslateService],\n templateUrl: './bimplus-floating-bar-project-navigator.component.html',\n styleUrl: './bimplus-floating-bar-project-navigator.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusFloatingBarProjectNavigatorComponent extends BimplusLocalizedWidgetComponent implements AfterViewInit, AfterViewChecked {\n private readonly layoutManagerService = inject(LayoutManagerService);\n private readonly element = inject(ElementRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor()\n {\n super();\n }\n private hasViewChecked: boolean = false;\n \n\n // General bar handling\n @Input() noBody: boolean = false; // Project navigator has a body\n @Input() isCollapsed: boolean = false;\n @Input() noModelsMessage: string | undefined = undefined;\n @Input() isLoading: boolean = false;\n @Input() loadingDataMessage: string | undefined = undefined;\n \n icon = 'ui-icon-project-navigator';\n title: string = '_Project_navigator';\n componentId = 'project-navigator-fp-id';\n // Header content (like IFC export button)\n @Input() items: Array<FloatingBarItem> = [];\n\n @Output() actionClicked = new EventEmitter<string>();\n\n // Body content\n @Input() isPanelToolbarVisible: boolean = false;\n @Input() expandedModelTree: boolean = false;\n @Input() project: ProjectNavigatorProject = { id: \"\", name: \"\", teamSlug: \"\", models: [] };\n @Output() clickedModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() clickedLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() toggleOpacityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleOpacityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() toggleVisibilityOfModel = new EventEmitter<ProjectNavigatorModel>();\n @Output() toggleVisibilityOfLayer = new EventEmitter<ProjectNavigatorLayer>();\n @Output() logoClicked = new EventEmitter<MouseEvent>(); \n destroyRef = inject(DestroyRef)\n\n ngAfterViewInit(){\n this.layoutManagerService.registerObject(this.element,this.componentId,'.floating-panel.visible',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP);\n \n this.layoutManagerService.registeredItems$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({next:(items: LayoutManagerItem[]) => {\n const layoutManagerItem = items.find((item: LayoutManagerItem) => item.id === this.componentId); \n this.isCollapsed = !!(layoutManagerItem?.isCollapsed); \n },complete: () => console.log('completed')});\n }\n // #region General bar handling \n\n ngAfterViewChecked() {\n //if (!this.hasViewChecked && !this.isCollapsed) {\n if (!this.hasViewChecked) { \n this.hasViewChecked = true; // Set the flag to prevent repeated execution\n this.cdr.detectChanges(); // Trigger change detection \n setTimeout(()=>{\n this.layoutManagerService.checkPosition(this.componentId,'.floating-panel.visible',undefined,0,0,true);\n });\n }\n }\n // #endregion\n}\n","<lib-bimplus-floating-bar\n id=\"project-navigator-fp-id\"\n [id] = \"componentId\"\n class=\"project-navigator-fp floating-panel\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [noBody]=\"noBody\" \n [resizeEnabled]=\"true\"\n [isVisible]=\"true\" \n>\n <lib-bimplus-floating-bar-header-logo\n class=\"floating-bar-header-logo\"\n [parentId] = \"componentId\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [icon]=\"icon\"\n [title]=\"title\" \n >\n </lib-bimplus-floating-bar-header-logo>\n\n <lib-bimplus-floating-bar-header-content\n class=\"floating-bar-header-content\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [items]=\"items\"\n (actionClicked)=\"actionClicked.emit($event)\" \n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-header-content>\n\n <lib-bimplus-floating-bar-dragger\n class=\"floating-bar-dragger\"\n [parentId] = \"componentId\"\n >\n </lib-bimplus-floating-bar-dragger>\n\n <lib-bimplus-floating-bar-body\n class=\"floating-bar-body\"\n [parentId] = \"componentId\"\n >\n <lib-bimplus-panel-toolbar\n [isPanelToolbarVisible]=\"isPanelToolbarVisible\"\n ></lib-bimplus-panel-toolbar>\n\n @if(isLoading && loadingDataMessage){\n <span class=\"inline-message\" [innerHtml]=\"loadingDataMessage | translate\"></span>\n }\n @else{ \n @if(project.models.length === 0 && noModelsMessage){\n <span class=\"inline-message\" [innerHtml]=\"noModelsMessage | translate\"></span>\n }@else{\n <lib-bimplus-scrollable-container>\n <lib-project-models\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [models]=\"project.models\"\n [modelTreeRootTitle]=\"project.name + ' - ' + project.teamSlug\"\n [expandedModelTree]=\"expandedModelTree\"\n (clickedModel)=\"clickedModel.emit($event)\"\n (clickedLayer)=\"clickedLayer.emit($event)\"\n (toggleOpacityOfModel)=\"toggleOpacityOfModel.emit($event)\"\n (toggleOpacityOfLayer)=\"toggleOpacityOfLayer.emit($event)\"\n (toggleVisibilityOfModel)=\"toggleVisibilityOfModel.emit($event)\"\n (toggleVisibilityOfLayer)=\"toggleVisibilityOfLayer.emit($event)\"\n >\n </lib-project-models>\n </lib-bimplus-scrollable-container>\n }\n }\n </lib-bimplus-floating-bar-body>\n</lib-bimplus-floating-bar>\n","import { Component, EventEmitter, input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-overlay-message',\n templateUrl: './bimplus-overlay-message.component.html',\n styleUrl: './bimplus-overlay-message.component.less'\n})\nexport class BimplusOverlayMessageComponent {\n title = input<string>(\"\");\n message = input<string>(\"\");\n\n @Output() closeMessage = new EventEmitter<void>();\n\n closeButton() {\n this.closeMessage.emit();\n // (document.activeElement as HTMLElement)?.blur(); // Remove focus of active element\n }\n\n closeKeypressed(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.closeMessage.emit();\n }\n }\n\n}\n","<div class=\"bimplus-overlay-message\">\n <div class=\"overlay-dialog-container\">\n <div class=\"header\">\n\n <div class=\"icon\"></div>\n\n @if (title(); as title) {\n <div class=\"title-text\">\n {{ title }}\n </div>\n }\n\n <button\n class=\"close-button\"\n (click)=\"closeButton()\"\n tabindex=\"0\"\n (keydown)=\"closeKeypressed($event)\">\n </button>\n\n </div>\n\n <div class=\"content\">\n @if (message(); as message) {\n <div class=\"text\" [innerHTML]=\"message\">\n </div>\n }\n </div>\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'pxsuffix',\r\n standalone: true\r\n})\r\nexport class PxsuffixPipe implements PipeTransform {\r\n\r\n transform(input: number): string{ //string type\r\n return input + 'px';\r\n } \r\n\r\n}\r\n","import { Directive, HostListener, Output, EventEmitter } from '@angular/core';\r\nimport { fireEvent } from '../utils/utils';\r\n\r\n@Directive({\r\n selector: '[xDraggable]',\r\n standalone: true\r\n})\r\nexport class XDraggableDirective {\r\n\r\n oldX = 0;\r\n isDragging = false;\r\n wasDragging = false;\r\n isMouseDown = false;\r\n\r\n @Output()\r\n dragging = new EventEmitter<number>();\r\n\r\n @Output()\r\n clicked = new EventEmitter<MouseEvent>();\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging && !this.isMouseDown) {\r\n return;\r\n }\r\n\r\n const deltaX = (event.clientX - this.oldX);\r\n\r\n if(!this.isDragging){\r\n if(Math.abs(deltaX) > 2){\r\n this.isDragging = true;\r\n this.wasDragging = true;\r\n }else{\r\n return;\r\n }\r\n }\r\n\r\n fireEvent(this, \"dragging\", deltaX);\r\n\r\n this.oldX = event.clientX;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n this.isMouseDown = false;\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n this.isMouseDown = true;\r\n this.wasDragging = false;\r\n this.oldX = event.clientX;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onMouseClick(event: MouseEvent) {\r\n if(!this.wasDragging){\r\n fireEvent(this, \"clicked\", event);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, Output, EventEmitter, ViewEncapsulation, signal, input, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PxsuffixPipe } from '../../pipes/pxsuffix.pipe';\r\nimport { XDraggableDirective } from '../../directives/x-draggable.directive'\r\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { fireEvent } from '../../utils/utils';\r\n\r\nexport interface SidenavItem {\r\n id: string;\r\n icon?: string;\r\n iconActive?: string;\r\n iconDisabled?: string;\r\n text: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-bimplus-sidenav',\r\n imports: [CommonModule, PxsuffixPipe, XDraggableDirective, TranslateModule],\r\n providers: [TranslateService],\r\n templateUrl: './bimplus-sidenav.component.html',\r\n styleUrl: './bimplus-sidenav.component.less',\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusSidenavComponent extends BimplusLocalizedWidgetComponent {\r\n constructor() {\r\n super();\r\n }\r\n\r\n // #region public fields\r\n readonly activeItem = signal<string>('');\r\n readonly drawerWidth = signal<number>(300);\r\n readonly drawerExpanded = signal(true);\r\n\r\n @Output() activeItemChanged = new EventEmitter<string>();\r\n @Output() actionClicked = new EventEmitter<string>();\r\n @Output() footerClicked = new EventEmitter<string>();\r\n\r\n items = input<SidenavItem[]>([]);\r\n // we need to wait for the items before we can activate the first item, this is instead of using a lifecycle methods (ngOnInit) or set\r\n private readonly activateItemEffectRef = effect(() => {\r\n if (this.items().length) {\r\n this._activateItem(this.items()[0].id);\r\n // if there is first item, we need to manually destroy this effect to prevent call it again\r\n this.activateItemEffectRef.destroy();\r\n }\r\n }, { manualCleanup: true })\r\n actionItems = input<SidenavItem[]>([]);\r\n footerItem = input<SidenavItem | null>(null);\r\n\r\n\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n _activateItem(item: string) {\r\n this.activeItem.set(item);\r\n const foundItem = this.items().find(x => x.id == item);\r\n if (!foundItem) {\r\n return;\r\n }\r\n\r\n if (!this.drawerExpanded()) {\r\n this._toggleDrawer();\r\n }\r\n fireEvent(this, \"activeItemChanged\", item);\r\n }\r\n\r\n _clickAction(item: string) {\r\n fireEvent(this, \"actionClicked\", item);\r\n }\r\n\r\n _clickFooter(item: string) {\r\n fireEvent(this, \"footerClicked\", item);\r\n }\r\n\r\n _toggleDrawer() {\r\n this.drawerExpanded.update(value => !value);\r\n }\r\n\r\n _onResizeWidth(event: number): void {\r\n const deltaX = event;\r\n this.drawerWidth.update(value => (value + deltaX));\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"sidenav\">\n @for (sideNavItem of items(); track sideNavItem) {\n <div class=\"sidenav-row\">\n @if (sideNavItem.disabled) {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.iconDisabled + ')'\n \"\n [title]=\"sideNavItem.text | translate\"\n (keypress)=\"_toggleDrawer()\"\n ></div>\n } @else { @if (activeItem() === sideNavItem.id) {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.iconActive + ')'\n \"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n [title]=\"sideNavItem.text | translate\"\n ></div>\n } @else {\n <div\n [attr.data-test]=\"'sidenav_item_' + sideNavItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + sideNavItem.icon + ')'\n \"\n (click)=\"_activateItem(sideNavItem.id)\"\n (keypress)=\"_activateItem(sideNavItem.id)\"\n [title]=\"sideNavItem.text | translate\"\n ></div>\n } }\n </div>\n } @if (actionItems().length) {\n <div class=\"sidenav-separator\"></div>\n @for(actionItem of actionItems(); track actionItem) {\n <div class=\"sidenav-row\">\n <div\n [attr.data-test]=\"'sidenav_action_item_' + actionItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + actionItem.icon + ')'\n \"\n (click)=\"_clickAction(actionItem.id)\"\n (keypress)=\"_clickAction(actionItem.id)\"\n [title]=\"actionItem.text | translate\"\n ></div>\n </div>\n } } @if (footerItem(); as footerItem) {\n <div class=\"sidenav-row-footer\">\n <div\n [attr.data-test]=\"'sidenav_footer_item_' + footerItem.id\"\n class=\"sidenav-item\"\n [style.background]=\"\n ' no-repeat center center url(' + footerItem.icon + ')'\n \"\n (click)=\"_clickFooter(footerItem.id)\"\n (keypress)=\"_clickFooter(footerItem.id)\"\n ></div>\n </div>\n }\n</div>\n\n<div\n class=\"sidenav-drawer\"\n [style.width]=\"drawerWidth() | pxsuffix\"\n [ngClass]=\"drawerExpanded() ? '' : 'hidden'\"\n>\n <slot></slot>\n @if (drawerExpanded()) {\n <div\n xDraggable\n class=\"sidenav-resize-border-right\"\n (dragging)=\"_onResizeWidth($event)\"\n ></div>\n <div\n xDraggable\n data-test=\"sidenav-resize-handle\"\n class=\"sidenav-resize-handle-left\"\n (dragging)=\"_onResizeWidth($event)\"\n (clicked)=\"_toggleDrawer()\"\n ></div>\n }\n</div>\n@if (!drawerExpanded()) {\n<div\n data-test=\"sidenav-resize-handle\"\n class=\"sidenav-resize-handle-left collapsed\"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n></div>\n}\n","import { ToolHubVisualSettings, ToolHubItemUnits } from './bimplus-tool-hub.interface';\n\nconst RAD_DEG : number = Math.PI / 180.0;\nconst PI2 : number = 2 * Math.PI;\n\n\nexport class SVGGenerator {\n\n // Constants for drawing arc\n /**\n * @param {Array.<Number>} center\n * @param {Number} R\n * @param {Number} angle\n * @return {Array.<Number>}\n */\n static pointOnArc(center: [number,number], R: number, angle: number) : [number, number] {\n const radians = (angle - 90) * RAD_DEG;\n\n return [center[0] + R * Math.cos(radians), center[1] + R * Math.sin(radians)];\n }\n\n /**\n * Generates arc path\n *\n * @param {Array.<Number>} center\n * @param {Number} radius\n * @param {Number} start\n * @param {Number} end\n * @param {Number} width\n * @param {Number} corner Corner radius\n * @param {Number} canvasWidth - Divisor to have svg with range 0 to 1\n *\n * @return {String|Array.<Number|String>}\n */\n static arc(center: [number,number], radius: number, start: number, end: number, width: number, corner: number, canvasWidth: number) : string {\n\n const innerR = radius - width;\n const circumference = Math.abs(end - start);\n corner = Math.min(width / 2, corner);\n\n if (360 * (corner / (Math.PI * (radius - width))) > Math.abs(start - end)) {\n corner = circumference / 360 * innerR * Math.PI;\n }\n\n // inner and outer radiuses\n const innerR2 = innerR + corner;\n const outerRadius = radius - corner;\n\n // butts corner points\n const oStart = this.pointOnArc(center, outerRadius, start);\n const oEnd = this.pointOnArc(center, outerRadius, end);\n\n const iStart = this.pointOnArc(center, innerR2, start);\n const iEnd = this.pointOnArc(center, innerR2, end);\n\n const iSection = 360 * (corner / (PI2 * innerR));\n const oSection = 360 * (corner / (PI2 * radius));\n\n // arcs endpoints\n const iArcStart = this.pointOnArc(center, innerR, start + iSection);\n const iArcEnd = this.pointOnArc(center, innerR, end - iSection);\n\n const oArcStart = this.pointOnArc(center, radius, start + oSection);\n const oArcEnd = this.pointOnArc(center, radius, end - oSection);\n\n const arcSweep1 = circumference > 180 + 2 * oSection ? 1 : 0;\n const arcSweep2 = circumference > 180 + 2 * iSection ? 1 : 0;\n\n const points : Array<string> = new Array<string>(\n // begin path\n \"M\", (oStart[0] / canvasWidth).toString(), (oStart[1] / canvasWidth).toString(),\n // outer start corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (oArcStart[0] / canvasWidth).toString(), (oArcStart[1] / canvasWidth).toString(),\n // outer main arc\n \"A\", (radius / canvasWidth).toString(), (radius / canvasWidth).toString(), \"0\", (arcSweep1 / canvasWidth).toString(), \"1\", (oArcEnd[0] / canvasWidth).toString(), (oArcEnd[1] / canvasWidth).toString(),\n // outer end corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (oEnd[0] / canvasWidth).toString(), (oEnd[1] / canvasWidth).toString(),\n // end butt\n \"L\", (iEnd[0] / canvasWidth).toString(), (iEnd[1] / canvasWidth).toString(),\n // inner end corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (iArcEnd[0] / canvasWidth).toString(), (iArcEnd[1] / canvasWidth).toString(),\n // inner arc\n \"A\", (innerR / canvasWidth).toString(), (innerR / canvasWidth).toString(), \"0\", (arcSweep2 / canvasWidth).toString(), \"0\", (iArcStart[0] / canvasWidth).toString(), (iArcStart[1] / canvasWidth).toString(),\n // inner start corner\n \"A\", (corner / canvasWidth).toString(), (corner / canvasWidth).toString(), \"0\", \"0\", \"1\", (iStart[0] / canvasWidth).toString(), (iStart[1] / canvasWidth).toString(), \"Z\" // end path*/\n );\n\n return points.join(' ');\n }\n\n /*\n * svg units - when \"objectBoundingBox\" is applied, coordinates are relative,\n * use coordinates as ratio (in range 0-1),\n * f.e. (1,1) is botom right corner of element\n */\n static drawMenuItemSvg(svgRadius: number, svgRadiusInner: number, buttonsLength: number, isEMEmbedded: boolean): ToolHubItemUnits {\n \n const radius = isEMEmbedded ? (svgRadius - 5) * 10 : svgRadius * 10;\n const radiusInner = isEMEmbedded ? (svgRadiusInner - 3) * 10 : svgRadiusInner * 10;\n const width = radius * 2;\n // coordinates of points describing one item on menu\n const angle = 360 / ((buttonsLength > 0) ? buttonsLength : 1);\n const halfAngleRadians = (angle * Math.PI) / 360;\n const leftX = radius - Math.sin(halfAngleRadians) * radius;\n const leftY = radius - Math.cos(halfAngleRadians) * radius;\n const rightX = radius + Math.sin(halfAngleRadians) * radius;\n const rightY = radius - Math.cos(halfAngleRadians) * radius;\n \n \n return {\n radius: radius / width,\n radiusInner: radiusInner / width,\n width: 1,\n thick: (radius - radiusInner) / width,\n innerEdgeRight: (radius + radiusInner) / width,\n leftX: leftX / width,\n leftY: leftY / width,\n rightX: rightX / width,\n rightY: rightY / width\n };\n }\n\n \n static generateAnnularSector(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.subMenuCenter[0] * multiplier, settings.subMenuCenter[1] * multiplier],\n settings.subMenuRadius * multiplier,\n settings.subMenuStartAngle,\n settings.subMenuEndAngle,\n settings.subMenuWidth,\n 7,\n 425\n );\n }\n\n static generateAnnularSectorBorder(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.subMenuCenter[0] * multiplier, settings.subMenuCenter[1] * multiplier],\n (settings.subMenuRadius * multiplier) + 1,\n settings.subMenuStartAngle - 0.5,\n settings.subMenuEndAngle + 0.5,\n settings.subMenuWidth + 2,\n 7,\n 425\n );\n }\n\n static generateDeadZoneAnnularSector(settings : ToolHubVisualSettings): string{\n const multiplier = 12;\n return SVGGenerator.arc(\n [settings.deadZoneCenter[0] * multiplier, settings.deadZoneCenter[1] * multiplier],\n (settings.deadZoneRadius) * multiplier,\n settings.deadZoneStartAngle,\n settings.deadZoneEndAngle,\n settings.deadZoneWidth,\n 7,\n 700);\n }\n\n static getSVGViewBox(units : ToolHubItemUnits):string{\n return `0 0 ${units.width} ${units.width}`;\n }\n\n static getSVGCenterMenuPath(units : ToolHubItemUnits):string{\n return `M 0 ${units.radius} A ${units.radius} ${units.radius} 0 0 1 ${units.width} ${units.radius} L ${units.width} ${units.radius} A ${units.radius} ${units.radius} 0 0 1 0 ${units.radius} L ${units.thick} ${units.radius} A ${units.radiusInner} ${units.radiusInner} 0 0 0 ${units.innerEdgeRight} ${units.radius} L ${units.innerEdgeRight} ${units.radius} A ${units.radiusInner} ${units.radiusInner} 0 0 0 ${units.thick} ${units.radius} Z`;\n }\n\n static getSVGCenterMenuItemPath(units : ToolHubItemUnits):string{\n return `M ${units.radius} ${units.radius} L ${units.leftX} ${units.leftY} A ${units.radius} ${units.radius} 0 0 1 ${units.rightX} ${units.rightY} L ${units.rightX} ${units.rightY} L ${units.radius} ${units.radius} Z`;\n }\n\n static getSVGCenterSubMenuItemPath(subMenuUnits : ToolHubItemUnits):string{\n return `M ${subMenuUnits.radius} ${subMenuUnits.radius} L ${subMenuUnits.leftX} ${subMenuUnits.leftY} A ${subMenuUnits.radius} ${subMenuUnits.radius} 0 0 1 ${subMenuUnits.rightX} ${subMenuUnits.rightY} L ${subMenuUnits.rightX} ${subMenuUnits.rightY} L ${subMenuUnits.radius} ${subMenuUnits.radius} Z`;\n }\n\n}\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToolHubItem } from '../bimplus-tool-hub.interface';\r\n@Component({\r\n selector: 'lib-tool-hub-item',\r\n imports: [CommonModule],\r\n templateUrl: './tool-hub-item.component.html',\r\n styleUrl: '../bimplus-tool-hub.component.less'\r\n})\r\nexport class ToolHubItemComponent {\r\n @Input()\r\n item : ToolHubItem | null = null;\r\n \r\n @HostBinding('class.active')\r\n @Input() \r\n active : boolean = false;\r\n \r\n @HostBinding('class.enabled')\r\n @Input() \r\n isEnabled : boolean = true;\r\n \r\n @HostBinding('class.centermenu-button') centerMenuButtonClass: boolean = true;\r\n}\r\n"," <div *ngIf=\"item\" class=\"centermenu-button-icon dragger\" [ngClass]=\"{\r\n 'disabled' : !isEnabled,\r\n 'enabled' : isEnabled,\r\n 'active' : active\r\n }\" [className]=\"item.iconClass\">\r\n \r\n <span class=\"centermenu-button-text\">{{item.text}}</span>\r\n</div>","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToolHubSubItem } from '../bimplus-tool-hub.interface';\r\n@Component({\r\n selector: 'lib-tool-hub-sub-item',\r\n imports: [CommonModule],\r\n templateUrl: './tool-hub-sub-item.component.html',\r\n styleUrl: '../bimplus-tool-hub.component.less'\r\n})\r\nexport class ToolHubSubItemComponent {\r\n @Input() item : ToolHubSubItem | null = null;\r\n \r\n @HostBinding('class.active')\r\n @Input() \r\n active : boolean = false;\r\n \r\n @HostBinding('class.enabled')\r\n @Input() \r\n isEnabled : boolean = true;\r\n\r\n @HostBinding('class.centermenu-button') centerMenuButtonClass: boolean = true;\r\n @HostBinding('class.center-sub-menu-button') centerSubMenuButtonClass: boolean = true;\r\n}\r\n","<div\r\n *ngIf=\"item\"\r\n class=\"center-sub-menu-button-icon\"\r\n [ngClass]=\"{\r\n disabled: !isEnabled,\r\n enabled: isEnabled,\r\n active: item.type !== 'separator' && active\r\n }\"\r\n [className]=\"item.iconClass\"\r\n>\r\n <span class=\"centermenu-button-text\">{{ item.text }}</span>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, booleanAttribute, ElementRef, OnInit, AfterViewInit, inject } from '@angular/core';\r\nimport { BimplusLocalizedWidgetComponent } from \"./../bimplus-localized-widget/bimplus-localized-widget.component\"\r\nimport { TranslateService, TranslateModule } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { SVGGenerator } from './svg-generator';\r\nimport { ToolHubItemComponent } from './tool-hub-item/tool-hub-item.component';\r\nimport { ToolHubSubItemComponent } from './tool-hub-sub-item/tool-hub-sub-item.component';\r\nimport { DraggableDirective } from '../../directives/draggable.directive'\r\nimport { ToolHubItem, ToolHubSubItem, ToolHubVisualSettings, ToolHubItemUnits, ToolHubItemStates } from './bimplus-tool-hub.interface';\r\nimport { LayoutManagerService } from '../../services/layout-manager.service';\r\nimport { ResizeObserverService } from '../../services/resize-observer.service';\r\n\r\nfunction createDefaultVisualSettings(): ToolHubVisualSettings {\r\n const settings: ToolHubVisualSettings = {\r\n subMenuStartAngle: 40,\r\n subMenuEndAngle: 140,\r\n svgRadiusInner: 5.75,\r\n svgRadius: 10.25,\r\n subMenuCenter: [17.25, 17.5],\r\n subMenuRadius: 15.5,\r\n subMenuWidth: 52,\r\n deadZoneCenter: [17, 18],\r\n deadZoneWidth: 140,\r\n deadZoneRadius: 22,\r\n deadZoneStartAngle: 35,\r\n deadZoneEndAngle: 145\r\n }\r\n return settings;\r\n}\r\n\r\n// Use when implementing embedded mode\r\n// function createEmbeddedSettings() : ToolHubVisualSettings{\r\n// const settings : ToolHubVisualSettings = {\r\n// subMenuStartAngle : 40,\r\n// subMenuEndAngle : 140,\r\n// svgRadiusInner : 4,\r\n// svgRadius : 7.25,\r\n// subMenuCenter : [17.25, 17.3],\r\n// subMenuRadius : 16.2,\r\n// subMenuWidth : 62,\r\n// deadZoneCenter : [16.5, 16],\r\n// deadZoneWidth : 120,\r\n// deadZoneRadius : 18,\r\n// deadZoneStartAngle : 35,\r\n// deadZoneEndAngle : 145\r\n// }\r\n// return settings;\r\n// }\r\n\r\nfunction createDefaultItems(): Array<ToolHubItem> {\r\n const items: Array<ToolHubItem> = [\r\n //--- create task ---------------------------------------------------\r\n {\r\n buttonId: 'cmButCreateTask',\r\n iconClass: 'ui-icon-create-task',\r\n text: '_Create_issue_center_menu_tooltip',\r\n tooltip: '_Create_issue_center_menu_tooltip',\r\n tooltipDisabled: '_Create_issue_center_menu_tooltip',\r\n },\r\n\r\n //--- quantity takeoff ---------------------------------------------------\r\n {\r\n buttonId: 'cmButQuantityTakeOff',\r\n iconClass: 'ui-icon-quantity-take-off',\r\n text: '_Quantity_take_Off_center_menu_tooltip',\r\n tooltip: '_Quantity_take_Off_center_menu_tooltip',\r\n tooltipDisabled: '_Quantity_take_Off_center_menu_tooltip',\r\n },\r\n\r\n //--- markup ---------------------------------------------------\r\n {\r\n buttonId: 'cmButMarkup',\r\n iconClass: 'ui-icon-markup',\r\n text: '_Markups_center_menu_tooltip',\r\n tooltip: '_Markups_center_menu_tooltip',\r\n tooltipDisabled: '_Markups_center_menu_tooltip',\r\n },\r\n\r\n //--- section ---------------------------------------------------\r\n {\r\n buttonId: 'cmButSection',\r\n iconClass: 'ui-icon-section',\r\n text: '_Sectioning_center_menu_tooltip',\r\n tooltip: '_Sectioning_center_menu_tooltip',\r\n tooltipDisabled: '_Sectioning_center_menu_tooltip',\r\n },\r\n\r\n //--- hide ---------------------------------------------------\r\n {\r\n buttonId: 'cmButObjTranspMenu',\r\n iconClass: 'ui-icon-obj-transp',\r\n text: '_Hide_objects_center_menu_tooltip',\r\n tooltip: '_Hide_objects_center_menu_tooltip',\r\n tooltipDisabled: '_Hide_objects_center_menu_tooltip',\r\n },\r\n\r\n //--- isolate ---------------------------------------------------\r\n {\r\n buttonId: 'cmButObjSel',\r\n iconClass: 'ui-icon-obj-select',\r\n text: '_Isolate_objects_center_menu_tooltip',\r\n tooltip: '_Isolate_objects_center_menu_tooltip',\r\n tooltipDisabled: '_Isolate_objects_center_menu_tooltip',\r\n },\r\n\r\n //--- navigation map ---------------------------------------------------\r\n {\r\n buttonId: 'cmButNavigationMap',\r\n iconClass: 'ui-icon-navigation-map',\r\n text: '_Navigation_nap_center_menu_tooltip',\r\n tooltip: '_Navigation_nap_center_menu_tooltip',\r\n tooltipDisabled: '_Navigation_nap_center_menu_tooltip',\r\n },\r\n\r\n //--- fullscreen ----------------------------------------------\r\n {\r\n buttonId: 'cmButFullScreen',\r\n iconClass: 'ui-icon-fullscreen',\r\n text: '_Fullscreen_node_center_menu_tooltip',\r\n tooltip: '_Fullscreen_node_center_menu_tooltip',\r\n tooltipDisabled: '_Fullscreen_node_center_menu_tooltip',\r\n },\r\n\r\n //--- project navigator ---------------------------------------\r\n {\r\n buttonId: 'cmButProjectNavigator',\r\n iconClass: 'ui-icon-project-navigator',\r\n text: '_Project_navigator_center_menu_tooltip',\r\n tooltip: '_Project_navigator_center_menu_tooltip',\r\n tooltipDisabled: '_Project_navigator_center_menu_tooltip',\r\n },\r\n\r\n //--- reset ---------------------------------------------------\r\n {\r\n iconClass: 'ui-icon-obj-reset',\r\n buttonId: 'cmButResetObj',\r\n text: '_Reset_viewport_center_menu_tooltip',\r\n tooltip: '_Reset_viewport_center_menu_tooltip',\r\n tooltipDisabled: '_Reset_viewport_center_menu_tooltip',\r\n },\r\n\r\n //--- view ---------------------------------------------------\r\n {\r\n buttonId: 'cmButResetVp',\r\n iconClass: 'ui-icon-reset-vp',\r\n text: '_Select_view_center_menu_tooltip',\r\n tooltip: '_Select_view_center_menu_tooltip',\r\n tooltipDisabled: '_Select_view_center_menu_tooltip',\r\n subMenuId: 'cmb-view-submenu',\r\n subItems: [\r\n //--- Front View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButFrontView',\r\n type: 'button',\r\n iconClass: 'ui-icon-front-view',\r\n text: '_Front_view_center_menu_tooltip',\r\n tooltip: '_Front_view_center_menu_tooltip',\r\n tooltipDisabled: '_Front_view_center_menu_tooltip',\r\n actionClick: 'centerMenuFrontViewClick',\r\n },\r\n //--- Top View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButTopView',\r\n type: 'button',\r\n iconClass: 'ui-icon-top-view',\r\n text: '_Top_view_center_menu_tooltip',\r\n tooltip: '_Top_view_center_menu_tooltip',\r\n tooltipDisabled: '_Top_view_center_menu_tooltip',\r\n actionClick: 'centerMenuTopViewClick',\r\n },\r\n //--- Side View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButSideView',\r\n type: 'button',\r\n iconClass: 'ui-icon-side-view',\r\n text: '_Side_view_center_menu_tooltip',\r\n tooltip: '_Side_view_center_menu_tooltip',\r\n tooltipDisabled: '_Side_view_center_menu_tooltip',\r\n actionClick: 'centerMenuSideViewClick',\r\n },\r\n //--- Perspective View ---------------------------------------------------\r\n {\r\n buttonId: 'cmButPerspectiveView',\r\n type: 'button',\r\n iconClass: 'ui-icon-perspective-view',\r\n text: '_Perspective_view_center_menu_tooltip',\r\n tooltip: '_Perspective_view_center_menu_tooltip',\r\n tooltipDisabled: '_Perspective_view_center_menu_tooltip',\r\n actionClick: 'centerMenuPerspectiveViewClick',\r\n },\r\n //--- Separator ---------------------------------------------------\r\n {\r\n buttonId: 'toolhubSubmenuSeparatorId1',\r\n type: 'separator',\r\n iconClass: 'center-sub-menu-button-icon toolhub-submenu-separator',\r\n text: '',\r\n tooltip: '',\r\n tooltipDisabled: '',\r\n actionClick: '',\r\n },\r\n //--- Toggle button perspective/orthogonal projection --------------------\r\n {\r\n buttonId: 'cmButToggleProjection',\r\n type: 'button',\r\n iconClass: 'ui-icon-orthographic-camera-projection',\r\n text: '_Orthographic_projection_center_menu_tooltip',\r\n tooltip: '_Orthographic_projection_center_menu_tooltip',\r\n tooltipDisabled: '_Orthographic_projection_center_menu_tooltip',\r\n actionClick: 'centerMenuToggleProjection',\r\n },\r\n ]\r\n }\r\n ]\r\n\r\n // Set all tool hub items states to inactive and disabled. Host App must define states\r\n items.forEach(item => { item.active = false; item.disabled = true })\r\n\r\n return items;\r\n}\r\n\r\nconst DEFAULT_POSITION_LEFT = 350;\r\nconst DEFAULT_POSITION_TOP = 670;\r\n@Component({\r\n selector: 'lib-bimplus-tool-hub',\r\n imports: [\r\n TranslateModule,\r\n CommonModule,\r\n ToolHubItemComponent,\r\n ToolHubSubItemComponent,\r\n DraggableDirective\r\n ],\r\n providers: [TranslateService],\r\n templateUrl: './bimplus-tool-hub.component.html',\r\n styleUrl: './bimplus-tool-hub.component.less',\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class BimplusToolHubComponent extends BimplusLocalizedWidgetComponent implements OnInit,AfterViewInit {\r\n private layoutManagerService = inject(LayoutManagerService);\r\n private resizeObserverService = inject(ResizeObserverService);\r\n private element = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.items = createDefaultItems();\r\n this._visualSettings = createDefaultVisualSettings();\r\n this._units = this.calculateCurrentMenuItemUnits();\r\n this._subMenuUnits = this.calculateCurrentSubMenuItemUnits();\r\n this._annularSector = SVGGenerator.generateAnnularSector(this._visualSettings);\r\n this._annularSectorBorder = SVGGenerator.generateAnnularSectorBorder(this._visualSettings);\r\n this._deadZoneAnnularSector = SVGGenerator.generateDeadZoneAnnularSector(this._visualSettings);\r\n\r\n }\r\n\r\n // #region public fields\r\n \r\n get itemStates(): Array<ToolHubItemStates> {\r\n return this._itemStates;\r\n }\r\n @Input() set itemStates(value: Array<ToolHubItemStates>) {\r\n this._itemStates = value;\r\n this.setItemStates(this._itemStates);\r\n }\r\n\r\n setItemStates(itemStates: Array<ToolHubItemStates>) {\r\n for (const itemState of itemStates) {\r\n const item = this._items.find(item => item.buttonId === itemState.buttonId);\r\n if (item) {\r\n if (itemState.active != undefined) {\r\n item.active = itemState.active;\r\n }\r\n if (itemState.disabled !== undefined) {\r\n item.disabled = itemState.disabled;\r\n }\r\n }\r\n }\r\n\r\n this._updateActivationState();\r\n }\r\n\r\n\r\n get items(): Array<ToolHubItem> {\r\n return this._items;\r\n }\r\n @Input() set items(value: Array<ToolHubItem>) {\r\n this._items = value;\r\n\r\n const buttonsLength = (this._items?.length) > 0 ? this._items.length : 1;\r\n const rootStyle = document?.documentElement?.style;\r\n if (rootStyle) {\r\n const menuItems = rootStyle.getPropertyValue(\"--menu-items\");\r\n if (parseInt(menuItems) !== buttonsLength) {\r\n rootStyle.setProperty(\"--menu-items\", buttonsLength.toString());\r\n }\r\n }\r\n\r\n // Transfer disabled states, which can defined by host app\r\n this.setItemStates(this._itemStates);\r\n }\r\n\r\n get activeSubItems(): Array<ToolHubSubItem> | null {\r\n return this._activeSubItems;\r\n }\r\n\r\n get isCollapsed(): boolean {\r\n return this._isCollapsed;\r\n }\r\n @Input({ transform: booleanAttribute })\r\n set isCollapsed(value: boolean) {\r\n this._isCollapsed = value;\r\n }\r\n\r\n get isPerspectiveProjection(): boolean {\r\n return this._isPerspectiveProjection;\r\n }\r\n @Input({ transform: booleanAttribute })\r\n set isPerspectiveProjection(value: boolean) {\r\n this._isPerspectiveProjection = value;\r\n }\r\n\r\n get units(): ToolHubItemUnits {\r\n return this._units;\r\n }\r\n\r\n get subMenuUnits(): ToolHubItemUnits {\r\n return this._subMenuUnits;\r\n }\r\n\r\n get annularSector(): string {\r\n return this._annularSector;\r\n }\r\n\r\n get annularSectorBorder(): string {\r\n return this._annularSectorBorder;\r\n }\r\n\r\n get deadZoneAnnularSector(): string {\r\n return this._deadZoneAnnularSector;\r\n }\r\n\r\n @Input({ transform: booleanAttribute }) isEmbedded: boolean = false;\r\n @Input({ transform: booleanAttribute }) isFocused: boolean = false;\r\n @Input({ transform: booleanAttribute }) isActive: boolean = true;\r\n @Output() itemClicked = new EventEmitter<string>();\r\n @Output() subItemClicked = new EventEmitter<string>();\r\n \r\n // Define event handler for reusing draggable also from resize parent \r\n //@Output() resizedragging = new EventEmitter<[number,number]>();\r\n\r\n private componentId = 'center-menu-fp-id';\r\n private subscription: Subscription | null = null; // Initialize to null\r\n\r\n ngOnInit():void{ \r\n this.layoutManagerService.registerObject(this.element,this.componentId,'#center-menu-fp-id',true,DEFAULT_POSITION_LEFT,DEFAULT_POSITION_TOP);\r\n this.layoutManagerService.registeredItems$.subscribe(items => {\r\n const layoutManagerItem = items.find(item => item.id === this.componentId);\r\n this.isCollapsed = Boolean(layoutManagerItem?.isCollapsed); \r\n });\r\n \r\n }\r\n \r\n ngAfterViewInit():void{\r\n // if the component wants to be registered in layout manager system\r\n // Subscribe to the observable\r\n this.subscription = this.resizeObserverService.parentAppRect$.subscribe(value => {\r\n this.handleParentAppRectSizeChange(value);\r\n });\r\n }\r\n \r\n // #endregion public fields\r\n \r\n // #region public methods\r\n public getSVGViewBox(): string {\r\n return SVGGenerator.getSVGViewBox(this._units);\r\n }\r\n\r\n public getSVGCenterMenuPath(): string {\r\n return SVGGenerator.getSVGCenterMenuPath(this._units);\r\n }\r\n\r\n public getSVGCenterMenuItemPath(): string {\r\n return SVGGenerator.getSVGCenterMenuItemPath(this._units);\r\n }\r\n\r\n public getSVGCenterSubMenuItemPath(): string {\r\n return SVGGenerator.getSVGCenterSubMenuItemPath(this._subMenuUnits);\r\n }\r\n\r\n public toggleMenu() {\r\n this.layoutManagerService.updateCollapsed(!this.isCollapsed,this.componentId);\r\n setTimeout(()=>{\r\n this.layoutManagerService.checkPosition('center-menu-fp-id',this.getSelector(),undefined,0,0,true); \r\n })\r\n }\r\n\r\n findToolHubItemById(id: string): ToolHubItem | undefined {\r\n return this._items.find(x => x.buttonId === id);\r\n }\r\n\r\n clickToolHubItem(action: string) {\r\n const item = this.findToolHubItemById(action);\r\n if (!item || item?.disabled) {\r\n return;\r\n }\r\n\r\n this.itemClicked.emit(action);\r\n }\r\n\r\n clickToolHubSubItem(action: string) {\r\n if (!this._activeSubItems) {\r\n return;\r\n }\r\n\r\n const item = this._activeSubItems.find(x => x.buttonId === action);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.subItemClicked.emit(action);\r\n this.closeActiveSubItemsView();\r\n }\r\n\r\n toggleToolHubItemActive(buttonId: string) {\r\n const item = this.findToolHubItemById(buttonId);\r\n if (!item || item.disabled) {\r\n return;\r\n }\r\n\r\n item.active = !item.active;\r\n\r\n this._updateActivationState();\r\n }\r\n\r\n toggleSubItemsView(buttonId: string) {\r\n const item = this.findToolHubItemById(buttonId);\r\n if (!item || item.disabled || !item.subItems) {\r\n return;\r\n }\r\n\r\n item.active = !item.active;\r\n if (item.active) {\r\n this._activeSubItemsView = item;\r\n this._activeSubItems = item.subItems;\r\n } else {\r\n this._activeSubItemsView = null;\r\n this._activeSubItems = null;\r\n }\r\n }\r\n\r\n toggleCameraProjection(buttonId: string) {\r\n if (!this._activeSubItems) {\r\n return;\r\n }\r\n\r\n const item = this._activeSubItems.find(x => x.buttonId === buttonId);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.isPerspectiveProjection = !this.isPerspectiveProjection;\r\n\r\n item.iconClass = this.isPerspectiveProjection ? 'ui-icon-orthographic-camera-projection' : 'ui-icon-perspective-camera-projection';\r\n item.text = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n item.tooltip = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n item.tooltipDisabled = this.isPerspectiveProjection ? '_Orthographic_projection_center_menu_tooltip' : '_Perspective_projection_center_menu_tooltip';\r\n }\r\n\r\n closeActiveSubItemsView() {\r\n if (this._activeSubItemsView) {\r\n this._activeSubItemsView.active = false;\r\n this._activeSubItemsView = null;\r\n }\r\n this._activeSubItems = null;\r\n }\r\n\r\n setHoveredState(element: string, hovered: boolean) {\r\n const index = this._hoveredElements.indexOf(element);\r\n const storedCountHoverd = this._hoveredElements.length;\r\n\r\n if (index >= 0 && !hovered) {\r\n this._hoveredElements.splice(index, 1);\r\n }\r\n\r\n if (index < 0 && hovered) {\r\n this._hoveredElements.push(element);\r\n }\r\n\r\n if (storedCountHoverd > 0 && this._hoveredElements.length === 0) {\r\n\r\n // If hovered elements count reaches zero, check again a bit delayed. If nothing hovered at that time, close submenu\r\n setInterval(() => {\r\n if (this._hoveredElements.length === 0) {\r\n this.closeActiveSubItemsView();\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n private getSelector():string{\r\n return this.isCollapsed ? '#center-menu-controller':'.center-menu-fp';\r\n }\r\n\r\n dragElement(event: [number, number]): void {\r\n const deltaX1 = event[0];\r\n const deltaY1 = event[1]; \r\n this.layoutManagerService.checkPosition('center-menu-fp-id',this.getSelector(),undefined,deltaX1,deltaY1) \r\n }\r\n\r\n onDragEnd(){\r\n this.layoutManagerService.handleDragEnd('center-menu-fp-id');\r\n }\r\n\r\n // #endregion public methods\r\n\r\n // #region private fields\r\n private _isCollapsed: boolean = false;\r\n private _itemStates: Array<ToolHubItemStates> = Array<ToolHubItemStates>();\r\n private _items: Array<ToolHubItem> = Array<ToolHubItem>();\r\n private _activeSubItemsView: ToolHubItem | null = null;\r\n private _activeSubItems: Array<ToolHubSubItem> | null = null;\r\n private _isPerspectiveProjection = true; // flag about perspective or orthographic camera projection\r\n private _visualSettings: ToolHubVisualSettings;\r\n private _units: ToolHubItemUnits;\r\n private _subMenuUnits: ToolHubItemUnits;\r\n private _annularSector: string;\r\n private _annularSectorBorder: string;\r\n private _deadZoneAnnularSector: string;\r\n private _hoveredElements: Array<string> = Array<string>();\r\n // #endregion private fields\r\n\r\n // #region private methods\r\n private calculateCurrentMenuItemUnits(): ToolHubItemUnits {\r\n return SVGGenerator.drawMenuItemSvg(this._visualSettings.svgRadius, this._visualSettings.svgRadiusInner, this._items.length, this.isEmbedded);\r\n }\r\n\r\n private calculateCurrentSubMenuItemUnits(): ToolHubItemUnits {\r\n return SVGGenerator.drawMenuItemSvg(this._visualSettings.svgRadius, this._visualSettings.svgRadiusInner, 20, this.isEmbedded);\r\n }\r\n\r\n private handleParentAppRectSizeChange(parentRect:DOMRect | undefined):void{\r\n this.layoutManagerService.checkPosition(this.componentId,this.getSelector(),parentRect,0,0,true); \r\n }\r\n\r\n private _oneOrMoreItemsActive(){\r\n for(const item of this.items){\r\n if(item.active === true)\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _updateActivationState(){\r\n if(this._oneOrMoreItemsActive()){\r\n this.isActive = true;\r\n }else{\r\n this.isActive = false;\r\n }\r\n }\r\n // #region private methods\r\n}\r\n","<div class=\"center-menu\">\r\n <div\r\n class=\"center-menu-fp\"\r\n id=\"center-menu-fp-id\"\r\n [ngClass]=\"activeSubItems ? 'submenu-active' : ''\"\r\n >\r\n <div\r\n libDraggable\r\n id=\"center-menu-controller\"\r\n class=\"center-menu-controller dragger\"\r\n data-test=\"toolhub_controller\"\r\n [ngClass]=\"{\r\n opened: !isCollapsed,\r\n active: isActive\r\n }\"\r\n [title]=\"\r\n isCollapsed\r\n ? ('_Show_toolhub_tooltip' | translate)\r\n : ('_Minimize_toolhub_tooltip' | translate)\r\n \"\r\n (clicked)=\"toggleMenu()\"\r\n (dragging)=\"dragElement($event)\"\r\n (dragEnd) =\"onDragEnd()\"\r\n ></div>\r\n <div\r\n class=\"center-menu-circle-border-inner\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n ></div>\r\n <div\r\n class=\"center-menu-circle-border-outer\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('menuCircleBorderOuter', false)\"\r\n (mouseenter)=\"setHoveredState('menuCircleBorderOuter', true)\"\r\n ></div>\r\n <div\r\n libDraggable\r\n class=\"center-menu-circle\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('menuCircle', false)\"\r\n (mouseenter)=\"setHoveredState('menuCircle', true)\"\r\n (dragging)=\"dragElement($event)\"\r\n >\r\n <lib-tool-hub-item\r\n libDraggable\r\n *ngFor=\"let item of items\"\r\n [attr.data-test]=\"'toolhub_item_' + item.buttonId\"\r\n [title]=\"item.tooltip | translate\"\r\n [item]=\"item\"\r\n [active]=\"!!item.active\"\r\n [isEnabled]=\"!item.disabled\"\r\n (clicked)=\"clickToolHubItem(item.buttonId)\"\r\n ></lib-tool-hub-item>\r\n\r\n <svg\r\n class=\"centermenu-button-svg\"\r\n [attr.viewBox]=\"getSVGViewBox()\"\r\n fill=\"none\"\r\n >\r\n <clipPath id=\"svgCenterMenu\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterMenuPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterMenuItem\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterMenuItemPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterSubMenuItem\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"getSVGCenterSubMenuItemPath()\" fill=\"white\" />\r\n </clipPath>\r\n <clipPath id=\"svgCenterMenuSubMenu\" clipPathUnits=\"objectBoundingBox\">\r\n <path [attr.d]=\"annularSector\" fill=\"none\" />\r\n </clipPath>\r\n <clipPath\r\n id=\"svgCenterMenuSubMenuBorder\"\r\n clipPathUnits=\"objectBoundingBox\"\r\n >\r\n <path [attr.d]=\"annularSectorBorder\" fill=\"none\" />\r\n </clipPath>\r\n <clipPath\r\n id=\"svgCenterMenuSubMenuDeadZone\"\r\n clipPathUnits=\"objectBoundingBox\"\r\n >\r\n <path [attr.d]=\"deadZoneAnnularSector\" fill=\"none\" />\r\n </clipPath>\r\n </svg>\r\n </div>\r\n\r\n @if (activeSubItems) {\r\n <div\r\n class=\"center-menu-sub-menu-border\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('submenuBorder', false)\"\r\n (mouseenter)=\"setHoveredState('submenuBorder', true)\"\r\n ></div>\r\n <div\r\n class=\"center-menu-sub-menu\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('submenu', false)\"\r\n (mouseenter)=\"setHoveredState('submenu', true)\"\r\n >\r\n <ng-container *ngFor=\"let item of activeSubItems\">\r\n <lib-tool-hub-sub-item\r\n *ngIf=\"item.type === 'button'\"\r\n [attr.data-test]=\"'toolhub_subitem_' + item.buttonId\"\r\n [title]=\"item.tooltip | translate\"\r\n [item]=\"item\"\r\n (click)=\"clickToolHubSubItem(item.buttonId)\"\r\n (keypress)=\"clickToolHubSubItem(item.buttonId)\"\r\n ></lib-tool-hub-sub-item>\r\n <!-- this item is added as 6th but is moved back in less file to 5th position -->\r\n <lib-tool-hub-sub-item\r\n *ngIf=\"item.type === 'separator'\"\r\n [attr.data-test]=\"'toolhub_subitem_' + item.buttonId\"\r\n [item]=\"item\"\r\n ></lib-tool-hub-sub-item>\r\n </ng-container>\r\n </div>\r\n <div\r\n class=\"center-menu-sub-menu-dead-zone\"\r\n [ngClass]=\"isCollapsed ? 'hidden' : ''\"\r\n (mouseleave)=\"setHoveredState('deadZone', false)\"\r\n (mouseenter)=\"setHoveredState('deadZone', true)\"\r\n ></div>\r\n }\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, Output, EventEmitter, HostListener, inject } from '@angular/core';\n\n@Directive({\n selector: '[libClickOutside]',\n standalone: true\n})\nexport class ClickOutsideDirective {\n private elementRef = inject(ElementRef);\n\n @Output() public clickOutside = new EventEmitter<void>();\n\n @HostListener('document:click', ['$event.target'])\n public onClick(targetElement: HTMLElement) {\n const clickedInside = this.elementRef.nativeElement.contains(targetElement);\n if (!clickedInside) {\n this.clickOutside.emit();\n }\n }\n}\n","import { Component, Input, Output, booleanAttribute, ViewEncapsulation, ElementRef, EventEmitter, signal, model, inject } from '@angular/core';\nimport { NgStyle} from '@angular/common';\nimport { BimplusContextMenuItem, BimplusContextMenuPosition } from './bimplus-context-menu.interface';\nimport { ClickOutsideDirective } from '../../directives/click-outside/click-outside.directive';\nimport { fireEvent } from '../../utils/utils';\n\n@Component({\n selector: 'lib-bimplus-context-menu',\n imports: [\n NgStyle,\n ClickOutsideDirective,\n ],\n templateUrl: './bimplus-context-menu.component.html',\n styleUrl: './bimplus-context-menu.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusContextMenuComponent {\n private readonly el = inject(ElementRef);\n\n @Output() triggerSelected = new EventEmitter();\n @Input({ transform: booleanAttribute }) showIcons: boolean = true;\n @Input() triggerTitle : string = \"\";\n\n protected readonly _showDropdown = signal<boolean>(false);\n protected _data?: object = undefined;;\n protected readonly _position = signal<BimplusContextMenuPosition>({\n posX: -2000,\n posY: -2000\n })\n private readonly _element: HTMLElement;\n private _interval: number | undefined;\n items = model<BimplusContextMenuItem[] | null | undefined>([]);\n\n constructor() {\n this._element = this.el.nativeElement.shadowRoot;\n }\n\n get data(): undefined | object {\n return this._data;\n }\n @Input() set data(data: object) {\n this._data = data;\n }\n\n protected _clickOutside() {\n this._stopTriggerPositionTracking();\n this._showDropdown.set(false);\n }\n\n protected _actionClick(item: BimplusContextMenuItem) {\n this._showDropdown.set(false);\n\n if(typeof item.disabled === 'function') {\n if(item.disabled?.(this._data)) {\n return;\n }\n item.action?.(this._data);\n return;\n }\n\n if(item.disabled) {\n return;\n }\n item.action?.(this._data);\n }\n\n protected _disabled(item: BimplusContextMenuItem): boolean {\n if(!item.disabled) {\n return false;\n }\n if(typeof item.disabled === 'function') {\n return item.disabled?.(this._data);\n }\n return item.disabled;\n }\n\n protected _calculateContextMenuPosition() {\n const _triggerElament = this._element.querySelector(\".context-menu-trigger\");\n if(!_triggerElament) {\n return;\n }\n\n const { right: posX, top: posY } = _triggerElament.getBoundingClientRect();\n this._position.set({ posX, posY });\n }\n\n protected _stopTriggerPositionTracking(): void {\n if(!this._interval){\n return;\n }\n\n clearInterval(this._interval);\n this._interval = undefined;\n }\n\n protected _startTriggerPositionTracking(): void {\n if(this._interval){\n return;\n }\n this._interval = setInterval(() => {\n this._calculateContextMenuPosition();\n }, 50) as unknown as number;\n }\n\n protected _toggleDropdown(event: Event) {\n this._showDropdown.update(value => !value);\n this._calculateContextMenuPosition();\n this._startTriggerPositionTracking();\n fireEvent(this, \"triggerSelected\");\n event.stopPropagation();\n }\n}\n","<div class=\"basic-context-menu\" libClickOutside (clickOutside)=\"_clickOutside()\">\n <div class=\"context-menu-trigger\" \n (click)=\"_toggleDropdown($event)\"\n (keypress)=\"_toggleDropdown($event)\"\n title=\"{{triggerTitle}}\"\n data-test=\"context-menu\"\n >\n @if (_showDropdown()) {\n <ul\n class=\"basic-context-menu__list\"\n data-test=\"basic-context-menu__list\"\n [ngStyle]=\"{\n 'top.px': _position().posY\n , 'left.px': _position().posX\n , 'minWidth.px': 125\n , 'backgroundColor': 'white'\n }\"\n >\n @for(item of items(); track item) {\n @if (item.id !== 'separator') {\n <li \n class=\"basic-context-menu__item\"\n data-test=\"basic-context-menu__item\"\n [class.basic-context-menu__item--disabled]=\"_disabled(item)\"\n (click)=\"_actionClick(item)\"\n (keypress)=\"_actionClick(item)\"\n >\n @if (showIcons) {\n <div class=\"basic-context-menu__item__icon\" data-test=\"basic-context-menu__item__icon\" [style.background-image]=\"'url(' + item.icon + ')'\">\n </div>\n }\n <div class=\"basic-context-menu__item__label\" data-test=\"basic-context-menu__item__label\" title=\"{{item.tooltip ? item.tooltip : item.title}}\">\n {{item.title}}\n </div>\n </li>\n } @else {\n <div class=\"basic-context-menu__item__separator\" data-test=\"basic-context-menu__item__separator\"></div>\n }\n }\n </ul>\n }\n</div>\n","import { ElementRef, Component, OnInit, Input, OnChanges, SimpleChange, booleanAttribute, Output, EventEmitter, TemplateRef, input, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\nimport { SelectionModel} from '@angular/cdk/collections';\nimport { CdkTreeModule, FlatTreeControl } from '@angular/cdk/tree';\nimport { CommonModule } from '@angular/common';\nimport { fireEvent } from '../../utils/utils';\nimport { TreeNode, FlatNode, FlatTreeContextMenus } from './bimplus-flat-tree.interface';\nimport { BimplusContextMenuComponent } from '../bimplus-context-menu/bimplus-context-menu.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\ninterface BimplusFlatTreeComponentAttribute {\n [key: string]: unknown; // Add index signature allowing string indexing\n //Other properties and methods...\n}\n\n@Component({\n selector: 'lib-bimplus-flat-tree',\n imports: [MatTreeModule,\n MatButtonModule,\n MatIconModule,\n CdkTreeModule,\n BimplusContextMenuComponent,\n CommonModule,\n DragDropModule\n ],\n templateUrl: './bimplus-flat-tree.component.html',\n styleUrl: './bimplus-flat-tree.component.less'\n})\n\nexport class BimplusFlatTreeComponent implements OnInit, OnChanges{\n private readonly el = inject(ElementRef);\n\n @Input() treeDataStringified: string | null = null;\n treeTitle = input<string | undefined>(undefined);\n @Input() paddingIndent : string = \"2.8rem\"\n @Input({ transform: booleanAttribute }) multiSelect: boolean = false;\n @Input({ transform: booleanAttribute }) oneLevelMultiSelect: boolean = false;\n @Input({ transform: booleanAttribute }) showFoldersIcons: boolean = false;\n @Input({ transform: booleanAttribute }) showObjectsIcons: boolean = false;\n @Input({ transform: booleanAttribute }) enableSelect: boolean = true;\n @Input({ transform: booleanAttribute }) enableParentHighlighting: boolean = true;\n @Input({ transform: booleanAttribute }) enableDragAndDrop: boolean = false;\n @Input() dataTestPrefix : string = \"\";\n @Input() contextMenus: FlatTreeContextMenus | null | undefined = null;\n @Input({ transform: booleanAttribute }) hasCheckBox1:boolean = false;\n @Input({ transform: booleanAttribute }) hasCheckBox2:boolean = false;\n\n get treeData() : Array<TreeNode>{\n return this._dataSource.data;\n }\n\n @Input() set treeData(data: Array<TreeNode>) {\n this.treeDataStringified = null;\n this._dataSource.data = data;\n }\n customNodeTemplate = input<TemplateRef<unknown> | null>(null);\n\n @Output() selectedNodes = new EventEmitter<FlatNode[]>();\n @Output() checked1Nodes = new EventEmitter<FlatNode[]>();\n @Output() checked2Nodes = new EventEmitter<FlatNode[]>();\n\n private _selectionList: SelectionModel<FlatNode> | undefined = undefined;\n\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n if (element) {\n (element as unknown as BimplusFlatTreeComponentAttribute)['get_node'] = this.get_node.bind(this);\n (element as unknown as BimplusFlatTreeComponentAttribute)['select_node'] = this.select_node.bind(this);\n }\n\n this._selectionList = new SelectionModel<FlatNode>(this.multiSelect || this.oneLevelMultiSelect);\n if(this.treeDataStringified){\n this._setNewData(this.treeDataStringified)\n }\n }\n\n public expandTree(){\n this._treeControl.expandAll();\n }\n\n private _getNode(id: string, nodes: Array<TreeNode>): TreeNode | null {\n for(const node of nodes) {\n if(node.id === id) {\n return node;\n }\n if(node.children) {\n const _node: TreeNode | null = this._getNode(id, node.children);\n if(_node) {\n return _node;\n }\n }\n }\n return null;\n }\n\n public get_node(id: { id: string } | string, getDOMElement: boolean = false): TreeNode | Element | null {\n if(typeof id === 'string') {\n return this._getNode(id, this._dataSource.data);\n }\n if(getDOMElement) {\n const _element: Element = this.el.nativeElement.querySelector(`[node-id='${id.id}']`);\n return _element;\n }\n return this._getNode(id.id, this._dataSource.data);\n }\n\n public select_node(id: string, skipEvent: boolean = false) {\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return;\n }\n\n if(!this._selectionList) {\n return;\n }\n\n if(this.oneLevelMultiSelect && this._selectionList.selected.length > 0) {\n if(this._selectionList.selected[0].parent !== node.parent) {\n this._selectionList.clear();\n }\n }\n\n if(this._selectionList.isSelected(node)) {\n return;\n }\n\n this._selectionList.select(node);\n if(!this.multiSelect && !this.oneLevelMultiSelect && !skipEvent) {\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n return;\n }\n\n if(!this.oneLevelMultiSelect) {\n this._toggleDescendantsNodes(node);\n }\n\n if(this.enableParentHighlighting) {\n this._updateParentSelections(node);\n }\n\n if(!skipEvent){\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n }\n\n }\n\n public reset_selection(){\n this._selectionList?.clear();\n }\n\n public expand_node(id : string){\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return;\n }\n\n this._treeControl.expand(node);\n }\n\n public is_expanded(id : string){\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return false;\n }\n\n return this._treeControl.isExpanded(node);\n }\n\n public is_selected(id : string){\n if(!this._selectionList)\n return;\n\n const node = this._treeControl.dataNodes.find(n => n.id === id);\n if(!node) {\n return false;\n }\n\n return this._selectionList?.isSelected(node);\n }\n\n private _setNewData(treeDataStringified: string): void {\n const _tree_data = JSON.parse(treeDataStringified);\n this._dataSource.data = _tree_data ?? [];\n }\n\n private _changedTreeData(change: SimpleChange) {\n this._setNewData(change.currentValue)\n }\n\n ngOnChanges(changes: { [propKey: string]: SimpleChange }): void {\n if(changes['multiSelect'] || changes['oneLevelMultiSelect']) {\n this._selectionList = new SelectionModel<FlatNode>(this.multiSelect || this.oneLevelMultiSelect);\n }\n if(changes['treeDataStringified']) {\n this._changedTreeData(changes['treeDataStringified'])\n }\n }\n\n private _transformer = (node: TreeNode, level: number): FlatNode => {\n return {\n expandable: node.children !== undefined && node.children.length > 0,\n children_count: node.children?.length,\n name: node.name,\n id: node.id,\n level: level,\n parent: node.parent,\n nodeType: node.nodeType,\n isChecked1: true,\n isChecked2: true,\n isUndetermined1: false,\n isUndetermined2: false\n };\n };\n\n protected _treeControl = new FlatTreeControl<FlatNode>(\n node => node.level,\n node => node.expandable,\n );\n\n protected _treeFlattener = new MatTreeFlattener(\n this._transformer,\n node => node.level,\n node => node.expandable,\n node => node.children\n );\n\n protected _dataSource = new MatTreeFlatDataSource(this._treeControl, this._treeFlattener);\n protected _isExpandable = (_: number, node: FlatNode) => node.expandable;\n protected _isCustomNodeType(node: FlatNode): boolean{\n return node.nodeType != undefined && node.nodeType != \"\";\n }\n\n protected _hasChildren(node: FlatNode): boolean {\n if(!node.expandable) {\n return false;\n }\n if(node.children_count === undefined) {\n return false\n }\n return node.children_count > 0\n }\n\n protected _descendantsAllSelected(node: FlatNode): boolean {\n if(!this._selectionList) {\n return false;\n }\n\n const _selectionList: SelectionModel<FlatNode> = this._selectionList;\n\n const _descendants = this._treeControl.getDescendants(node);\n if(_descendants.length === 0) {\n return true;\n }\n const _descAllSelected = _descendants.length > 0 && _descendants.every((child) => {\n return _selectionList.isSelected(child);\n });\n return _descAllSelected;\n }\n\n protected _descendantsPartiallySelected(node: FlatNode): boolean {\n if(!this._selectionList) {\n return false;\n }\n const _selectionList: SelectionModel<FlatNode> = this._selectionList;\n\n const _descendants = this._treeControl.getDescendants(node);\n const _result = _descendants.some((child) => {\n return _selectionList.isSelected(child)\n });\n return _result && !this._descendantsAllSelected(node);\n }\n\n private _toggleDescendantsNodes(node: FlatNode) {\n if(!this._selectionList) {\n return;\n }\n\n const _isNodeSelected = this._selectionList.isSelected(node);\n if(_isNodeSelected) {\n this._selectionList.select(...this._treeControl.getDescendants(node));\n }\n else {\n this._selectionList.deselect(...this._treeControl.getDescendants(node));\n }\n }\n\n private _updateParentSelections(node: FlatNode) {\n if(!this._selectionList) {\n return;\n }\n\n let _parentId = node.parent;\n let _parentNode = this._treeControl.dataNodes.find(n => n.id === _parentId)\n while(_parentNode) {\n if(this._descendantsAllSelected(_parentNode)) {\n this._selectionList.select(_parentNode);\n }\n else{\n this._selectionList.deselect(_parentNode);\n }\n _parentId = _parentNode.parent;\n _parentNode = this._treeControl.dataNodes.find(n => n.id === _parentId);\n }\n }\n\n protected _toggleNode(event: Event, node: FlatNode) {\n if(!node) {\n return;\n }\n\n if(!this.enableSelect) {\n return;\n }\n\n if(!this._selectionList) {\n return;\n }\n\n // Check if event is a MouseEvent before accessing ctrlKey\n const isMouseEvent = event != null && event instanceof MouseEvent;\n if (isMouseEvent && !event?.ctrlKey) {\n this._selectionList.clear();\n }\n\n if(this.oneLevelMultiSelect && this._selectionList.selected.length > 0) {\n if(this._selectionList.selected[0].parent !== node.parent) {\n this._selectionList.clear();\n }\n }\n\n this._selectionList.toggle(node);\n if(!this.multiSelect && !this.oneLevelMultiSelect) {\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n return;\n }\n\n if(!this.oneLevelMultiSelect) {\n this._toggleDescendantsNodes(node);\n }\n\n if(this.enableParentHighlighting) {\n this._updateParentSelections(node);\n }\n\n fireEvent(this, \"selectedNodes\", this._selectionList.selected );\n }\n\n protected _isSelected(node: FlatNode): boolean{\n if(!this._selectionList) {\n return false;\n }\n return this._selectionList?.isSelected(node);\n }\n \n protected _toggleCheckBox1( event:Event,node: FlatNode) { \n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n node.isChecked1 = !node.isChecked1;\n if(node.expandable){\n this._treeControl.getDescendants(node).forEach(n => {\n n.isChecked1 = node.isChecked1;\n });\n }\n node.isUndetermined1 = false;\n this.checkUndetermined(node,1);\n fireEvent(this, \"checked1Nodes\", [node]);\n }\n \n protected _toggleCheckBox2(event:Event, node: FlatNode) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n node.isChecked2 = !node.isChecked2;\n if(node.expandable){\n this._treeControl.getDescendants(node).forEach(n => {\n n.isChecked2 = node.isChecked2;\n });\n }\n node.isUndetermined2 = false;\n this.checkUndetermined(node,2);\n fireEvent(this, \"checked2Nodes\", [node]);\n }\n \n //simplified version of checkUndetermined\n checkUndetermined(node:FlatNode,checkbox: number){\n if(!this.hasCheckBox1 && checkbox === 1){\n return;\n }\n if(!this.hasCheckBox2 && checkbox === 2){\n return;\n }\n if(!node.parent){\n return;\n }\n let myNode = node; \n while(myNode && myNode.parent){\n const parentNode = this._treeControl.dataNodes.find(n => n.id === myNode.parent); \n if(!parentNode){\n return;\n }\n let checked = 0;\n let unchecked = 0; \n let undetermined = false;\n this._treeControl.getDescendants(parentNode).forEach(n => {\n if(checkbox === 1 ? n.isChecked1: n.isChecked2){ \n checked++;\n } else {\n unchecked++;\n }\n if(checkbox === 1 ? n.isUndetermined1: n.isUndetermined2){ \n undetermined = true; \n }\n if(checked > 0 && unchecked > 0){\n undetermined = true; \n }\n });\n if(checkbox === 1 ){\n parentNode.isUndetermined1 = undetermined;\n parentNode.isChecked1 = !unchecked;\n } else {\n parentNode.isUndetermined2 = undetermined;\n parentNode.isChecked2 = !unchecked;\n }\n myNode = parentNode;\n };\n }\n protected _isUndetermined1(node: FlatNode): boolean{\n return node.isUndetermined1;\n }\n \n protected _isUndetermined2(node: FlatNode): boolean{\n return node.isUndetermined2;\n }\n\n protected _isChecked1(node: FlatNode): boolean{ \n return node.isChecked1;\n }\n protected _isChecked2(node: FlatNode): boolean{ \n return node.isChecked2;\n }\n}\n","<div class=\"tree-container\">\n @if (treeTitle(); as treeTitle) {\n <div class=\"tree-title\">{{treeTitle}}</div>\n }\n <cdk-tree [dataSource]=\"_dataSource\" [treeControl]=\"_treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <cdk-tree-node\n [matTreeNodePaddingIndent]=\"paddingIndent\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n (click)=\"_toggleNode($event, node)\"\n (keypress)=\"_toggleNode($event, node)\"\n class=\"object-node\"\n [class.dragable-node]=\"enableDragAndDrop && node.level > 0\"\n [class.selected-node]=\"_isSelected(node)\"\n [attr.data-test]=\"dataTestPrefix + node.id\"\n [title]=\"node.name\"\n [attr.node-id]=\"node.id\"\n >\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled>\n </button>\n @if (customNodeTemplate() && _isCustomNodeType(node)) {\n <ng-container \n [ngTemplateOutlet]=\"customNodeTemplate()\" \n [ngTemplateOutletContext]=\"{node:node}\">\n </ng-container>\n }@else{\n <div class=\"icon object-icon\" *ngIf=\"showObjectsIcons\">\n </div>\n <span\n class=\"node-label\"\n [class.selected-node]=\"_isSelected(node)\"\n >\n <div class=\"custom-drag-placeholder\" *cdkDragPlaceholder></div>\n <div>\n {{node.name}}\n </div>\n </span>\n }\n <lib-bimplus-context-menu\n [items]=\"contextMenus?.objectContextMenuitems\"\n [data]=\"node\"\n *ngIf=\"contextMenus?.objectContextMenuitems?.length\"\n (triggerSelected)=\"_toggleNode($event, node)\"\n >\n </lib-bimplus-context-menu>\n @if(hasCheckBox1){\n <div\n class=\"custom-checkbox1\"\n [ngClass]=\"{ 'icon-checked': _isChecked1(node), 'icon-unchecked': !_isChecked1(node) }\"\n (click)=\"_toggleCheckBox1($event,node)\"\n (keypress)=\"_toggleCheckBox1($event,node)\"\n ></div>\n }\n @if(hasCheckBox2){\n <div\n class=\"custom-checkbox2\"\n [ngClass]=\"{ 'icon-checked': _isChecked2(node), 'icon-unchecked': !_isChecked2(node) }\"\n (click)=\"_toggleCheckBox2($event,node)\"\n (keypress)=\"_toggleCheckBox2($event,node)\"\n ></div>\n }\n </cdk-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-tree-node [matTreeNodePaddingIndent]=\"paddingIndent\"\n *matTreeNodeDef=\"let node;when: _isExpandable\"\n matTreeNodePadding\n (click)=\"_toggleNode($event, node)\"\n (keypress)=\"_toggleNode($event, node)\"\n class=\"folder-node\"\n [class.dragable-node]=\"enableDragAndDrop && node.level > 0\"\n [class.selected-node]=\"_isSelected(node)\"\n [attr.data-test]=\"dataTestPrefix + node.id\"\n [title]=\"node.name\"\n [attr.node-id]=\"node.id\"\n >\n <button\n mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"'Toggle ' + node.name\"\n >\n <div\n class=\"icon expand-collapse-icon\"\n [class.expand-more-icon]=\"_hasChildren(node) && !_treeControl.isExpanded(node)\"\n [class.collapse-icon]=\"_hasChildren(node) && _treeControl.isExpanded(node)\"\n >\n </div>\n </button> \n @if (customNodeTemplate() && _isCustomNodeType(node)) {\n <ng-container \n [ngTemplateOutlet]=\"customNodeTemplate()\" \n [ngTemplateOutletContext]=\"{node:node}\">\n </ng-container>\n }@else{\n <div class=\"icon folder-icon\" *ngIf=\"showFoldersIcons\">\n </div>\n <span class=\"node-label\"\n [class.selected-node]=\"_isSelected(node)\"\n [class.selected-all-descendants-nodes]=\"_descendantsAllSelected(node) && _isSelected(node) && enableParentHighlighting\"\n [class.selected-partially-descendants-nodes]=\"_descendantsPartiallySelected(node) && enableParentHighlighting\"\n >\n <div class=\"custom-drag-placeholder\" *cdkDragPlaceholder></div>\n <div class=\"node-label\">\n {{node.name}}\n </div>\n </span>\n }\n <lib-bimplus-context-menu\n [items]=\"contextMenus?.folderContextMenuitems\"\n [data]=\"node\"\n *ngIf=\"contextMenus?.folderContextMenuitems?.length\"\n (triggerSelected)=\"_toggleNode($event, node)\"\n >\n </lib-bimplus-context-menu>\n\n @if(hasCheckBox1){\n <div\n class=\"custom-checkbox1\"\n [ngClass]=\"{\n 'icon-undetermined': _isUndetermined1(node),\n 'icon-checked': !_isUndetermined1(node) && _isChecked1(node),\n 'icon-unchecked': !_isUndetermined1(node) && !_isChecked1(node)\n }\"\n (click)=\"_toggleCheckBox1($event,node)\"\n (keypress)=\"_toggleCheckBox1($event,node)\"\n ></div>\n }\n @if(hasCheckBox2){\n <div\n class=\"custom-checkbox2\"\n [ngClass]=\"{\n 'icon-undetermined': _isUndetermined2(node),\n 'icon-checked': !_isUndetermined2(node) && _isChecked2(node),\n 'icon-unchecked': !_isUndetermined2(node) && !_isChecked2(node)\n }\"\n (click)=\"_toggleCheckBox2($event,node)\"\n (keypress)=\"_toggleCheckBox2($event,node)\"\n ></div>\n }\n </cdk-tree-node>\n </cdk-tree>\n</div>\n","\r\nexport interface FilterType{\r\n id: string,\r\n name: string\r\n}\r\n\r\nexport interface FilterCriterium{\r\n name : string,\r\n value? : string | number | boolean | null | undefined,\r\n namedValue? : string, // display name of value in UI\r\n id? : string,\r\n subString : string,\r\n}\r\n\r\nexport enum FilterCriteriaSelectionMode{\r\n None,\r\n SelectObjectProperties,\r\n SelectAttributes\r\n} \r\n\r\nexport const MaxFilterCriteria = 5;","import { Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\r\nimport { FilterCriterium } from '../bimplus-object-navigator.interface';\r\nimport { BimplusLocalizedWidgetComponent } from '../../bimplus-localized-widget/bimplus-localized-widget.component';\r\nimport { TranslateModule} from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-filter-criterium',\r\n imports: [TranslateModule],\r\n templateUrl: './filter-criterium.component.html',\r\n styleUrl: './filter-criterium.component.less'\r\n})\r\nexport class FilterCriteriumComponent extends BimplusLocalizedWidgetComponent {\r\n\r\n constructor (){\r\n super();\r\n }\r\n\r\n // #region public fields\r\n @Input()\r\n criterium : FilterCriterium = { name : \"\", subString:\"\"}\r\n\r\n @HostBinding('style.margin-left.em') @Input() indent: number = 0;\r\n\r\n @Output() deleteCriterium = new EventEmitter<void>();\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n clickedDelete(){\r\n this.deleteCriterium.emit();\r\n }\r\n // #endregion public methods\r\n}\r\n","<div class=\"filter-criterium-row\">\r\n <span class=\"filter-criterium-item\">\r\n {{ criterium.name }}\r\n @if(criterium.namedValue) { &nbsp;&#40;{{ criterium.namedValue }}&#41; }\r\n </span>\r\n <div\r\n class=\"filter-criterium-icon-delete\"\r\n (click)=\"clickedDelete()\"\r\n (keypress)=\"clickedDelete()\"\r\n ></div>\r\n</div>\r\n","import { Component, computed, EventEmitter, input, Input, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { FlatNode, TreeNode } from '../bimplus-flat-tree/bimplus-flat-tree.interface';\r\nimport { ObjectStructureNode } from './bimplus-object-structure.interface';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-object-structure',\r\n imports: [BimplusFlatTreeComponent],\r\n templateUrl: './bimplus-object-structure.component.html',\r\n styleUrl: './bimplus-object-structure.component.less'\r\n})\r\nexport class BimplusObjectStructureComponent{\r\n @Input() hasCheckBox1:boolean = false;\r\n @Input() hasCheckBox2:boolean = false;\r\n \r\n objectStructure = input<ObjectStructureNode>({\r\n id : \"\",\r\n name : \"\",\r\n parent: \"\",\r\n visible: true,\r\n opaque: true\r\n });\r\n\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n \r\n private _convertObjectStructureNodeToTreeNode(node : ObjectStructureNode) : TreeNode{\r\n\r\n const treeNode : TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent \r\n };\r\n\r\n if(node.children){\r\n treeNode.children = [];\r\n for(const child of node.children){\r\n const childTreeNode = this._convertObjectStructureNodeToTreeNode(child);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n readonly treeData = computed<TreeNode[]>(() => {\r\n const objectStructure = this.objectStructure();\r\n if(!objectStructure){\r\n return [];\r\n }\r\n\r\n const root = this._convertObjectStructureNodeToTreeNode(objectStructure);\r\n if(!root){\r\n return [];\r\n }\r\n\r\n return [root];\r\n })\r\n\r\n\r\n private _findNode(id:string, node : ObjectStructureNode) : ObjectStructureNode | null{\r\n if(node.id == id){\r\n return node;\r\n }\r\n\r\n if(node.children){\r\n for(const child of node.children){\r\n const res = this._findNode(id, child);\r\n if(res){\r\n return res;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n handleSelectedNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const selectedNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(selectedNode){\r\n this.nodeSelected.emit(selectedNode);\r\n }\r\n } \r\n }\r\n \r\n handleVisibleNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const visibleNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(visibleNode){\r\n const outpuData:ObjectStructureNode ={\r\n name:visibleNode.name,\r\n parent: visibleNode.parent, \r\n id: visibleNode.id,\r\n visible: nodes[0].isChecked2,\r\n opaque: nodes[0].isChecked1,\r\n }\r\n this.nodeVisible.emit(outpuData);\r\n }\r\n } \r\n }\r\n \r\n handleOpaqueNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const opaqueNode = this._findNode(nodes[0].id, this.objectStructure());\r\n if(opaqueNode){\r\n const outpuData:ObjectStructureNode ={\r\n name:opaqueNode.name,\r\n parent: opaqueNode.parent, \r\n id: opaqueNode.id,\r\n visible: nodes[0].isChecked2,\r\n opaque: nodes[0].isChecked1,\r\n }\r\n this.nodeOpaque.emit(outpuData);\r\n }\r\n } \r\n }\r\n\r\n expandTree(){\r\n this.treeComponent?.expandTree();\r\n }\r\n\r\n @Output() nodeSelected = new EventEmitter<ObjectStructureNode>();\r\n @Output() nodeVisible = new EventEmitter<ObjectStructureNode>();\r\n @Output() nodeOpaque = new EventEmitter<ObjectStructureNode>();\r\n}\r\n","<lib-bimplus-flat-tree\r\n paddingIndent=\"1.4rem\"\r\n [treeData]=\"treeData()\"\r\n enableParentHighlighting=\"false\"\r\n (selectedNodes) = \"handleSelectedNodes($event)\"\r\n (checked2Nodes) = \"handleVisibleNodes($event)\"\r\n (checked1Nodes) = \"handleOpaqueNodes($event)\"\r\n dataTestPrefix=\"object-structure-tree-\"\r\n [hasCheckBox1]=\"hasCheckBox1\"\r\n [hasCheckBox2]=\"hasCheckBox2\"\r\n></lib-bimplus-flat-tree>\r\n","import { Component, computed, EventEmitter, input, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { ComplexPropertiesNode } from './bimplus-object-complex-properties.interface';\r\nimport { FlatNode, TreeNode } from '../bimplus-flat-tree/bimplus-flat-tree.interface';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-object-complex-properties',\r\n imports: [BimplusFlatTreeComponent],\r\n templateUrl: './bimplus-object-complex-properties.component.html',\r\n styleUrl: './bimplus-object-complex-properties.component.less'\r\n})\r\nexport class BimplusObjectComplexPropertiesComponent {\r\n complexProperties = input<ComplexPropertiesNode>({\r\n id: \"\",\r\n name: \"\",\r\n parent: \"\"\r\n });\r\n\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n\r\n readonly treeData = computed<TreeNode[]>(() => {\r\n const complexProperties = this.complexProperties();\r\n if(!complexProperties) {\r\n return [];\r\n }\r\n\r\n const root = this._convertObjectStructureNodeToTreeNode(complexProperties);\r\n if(!root) {\r\n return [];\r\n }\r\n\r\n return [root];\r\n })\r\n\r\n private _convertObjectStructureNodeToTreeNode(node : ComplexPropertiesNode) : TreeNode{\r\n\r\n const treeNode : TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent \r\n };\r\n\r\n if(node.children){\r\n treeNode.children = [];\r\n for(const child of node.children){\r\n const childTreeNode = this._convertObjectStructureNodeToTreeNode(child);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n\r\n private _findNode(id:string, node : ComplexPropertiesNode) : ComplexPropertiesNode | null{\r\n if(node.id == id){\r\n return node;\r\n }\r\n\r\n if(node.children){\r\n for(const child of node.children){\r\n const res = this._findNode(id, child);\r\n if(res){\r\n return res;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n handleSelectedNodes(nodes : FlatNode[]){\r\n if(nodes.length === 1){\r\n const selectedNode = this._findNode(nodes[0].id, this.complexProperties());\r\n if(selectedNode){\r\n this.nodeSelected.emit(selectedNode);\r\n }\r\n } \r\n }\r\n\r\n expandTree(){\r\n this.treeComponent?.expandTree();\r\n }\r\n\r\n @Output() nodeSelected = new EventEmitter<ComplexPropertiesNode>();\r\n}\r\n","<lib-bimplus-flat-tree\r\n paddingIndent=\"1.4rem\"\r\n [treeData]=\"treeData()\"\r\n enableParentHighlighting=\"false\"\r\n (selectedNodes)=\"handleSelectedNodes($event)\"\r\n dataTestPrefix=\"object-complex-properties-tree-\"\r\n></lib-bimplus-flat-tree>\r\n","import * as WebSdk from 'bimplus-websdk';\r\n\r\nexport interface ObjectStructureNode{\r\n id: string;\r\n children? : ObjectStructureNode[];\r\n name: string;\r\n parent: string;\r\n visible: boolean;\r\n opaque: boolean;\r\n}\r\n\r\nexport class ObjectStructureNodeBuilder{\r\n static createFromResponse(response : WebSdk.ObjectTopologyResponse) : ObjectStructureNode{\r\n const node : ObjectStructureNode = {\r\n id : response.id,\r\n name : response.name ? `${response.type}(${response.name})` : response.type,\r\n parent : response.parent,\r\n visible : true,\r\n opaque : true\r\n }\r\n\r\n if(response.children){\r\n node.children = [];\r\n for(const child of response.children){\r\n node.children.push(ObjectStructureNodeBuilder.createFromResponse(child as WebSdk.ObjectTopologyResponse));\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n}","import * as WebSdk from 'bimplus-websdk';\r\n\r\nexport interface ComplexPropertiesNode{\r\n id: string;\r\n children? : ComplexPropertiesNode[];\r\n name: string;\r\n parent: string;\r\n}\r\n\r\nexport class ComplexPropertiesNodeBuilder{\r\n static createFromResponse(response : WebSdk.ObjectComplexPropertyTopologyResponse) : ComplexPropertiesNode{\r\n const node : ComplexPropertiesNode = {\r\n id : response.id,\r\n name : response.type ? response.type : response.name,\r\n parent : response.parent\r\n }\r\n\r\n if(response.children){\r\n node.children = [];\r\n for(const child of response.children){\r\n node.children.push(ComplexPropertiesNodeBuilder.createFromResponse(child as WebSdk.ObjectComplexPropertyTopologyResponse));\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formatValue',\n standalone: true\n})\nexport class FormatValuePipe implements PipeTransform {\n transform(value: number | string | boolean | null | undefined): string {\n if (value === null || value === undefined) {\n return '[null]';\n } else if (value === '') {\n return '[empty]';\n } else if (typeof value === 'boolean') {\n return value ? 'TRUE' : 'FALSE';\n }\n return value.toString(); // Return the value as a string\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport moment from 'moment';\n\n@Pipe({\n name: 'DateTime',\n standalone: true,\n})\nexport class DateTimePipe implements PipeTransform {\n transform(value: string, format: string = \"L\"): string {\n // This UTC date/time 2024-12-11T23:00:00+00:00\n // gets transformed in Germany with timezone shift of +1 by\n // moment(value).format(format) ==> 12/12/2024\n // and by\n // moment.utc(value).format(format) ==> 12/11/2024\n //\n const date = moment(value).format(format);\n return date;\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\r\nimport * as WebSdk from 'bimplus-websdk';\r\nimport { BehaviorSubject, from } from 'rxjs';\r\nimport { BimplusLocalizedWidgetComponent } from '../../bimplus-localized-widget/bimplus-localized-widget.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { ExpansionPanelComponent } from '../../expansion-panel/expansion-panel.component';\r\nimport { ExpansionPanelHeaderComponent } from '../../expansion-panel-header/expansion-panel-header.component';\r\nimport { FilterCriterium, MaxFilterCriteria } from '../bimplus-object-navigator.interface';\r\nimport { BimplusObjectStructureComponent } from '../../bimplus-object-structure/bimplus-object-structure.component';\r\nimport { BimplusObjectComplexPropertiesComponent } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.component';\r\nimport { ObjectStructureNode, ObjectStructureNodeBuilder } from '../../bimplus-object-structure/bimplus-object-structure.interface';\r\nimport { ComplexPropertiesNode, ComplexPropertiesNodeBuilder } from '../../bimplus-object-complex-properties/bimplus-object-complex-properties.interface';\r\nimport { CriteriaSelectObjectAttribute, CriteriaSelectObjectAttributeGroup } from './criteria-select-object-properties.interface';\r\nimport { FormatValuePipe } from '../../../pipes/format-value.pipe';\r\nimport { DateTimePipe } from '../../../pipes/datetime.pipe';\r\n\r\n@Component({\r\n selector: 'lib-criteria-select-object-properties',\r\n imports: [ExpansionPanelHeaderComponent, ExpansionPanelComponent, TranslateModule, BimplusObjectStructureComponent, BimplusObjectComplexPropertiesComponent],\r\n providers: [FormatValuePipe, DateTimePipe],\r\n templateUrl: './criteria-select-object-properties.component.html',\r\n styleUrl: './criteria-select-object-properties.component.less'\r\n})\r\nexport class CriteriaSelectObjectPropertiesComponent extends BimplusLocalizedWidgetComponent implements OnInit {\r\n private formatValuePipe = inject(FormatValuePipe);\r\n private datetimePipe = inject(DateTimePipe);\r\n\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this._currentPropertiesObjectId$.subscribe({\r\n next: (id) => {\r\n if (id) {\r\n this._createObjectProperties(id, this.revision)\r\n }\r\n }\r\n });\r\n\r\n this._currentObjectId$.subscribe({\r\n next: (id) => {\r\n this._currentPropertiesObjectId$.next(id);\r\n this._createComplexPropertiestructure(id, this.revision);\r\n }\r\n });\r\n\r\n }\r\n\r\n @Input()\r\n api: WebSdk.Api | null = null;\r\n\r\n @Input()\r\n set rootObjectId(id: string) {\r\n this._currentObjectId$.next(id);\r\n this._createObjectStructure(id, this.revision);\r\n\r\n this._rootObjectId = id;\r\n }\r\n\r\n get rootObjectId(): string {\r\n return this._rootObjectId;\r\n }\r\n\r\n @Input()\r\n revision: number | undefined = undefined;\r\n\r\n private readonly _currentObjectId$ = new BehaviorSubject<string>(\"\");\r\n\r\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string>(\"\");\r\n\r\n objectAttributeGroups: CriteriaSelectObjectAttributeGroup[] = [];\r\n\r\n MaxFilterCriteria = MaxFilterCriteria; // For exposure to template\r\n\r\n private _rootObjectId: string = \"\";\r\n\r\n @Input()\r\n set filterCriteria(criteria: FilterCriterium[]) {\r\n this._filterCriteria = criteria;\r\n this._syncAttributeStatesFromCriteria();\r\n }\r\n\r\n @Output() filterCriteriaChange = new EventEmitter<FilterCriterium[]>();\r\n\r\n get filterCriteria() {\r\n return this._filterCriteria;\r\n }\r\n\r\n private _filterCriteria: FilterCriterium[] = [];\r\n\r\n private _objectStructure: ObjectStructureNode | null = null;\r\n\r\n get objectStructure(): ObjectStructureNode | null {\r\n return this._objectStructure\r\n }\r\n\r\n private _complexProperties: ComplexPropertiesNode | null = null;\r\n\r\n get complexProperties(): ComplexPropertiesNode | null {\r\n return this._complexProperties;\r\n }\r\n\r\n toggleAttribute(attrib: CriteriaSelectObjectAttribute) {\r\n attrib.checked = !attrib.checked;\r\n if (attrib.checked === false) {\r\n attrib.valueChecked = false;\r\n }\r\n\r\n this.handleFilterCriteriumAttributeStateChange(attrib);\r\n }\r\n\r\n toggleAttributeValue(attrib: CriteriaSelectObjectAttribute) {\r\n attrib.valueChecked = !attrib.valueChecked;\r\n attrib.checked = attrib.valueChecked;\r\n\r\n this.handleFilterCriteriumAttributeStateChange(attrib);\r\n }\r\n\r\n _defineFilterString(attrib: CriteriaSelectObjectAttribute) {\r\n let substring = `[I][${attrib.id}].Value`;\r\n\r\n if (attrib.valueChecked) {\r\n substring += `[F][0]=${this.formatValuePipe.transform(attrib.value)}`;\r\n }\r\n return substring;\r\n }\r\n\r\n _addFilterCriteria(attrib: CriteriaSelectObjectAttribute) {\r\n // add a new entry\r\n this.filterCriteria.push({\r\n name: attrib.name,\r\n value: attrib.valueChecked ? attrib.value : undefined,\r\n namedValue: attrib.valueChecked ? this.normalizedValue(attrib, true) : undefined,\r\n id: attrib.id,\r\n subString: this._defineFilterString(attrib),\r\n });\r\n }\r\n\r\n _updateFilterCriteria(attrib: CriteriaSelectObjectAttribute, index: number) {\r\n // update an existing entry\r\n this.filterCriteria[index] = {\r\n ...this.filterCriteria[index],\r\n name: attrib.name,\r\n value: attrib.valueChecked ? attrib.value : undefined,\r\n namedValue: attrib.valueChecked ? this.normalizedValue(attrib, true) : undefined,\r\n subString: this._defineFilterString(attrib),\r\n };\r\n }\r\n\r\n // Helper function for rounding to specified decimals\r\n private roundToDecimal(value: number, decimal: number): number {\r\n const multiplier = Math.pow(10, decimal);\r\n return Math.round(value * multiplier) / multiplier;\r\n }\r\n\r\n titleForAttribute(attribute: CriteriaSelectObjectAttribute): string {\r\n // Translation moved to implementation to not run the translation \r\n // for many values which don't need it\r\n if (attribute.value === null || attribute.value === undefined) {\r\n return this.translateService.instant('_Not_defined');\r\n } else if (attribute.value === '') {\r\n return this.translateService.instant('_Empty_value');\r\n }\r\n return String(attribute.value);\r\n }\r\n\r\n normalizedValue(attribute: CriteriaSelectObjectAttribute, forFilterCriteria: boolean = false): string {\r\n // Translation moved to implementation to not run the translation \r\n // for many values which don't need it\r\n if (attribute.value === null || attribute.value === undefined) {\r\n return forFilterCriteria ? this.translateService.instant(\"_Not_defined\") : \"...\";\r\n }\r\n\r\n if (attribute.value === '') {\r\n return forFilterCriteria ? this.translateService.instant(\"_Empty_value\") : \"''\";\r\n }\r\n\r\n if (attribute?.control === \"Enumeration\" && attribute.enumValues) {\r\n const result: string = String(attribute.enumValues[Number(attribute.value)]);\r\n return result;\r\n }\r\n\r\n // Handle numeric rounding\r\n if (!forFilterCriteria &&\r\n attribute.type === 'double' &&\r\n attribute.decimal &&\r\n typeof (attribute.value) === 'number') {\r\n const roundedValue = this.roundToDecimal(attribute.value, attribute.decimal);\r\n return String(roundedValue);\r\n }\r\n\r\n if (attribute?.control === \"Checkbox\") {\r\n return (attribute.value === 1) ? \"True\" : \"False\";\r\n }\r\n\r\n // Handle datetime transformation\r\n if (attribute?.type === \"datetime\" && typeof (attribute.value) === 'string') {\r\n return this.datetimePipe.transform(attribute.value);\r\n }\r\n\r\n return String(attribute.value);\r\n }\r\n\r\n handleFilterCriteriumAttributeStateChange(attrib: CriteriaSelectObjectAttribute) {\r\n const index = this.filterCriteria.findIndex(x => x.id === attrib.id);\r\n // FILTER CRITERIA ALREADY EXISTS\r\n if (index >= 0) {\r\n if (attrib.checked === false && attrib.valueChecked === false) {\r\n // REMOVE\r\n // filterCriteria no longer used (left / right checkboxes not checked)\r\n this.filterCriteria.splice(index, 1);\r\n } else {\r\n // UPDATE\r\n // filterCriteria still used, but value should be used (right checkbox checked)\r\n this._updateFilterCriteria(attrib, index);\r\n }\r\n this.filterCriteriaChange.emit(this.filterCriteria);\r\n }\r\n // FILTER CRITERIA DOES NOT EXIST and MAX CRITERIA NOT REACHED\r\n else if (this.filterCriteria.length < MaxFilterCriteria) {\r\n // ADD\r\n this._addFilterCriteria(attrib);\r\n this.filterCriteriaChange.emit(this.filterCriteria);\r\n }\r\n }\r\n\r\n handleObjectStructureNodeSelected(node: ObjectStructureNode) {\r\n this._currentObjectId$.next(node.id);\r\n }\r\n\r\n handleComplexPropertyNodeSelected(node: ComplexPropertiesNode) {\r\n this._currentPropertiesObjectId$.next(node.id);\r\n }\r\n\r\n private _createObjectProperties(objectId: string, revision: number | undefined) {\r\n this._loadObjectProperties(objectId, revision)?.subscribe({\r\n\r\n // properties response is badly structured, nearly impossible to create class structure from it. Therefore using shortcut\r\n // any for json response\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (propertiesData: any) => {\r\n \r\n this.objectAttributeGroups = this._createAttributeGroupsFromResponse(propertiesData);\r\n this._syncAttributeStatesFromCriteria();\r\n },\r\n error: () => {\r\n this.objectAttributeGroups = [];\r\n }\r\n }\r\n )\r\n\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _createAttributeGroupsFromResponse(propertiesData: any) {\r\n\r\n const groups: Array<CriteriaSelectObjectAttributeGroup> = [];\r\n let localizedAttribGroups = null;\r\n if (propertiesData.localizedAttributeGroups) {\r\n localizedAttribGroups = propertiesData.localizedAttributeGroups;\r\n }\r\n\r\n if (!propertiesData.attributes) {\r\n return groups;\r\n }\r\n\r\n const attribGroups = propertiesData.attributes;\r\n for (const [groupName, attribsObject] of Object.entries(attribGroups)) {\r\n\r\n const newGroup: CriteriaSelectObjectAttributeGroup = {\r\n name: groupName,\r\n expanded: false,\r\n attributes: []\r\n };\r\n\r\n if (localizedAttribGroups?.[groupName]) {\r\n newGroup.name = localizedAttribGroups[groupName];\r\n }\r\n\r\n if (!attribsObject) {\r\n continue;\r\n }\r\n\r\n for (const attrib of Object.values(attribsObject)) {\r\n\r\n const newAttrib: CriteriaSelectObjectAttribute = {\r\n id: attrib.id,\r\n name: attrib.name,\r\n description: attrib.description,\r\n value: attrib.value,\r\n isChangeable: attrib.isChangeable,\r\n type: attrib.type,\r\n checked: false,\r\n valueChecked: false,\r\n group: attrib.group,\r\n }\r\n\r\n // Add attribute information which is not always present\r\n if (attrib.control) {\r\n newAttrib.control = attrib.control;\r\n }\r\n if (attrib.defaultValue) {\r\n newAttrib.defaultValue = attrib.defaultValue;\r\n }\r\n if (attrib.unit) {\r\n newAttrib.unit = attrib.unit;\r\n }\r\n if (attrib.decimal) {\r\n newAttrib.decimal = attrib.decimal;\r\n }\r\n if (attrib.enumdefinition) {\r\n newAttrib.enumValues = attrib.enumdefinition;\r\n }\r\n\r\n newGroup.attributes.push(newAttrib);\r\n }\r\n\r\n groups.push(newGroup);\r\n }\r\n\r\n return groups;\r\n }\r\n\r\n private _syncAttributeStatesFromCriteria() {\r\n this.objectAttributeGroups.forEach(group => {\r\n group.attributes.forEach(attrib => {\r\n const criteria = this._filterCriteria.find(x => x.id == attrib.id)\r\n if (criteria) {\r\n attrib.checked = true;\r\n attrib.valueChecked = criteria.value !== undefined;\r\n } else {\r\n attrib.checked = false;\r\n attrib.valueChecked = false;\r\n }\r\n })\r\n })\r\n }\r\n\r\n private _loadObjectProperties(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.get(objectId, revision, \"8\", undefined, false, undefined));\r\n }\r\n\r\n private _loadObjectStructure(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.getTopology(objectId, revision, false, false, undefined));\r\n }\r\n\r\n private _loadObjectComplexPropertiesStructure(objectId: string, revision: number | undefined) {\r\n if (!this.api) {\r\n return;\r\n }\r\n\r\n return from(this.api.objects.getComplexPropertiesTopology(objectId, revision));\r\n }\r\n\r\n private _createComplexPropertiestructure(objectId: string, revision: number | undefined) {\r\n this._loadObjectComplexPropertiesStructure(objectId, revision)?.subscribe({\r\n next: (structureData) => {\r\n if (structureData) {\r\n const complexProps = ComplexPropertiesNodeBuilder.createFromResponse(structureData);\r\n if (complexProps?.children?.length) {\r\n this._complexProperties = complexProps;\r\n } else {\r\n this._complexProperties = null;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n private _createObjectStructure(objectId: string, revision: number | undefined) {\r\n this._loadObjectStructure(objectId, revision)?.subscribe({\r\n next: (structureData) => {\r\n if (structureData) {\r\n this._objectStructure = ObjectStructureNodeBuilder.createFromResponse(structureData);\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","<!-- Object structure-->\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object structure\" | translate }}</span\n >\n </lib-expansion-panel-header>\n @if(objectStructure){\n <lib-bimplus-object-structure\n [objectStructure]=\"objectStructure\"\n [hasCheckBox1]=\"false\"\n [hasCheckBox2]=\"false\"\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\n >\n </lib-bimplus-object-structure>\n }\n</lib-expansion-panel>\n<!-- End Object structure-->\n\n<!-- Complex properties-->\n@if(complexProperties){\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object multiproperties tree\" | translate }}</span\n >\n </lib-expansion-panel-header>\n <lib-bimplus-object-complex-properties\n [complexProperties]=\"complexProperties\"\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\n >\n </lib-bimplus-object-complex-properties>\n</lib-expansion-panel>\n}\n<!-- End Complex properties-->\n\n<!-- Properties list-->\n@if(objectAttributeGroups.length > 0){\n<lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-header\">\n {{ \"_Object properties\" | translate }}</span\n >\n </lib-expansion-panel-header>\n\n @for (attribGroup of objectAttributeGroups; track attribGroup) {\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\n <lib-expansion-panel-header>\n <span class=\"criteria-select-object-properties-group-header\">\n {{ attribGroup.name }}\n </span>\n </lib-expansion-panel-header>\n <div>\n @for (attrib of attribGroup.attributes; track attrib) {\n <div class=\"criteria-select-object-properties-attrib-row\">\n <div class=\"criteria-select-object-properties-attrib-row-content\">\n <div\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\n >\n <label\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"attrib.checked\"\n [disabled]=\"\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\n \"\n (click)=\"toggleAttribute(attrib)\"\n (keypress)=\"toggleAttribute(attrib)\"\n />\n <span></span>\n </label>\n <div class=\"criteria-select-object-properties-attrib-row-cell-text\">\n {{ attrib.name }}\n </div>\n </div>\n <div\n class=\"criteria-select-object-properties-attrib-row-cell criteria-select-checkbox\"\n >\n <label\n class=\"criteria-select-object-properties-attrib-row-cell-label\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"attrib.valueChecked\"\n [disabled]=\"\n filterCriteria.length === MaxFilterCriteria && !attrib.checked\n \"\n (click)=\"toggleAttributeValue(attrib)\"\n (keypress)=\"toggleAttributeValue(attrib)\"\n />\n <span></span>\n </label>\n <div\n class=\"criteria-select-object-properties-attrib-row-cell-text\"\n title=\"{{ titleForAttribute(attrib) }}\"\n >\n {{ normalizedValue(attrib) }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </lib-expansion-panel>\n }\n</lib-expansion-panel>\n}\n<!-- End Properties list-->\n","import { AfterViewInit, Component, EventEmitter, Input, model, Output, ViewChild } from '@angular/core';\r\nimport { BimplusFlatTreeComponent } from '../../bimplus-flat-tree/bimplus-flat-tree.component';\r\nimport { FlatNode, TreeNode } from '../../bimplus-flat-tree/bimplus-flat-tree.interface';\r\nimport { BimplusOverlayMessageComponent } from '../../bimplus-overlay-message/bimplus-overlay-message.component';\r\nimport * as WebSdk from 'bimplus-websdk';\r\n\r\ntype TreeNodesLookup = Record<string, TreeNode>;\r\ntype TreeNodeObjectCounts = Record<string, number>;\r\n\r\n@Component({\r\n selector: 'lib-object-filter-result',\r\n imports: [\r\n BimplusFlatTreeComponent,\r\n BimplusOverlayMessageComponent,\r\n ],\r\n templateUrl: './object-filter-result.component.html',\r\n styleUrl: './object-filter-result.component.less'\r\n})\r\nexport class ObjectFilterResultComponent implements AfterViewInit {\r\n\r\n // #region public fields\r\n @ViewChild(BimplusFlatTreeComponent) treeComponent: BimplusFlatTreeComponent | null = null;\r\n\r\n @Input()\r\n set filterResult(res: WebSdk.ObjectFilterStructureResponse | null) {\r\n this._filterResult = res;\r\n this._updateTreeData();\r\n }\r\n\r\n @Input()\r\n set selectedObjects(selectedObjects: string[]) {\r\n this._selectedObjects = selectedObjects;\r\n this._syncSelectedObjects();\r\n }\r\n\r\n isFilterResultInvalid = model<boolean>(false);\r\n\r\n // User has clicked on close button of overlay message\r\n // Set the invalid filter back to false to remove overlay message\r\n public setFilterResultValid() {\r\n this.isFilterResultInvalid.set(false);\r\n }\r\n\r\n @Input() filterResultInvalidTitle: string = \"\";\r\n @Input() filterResultInvalidText: string = \"\";\r\n\r\n get treeData() {\r\n return this._treeData;\r\n }\r\n\r\n @Output() nodeSelectionChanged = new EventEmitter<string[]>();\r\n @Output() nodeDoubleClicked = new EventEmitter<string>();\r\n @Output() nodeMouseEntered = new EventEmitter<string>();\r\n @Output() nodeMouseLeft = new EventEmitter<string>();\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n ngAfterViewInit(): void {\r\n if (this._treeData && this._treeData.length > 0) {\r\n this._expandToObjectLevel(this._treeData[0]);\r\n }\r\n }\r\n\r\n handleSelectedNodes(nodes: FlatNode[]) {\r\n this.nodeSelectionChanged.emit(nodes.map(x => x.id));\r\n }\r\n\r\n getNodeObjectCounter(id: string) {\r\n return this._treeNodeObjectCounts[id];\r\n }\r\n\r\n dblClickedObjectNode(node: TreeNode) {\r\n this.nodeDoubleClicked.emit(node.id);\r\n }\r\n\r\n mouseEnterObjectNode(node: TreeNode) {\r\n this.nodeMouseEntered.emit(node.id);\r\n }\r\n\r\n mouseLeaveObjectNode(node: TreeNode) {\r\n this.nodeMouseLeft.emit(node.id);\r\n }\r\n\r\n expandToObjectLevel() {\r\n if (this.treeData.length === 0)\r\n return;\r\n\r\n this._expandToObjectLevel(this._treeData[0]);\r\n }\r\n\r\n clearFilterResult() {\r\n this._filterResult = null;\r\n this._treeData = [];\r\n }\r\n // #endregion public methods\r\n\r\n // #region private fields\r\n private _filterResult: WebSdk.ObjectFilterStructureResponse | null = null;\r\n private _treeData: TreeNode[] = [];\r\n private _treeNodesLookup: TreeNodesLookup = {};\r\n private _treeNodeObjectCounts: TreeNodeObjectCounts = {};\r\n private _selectedObjects: string[] = [];\r\n // #endregion private fields\r\n\r\n // #region private methods\r\n private _syncSelectedObjects() {\r\n\r\n const nodes: TreeNode[] = []\r\n\r\n for (const id of this._selectedObjects) {\r\n const treeNode = this._treeNodesLookup[id];\r\n if (treeNode) {\r\n nodes.push(treeNode);\r\n }\r\n }\r\n\r\n this.treeComponent?.reset_selection();\r\n\r\n for (const node of nodes) {\r\n this.treeComponent?.select_node(node.id);\r\n }\r\n\r\n }\r\n\r\n private _updateObjectCounters() {\r\n this._treeNodeObjectCounts = {};\r\n this._countObjects(this.treeData[0]);\r\n }\r\n\r\n private _countObjects(node: TreeNode) {\r\n if (node.nodeType && node.nodeType === \"objectNode\")\r\n return 1;\r\n\r\n let count = 0;\r\n if (!node.children)\r\n return 0;\r\n\r\n for (const child of node.children) {\r\n if (!child)\r\n continue;\r\n\r\n count += this._countObjects(child);\r\n }\r\n\r\n this._treeNodeObjectCounts[node.id] = count;\r\n return count;\r\n }\r\n\r\n private _updateTreeData() {\r\n if (!this._filterResult) {\r\n return;\r\n }\r\n\r\n this._treeNodesLookup = {};\r\n this._treeData = [this._convertFilterResultToTreeNode(this._filterResult.structure, this._treeNodesLookup)];\r\n this._updateObjectCounters();\r\n }\r\n\r\n private _convertFilterResultToTreeNode(node: WebSdk.StructureNode, nodesLookup: TreeNodesLookup | undefined = undefined): TreeNode {\r\n\r\n const treeNode: TreeNode = {\r\n name: node.name,\r\n id: node.id,\r\n parent: node.parent\r\n };\r\n\r\n if (node.children) {\r\n treeNode.children = [];\r\n for (const child of node.children) {\r\n const childTreeNode = this._convertFilterResultToTreeNode(child, nodesLookup);\r\n treeNode.children.push(childTreeNode);\r\n }\r\n }\r\n\r\n if (!treeNode.parent) {\r\n treeNode.nodeType = \"rootNode\";\r\n } else if (node.type === \"Structure\") {\r\n treeNode.nodeType = \"structureNode\";\r\n } else {\r\n treeNode.nodeType = \"objectNode\"\r\n }\r\n\r\n if (nodesLookup) {\r\n nodesLookup[treeNode.id] = treeNode;\r\n }\r\n\r\n return treeNode;\r\n }\r\n\r\n private _expandToObjectLevel(node: TreeNode) {\r\n if (node.children) {\r\n for (const child of node.children) {\r\n if (child.nodeType && child.nodeType === \"objectNode\") {\r\n return;\r\n } else {\r\n this._expandToObjectLevel(child);\r\n }\r\n\r\n }\r\n }\r\n\r\n this.treeComponent?.expand_node(node.id);\r\n }\r\n // #endregion private methods\r\n\r\n}\r\n","<lib-bimplus-flat-tree\n paddingIndent=\"1.4rem\"\n [treeData]=\"treeData\"\n enableParentHighlighting=\"false\"\n oneLevelMultiSelect=\"false\"\n multiSelect=\"true\"\n dataTestPrefix=\"object-filter-result-tree-\"\n (selectedNodes)=\"handleSelectedNodes($event)\"\n [customNodeTemplate]=\"objFilterResultNode\"\n></lib-bimplus-flat-tree>\n\n@if(isFilterResultInvalid()){\n<div class=\"message-overlay\">\n <lib-bimplus-overlay-message\n [title]=\"filterResultInvalidTitle\"\n [message]=\"filterResultInvalidText\"\n (close)=\"setFilterResultValid()\"\n >\n </lib-bimplus-overlay-message>\n</div>\n}\n\n<ng-template #objFilterResultNode let-node=\"node\">\n @switch (node.nodeType) { @case (\"rootNode\") {\n <div class=\"object-navigator-filter-result-root-node noselect\">\n {{ node.name }} &nbsp;&#40; {{ getNodeObjectCounter(node.id) }} &#41;\n </div>\n } @case (\"structureNode\") {\n <div class=\"noselect\">\n {{ node.name }} &nbsp;&#40; {{ getNodeObjectCounter(node.id) }} &#41;\n </div>\n } @case (\"objectNode\") {\n <span class=\"noselect\">\n <div\n class=\"noselect\"\n (dblclick)=\"dblClickedObjectNode(node)\"\n (mouseenter)=\"mouseEnterObjectNode(node)\"\n (mouseleave)=\"mouseLeaveObjectNode(node)\"\n >\n {{ node.name }}\n </div>\n </span>\n } }\n</ng-template>\n","import { FilterCriterium } from \"../components/bimplus-object-navigator/bimplus-object-navigator.interface\";\n\nconst DivsionIDSubstring = 'tabAttribElement.DivisionID';\n\nexport class FilterString {\n\n constructor(filterString: string = \"\", maxFilterCriteria: number = 5) {\n this._filterString = filterString;\n this._maxFilterCriteria = maxFilterCriteria;\n }\n\n get filterString() {\n return this._filterString;\n }\n\n private _filterString: string = \"\";\n private _maxFilterCriteria: number = 5;\n\n fromFilterCriteria(criteria: FilterCriterium[]) {\n this._filterString = `[I]${DivsionIDSubstring}`;\n\n for (const criterium of criteria) {\n this._filterString += criterium.subString;\n }\n\n return this._filterString;\n }\n\n getReadableValuesFromFilterCriteria(criteria: FilterCriterium[]): Record<string, string> {\n const readableValues: Record<string, string> = {};\n for (const criterium of criteria) {\n if (criterium.id && criterium.name)\n readableValues[criterium.id] = criterium.name;\n }\n\n return readableValues;\n }\n\n toFilterCriteria(readableValues: Record<string, string> | undefined = undefined): FilterCriterium[] {\n const criteria: FilterCriterium[] = [];\n\n let firstModelIdCriteriaSkipped = false;\n\n const parts = this._filterString.split('[I]');\n for (const part of parts) {\n if (part.length === 0) {\n continue;\n }\n\n if (part.includes(DivsionIDSubstring) && !firstModelIdCriteriaSkipped) {\n firstModelIdCriteriaSkipped = true;\n continue;\n }\n\n criteria.push(this._parseFilterSubstring(part, readableValues));\n if (criteria.length === this._maxFilterCriteria) {\n break;\n }\n }\n\n return criteria;\n }\n\n private _parseFilterSubstring(subString: string, readableValues: Record<string, string> | undefined = undefined): FilterCriterium {\n let name = subString;\n let id: string | undefined = undefined;\n\n const indexOpenBrackets = subString.indexOf('[');\n const indexCloseBrackets = subString.indexOf(']');\n\n if (indexOpenBrackets >= 0 && indexCloseBrackets >= 0 && indexCloseBrackets > indexOpenBrackets) {\n const readableId = subString.slice(indexOpenBrackets + 1, indexCloseBrackets);\n id = readableId;\n if (readableId && readableValues) {\n const readableString = readableValues[readableId];\n if (readableString) {\n name = readableString;\n }\n }\n } else if (subString.includes('.')) {\n const splitted = subString.split('.');\n name = splitted[splitted.length - 1];\n }\n\n return {\n name: name,\n subString: \"[I]\" + subString,\n id: id\n }\n }\n\n}\n","import * as WebSdk from 'bimplus-websdk';\nimport { Observable, concatMap, from, map } from 'rxjs';\n\nexport class FilterStructureFetcher {\n\n static fetchObjectFilterStructureFromSelection(projectId: string, filter: WebSdk.ObjectFilter, selectionObject: WebSdk.ExportObject, api: WebSdk.Api): Observable<WebSdk.ObjectFilterStructureResponse> {\n const isTemporary = !filter.id;\n let filterId = filter.id ? filter.id : \"\";\n\n let observeable: Observable<WebSdk.ObjectFilterStructureResponse> | null = null;\n\n if (!isTemporary) {\n observeable = from(api.exportService.createExportSelection(projectId, JSON.stringify(selectionObject))).pipe(\n concatMap(selectionObj => {\n if (!selectionObj?.id) {\n throw new Error('Failed to create selection object');\n }\n return from(api.objectFilters.getSelectionFilteredObjects(selectionObj.id, filterId, undefined, undefined));\n })\n )\n } else {\n observeable = from(api.objectFilters.post(JSON.stringify(filter), projectId)).pipe(\n concatMap(filterObj => {\n if (!filterObj?.id) {\n throw new Error('Failed to create temporary filter object');\n }\n\n filterId = filterObj.id;\n\n return from(api.exportService.createExportSelection(projectId, JSON.stringify(selectionObject)));\n }),\n concatMap(selectionObj => {\n if (!selectionObj?.id) {\n throw new Error('Failed to create selection object');\n }\n return from(api.objectFilters.getSelectionFilteredObjects(selectionObj.id, filterId, undefined, undefined)).pipe(\n map((filterResult) => {\n api.objectFilters.delete(filterId);\n return filterResult;\n })\n );\n })\n )\n }\n return observeable;\n }\n\n}\n","import { Component, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport * as WebSdk from 'bimplus-websdk';\nimport { BehaviorSubject ,from } from 'rxjs';\nimport { CommonModule} from '@angular/common';\nimport { FilterCriteriaSelectionMode, FilterCriterium, FilterType, MaxFilterCriteria } from './bimplus-object-navigator.interface';\nimport { FilterCriteriumComponent } from './filter-criterium/filter-criterium.component';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\n\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { BimplusSidenavDrawerContentComponent } from '../bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { ExpansionPanelHeaderActionsComponent } from '../expansion-panel-header-actions/expansion-panel-header-actions.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CriteriaSelectObjectPropertiesComponent } from './criteria-select-object-properties/criteria-select-object-properties.component';\nimport { ObjectFilterResultComponent } from './object-filter-result/object-filter-result.component';\nimport { BimplusContextMenuComponent } from '../bimplus-context-menu/bimplus-context-menu.component'\nimport { BimplusContextMenuItem } from '../bimplus-context-menu/bimplus-context-menu.interface';\nimport { FilterString } from '../../utils/filterString';\nimport { FilterStructureFetcher } from '../../utils/filterStructureFetcher';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\n\n@Component({\n selector: 'lib-bimplus-object-navigator',\n imports: [CommonModule,\n FormsModule,\n NgSelectModule,\n FilterCriteriumComponent,\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n ExpansionPanelHeaderActionsComponent,\n BimplusSidenavDrawerContentComponent,\n TranslateModule,\n CriteriaSelectObjectPropertiesComponent,\n BimplusContextMenuComponent,\n ObjectFilterResultComponent,\n BimplusScrollableContainerComponent\n ],\n templateUrl: './bimplus-object-navigator.component.html',\n styleUrl: './bimplus-object-navigator.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusObjectNavigatorComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n\n constructor(){\n super()\n }\n\n // #region public fields\n @ViewChild(ObjectFilterResultComponent) objectFilterResult: ObjectFilterResultComponent | null = null;\n\n @Input()\n hideFilterContextMenu: boolean = false;\n\n @Input()\n filterContextMenu: Array<BimplusContextMenuItem> = [];\n\n @Input()\n set filterTypes(types : Array<FilterType>){\n this._filterTypes = types;\n if(this._filterTypes.length >0)\n this.activeFilterType = this._filterTypes[0];\n }\n\n get filterTypes():Array<FilterType>{\n return this._filterTypes;\n }\n\n set activeFilterType(value : FilterType | null){\n this.activeFilterTypeSubject$.next(value);\n }\n\n get activeFilterType() : FilterType | null{\n return this.activeFilterTypeSubject$.getValue();\n }\n\n activeFilterTypeSubject$ = new BehaviorSubject<FilterType | null> (null);\n activeFilterSubject$ = new BehaviorSubject<WebSdk.ObjectFilter | null> (null);\n\n set activeFilter(filter : WebSdk.ObjectFilter | null){\n\n // New active filter is selected. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n\n if(filter && !filter.id){ // Switching to custom filter will restore the default custom filter\n this._setDefaultCustomFilterString(filter);\n }\n\n this.activeFilterSubject$.next(filter);\n }\n\n get activeFilter() : WebSdk.ObjectFilter | null{\n return this.activeFilterSubject$.getValue();\n }\n\n @Input()\n filters : WebSdk.ObjectFiltersResponse | null = null;\n\n filterCriteria : FilterCriterium[] = []\n filterCriteriaChanged : boolean = false;\n maxFilterCriteria: number = MaxFilterCriteria;\n\n @Input()\n api : WebSdk.Api | null = null;\n\n @Input()\n projectId : string = ''\n\n @HostBinding('class.object-navigator') objNavClassClass: boolean = true;\n\n filterCriteriaSelectionMode$ = new BehaviorSubject<FilterCriteriaSelectionMode>(FilterCriteriaSelectionMode.None);\n\n @Output()\n filterCriteriaSelectionModeChanged = new EventEmitter<FilterCriteriaSelectionMode>();\n\n @Input()\n selectedObjectId : string | null = null;\n\n @Input()\n selectedRevision : number | undefined = undefined;\n\n @Input()\n selectedObjects : string[] = [];\n\n @Input()\n selectionObject : WebSdk.ExportObject | null = null;\n\n get filterResult(){\n return this._filterResult;\n }\n\n @Output()\n filterResultObjectSelectionChanged = new EventEmitter<string[]>();\n\n @Output()\n filterResultObjectDoubleClicked = new EventEmitter<string>();\n\n @Output()\n filterResultObjectMouseEntered = new EventEmitter<string>();\n\n @Output()\n filterResultObjectMouseLeft = new EventEmitter<string>();\n\n @Output()\n pipetteActiveStatus = new EventEmitter<boolean>();\n\n FilterCriteriaSelectionMode = FilterCriteriaSelectionMode; // Expose enum to template\n\n public isLoadingResults = false;\n\n public filterResultInvalidated = false;\n // #endregion public fields\n\n // #region private fields\n private _filterResult : WebSdk.ObjectFilterStructureResponse | null = null;\n private _filterTypes : Array<FilterType> = [];\n // #endregion private fields\n\n // #region public methods\n ngOnInit() {\n\n this.activeFilterTypeSubject$.subscribe({\n next: (v) => {\n if(!this.projectId || !this.api || !v){\n return;\n }\n\n if (this._filterResult) {\n // Filter results are available and visibility of model/layer was changed\n // Invalidate filter results => show overlay info dailog\n this.filterResultInvalidated = true;\n }\n\n this.activeFilter = null;\n\n this.loadCurrentLayerFilters(this.projectId, v.id)?.subscribe({\n next: (value) => {\n this.filters = [this._createDefaultCustomFilter(v.id), ...value];\n this.activeFilter = this.filters[0];\n this._applyCustomOrStoredFilter();\n },\n error: err => {throw new Error (err)},\n }\n )}\n });\n\n this.activeFilterSubject$.subscribe({\n next: (v) => {\n if(!v)\n return;\n\n this.filterCriteria = this.parseFilterString(v);\n this._applyCustomOrStoredFilter();\n }\n });\n\n this.filterCriteriaSelectionMode$.subscribe({\n next: (v) => {\n this.filterCriteriaSelectionModeChanged.emit(v)\n }\n })\n\n if( this.filterTypes.length > 0){\n this.activeFilterType = this.filterTypes[0];\n }\n }\n\n loadCurrentLayerFilters(projectId : string, layerId : string){\n if(!this.api){\n return;\n }\n return from(this.api.objectFilters.get(layerId,projectId));\n }\n\n parseFilterString(filter : WebSdk.ObjectFilter){\n const filterString = new FilterString(filter.filterString, this.maxFilterCriteria);\n return filterString.toFilterCriteria(filter.readableValues);\n }\n\n deleteFilterCriterium(index: number){\n this.filterCriteria.splice(index, 1);\n this.filterCriteria = [...this.filterCriteria];\n // Filter criteria was removed. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n this.activateModifiedCustomFilter();\n }\n\n setFilterCriteriaSelectionMode(mode: FilterCriteriaSelectionMode) {\n const isSameMode = this.filterCriteriaSelectionMode$.getValue() === mode;\n this.filterCriteriaSelectionMode$.next(isSameMode ? FilterCriteriaSelectionMode.None : mode);\n this.handlePipetteActiveStatus(!isSameMode);\n }\n \n applyFilterDisabled() : boolean {\n // Apply filter button should be disabled when no filter criteria are selected\n // or filter criteria was already applied and no new criteria was selected\n return this.filterCriteria.length === 0 || ! this.filterCriteriaChanged;\n }\n\n applyFilter(){\n this.handlePipetteActiveStatus(false /* disable pipette cursor */);\n this.filterCriteriaSelectionMode$.next(FilterCriteriaSelectionMode.None);\n this._filterResult = null;\n // Filter results will be updated again, so they are no longer invalid\n this.filterResultInvalidated = false;\n\n // Custom filter is selected\n if(this.activeFilter && !this.activeFilter.id){\n this.activeFilter.filterString = new FilterString().fromFilterCriteria(this.filterCriteria);\n }\n\n if(this.selectionObject){\n this._applySelectionObjectFilter(this.activeFilter);\n }\n }\n\n handleFilterResultSelectionChanged(selection : string[]){\n this.filterResultObjectSelectionChanged.emit(selection);\n }\n\n handleFilterResultObjectDoubleClicked(selection : string){\n this.filterResultObjectDoubleClicked.emit(selection);\n }\n\n handleFilterResultObjectMouseEntered(selection : string){\n this.filterResultObjectMouseEntered.emit(selection);\n }\n\n handleFilterResultObjectMouseLeft(selection : string){\n this.filterResultObjectMouseLeft.emit(selection);\n }\n\n handlePipetteActiveStatus(status: boolean) {\n this.pipetteActiveStatus.emit(status);\n }\n\n filterCriteriaWasChanged(/*filterCriteria: FilterCriterium[]*/) {\n // Some new filter criteria was selected. Apply filter button should be enabled\n this.filterCriteriaChanged = true;\n }\n\n activateModifiedCustomFilter(){\n // When existing filter is changed, Custom filter will be selected and filter settings need to be cloned. Nothing is done when custom filter is already active\n if(this.activeFilter?.id && this.filters){\n\n // Copy filter string from current criteria settings to custom filter\n this.filters[0].filterString = new FilterString().fromFilterCriteria(this.filterCriteria);\n this.filters[0].readableValues = new FilterString().getReadableValuesFromFilterCriteria(this.filterCriteria);\n\n this.activeFilterSubject$.next(this.filters[0]);\n }\n }\n // #endregion public methods\n\n // #region private methods\n private _applySelectionObjectFilter(activeFilter : WebSdk.ObjectFilter | null){\n\n if(!this.api || !this.selectionObject || !activeFilter){\n return;\n }\n\n this.selectionObject.singleUse = true;\n this.selectionObject.selection.singleuse = true;\n\n this.isLoadingResults = true;\n\n FilterStructureFetcher.fetchObjectFilterStructureFromSelection(this.projectId, activeFilter, this.selectionObject, this.api).subscribe({\n next: (filterResult) => {\n this._filterResult = filterResult;\n this.isLoadingResults = false;\n // Fetching new results finished. Apply filter button should be disabled\n this.filterCriteriaChanged = false;\n }\n });\n }\n\n private _setDefaultCustomFilterString(filter: WebSdk.ObjectFilter){\n const typeAttribId = \"a0e8ae2c-c869-4ec3-9019-25d3704be707\";\n filter.filterString = `[I][${typeAttribId}].Value`;\n filter.readableValues = {};\n filter.readableValues[typeAttribId] = \"Type\"; // Provide readable criterium name for type\n }\n\n private _createDefaultCustomFilter(disciplineID: string) : WebSdk.ObjectFilter{\n\n const filter = {\n module: \"00000000-0000-0000-0000-000000000000\",\n category: \"\",\n disciplineID: disciplineID,\n name: \"Custom filter\",\n filterString: \"\",\n isDefault: false,\n disableSortByModels: false,\n }\n\n this._setDefaultCustomFilterString(filter);\n return filter;\n }\n\n private _applyCustomOrStoredFilter() {\n if(this.activeFilter && this.activeFilter.id){\n // Stored filter is selected. Results must be applied automatically.\n this.applyFilter();\n } else {\n // Custom filter is selected. Properties of selected object must be shown again.\n if (this.selectedObjectId) {\n this.setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties);\n } else {\n this.objectFilterResult?.clearFilterResult();\n }\n }\n }\n // #endregion private methods\n\n}\n","<lib-bimplus-sidenav-drawer-content [header]=\"'_Object navigator' | translate\"\n [isLoading]=\"isLoadingResults\"\n [loadingSpinnerText]=\"'_Loading_Filter_Results' | translate\"\n>\n <div class=\"object-navigator-content-container\">\n @if(filterTypes.length > 0){\n <div class=\"description\">\n {{\"_Select_an_object_using_Object_Picker\" | translate}}\n </div>\n <div class=\"object-navigator-filters-type\">\n <ng-select data-test=\"object-navigator-filter-types-dropdown\" class=\"object-navigator-dropdown\" [(ngModel)]=\"activeFilterType\" [clearable]=\"false\" [searchable]=\"false\">\n <ng-option *ngFor=\"let type of filterTypes\" [value]=\"type\">{{type.name}}</ng-option>\n </ng-select>\n </div>\n <div class=\"object-navigator-filters-name\">\n <ng-select data-test=\"object-navigator-filters-name-dropdown\" class=\"object-navigator-dropdown\" [(ngModel)]=\"activeFilter\" [clearable]=\"false\" [disabled]=\"!filters\" [searchable]=\"false\">\n <ng-option *ngFor=\"let filter of filters\" [value]=\"filter\">{{filter.name}}</ng-option>\n </ng-select>\n\n @if(!hideFilterContextMenu){\n <lib-bimplus-context-menu class=\"object-navigator-filters-name-context-menu\"\n [items]=\"filterContextMenu\"\n *ngIf=\"filterContextMenu?.length\"\n >\n </lib-bimplus-context-menu>\n }\n\n </div>\n\n <lib-expansion-panel class=\"object-navigator-filter-criteria-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-navigator-filter-criteria-header\">\n {{ \"_Assign_Objects_Selection_Mode\" | translate }} &#40;{{ filterCriteria.length }}/{{ maxFilterCriteria }}&#41;\n </span>\n <lib-expansion-panel-header-actions>\n <div class=\"object-navigator-pick-object-button\"\n [ngClass]=\"filterCriteriaSelectionMode$.getValue() === FilterCriteriaSelectionMode.SelectObjectProperties? 'active' : ''\"\n (click)=\"setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties)\"\n (keypress)=\"setFilterCriteriaSelectionMode(FilterCriteriaSelectionMode.SelectObjectProperties)\"\n [title]=\"'_Object_Picker'| translate\"\n ></div>\n </lib-expansion-panel-header-actions>\n </lib-expansion-panel-header>\n\n <div class=\"filter-criteria-container\">\n @for (criterium of filterCriteria; track criterium; let i = $index) {\n <app-filter-criterium\n [criterium] = \"criterium\"\n [indent]=\"i*0.8\"\n (deleteCriterium)=\"deleteFilterCriterium(i)\"\n ></app-filter-criterium>\n }\n </div>\n </lib-expansion-panel>\n\n @switch(filterCriteriaSelectionMode$.getValue()){\n @case(FilterCriteriaSelectionMode.SelectObjectProperties){\n @if(!selectedObjectId){\n <p id=\"NoObjectSelected\">{{ \"_NoObjectSelected\" | translate}}</p>\n }\n }\n }\n\n <div class=\"object-navigator-apply-button-row\">\n <button class=\"primary-button\" \n [class.disabled]=\"applyFilterDisabled()\"\n [disabled]=\"applyFilterDisabled()\"\n (click)=\"applyFilter()\"\n > \n {{\"_Apply filter\" | translate}}\n </button>\n </div>\n\n <div class=\"object-navigator-separator\"></div>\n\n @switch(filterCriteriaSelectionMode$.getValue()){\n @case(FilterCriteriaSelectionMode.SelectObjectProperties){\n @if(selectedObjectId){\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n <lib-criteria-select-object-properties\n [api]=\"api\"\n [selectedLanguage]=\"selectedLanguage\"\n [localizedStrings]=\"localizedStrings\"\n [(filterCriteria)]=\"filterCriteria\"\n [rootObjectId]=\"selectedObjectId\"\n [revision]=\"selectedRevision\"\n (filterCriteriaChange)=\"filterCriteriaWasChanged()\"\n >\n </lib-criteria-select-object-properties>\n </lib-bimplus-scrollable-container>\n </div>\n }\n }\n @case(FilterCriteriaSelectionMode.SelectAttributes){\n\n }\n @default{\n @if (filterResult) {\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n <lib-object-filter-result\n [filterResult]=\"filterResult\"\n [selectedObjects]=\"selectedObjects\"\n [isFilterResultInvalid]=\"filterResultInvalidated\"\n [filterResultInvalidTitle]=\"'Result_is_Invalid' | translate\"\n [filterResultInvalidText]=\"'Selection_in_Project_navigator_has_changed' | translate\"\n (nodeSelectionChanged)=\"handleFilterResultSelectionChanged($event)\"\n (nodeDoubleClicked)=\"handleFilterResultObjectDoubleClicked($event)\"\n (nodeMouseEntered)=\"handleFilterResultObjectMouseEntered($event)\"\n (nodeMouseLeft)=\"handleFilterResultObjectMouseLeft($event)\"\n ></lib-object-filter-result>\n </lib-bimplus-scrollable-container>\n </div>\n }\n }\n }\n }\n @else {\n <div data-test=\"object-navigator-no-filter-types-message\" class=\"object-navigator-no-filter-types\"> {{\"_No_visible_models_found\" | translate}} </div>\n }\n </div>\n</lib-bimplus-sidenav-drawer-content>\n","import { Component, ViewEncapsulation, Input, EventEmitter, Output, ElementRef, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClickOutsideDirective } from '../../directives/click-outside/click-outside.directive';\nimport { TooltipMessageData, TooltipMessagePosition } from './bimplus-tooltip-message.interface'\n@Component({\n selector: 'lib-bimplus-tooltip-message',\n imports: [CommonModule, ClickOutsideDirective],\n templateUrl: './bimplus-tooltip-message.component.html',\n styleUrl: './bimplus-tooltip-message.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusTooltipMessageComponent implements OnChanges {\n private el = inject(ElementRef);\n\n private _element: HTMLElement;\n constructor() {\n this._element = this.el.nativeElement.shadowRoot;\n }\n\n // Getter for _element\n public get element(): HTMLElement {\n return this._element;\n }\n\n @Input() messagePosition: TooltipMessagePosition = {\n posX: 0,\n posY: 0,\n };\n\n @Input() messageData: TooltipMessageData = {};\n\n @Input() messageVisibility: boolean = false;\n @Output() messageVisibilityChange = new EventEmitter<boolean>();\n\n protected _clickOutside() {\n this.messageVisibility = false;\n this.messageVisibilityChange.emit(this.messageVisibility)\n }\n\n //<<Calculation of the correct position of the tooltip\n private _resizeObserver!: ResizeObserver;\n protected _messageParentElement!: ElementRef;\n\n protected _parentWidth: number = 0;\n protected _parentHeight: number = 0;\n\n get messageParent(): ElementRef {\n return this._messageParentElement;\n }\n\n @Input() set messageParent(element: ElementRef) {\n this._messageParentElement = element;\n if(!this._messageParentElement) {\n return;\n }\n\n this._resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this._parentWidth = width;\n this._parentHeight = height; \n }\n });\n\n this._resizeObserver.observe(this._messageParentElement.nativeElement);\n }\n\n tooltipRectangleIsOutOfParentRectangleX(tooltipRectangle: DOMRect, parentRectangle: DOMRect): boolean {\n return (tooltipRectangle.x + tooltipRectangle.width - parentRectangle.x - parentRectangle.width) > 0;\n }\n tooltipRectangleIsOutOfParentRectangleY(tooltipRectangle: DOMRect, parentRectangle: DOMRect): boolean {\n return (tooltipRectangle.y + tooltipRectangle.height - parentRectangle.y - parentRectangle.height) > 0;\n }\n\n correctTooltipPositionX(oldPosX: number, flippedX: boolean, oldPosY: number, flippedY: boolean): void {\n if(!this._messageParentElement) {\n return;\n }\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(Math.abs(_tooltipRectangle.x + _tooltipRectangle.width - oldPosX - _parentRectangle.left) > 3) {\n this.messagePosition.posX = this.messagePosition.posX + oldPosX - (_tooltipRectangle.x + _tooltipRectangle.width);\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(flippedY && Math.abs(_tooltipRectangle.y + _tooltipRectangle.height - oldPosY - _parentRectangle.top) > 3) {\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(this.tooltipRectangleIsOutOfParentRectangleY(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posY = this.messagePosition.posY - _tooltipRectangle.height;\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, true);\n }, 0);\n }\n }\n\n correctTooltipPositionY(oldPosX: number, flippedX: boolean, oldPosY: number, flippedY: boolean): void {\n if(!this._messageParentElement) {\n return;\n }\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(Math.abs(_tooltipRectangle.y + _tooltipRectangle.height - oldPosY - _parentRectangle.top) > 3) {\n this.messagePosition.posY = this.messagePosition.posY + oldPosY - (_tooltipRectangle.y + _tooltipRectangle.height);\n setTimeout(() => {\n this.correctTooltipPositionY(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(flippedX && Math.abs(_tooltipRectangle.x + _tooltipRectangle.width - oldPosX - _parentRectangle.left) > 3) {\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, flippedX, oldPosY, flippedY);\n }, 0); \n } else if(this.tooltipRectangleIsOutOfParentRectangleX(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posX = this.messagePosition.posX - _tooltipRectangle.width;\n setTimeout(() => {\n this.correctTooltipPositionX(oldPosX, true, oldPosY, flippedY);\n }, 0);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['messageVisibility']) {\n if(!changes['messageVisibility'].currentValue) {\n return;\n }\n setTimeout(() => {\n if(!this._messageParentElement) {\n return;\n }\n const _oldPosX = this.messagePosition.posX;\n const _oldPosY = this.messagePosition.posY;\n const _tooltipElement = this._element.querySelector(\".tooltip-message\");\n if(!_tooltipElement) {\n return;\n }\n const _tooltipRectangle = _tooltipElement.getBoundingClientRect();\n const _parentRectangle = this._messageParentElement.nativeElement.getBoundingClientRect();\n if(this.tooltipRectangleIsOutOfParentRectangleX(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posX = this.messagePosition.posX - _tooltipRectangle.width;\n setTimeout(() => {\n this.correctTooltipPositionX(_oldPosX, true, _oldPosY, false);\n }, 0);\n } else if(this.tooltipRectangleIsOutOfParentRectangleY(_tooltipRectangle, _parentRectangle)) {\n this.messagePosition.posY = this.messagePosition.posY - _tooltipRectangle.height;\n setTimeout(() => {\n this.correctTooltipPositionY(_oldPosX, false, _oldPosY, true);\n }, 0);\n }\n }, 0);\n }\n }\n //Calculation of the correct position of the tooltip>>\n}\n","<div *ngIf=\"messageVisibility\"\n class=\"tooltip-message\"\n libClickOutside\n (clickOutside)=\"_clickOutside()\"\n [ngStyle]=\"{\n 'top.px': messagePosition.posY\n , 'left.px': messagePosition.posX\n }\"\n>\n <ng-content select=\".tooltip-message-title-content\"></ng-content>\n <div\n class=\"tooltip-message-title\"\n *ngIf=\"messageData && messageData.title\"\n >\n {{messageData.title}}\n </div>\n\n <ng-content select=\".tooltip-message-messages-content\"></ng-content>\n <div\n class=\"tooltip-message-messages\"\n *ngIf=\"messageData && messageData.messages\"\n >\n <ng-container *ngFor=\"let message of messageData.messages\">\n <ng-container *ngIf=\"message.separatingLine\">\n <div class=\"separating-line\"></div>\n </ng-container>\n <div class=\"tooltip-message-message\">\n <span\n *ngIf=\"message.label\"\n class=\"label\"\n [class.failed]=\"message.type==='failed'\"\n [class.success]=\"message.type==='success'\"\n >\n {{message.label}}\n </span>\n <span\n *ngIf=\"message.value\"\n class=\"value\"\n >\n <ng-container *ngIf=\"message.label\">:</ng-container>\n {{message.value}}\n </span>\n </div>\n </ng-container>\n </div>\n \n <ng-content select=\".tooltip-message-footer-content\"></ng-content>\n <div\n class=\"tooltip-message-footer\"\n *ngIf=\"messageData && messageData.footer\"\n >\n {{messageData.footer}}\n </div>\n</div>\n","import { Injectable } from '@angular/core';\r\nimport { LocalizedStrings } from './../types/types'\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LanguageStringsService {\r\n\r\n // #region public fields\r\n set languageFilesUri(uri : string){\r\n this._languageFilesUri = uri;\r\n }\r\n private readonly defaultLang: string = 'en';\r\n currentLanguage$ = new BehaviorSubject<string> (this.defaultLang);\r\n currentLanguageStrings$ = new BehaviorSubject<LocalizedStrings>({});\r\n\r\n get currentLanguage() : string {\r\n return this.currentLanguage$.getValue();\r\n }\r\n\r\n set currentLanguageStrings(langStrings : LocalizedStrings){\r\n this.currentLanguageStrings$.next(langStrings);\r\n }\r\n\r\n get currentLanguageStrings() : LocalizedStrings {\r\n return this.currentLanguageStrings$.getValue();\r\n }\r\n // #endregion public fields\r\n\r\n // #region public methods\r\n async setCurrentLanguage(lang : string){\r\n this.currentLanguage$.next(lang);\r\n await this.fetchLanguageStrings(lang); \r\n }\r\n\r\n extractLocalizedStrings(stringIds : Array<string>) : LocalizedStrings {\r\n const obj : LocalizedStrings = {};\r\n for (const [key, value] of Object.entries(this.currentLanguageStrings)) {\r\n if(typeof value == 'string' && stringIds.find(x=>x === key)){\r\n obj[key] = value;\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n async fetchLanguageStrings(lang : string){\r\n const data = await fetch(`${this._languageFilesUri}/strings_${lang}.json`);\r\n console.log(`Language strings loaded from: ${this._languageFilesUri}/strings_${lang}.json`);\r\n console.log(data);\r\n const dataJSON = await data.json();\r\n // add missing translations from default language translations\r\n if (lang !== this.defaultLang) {\r\n const fallbackData = await fetch(`${this._languageFilesUri}/strings_en.json`);\r\n const fallbackDataJSON = await fallbackData?.json?.();\r\n const fallbackDataJSONIndexes = fallbackDataJSON && Object.keys(fallbackDataJSON);\r\n if (fallbackDataJSONIndexes?.length) {\r\n for (const index in fallbackDataJSONIndexes) {\r\n const indexName = fallbackDataJSONIndexes[index];\r\n dataJSON[indexName] ??= fallbackDataJSON[indexName];\r\n }\r\n }\r\n }\r\n this.currentLanguageStrings$.next(dataJSON); \r\n }\r\n // #endregion public methods\r\n\r\n // #region private fields \r\n private _languageFilesUri : string = \"/assets\"\r\n // #endregion private fields\r\n}\r\n","import { Injectable } from '@angular/core';\n\nexport enum CursorType {\n Pick = 'cursor-pick',\n Hide = 'cursor-hide',\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class CursorsService {\n\n // #region private fields\n private _cursorElement: HTMLElement | null = null;\n // #endregion private fields\n\n // #region private methods\n private getCursorElement(): HTMLElement | null {\n if (this._cursorElement) {\n return this._cursorElement;\n } else {\n return this.getMainViewportContainer();\n }\n }\n private getMainViewportContainer() : HTMLElement | null {\n const mainViewportContainer = document.getElementById('mainViewportContainer');\n if (!mainViewportContainer) {\n console.log(\"mainViewportContainer not found\");\n }\n return mainViewportContainer;\n }\n\n private addCursor(cursorType: CursorType) {\n this.getCursorElement()?.classList.add(cursorType);\n }\n\n private removeCursor(cursorType: CursorType) {\n this.getCursorElement()?.classList.remove(cursorType);\n }\n // #endregion\n\n\n // #region public methods\n setCursorElement(cursorElement: HTMLElement | null) {\n this._cursorElement = cursorElement;\n }\n\n showPickCursor(show: boolean) {\n if (show) {\n this.addCursor(CursorType.Pick)\n } else {\n this.removeCursor(CursorType.Pick);\n }\n }\n\n showHideCursor(show: boolean) {\n if (show) {\n this.addCursor(CursorType.Hide)\n } else {\n this.removeCursor(CursorType.Hide);\n }\n }\n // #endregion\n}\n","import { Directive, ElementRef, HostListener, Input, Renderer2, inject } from '@angular/core';\n\n@Directive({\n selector: '[libDraggableComponent]',\n standalone: true\n})\nexport class ComponentDraggableDirective {\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n\n private _isDraggingActive = false;\n private _isDragging = false;\n\n startX: number = 0;\n startY: number = 0;\n\n constructor() {\n if (!this._isDraggingActive) return;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n this.renderer.setStyle(this.el.nativeElement, 'user-drag', 'none');\n }\n\n @Input() set libDraggableComponent(condition: boolean) {\n const element = this.el.nativeElement;\n this._isDraggingActive = condition;\n if (condition) {\n this.renderer.setStyle(element, 'cursor', 'grab');\n this.renderer.setStyle(element, 'user-drag', 'none');\n } else {\n this.renderer.setStyle(element, 'cursor', 'unset');\n this.renderer.setStyle(element, 'user-drag', 'auto');\n }\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent) {\n if (!this._isDraggingActive) return;\n this.startX = event.clientX;\n this.startY = event.clientY;\n this._isDragging = true;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grabbing');\n event.preventDefault();\n }\n\n @HostListener('document:mouseup')\n onMouseUp() {\n if (!this._isDraggingActive) return;\n if (this._isDragging) {\n this._isDragging = false;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n }\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this._isDraggingActive) return;\n\n if (this._isDragging) {\n const newX = this.startX - event.clientX;\n const newY = this.startY - event.clientY;\n\n this.startX = event.clientX;\n this.startY = event.clientY;\n\n const top = this.el.nativeElement.offsetTop - newY;\n const left = this.el.nativeElement.offsetLeft - newX;\n\n this.renderer.setStyle(this.el.nativeElement, 'position', 'absolute');\n this.renderer.setStyle(this.el.nativeElement, 'left', `${left}px`);\n this.renderer.setStyle(this.el.nativeElement, 'top', `${top}px`);\n }\n }\n\n\n /* touch mode */\n @HostListener('touchstart', ['$event']) //corresponding to mousedown\n onTouchStart(event: TouchEvent) {\n if (!this._isDraggingActive) return;\n this.startX = event.targetTouches[0].pageX;\n this.startY = event.targetTouches[0].pageY;\n this._isDragging = true;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grabbing');\n }\n\n @HostListener('document:touchmove', ['$event']) //corresponding to mousemove\n onTouchMove(event: TouchEvent) {\n if (!this._isDraggingActive) return;\n\n if (this._isDragging) {\n const newX = this.startX - event.targetTouches[0].pageX;\n const newY = this.startY - event.targetTouches[0].pageY;\n\n this.startX = event.targetTouches[0].pageX;\n this.startY = event.targetTouches[0].pageY;\n\n const top = this.el.nativeElement.offsetTop - newY;\n const left = this.el.nativeElement.offsetLeft - newX;\n\n this.renderer.setStyle(this.el.nativeElement, 'position', 'absolute');\n this.renderer.setStyle(this.el.nativeElement, 'left', `${left}px`);\n this.renderer.setStyle(this.el.nativeElement, 'top', `${top}px`);\n }\n }\n\n @HostListener('document:touchend', ['$event']) //corresponding to mouseup\n onTouchEnd() {\n if (!this._isDraggingActive) return;\n if (this._isDragging) {\n this._isDragging = false;\n this.renderer.setStyle(this.el.nativeElement, 'cursor', 'grab');\n }\n }\n\n}\n","import { AfterContentInit, ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { IDialogOptions } from './bimplus-general-dialog-config-settings';\nimport { ComponentDraggableDirective } from '../../directives/component-draggable/componentsDraggable.directive';\nimport { CommonModule } from '@angular/common';\nimport { DialogService } from './bimplus-general-overlay-dialog.service';\n\n@Component({\n selector: 'app-general-overlay-dialog',\n imports: [ComponentDraggableDirective, CommonModule],\n templateUrl: './bimplus-general-overlay-dialog.component.html',\n styleUrls: ['./bimplus-general-overlay-dialog.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimportalGeneralOverlayDialogComponent implements OnInit, AfterContentInit {\n private readonly dialogService = inject(DialogService);\n private readonly cdref = inject(ChangeDetectorRef);\n\n\n @ViewChild('dialogRefContainer') genDialogRefContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('dialogOverlay') dialogOverlay!: ElementRef<HTMLDivElement>;\n\n options: IDialogOptions | undefined;\n units: string = 'rem';\n\n ngOnInit(): void {\n this.options = this.dialogService.options;\n }\n\n onClose() {\n this.dialogService.close();\n }\n\n ngAfterContentInit() {\n if (this.options) {\n this.cdref.detectChanges();\n this.setOptions();\n }\n }\n\n setOptions() {\n if (this.options) {\n this.setDimensions();\n this.setPosition();\n this.setOverlay();\n }\n }\n\n private setDimensions() {\n const width = this.options?.width && this.options.width.length > 0 ? this.options.width : 'auto';\n const height = this.options?.height && this.options.height.length > 0 ? this.options.height : 'auto';\n this.genDialogRefContainer.nativeElement.style.width = width;\n this.genDialogRefContainer.nativeElement.style.height = height;\n }\n\n private setPosition() {\n if (this.options?.position === 'middle') {\n this.setPositionsMiddle();\n } else if (this.options?.position === 'unset') {\n this.setPositionsUnset();\n }\n }\n\n setPositionsUnset() {\n if (this.options) {\n this.genDialogRefContainer.nativeElement.style.position = 'fixed';\n const top = this.options?.positionOptions?.top ?? '0' + this.units;\n const bottom = this.options?.positionOptions?.bottom ?? '0' + this.units;\n const left = this.options?.positionOptions?.left ?? '0' + this.units;\n const right = this.options?.positionOptions?.right ?? '0' + this.units;\n\n this.genDialogRefContainer.nativeElement.style.position = 'absolute';\n this.genDialogRefContainer.nativeElement.style.top = top;\n this.genDialogRefContainer.nativeElement.style.left = left;\n this.genDialogRefContainer.nativeElement.style.bottom = bottom;\n this.genDialogRefContainer.nativeElement.style.right = right;\n\n this.options.overlayVisibilityEnabled = this.options.overlayVisibilityEnabled ? this.options.overlayVisibilityEnabled : false;\n this.options.overlayClickEnabled = this.options.overlayVisibilityEnabled && this.options.overlayClickEnabled ? this.options.overlayClickEnabled : false;\n }\n }\n\n setPositionsMiddle() {\n if (this.options) {\n this.genDialogRefContainer.nativeElement.className = this.genDialogRefContainer.nativeElement.className + ' middle';\n this.options.draggable = false;\n this.options.overlayVisibilityEnabled = this.options.overlayVisibilityEnabled ? this.options.overlayVisibilityEnabled : true;\n this.options.overlayClickEnabled = this.options.overlayVisibilityEnabled && this.options.overlayClickEnabled ? this.options.overlayClickEnabled : false;\n }\n }\n\n private setOverlay() {\n if (this.options?.overlayVisibilityEnabled) {\n this.dialogOverlay.nativeElement.style.backgroundColor = 'var(--modal-fade-in-background-color)';\n }\n }\n\n onKeyPress(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n if (this.options?.overlayClickEnabled) {\n this.dialogService.close();\n }\n }\n }\n\n}\n\n\n","<div class=\"general-dialog-wrapper\" #generalDialogWrapper *ngIf=\"options\">\n <section class=\"general-dialog-content\" #dialogRefContainer\n [libDraggableComponent]=\"options.draggable ? true : false\">\n <ng-content></ng-content>\n </section>\n <div class=\"general-dialog-overlay\" #dialogOverlay (click)=\"onClose()\" (keypress)=\"onKeyPress($event)\"\n [style.display]=\"options.overlayVisibilityEnabled ? 'block' : 'none'\">\n </div>\n</div>\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable, Type, inject } from '@angular/core';\nimport { IDialogInputData, IDialogOptions } from './bimplus-general-dialog-config-settings';\nimport { Subject } from 'rxjs';\nimport { BimportalGeneralOverlayDialogComponent } from './bimplus-general-overlay-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n\n\n generalDialogComponentBody!: ComponentRef<unknown>; //here will be rendered every component we call inside general dialog\n generalDialog!: ComponentRef<BimportalGeneralOverlayDialogComponent>; //here will be rendered every component we call inside general dialog\n private _isDialogOpen = false;\n\n inputData: unknown;\n private readonly outputData = new Subject<unknown>();\n\n options: IDialogOptions | undefined;\n\n open(componentBody: Type<unknown>, data: IDialogInputData) { //todo pass data to second component\n if (data?.options) {\n this.initializeSettings(data);\n this.createComponentsRef(componentBody); //componentBody is component which is added inside to general dialog and rendered\n }\n }\n\n initializeSettings(data: IDialogInputData) {\n try {\n this.inputData = data?.data;\n this.options = data.options;\n } catch (e) {\n console.log('Missing data in open method', e);\n }\n\n }\n\n createComponentsRef(componentBody: Type<unknown>) {\n this.generalDialogComponentBody = createComponent(componentBody, {\n environmentInjector: this.injector,\n });\n\n this.generalDialog = createComponent(BimportalGeneralOverlayDialogComponent, {\n environmentInjector: this.injector,\n projectableNodes: [[this.generalDialogComponentBody.location.nativeElement]],\n });\n\n document.body.appendChild(this.generalDialog.location.nativeElement);\n\n this.appRef.attachView(this.generalDialogComponentBody.hostView); //first render body of general dialog, it can be any component we create\n this.appRef.attachView(this.generalDialog.hostView); //then render body of general dialog, which we can add in any component, can have different content\n this._isDialogOpen = true;\n }\n\n close(outputData?: unknown) {\n if (outputData) {\n this.setOutputData(outputData);\n } else {\n this.resetSettings();\n }\n this.generalDialogComponentBody.location.nativeElement.remove();\n this.generalDialog.location.nativeElement.remove();\n this._isDialogOpen = false;\n }\n\n resetSettings() {\n this.inputData = null;\n this.options = undefined;\n }\n\n isDialogOpened() {\n return this._isDialogOpen;\n }\n\n setOutputData(data: unknown): void {\n if (this._isDialogOpen) {\n this.outputData.next(data);\n }\n }\n\n getOutputData(): Subject<unknown> {\n return this.outputData;\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, Input, TemplateRef, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\n\nexport interface WarningDialogInputData {\n title: string;\n message: string;\n buttonsRef?: TemplateRef<unknown>;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-warning',\n imports: [CommonModule, TranslateModule, BimplusButtonsRowComponent],\n templateUrl: './bimplus-overlay-dialog-warning.component.html',\n styleUrls: ['./bimplus-overlay-dialog-warning.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogWarningComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n private _title: string = '';\n private _message: string = '';\n private readonly _data: WarningDialogInputData | undefined;\n protected readonly buttonsRef: TemplateRef<unknown> | null = null;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: \"warningDialogAcceptButton\",\n title: this.translateService.instant('_Ok'),\n tooltip: this.translateService.instant('_Ok'),\n disabled: false,\n buttonStyle: 'primary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this._data = this.dialogService.inputData as WarningDialogInputData;\n this.buttonsRef = this._data?.buttonsRef ?? null;\n this._title = this._data?.title || '';\n this._message = this._data?.message || '';\n }\n\n close() {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n buttonRowButtonClicked(): void {\n this.close();\n\n this.acceptCallback?.();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\"></div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{ title }}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div\n class=\"overlay-dialog-container_content_msg\"\n [innerHTML]=\"this.message\"\n ></div>\n <section class=\"overlay-dialog-container_content_buttons\">\n @if(buttonsRef) {\n <ng-container\n *ngTemplateOutlet=\"buttonsRef; context: { close: close.bind(this) }\"\n ></ng-container>\n } @else {\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked()\"\n />\n </div>\n }\n </section>\n </div>\n</div>\n","import { Component, ViewEncapsulation, Input, OnInit, OnDestroy, HostListener } from '@angular/core';\nimport { XDraggableDirective } from '../../directives/x-draggable.directive';\nimport { PxsuffixPipe } from '../../pipes/pxsuffix.pipe';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-resizable-panel',\n imports: [CommonModule, XDraggableDirective, PxsuffixPipe],\n templateUrl: './resizable-panel.component.html',\n styleUrl: './resizable-panel.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ResizablePanelComponent implements OnInit, OnDestroy {\n @Input() position: 'left' | 'right' = 'right';\n @Input() hasDraggableHandle: boolean = false;\n @Input() hasDraggableBorder: boolean = false;\n @Input() minWidth: number | (() => number) | undefined = 350;\n @Input() maxWidth: number | (() => number) | undefined;\n @Input() defaultWidth: number = 350;\n // Function to determine if resizing is allowed\n @Input() canResize: (currentWidth: number, deltaX: number) => boolean = () => true;\n\n drawerWidth: number = this.defaultWidth;\n drawerExpanded: boolean = true;\n\n ngOnInit() {\n this.drawerWidth = this.defaultWidth;\n window.addEventListener('resize', this.handleWindowResize);\n }\n\n ngOnDestroy() {\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n applyWidthConstraints() {\n const minWidth = typeof this.minWidth === 'function' ? this.minWidth() : this.minWidth;\n const maxWidth = typeof this.maxWidth === 'function' ? this.maxWidth() : this.maxWidth;\n\n if (minWidth && this.drawerWidth < minWidth) {\n this.drawerWidth = minWidth;\n } else if (maxWidth && this.drawerWidth > maxWidth) {\n this.drawerWidth = maxWidth;\n }\n }\n\n @HostListener('window:resize')\n handleWindowResize = (): void => {\n this.applyWidthConstraints();\n };\n\n _toggleDrawer() {\n this.drawerExpanded = !this.drawerExpanded;\n if (!this.drawerExpanded) {\n return;\n }\n\n this.applyWidthConstraints();\n }\n\n _onResizeWidth(event: number): void {\n const deltaX = event;\n\n let newWidth = this.drawerWidth;\n if (this.position === 'left') {\n newWidth += deltaX;\n } else if (this.position === 'right') {\n newWidth -= deltaX;\n }\n\n if (this.canResize?.(this.drawerWidth, deltaX) !== false) {\n this.drawerWidth = newWidth;\n\n this.applyWidthConstraints();\n }\n }\n}\n","<div\n class=\"resizable-panel-drawer\"\n [style.width] = \"drawerWidth | pxsuffix\"\n [ngClass]=\"drawerExpanded ? '' : 'hidden'\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n>\n <slot></slot>\n @if (drawerExpanded) {\n @if (hasDraggableBorder) {\n <div\n xDraggable\n class=\"resizable-panel-resize-border\"\n (dragging)=\"_onResizeWidth($event)\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n @if (hasDraggableHandle) {\n <div\n xDraggable\n class=\"resizable-panel-resize-handle\"\n (dragging)=\"_onResizeWidth($event)\"\n (clicked)=\"_toggleDrawer()\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n }\n</div>\n@if (!drawerExpanded) {\n @if (hasDraggableHandle) {\n <div\n class=\"resizable-panel-resize-handle collapsed\"\n (click)=\"_toggleDrawer()\"\n (keypress)=\"_toggleDrawer()\"\n [class.position-right]=\"position === 'right'\"\n [class.position-left]=\"position === 'left'\"\n >\n </div>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostListener, Input, ViewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'lib-bimplus-link-tooltip-message',\n templateUrl: './bimplus-link-tooltip-message.component.html',\n styleUrls: ['./bimplus-link-tooltip-message.component.less'],\n imports: [CommonModule],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusLinkTooltipMessageComponent implements AfterViewInit {\n\n @ViewChild('messageLink') messageLink!: ElementRef<HTMLElement>;\n\n private _enableCopyPressKeys = true;\n private _titleHeader = '';\n private _link = '';\n\n @Input()\n get link(): string {\n return this._link;\n }\n set link(value: string) {\n this._link = value;\n }\n\n @Input()\n get titleHeader(): string {\n return this._titleHeader;\n }\n set titleHeader(value: string) {\n this._titleHeader = value;\n }\n\n @Input()\n get enableCopyPressKeys(): boolean {\n return this._enableCopyPressKeys;\n }\n set enableCopyPressKeys(value: boolean) {\n this._enableCopyPressKeys = value;\n }\n\n @Input()\n arrowPosition = 'right-arrow';\n\n @Input()\n onClose?: () => void;\n\n ngAfterViewInit(): void {\n this.selectText(this.messageLink.nativeElement);\n }\n\n selectText(node: HTMLElement) {\n if (window.getSelection) {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(node);\n selection?.removeAllRanges();\n selection?.addRange(range);\n } else {\n console.log(\"Could not select text in node: Unsupported browser.\");\n }\n }\n\n close() {\n this.onClose?.();\n }\n\n @HostListener('window:keydown.control.c', ['$event'])\n onKeyPress() {\n if (this.messageLink && this.enableCopyPressKeys) {\n navigator.clipboard.writeText(this.messageLink.nativeElement.innerText).catch((err) => {\n console.error(\"Could not copy text in node.\", err);\n });\n }\n }\n}","<div class=\"link-content\" #linkContent>\n <div\n class=\"link-tooltip-message\"\n #linkTooltipMessage\n >\n <div class=\"header\">\n <span class=\"title\">{{titleHeader}}</span>\n <span\n class='tooltip-cross-icon close'\n (click)=\"close()\"\n (keydown)=\"close()\"\n >✕︎</span>\n </div>\n <div class=\"content\">\n <div\n class=\"link\"\n #messageLink\n [innerHTML]=\"link\">\n </div>\n </div>\n </div>\n <div\n class=\"arrow\"\n [ngClass]=\"arrowPosition\"\n ></div>\n</div>\n<div\n class=\"link-tooltip-message-overlay\"\n (click)=\"close()\"\n (keydown)=\"close()\"\n></div>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, SimpleChanges, OnChanges } from '@angular/core';\nimport { CreateLinkData, SelectedObject } from './object-properties-header.interface';\nimport { CommonModule, NgIf} from '@angular/common';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormsModule } from '@angular/forms';\nimport { fireEvent } from '../../utils/utils';\nimport {\n TranslateModule\n , TranslateService\n} from '@ngx-translate/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { BimplusLinkTooltipMessageComponent } from '../bimplus-link-tooltip-message/bimplus-link-tooltip-message.component';\n\n@Component({\n selector: 'lib-object-properties-header',\n imports: [\n CommonModule,\n FormsModule,\n NgSelectModule,\n TranslateModule,\n BimplusLinkTooltipMessageComponent,\n NgIf\n ],\n providers: [TranslateService],\n templateUrl: './object-properties-header.component.html',\n styleUrl: './object-properties-header.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesHeaderComponent extends BimplusLocalizedWidgetComponent implements OnChanges {\n constructor(){\n super();\n }\n\n @Output() selectedObject = new EventEmitter<SelectedObject>();\n\n @Output() closePropertiesPanel = new EventEmitter();\n\n @Input() selectedObjects: Array<SelectedObject> = [];\n\n _activeObject: SelectedObject | null = null;\n openLinkMessage: boolean = false;\n\n @Input()\n onOpenLink?: () => void;\n\n set activeObject(value: SelectedObject | null) {\n this._activeObject = value;\n fireEvent(this, \"selectedObject\", value);\n }\n\n get activeObject(): SelectedObject | null {\n return this._activeObject;\n }\n\n private _linkData: CreateLinkData = {\n link: '',\n titleHeader: '',\n linkMessageVisible: false,\n enableCopyPressKeys: false\n };\n\n @Input()\n get linkData(): CreateLinkData {\n return this._linkData;\n }\n set linkData(value: CreateLinkData) {\n this._linkData = value;\n }\n\n _closePropertiesPanel(event: Event) {\n fireEvent(this, \"closePropertiesPanel\", event);\n event.stopPropagation();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes['selectedObjects']) {\n return;\n }\n const previousValue: SelectedObject[] | null = changes['selectedObjects'].previousValue;\n const currentValue: SelectedObject[] | null = changes['selectedObjects'].currentValue;\n if(currentValue && currentValue.length > 0) {\n this.activeObject = currentValue[currentValue.length - 1];\n }\n console.log(`Data changed from ${previousValue} to ${currentValue}`);\n }\n\n openLink() {\n this.openLinkMessage = true;\n this.onOpenLink?.();\n }\n\n closeLink = () => {\n this.openLinkMessage = false;\n }\n}\n","<div class=\"object-properties-header\">\n <div class=\"object-properties-header-object\">\n <div class=\"object-properties-header-object-select\">\n <ng-select class=\"object-properties-header-object-select-dropdown\" [(ngModel)]=\"activeObject\" [clearable]=\"false\" [searchable]=\"false\">\n <ng-option *ngFor=\"let object of selectedObjects\" [value]=\"object\">\n {{object.type}}\n @if(object.name) {\n ({{object.name}})\n }\n </ng-option>\n </ng-select>\n </div>\n </div>\n <div\n class=\"object-properties-header-link-icon\"\n title=\"{{'_Create link' | translate}}\"\n (click)=\"openLink()\"\n (keydown)=\"openLink()\"\n >\n </div>\n <lib-bimplus-link-tooltip-message\n *ngIf=\"openLinkMessage\"\n [enableCopyPressKeys]=\"linkData.enableCopyPressKeys\"\n [titleHeader]=\"linkData.titleHeader\"\n [link]=\"linkData.link\"\n [onClose]=\"closeLink\"\n />\n <div\n class=\"object-properties-header-close-icon\"\n (click)=\"_closePropertiesPanel($event)\"\n (keydown)=\"_closePropertiesPanel($event)\"\n title=\"{{'_Close_properties_panel_title' | translate}}\"\n >\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'round',\r\n standalone: true\r\n})\r\nexport class RoundPipe implements PipeTransform {\r\n\r\n transform(value: string, decimal: number): string {\r\n const num = parseFloat(value);\r\n const dec = decimal;\r\n\r\n const mult = Math.pow(10, dec);\r\n\r\n return \"\" + Math.round(num * mult) / mult;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObjectAttribute } from '../components/object-properties/object-properties.interface';\nimport { RoundPipe } from './round.pipe';\nimport moment from 'moment';\nimport 'moment/min/locales';\n\n\n@Pipe({\n name: 'getAttributeValueAsString',\n standalone: true\n})\nexport class GetAttributeValueAsString implements PipeTransform {\n\n constructor() {\n const locale = window.navigator.language;\n moment.locale(locale);\n }\n\n _transformDoubleToString(value: ObjectAttribute): string {\n return new RoundPipe().transform(value.value, value.decimal || 2);\n }\n\n _transformDoubleEnumerationToString(value: ObjectAttribute): string {\n if(!value.enumdefinition) {\n return '';\n }\n const _retval = value.enumdefinition[Number(value.value)];\n if(_retval) {\n return `${_retval}`;\n }\n return '';\n }\n\n _transformDatetimeToString(value: ObjectAttribute): string {\n const localeDate: string = moment(value.value).format('L')\n if(localeDate) {\n return localeDate;\n }\n return `${value.value}`;\n }\n\n _transformGUIDToString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformEnumerationToString(value: ObjectAttribute): string {\n if(value.control && /^Enumeration$/i.test(value.control)) {\n if(!value.enumdefinition) {\n return '';\n }\n const _retVal = value.enumdefinition[Number(value.value)];\n if(_retVal) {\n return `${_retVal}`;\n }\n return '';\n }\n return `${value.value}`;\n }\n\n _transformGUIDEnumerationToString(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformIntToString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformIntEnumerationToString(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformString(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformStringEnumeration(value: ObjectAttribute): string {\n return this._transformEnumerationToString(value);\n }\n\n _transformStringCombobox(value: ObjectAttribute): string {\n if(value.control && /^Combobox$/i.test(value.control)) {\n return `${value.value}`;\n }\n return `${value.value}`;\n }\n\n _transformBooleanToString(value: ObjectAttribute): string {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return \"True\";\n }\n return \"False\";\n }\n\n transform(value: ObjectAttribute): string {\n const _value = value.value;\n if (this.isEmpty(_value)) {\n return '';\n }\n\n if (this.isDouble(value)) {\n return this._transformDoubleToString(value);\n }\n\n if (this.isDoubleEnumeration(value)) {\n return this._transformDoubleEnumerationToString(value);\n }\n\n if (this.isDatetime(value)) {\n return this._transformDatetimeToString(value);\n }\n\n if (this.isGUID(value)) {\n return this._transformGUIDToString(value);\n }\n\n if (this.isGUIDEnumeration(value)) {\n return this._transformGUIDEnumerationToString(value);\n }\n\n if (this.isInt(value)) {\n return this._transformIntToString(value);\n }\n\n if (this.isIntEnumeration(value)) {\n return this._transformIntEnumerationToString(value);\n }\n\n if (this.isString(value)) {\n return this._transformString(value);\n }\n\n if (this.isStringEnumeration(value)) {\n return this._transformStringEnumeration(value);\n }\n\n if (this.isStringCombobox(value)) {\n return this._transformStringCombobox(value);\n }\n\n if (this.isBooleanCheckbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n if (this.isBooleanTextbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n return value.value;\n }\n\n private isEmpty(value: string | undefined | null): boolean {\n return value === undefined || value === null || value === '';\n }\n\n private isDouble(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type) && !value.control;\n }\n\n private isDoubleEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isDatetime(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^datetime$/i.test(value.type) && !value.control;\n }\n\n private isGUID(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type) && !value.control;\n }\n\n private isGUIDEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isInt(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type) && !value.control;\n }\n\n private isIntEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isString(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type) && !value.control;\n }\n\n private isStringEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isStringCombobox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^combobox$/i.test(value.control);\n }\n\n private isBooleanCheckbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type)\n && typeof value.control === 'string' && /^checkbox$/i.test(value.control);\n }\n\n private isBooleanTextbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type) && !value.control;\n }\n}\n","import { ObjectAttribute } from '../components/object-properties/object-properties.interface';\n\nexport function isObjectPropertyValueBlank(attrib: ObjectAttribute): boolean {\n return attrib.value === undefined\n || attrib.value === null\n || attrib.value === ''\n || attrib.value === '\\n\\t'\n || attrib.value === '\\n'\n || attrib.value === '\\t';\n}","import { Input, Component, ViewEncapsulation, signal } from '@angular/core';\nimport isURL from 'validator/lib/isURL';\n\n@Component({\n selector: 'lib-object-property-value',\n standalone: true,\n templateUrl: './object-property-value.component.html',\n styleUrls: ['./object-property-value.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ObjectPropertyValueComponent {\n protected _tooltip = signal<string>('');\n protected _value = signal<string>('');\n protected _valueIsUrl = signal<boolean>(false);\n protected _decoratedHyperlink = signal<string>('');\n\n @Input() set value(value: string) {\n this._value.set(value);\n if(this._isUrl(value)) {\n this._valueIsUrl.set(true);\n this._decoratedHyperlink.set(this._decorateHyperlink(value));\n }\n else {\n this._valueIsUrl.set(false);\n }\n }\n\n @Input() set tooltip(tooltip: string) {\n this._tooltip.set(tooltip);\n }\n\n private _isUrl(url: string): boolean {\n if (!url) {\n return false;\n }\n const link = url.trim();\n if(!/^http(s?):\\/\\//.exec(link) && !/^www\\./.exec(link)) {\n return false;\n }\n\n return isURL(link);\n }\n\n private _decorateHyperlink(url: string): string {\n if(!this._isUrl(url)) {\n return '';\n }\n let link = url.trim();\n\n if (link && !/^http(s?):\\/\\//.exec(link)) {\n link = 'https://' + link;\n }\n return link;\n }\n\n constructor() { }\n}\n","@if(_valueIsUrl()) {\n <a class=\"link-detect-automatically\" target=\"_blank\" rel=\"noopener\" href={{_decoratedHyperlink()}} title=\"{{_tooltip()}}\">{{_value()}}</a>\n}\n@else {\n <div class=\"value\" title=\"{{_tooltip()}}\">\n {{_value()}}\n </div>\n}\n","import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, signal, booleanAttribute, ViewChild, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-text-field',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-text-field.component.html',\n styleUrl: './bimplus-input-text-field.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputTextFieldComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputTextFieldComponent implements ControlValueAccessor {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _showClearButton = signal<boolean>(false);\n @Input({ transform: booleanAttribute }) set showClearButton(show_clear_button: boolean) {\n this._showClearButton.set(show_clear_button);\n }\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n value: string = '';\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _clearValue(event: Event): void {\n this.value = \"\";\n this.inputElement.nativeElement.focus();\n this.onChange(this.value);\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div\n class=\"text-input-wrapper\"\n [class.invalid-value]=\"!_validValue()\"\n [class.with-clear-button]=\"_showClearButton()\"\n>\n <input\n type=\"text\"\n [value]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\"\n class=\"text-input\"\n #inputValueBox\n />\n @if(_showClearButton()) {\n <div\n class=\"clear-button\"\n (click)=\"_clearValue($event)\"\n (keydown)=\"handleKeyDown($event)\"\n >\n </div>\n }\n</div>\n","import {\n Component\n , EventEmitter\n , forwardRef\n , Output\n , ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-checkbox',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-checkbox.component.html',\n styleUrl: './bimplus-input-checkbox.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputCheckboxComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputCheckboxComponent implements ControlValueAccessor {\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n value: boolean = false;\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: boolean) => {\n };\n onTouched = () => {\n };\n\n // Called when the checkbox value changes\n onCheckboxChange(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n this.value = checked;\n this.onChange(checked); // Notify the parent form about the change\n this.onTouched(); // Mark the control as touched\n }\n\n writeValue(value: boolean): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n toggleAttributeValue() {\n this.value = !this.value;\n this.onChange(this.value);\n this.onTouched();\n }\n}\n","<div\n class=\"select-checkbox\"\n>\n <div>\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"onCheckboxChange($event)\"\n (click)=\"toggleAttributeValue()\"\n (keypress)=\"toggleAttributeValue()\"\n >\n <span></span>\n </div>\n</div>\n","import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, signal, booleanAttribute, ViewChild, ElementRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-bimplus-input-number',\n imports: [\n ReactiveFormsModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-number.component.html',\n styleUrl: './bimplus-input-number.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputNumberComponent),\n multi: true,\n },\n ]\n})\nexport class BimplusInputNumberComponent implements ControlValueAccessor {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n @Input() minValue: string = '';\n @Input() maxValue: string = '';\n\n value: number = 0;\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: number) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: number): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = parseInt(input.value);\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div\n class=\"text-input-wrapper\"\n [class.invalid-value]=\"!_validValue()\"\n>\n <input\n type=\"number\"\n [value]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n [disabled]=\"isDisabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\"\n class=\"text-input\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n #inputValueBox\n />\n</div>\n","import { Component\n , EventEmitter\n , forwardRef\n , Input\n , Output\n , ViewEncapsulation\n , signal\n , booleanAttribute\n , ViewChild\n , ElementRef\n , OnInit\n} from '@angular/core';\nimport { ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n , FormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { BehaviorSubject } from 'rxjs';\nimport { CommonModule} from '@angular/common';\n\ninterface EnumDefinition {\n id: string;\n name: string;\n};\n\n@Component({\n selector: 'lib-bimplus-input-combobox',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgSelectModule,\n TranslateModule\n ],\n templateUrl: './bimplus-input-combobox.component.html',\n styleUrl: './bimplus-input-combobox.component.less',\n encapsulation: ViewEncapsulation.ShadowDom,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputComboboxComponent),\n multi: true,\n },\n ]\n})\n\nexport class BimplusInputComboboxComponent implements ControlValueAccessor, OnInit {\n @ViewChild('inputValueBox', { static: false }) inputElement!: ElementRef;\n @Input() placeholder: string = '';\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n private _type: string = 'enum';\n protected _enumdefinition: Array<EnumDefinition> = [];\n @Input() set enumdefinition(enum_definition: Record<number | string, string> | undefined | Array<string>) {\n if(!enum_definition) {\n return;\n }\n if(Array.isArray(enum_definition)) {\n enum_definition.forEach((value, index) => {\n this._enumdefinition.push({ id: index.toString(), name: value });\n });\n this._type = 'array';\n return;\n }\n Object.keys(enum_definition).forEach((key) => {\n if(typeof key === 'string') {\n this._enumdefinition.push({ id: key, name: enum_definition[key] });\n }\n if(typeof key === 'number') {\n this._enumdefinition.push({ id: key, name: enum_definition[Number(key)] });\n }\n\n });\n }\n\n private _setActiveEnumValue() {\n const sel: EnumDefinition | undefined = this._enumdefinition.find((enumDef) => enumDef.id === this._selectedValue);\n if(!sel){\n return;\n }\n this.activeEnum = sel\n }\n\n _setActiveArrayValue() {\n const sel: EnumDefinition | undefined = this._enumdefinition.find((enumDef) => enumDef.name === this._selectedValue);\n if(!sel){\n return;\n }\n this.activeEnum = sel\n }\n\n private _selectedValue: string | null = null;\n @Input() set selectedValue(value: string | null) {\n this._selectedValue = value;\n if(this._type === 'enum') {\n this._setActiveEnumValue();\n return;\n }\n if(this._type === 'array') {\n this._setActiveArrayValue();\n }\n }\n\n ngOnInit() {\n this.activeEnumSubject$.subscribe({\n next: (value) => {\n if(this._type === 'enum') {\n this.value = value?.id ?? '';\n this.onChange(this.value);\n }\n if(this._type === 'array') {\n this.value = value?.name ?? '';\n this.onChange(this.value);\n }\n }\n });\n }\n\n set activeEnum(value : EnumDefinition | null){\n this.activeEnumSubject$.next(value);\n }\n\n get activeEnum() : EnumDefinition | null {\n return this.activeEnumSubject$.getValue();\n }\n\n activeEnumSubject$ = new BehaviorSubject<EnumDefinition | null> (null);\n\n \n value: string = '';\n isDisabled: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n }\n\n handleBlur(): void {\n this.onTouched();\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n}\n","<div class=\"enum-wrapper\" [class.invalid-value]=\"!_validValue()\">\n <div class=\"double-enumeration\">\n <ng-select\n class=\"enum-dropdown\"\n [(ngModel)]=\"activeEnum\"\n [clearable]=\"false\"\n [searchable]=\"_enumdefinition.length >= 10\"\n (keydown)=\"handleKeyDown($event)\"\n >\n <ng-option *ngFor=\"let val of _enumdefinition\" [value]=\"val\">{{\n val.name\n }}</ng-option>\n </ng-select>\n </div>\n</div>\n","import { Component,\n OnInit,\n forwardRef,\n Input,\n Output,\n booleanAttribute,\n signal,\n EventEmitter,\n ViewChild,\n ElementRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor\n , NG_VALUE_ACCESSOR\n , ReactiveFormsModule\n , FormsModule\n} from \"@angular/forms\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { CommonModule} from '@angular/common';\nimport { MatNativeDateModule, DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MomentDateModule, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter} from '@angular/material-moment-adapter';\nimport { MatDatepickerModule, MatDatepickerInputEvent } from '@angular/material/datepicker';\n\nexport const MY_DATE_FORMATS = {\n parse: {\n dateInput: 'L', \n },\n display: {\n dateInput: 'L', \n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'L',\n monthYearA11yLabel: 'MMM YYYY',\n }\n};\n\n@Component({\n selector: 'lib-bimplus-input-date',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n MatDatepickerModule,\n MomentDateModule,\n MatNativeDateModule\n ],\n templateUrl: './bimplus-input-date.component.html',\n styleUrls: ['./bimplus-input-date.component.less'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BimplusInputDateComponent),\n multi: true,\n },\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_DATE_FORMATS, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n },\n {\n provide: MAT_DATE_FORMATS,\n useValue: MY_DATE_FORMATS\n },\n {\n provide: MAT_DATE_LOCALE,\n useValue: navigator.language\n }, // Set the locale here!\n {\n provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS,\n useValue: {\n useUtc: false\n }\n },\n ],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusInputDateComponent implements ControlValueAccessor, OnInit {\n @ViewChild('inputDateBox', { static: false }) inputDateBox!: ElementRef;\n \n value: string = '';\n dateValue: Date | null = new Date();\n isDisabled: boolean = false;\n\n @Output() enterKeyPressed = new EventEmitter<void>();\n\n protected _showClearButton = signal<boolean>(false);\n @Input({ transform: booleanAttribute }) set showClearButton(show_clear_button: boolean) {\n this._showClearButton.set(show_clear_button);\n }\n\n protected _validValue = signal<boolean>(true);\n @Input({ transform: booleanAttribute }) set validValue(valid_value: boolean) {\n this._validValue.set(valid_value);\n }\n\n @Input() minValue: string = '';\n @Input() maxValue: string = '';\n\n constructor() { }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange = (value: string) => {\n };\n onTouched = () => {\n };\n\n writeValue(value: string): void {\n this.value = value;\n this.dateValue = new Date(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n private readonly STYLE_ID = 'datepicker-styles';\n private injectGlobalStyles(): void {\n // Check if the style tag already exists\n if (document.getElementById(this.STYLE_ID)) {\n return; // Style already injected, skip\n }\n\n // Create the style tag\n const styleElement = document.createElement('style');\n styleElement.id = this.STYLE_ID;\n\n styleElement.textContent = `\n mat-datepicker-content mat-calendar.bimplus-datepicker {\n background-color: var(--brand-white-color);\n border-color: var(--issue-details-view-select-border-color);\n border: .1rem solid;\n }\n\n mat-calendar.bimplus-datepicker .mat-mdc-button {\n font-size: 1.6rem;\n font-weight: 700;\n }\n mat-calendar.bimplus-datepicker .mat-mdc-button:hover {\n border-radius: 0;\n }\n mat-calendar.bimplus-datepicker mat-calendar-header .mat-calendar-controls {\n margin: 0;\n }\n mat-calendar.bimplus-datepicker mat-calendar-header .mat-calendar-header {\n background-color: rgb(236, 239, 241);\n padding: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content {\n padding: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header{\n height: 2rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header tr{\n height: 2rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-table-header tr th{\n height: 2rem;\n padding: 0;\n font-size: 1.3rem;\n font-weight: 700;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-today {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-month-view .mat-calendar-body tr td.mat-calendar-body-label {\n font-size: 1.3rem;\n font-weight: 700;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-multi-year-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button{\n font-size: 1.3rem;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button .mat-calendar-body-selected {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td button .mat-calendar-body-cell-content.mat-focus-indicator {\n border-radius: 0;\n }\n\n mat-calendar.bimplus-datepicker .mat-calendar-content mat-year-view .mat-calendar-body tr td.mat-calendar-body-label {\n font-size: 1.3rem;\n font-weight: 700;\n }\n `;\n\n // Append the style tag to document.head\n document.head.appendChild(styleElement);\n }\n ngOnInit() {\n this.injectGlobalStyles();\n console.log('BimplusInputDateComponent ngOnInit'); \n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _clearValue(event: Event): void {\n this.value = \"\";\n this.dateValue = null;\n this.onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected _showDatePicker(event: Event): void {\n console.log('BimplusInputDateComponent _showDatePicker');\n }\n \n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter') {\n return;\n }\n this.enterKeyPressed.emit();\n }\n\n onDateChanged(event: MatDatepickerInputEvent<Date>) {\n const selectedDate = event.value;\n\n if (selectedDate) {\n this.value = selectedDate.toISOString();\n this.onChange(this.value);\n console.log('Selected Date (UTC):', selectedDate);\n }\n }\n}\n","<div class=\"date-input-wrapper\">\n <mat-datepicker-toggle matIconPostfix [for]=\"picker\" [disableRipple]=\"true\"></mat-datepicker-toggle>\n <input matInput [matDatepicker]=\"picker\" readonly [(ngModel)]=\"dateValue\" #inputDateBox (dateChange)=\"onDateChanged($event)\" (click)=\"picker.open()\">\n <mat-datepicker #picker [panelClass]=\"'bimplus-datepicker'\"></mat-datepicker>\n <div\n class=\"clear-button\"\n (click)=\"_clearValue($event)\"\n (keydown)=\"handleKeyDown($event)\"\n ></div>\n</div>","import {\n Component\n , Input\n , ViewEncapsulation\n , signal\n} from '@angular/core';\nimport {\n ObjectAttributeGroup\n , ObjectAttribute\n} from '../object-properties/object-properties.interface';\nimport { GetAttributeValueAsString } from '../../pipes/get-attribute-value-as-string.pipe';\nimport { isObjectPropertyValueBlank } from '../../utils/objectProperties';\nimport { ObjectPropertyValueComponent } from './object-property-value/object-property-value.component';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { BimplusInputTextFieldComponent } from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\nimport { BimplusInputCheckboxComponent } from \"../bimplus-input-checkbox/bimplus-input-checkbox.component\";\nimport { BimplusInputNumberComponent } from '../bimplus-input-number/bimplus-input-number.component';\nimport { BimplusInputComboboxComponent } from '../bimplus-input-combobox/bimplus-input-combobox.component';\nimport { BimplusInputDateComponent } from '../bimplus-input-date/bimplus-input-date.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-object-properties-group',\n imports: [\n GetAttributeValueAsString,\n ObjectPropertyValueComponent,\n BimplusInputTextFieldComponent,\n BimplusInputCheckboxComponent,\n BimplusInputNumberComponent,\n BimplusInputComboboxComponent,\n BimplusInputDateComponent,\n ReactiveFormsModule,\n CommonModule\n ],\n templateUrl: './object-properties-group.component.html',\n styleUrls: ['./object-properties-group.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesGroupComponent {\n protected _editMode = signal<boolean>(false);\n\n @Input() set editMode(edit_mode: boolean) {\n this._editMode.set(edit_mode);\n }\n\n @Input() objectPropertiesForm: FormGroup | undefined;\n\n protected _existFormControlForAttibute(attribId: string): boolean {\n if(!this.objectPropertiesForm) {\n return false;\n }\n\n const attrib = this.objectPropertiesForm.get(attribId);\n\n if(!attrib) {\n return false;\n }\n return true;\n }\n\n protected _isValueValid(attribId: string): boolean {\n if(!this.objectPropertiesForm) {\n return false;\n }\n const attrib = this.objectPropertiesForm.get(attribId);\n\n if(!attrib) {\n return false;\n }\n return attrib?.valid;\n }\n\n protected _canUpdateObject = signal<boolean>(false);\n @Input() set canUpdateObject(canUpdateObject: boolean) {\n this._canUpdateObject.set(canUpdateObject);\n }\n\n protected _attributesGroup = signal<ObjectAttributeGroup>({\n name: '',\n attributes: [],\n expanded: false,\n });\n\n @Input() set attributesGroup(value: ObjectAttributeGroup | undefined) {\n if(!value){\n return;\n }\n this._attributesGroup.set(value);\n }\n\n constructor() { }\n\n protected isValueBlank(attrib: ObjectAttribute): boolean {\n return isObjectPropertyValueBlank(attrib);\n }\n protected _isBoleanTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^boolean$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isBoleanCheckBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^boolean$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^checkbox$/i.test(attrib.control));\n }\n protected _isTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isDoubleTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^double$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isIntegerTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^int(32)?$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isGuidTextBox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^guid$/i.test(attrib.type)) && !attrib.control;\n }\n protected _isDoubleEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^double$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isGuidEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^guid$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isIntegerEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^int(32)?$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isStringEnumeration(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^enumeration$/i.test(attrib.control));\n }\n protected _isStringCombobox(attrib: ObjectAttribute): boolean {\n return (typeof attrib.type === 'string' && /^string$/i.test(attrib.type))\n && (typeof attrib.control === 'string' && /^combobox$/i.test(attrib.control));\n }\n protected _isDatetime(attrib: ObjectAttribute): boolean {\n return ((typeof attrib.type === 'string' && /^datetime$/i.test(attrib.type)) && !attrib.control);\n }\n}\n","@if(objectPropertiesForm) {\n <div class=\"object-property-table\"\n [formGroup]=\"objectPropertiesForm\"\n [class.edit-mode] = \"_editMode()\"\n >\n @for (attrib of _attributesGroup().attributes; track attrib) {\n <div class=\"row-wrapper\">\n <div class=\"table-cell object-property-icon uuid-{{attrib.id}}\"></div>\n <div class=\"table-cell object-property-name uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.name}}:</div>\n <div class=\"table-cell object-property-value uuid-{{attrib.id}}\">\n @if(_editMode() && _canUpdateObject() && attrib.isChangeable && _existFormControlForAttibute(attrib.id)) {\n @if(\n _isBoleanTextBox(attrib)\n || _isTextBox(attrib)\n || _isDoubleTextBox(attrib)\n || _isGuidTextBox(attrib)\n ) {\n <lib-bimplus-input-text-field\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [showClearButton]=true\n />\n }\n @else if(\n _isIntegerTextBox(attrib)\n ) {\n <lib-bimplus-input-number\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n minValue=\"{{attrib.minValue}}\"\n maxValue=\"{{attrib.maxValue}}\"\n />\n }\n @else if(\n _isBoleanCheckBox(attrib)\n ) {\n <lib-bimplus-input-checkbox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n />\n }\n @else if(\n _isDoubleEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value | number\"\n />\n }\n @else if(\n _isGuidEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isIntegerEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value | number\"\n />\n }\n @else if(\n _isStringEnumeration(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isStringCombobox(attrib)\n ) {\n <lib-bimplus-input-combobox\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n [enumdefinition]=\"attrib.enumdefinition\"\n [selectedValue]=\"attrib.value\"\n />\n }\n @else if(\n _isDatetime(attrib)\n ) {\n <lib-bimplus-input-date\n class=\"flex-grow\"\n formControlName=\"{{attrib.id}}\"\n [validValue]=\"_isValueValid(attrib.id)\"\n minValue=\"{{attrib.minValue}}\"\n maxValue=\"{{attrib.maxValue}}\"\n [showClearButton]=true\n />\n }\n }\n @else {\n <lib-object-property-value\n value=\"{{attrib | getAttributeValueAsString}}\"\n tooltip=\"{{attrib.tooltip}}\"\n />\n }\n </div>\n <div class=\"table-cell object-property-unit uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.unit}}</div>\n </div>\n }\n </div>\n}\n@else {\n <div class=\"object-property-table\"\n [class.edit-mode] = \"_editMode()\"\n >\n @for (attrib of _attributesGroup().attributes; track attrib) {\n\n @if(!isValueBlank(attrib)) {\n <div class=\"row-wrapper\">\n <div class=\"table-cell object-property-icon uuid-{{attrib.id}}\"></div>\n <div class=\"table-cell object-property-name uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.name}}:</div>\n <div class=\"table-cell object-property-value uuid-{{attrib.id}}\">\n <lib-object-property-value\n value=\"{{attrib | getAttributeValueAsString}}\"\n tooltip=\"{{attrib.tooltip}}\"\n />\n </div>\n <div class=\"table-cell object-property-unit uuid-{{attrib.id}}\" title=\"{{attrib.tooltip}}\">{{attrib.unit}}</div>\n </div>\n }\n }\n </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ObjectAttribute } from '../components/object-properties/object-properties.interface';\nimport { RoundPipe } from './round.pipe';\nimport moment from 'moment';\nimport 'moment/min/locales';\n\n\n@Pipe({\n name: 'getAttributeValue',\n standalone: true\n})\nexport class GetAttributeValue implements PipeTransform {\n\n constructor() {\n const locale = window.navigator.language;\n moment.locale(locale);\n }\n\n _transformDouble(value: ObjectAttribute): string {\n return new RoundPipe().transform(value.value, value.decimal ?? 2);\n }\n\n _transformDoubleEnumeration(value: ObjectAttribute): string {\n return this._transformDouble(value);\n }\n\n _transformDatetime(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformGUID(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformGUIDEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformInt(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformIntEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformString(value: ObjectAttribute): string {\n return value.value;\n }\n\n _transformStringEnumeration(value: ObjectAttribute): string {\n return `${value.value}`;\n }\n\n _transformStringCombobox(value: ObjectAttribute): string {\n if(value.control && /^combobox$/i.test(value.control)) {\n return value.value;\n }\n return '';\n }\n\n _transformBooleanToBoolean(value: ObjectAttribute): boolean {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return true;\n }\n return false;\n }\n\n _transformBooleanToString(value: ObjectAttribute): string {\n if(value.value === '1'\n || /^true$/i.test(value.value)) {\n return \"True\";\n }\n return \"False\";\n }\n\n transform(value: ObjectAttribute): string | boolean {\n const _value = value.value;\n if (this.isEmpty(_value)) {\n return '';\n }\n\n if (this.isDouble(value)) {\n return this._transformDouble(value);\n }\n\n if (this.isDoubleEnumeration(value)) {\n return this._transformDoubleEnumeration(value);\n }\n\n if (this.isDatetime(value)) {\n return this._transformDatetime(value);\n }\n\n if (this.isGUID(value)) {\n return this._transformGUID(value);\n }\n\n if (this.isGUIDEnumeration(value)) {\n return this._transformGUIDEnumeration(value);\n }\n\n if (this.isInt(value)) {\n return this._transformInt(value);\n }\n\n if (this.isIntEnumeration(value)) {\n return this._transformIntEnumeration(value);\n }\n\n if (this.isString(value)) {\n return this._transformString(value);\n }\n\n if (this.isStringEnumeration(value)) {\n return this._transformStringEnumeration(value);\n }\n\n if (this.isStringCombobox(value)) {\n return this._transformStringCombobox(value);\n }\n\n if (this.isBooleanCheckbox(value)) {\n return this._transformBooleanToBoolean(value);\n }\n\n if (this.isBooleanTextbox(value)) {\n return this._transformBooleanToString(value);\n }\n\n return value.value;\n }\n\n private isEmpty(value: string | undefined | null): boolean {\n return value === undefined || value === null || value === '';\n }\n\n private isDouble(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type) && !value.control;\n }\n\n private isDoubleEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^double$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isDatetime(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^datetime$/i.test(value.type) && !value.control;\n }\n\n private isGUID(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type) && !value.control;\n }\n\n private isGUIDEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^guid$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isInt(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type) && !value.control;\n }\n\n private isIntEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^int(32)?$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isString(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type) && !value.control;\n }\n\n private isStringEnumeration(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^enumeration$/i.test(value.control);\n }\n\n private isStringCombobox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^string$/i.test(value.type)\n && typeof value.control === 'string' && /^combobox$/i.test(value.control);\n }\n\n private isBooleanCheckbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type)\n && typeof value.control === 'string' && /^checkbox$/i.test(value.control);\n }\n\n private isBooleanTextbox(value: ObjectAttribute): boolean {\n return typeof value.type === 'string' && /^boolean$/i.test(value.type) && !value.control;\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function doubleValidator(minValue: string, maxValue: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = control.value;\n const isValidDouble = /^[-+]?\\d*?\\.?\\d+?([eE][-+]?\\d+?)?$/.test(value); //Regex for a double\n\n if(!isValidDouble) {\n return { invalidDouble: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if(isNaN(parseFloat(value))) {\n return { invalidDouble: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if (minValue && parseFloat(value) < parseFloat(minValue)) {\n return { invalidDouble: { value: value, message: `Value must be greater than or equal to ${minValue}.` } };\n }\n if (maxValue && parseFloat(value) > parseFloat(maxValue)) {\n return { invalidDouble: { value: value, message: `Value must be less than or equal to ${maxValue}.` } };\n }\n\n return null;\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function integerValidator(minValue: string, maxValue: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValidInteger = /^[+-]?\\d+$/.test(value); //Regex for a integer\n\n if(!isValidInteger) {\n return { invalidInteger: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if(isNaN(parseInt(value))) {\n return { invalidInteger: { value: value, message: `Invalid number format: ${value}.` } };\n }\n\n if (minValue && parseInt(value) < parseInt(minValue)) {\n return { invalidInteger: { value: value, message: `Value must be greater than or equal to ${minValue}.` } };\n }\n if (maxValue && parseInt(value) > parseInt(maxValue)) {\n return { invalidInteger: { value: value, message: `Value must be less than or equal to ${maxValue}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function guidValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValidGuid = /^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$/.test(value); //Regex for a guid\n\n if(!isValidGuid) {\n return { invalidGuid: { value: value, message: `Invalid guid format: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function doubleEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AfterViewInit, Component, effect, ElementRef, Input, OnDestroy, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport * as Renderer from 'bimplus-renderer';\nimport * as THREE from 'three';\nimport * as WebSdk from \"bimplus-websdk\";\nimport {TranslatePipe} from \"@ngx-translate/core\";\nimport { PreviewObject } from './object-preview.interface';\n\n@Component({\n selector: 'lib-object-preview',\n imports: [\n TranslatePipe\n ],\n templateUrl: './object-preview.component.html',\n styleUrls: ['./object-preview.component.less'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ObjectPreviewComponent implements AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef);\n\n private resizeObserver: ResizeObserver | null = null;\n viewport: Renderer.Viewport3D | null = null;\n isLoading = true;\n previousWidth = 0;\n previousHeight = 0;\n resizeTimeout: number | undefined;\n\n @ViewChild('rendererviewport') rendererViewportElement!: ElementRef;\n\n @Input() api: WebSdk.Api | null = null;\n\n @Input()\n set objectId(id: string) {\n this._objectId = id;\n this.onObjectIdChanged();\n }\n\n get objectId(): string | undefined {\n return this._objectId;\n }\n\n private _objectId: string | undefined = undefined;\n\n @Input() revision: number | undefined = undefined;\n @Input() set visibleNode(value: PreviewObject){\n if(this.viewport){\n this.viewport.toggleObjectNode({id:value.id, visible:value.visible});\n }\n }\n @Input() set opaqueNode(value: PreviewObject){ \n if(this.viewport){\n this.viewport.toggleObjectNodeOpacity({id:value.id, opacity:value.opaque});\n }\n\n }\n\n private contentLoader: Renderer.BimplusContentLoader | null = null;\n\n private isRendererInitialized: boolean = false;\n\n constructor() {\n effect(()=>{\n if (this.visibleNode) {\n this.processVisibilityNode(this.visibleNode);\n }\n });\n // React to changes in the `opaqueNode` signal\n effect(() => {\n if (this.opaqueNode) {\n this.processOpacityNode(this.opaqueNode);\n }\n });\n }\n \n // Method to process the node\n processVisibilityNode(node: PreviewObject): void {\n console.log('Processing visbility of node in lib-object-preview:', node); \n }\n processOpacityNode(node: PreviewObject): void {\n console.log('Processing opacity of node in lib-object-preview:', node); \n }\n\n ngAfterViewInit(): void {\n const container = this.el.nativeElement;\n \n // Initialize ResizeObserver\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry?.contentRect?.width;\n\n if (width != this.previousWidth) {\n this.previousWidth = width;\n this.recalculatePreviewSize();\n }\n }\n });\n\n // Start observing the component's main container\n this.resizeObserver.observe(container);\n this.initRenderer();\n\n this.contentLoader = new Renderer.BimplusContentLoader(this.api as WebSdk.Api, this.viewport as Renderer.Viewport3D);\n\n this.isRendererInitialized = true;\n\n this.loadObject();\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n this.viewport?.dispose();\n }\n\n recalculatePreviewSize() {\n clearTimeout(this.resizeTimeout);\n\n this.resizeTimeout = setTimeout(() => {\n const width = this.rendererViewportElement?.nativeElement.offsetWidth;\n const height = this.rendererViewportElement?.nativeElement.offsetHeight;\n\n if (width && height) {\n this.viewport?.setViewportSize(width, height);\n this.viewport?.draw();\n } else {\n console.error(\"Viewport size is zero\");\n }\n }, 1) as unknown as number; // Delay execution to avoid rapid resizing and flickering\n }\n\n metricUnits: Renderer.MeasurementUnits = {\n weight: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'kg',\n },\n length: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n width: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n height: {\n multiplicator: 0.001,\n precision: 2,\n unit: 'm',\n },\n area: {\n multiplicator: 0.000001,\n precision: 2,\n unit: 'm²',\n },\n volume: {\n multiplicator: 1e-9,\n precision: 2,\n unit: 'm³',\n },\n };\n\n imperialUnits: Renderer.MeasurementUnits = {\n length: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n width: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n height: {\n multiplicator: 0.00328083989,\n precision: 2,\n unit: 'feet',\n },\n };\n\n viewportSettings: Renderer.ViewportSettings = {\n defaultOpacity: 0.5,\n disciplineOpacity: 0.1,\n pinSizeScaleFactor: 2,\n maxWebGLBufferSize: 350e12,\n mixedModelMode: true,\n useFrameSelection: false,\n pinFlyToDistance: 20000,\n nearClippingPlane: 0.01,\n slideThmbSize: [180, 112],\n units: {\n mm: this.metricUnits,\n inch: {},\n },\n };\n\n units = {\n Metric: this.metricUnits,\n Imperial: this.imperialUnits,\n };\n\n setAmbientOcclusionOptions() {\n if (!this.viewport) {\n return\n }\n\n const viewportOcclusionData = {\n usage: false,\n usageForInteraction: false,\n useShadows: false,\n useShadowsForInteraction: false,\n lightRotation: Math.PI * 35.00 / 180.0,\n lightElevation: Math.PI * 50.00 / 180.0,\n lightColor: new THREE.Color(1.0, 1.0, 1.0),\n ambientLightColor: new THREE.Color(0.6, 0.6, 0.6),\n };\n this.viewport.setAmbientOcclusionOptions(viewportOcclusionData);\n }\n\n setBackgroundOptions() {\n if (!this.viewport) {\n return\n }\n\n const daySkyBackgroundSetting = {\n name: \"day sky\",\n ambientLightColor: 0x868686,\n backgroundType: Renderer.Background.BackgroundType_LinearGradient,\n backgroundParams: {\n alpha: 1.0,\n colorStops: [\n {\n offset: 0.0,\n color: \"#87CDE9\"\n },\n {\n offset: 0.5104,\n color: \"#DDEDFE\"\n },\n {\n offset: 0.9635,\n color: \"#D3D3D4\"\n }\n ]\n }\n };\n this.viewport.setBackground(daySkyBackgroundSetting.backgroundType, daySkyBackgroundSetting.backgroundParams);\n }\n\n setHoverOption(useHoverEffect: boolean = true) {\n if (!this.viewport) {\n return\n }\n this.viewport.setUseHoverEffect(useHoverEffect);\n }\n\n initRenderer() {\n this.viewport = new Renderer.Viewport3D({\n settings: this.viewportSettings,\n units: this.units.Metric,\n domElementId: \"\",\n GPUPick: true,\n api: this.api as WebSdk.Api,\n name: \"objectPreviewRendererViewport\",\n lookupTextureSize: 32,\n ssaoSupported: false, // Disable SSAO support for object details window\n shadowsSupported: false,\n panningScaleFactor: 4.0, //In case of preview window use bigger panning scale factor\n commandPolicies: {\n CommandSelect: {\n noBubble: true, // Don't do a upwards activation\n noTraverse: true // Don't do a downwards activation\n }\n }\n });\n\n this.setBackgroundOptions();\n this.setHoverOption();\n this.viewport.draw();\n\n if (this.viewport?.domElement) {\n this.viewport.domElement.id = \"objectPreviewRendererViewport\";\n const nativeElement = this.el.nativeElement?.shadowRoot || this.el.nativeElement;\n nativeElement?.getElementsByClassName?.(\"rendered-preview\")[0]?.appendChild?.(this.viewport.domElement);\n } else {\n console.error(\"no dom element present for renderer!\");\n }\n }\n\n private onObjectIdChanged() {\n this.loadObject();\n }\n\n private loadObject() {\n if (!this.isRendererInitialized) {\n return;\n }\n\n if (!this.contentLoader) {\n console.error(\"content loader is not there!\");\n return;\n }\n\n console.log('loading object:', this.objectId);\n\n this.isLoading = true;\n\n this.viewport?.resetViewport();\n\n const projectContent = null;\n this.contentLoader.loadObject(this.objectId as string, this.revision, projectContent).then(() => {\n // Set the viewport to project view - reset camera\n this.viewport?.setupProjectView();\n this.isLoading = false;\n });\n }\n}\n","<div class=\"rendered-preview\" #rendererviewport>\n @if (isLoading) {\n <div class=\"loading-spinner-icon\" title=\"{{'_LoadingGeometry' | translate}}\">\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport * as WebSdk from 'bimplus-websdk';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectPropertiesService {\n\n _model: BehaviorSubject<WebSdk.ObjectData | null> = new BehaviorSubject<WebSdk.ObjectData | null>(null);\n\n constructor() { }\n\n get modelValue(): WebSdk.ObjectData | null {\n return this._model.value;\n }\n\n get model$(): BehaviorSubject<WebSdk.ObjectData | null> {\n return this._model;\n }\n\n setModel(model: WebSdk.ObjectData): void {\n this._model.next(model);\n }\n\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function guidEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function stringEnumValidator(enumData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!enumData) {\n return null;\n }\n if(Array.isArray(enumData)) {\n return null;\n }\n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = Object.keys(enumData).includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function stringComboboxValidator(arrayData: Record<number | string, string> | undefined | Array<string>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if(!arrayData) {\n return null;\n }\n if(!Array.isArray(arrayData)) {\n return null;\n }\n \n const value = control.value;\n if(value === null || value === undefined || value === '') {\n return null;\n }\n const isValueFromEnum = arrayData.includes(value);\n\n if(!isValueFromEnum) {\n return { invalidGuid: { value: value, message: `Invalid value: ${value}.` } };\n }\n\n return null;\n };\n}","import { Component, ViewEncapsulation, Input, OnInit, signal, WritableSignal, ChangeDetectorRef, EventEmitter, Output, inject } from '@angular/core';\nimport { ExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ExpansionPanelHeaderComponent } from '../expansion-panel-header/expansion-panel-header.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n ObjectStructureNode,\n ObjectStructureNodeBuilder,\n} from '../bimplus-object-structure/bimplus-object-structure.interface';\nimport { PreviewObject } from '../object-preview/object-preview.interface';\nimport * as WebSdk from 'bimplus-websdk';\nimport {\n from\n , BehaviorSubject\n} from 'rxjs';\nimport { BimplusObjectStructureComponent } from '../bimplus-object-structure/bimplus-object-structure.component';\nimport {\n ComplexPropertiesNode,\n ComplexPropertiesNodeBuilder,\n} from '../bimplus-object-complex-properties/bimplus-object-complex-properties.interface';\nimport { BimplusObjectComplexPropertiesComponent } from '../bimplus-object-complex-properties/bimplus-object-complex-properties.component';\nimport {\n ObjectAttribute,\n ObjectAttributeGroup,\n} from './object-properties.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport {\n BimplusButtonRowItem,\n BimplusButtonClickEvent,\n} from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component';\nimport { ObjectPropertiesGroupComponent } from '../object-properties-group/object-properties-group.component';\nimport { isObjectPropertyValueBlank } from '../../utils/objectProperties';\nimport {\n FormGroup\n , ReactiveFormsModule\n , FormBuilder\n , FormControl\n , Validators\n} from '@angular/forms';\nimport { GetAttributeValue } from '../../pipes/get-attribute-value.pipe';\nimport { doubleValidator } from '../../validators/double.validator';\nimport { integerValidator } from '../../validators/integer.validator';\nimport { guidValidator } from '../../validators/guid.validator';\nimport { doubleEnumValidator } from '../../validators/double-enum.validator';\nimport { ObjectPreviewComponent } from \"../object-preview/object-preview.component\";\nimport { ObjectPropertiesService } from './object-properties.service';\nimport { guidEnumValidator } from '../../validators/guid-enum.validator';\nimport { stringEnumValidator } from '../../validators/string-enum.validator';\nimport { stringComboboxValidator } from '../../validators/string-combobox.validator';\n\n@Component({\n selector: 'lib-object-properties',\n imports: [\n ExpansionPanelComponent,\n ExpansionPanelHeaderComponent,\n TranslateModule,\n BimplusObjectStructureComponent,\n BimplusObjectComplexPropertiesComponent,\n BimplusButtonsRowComponent,\n BimplusScrollableContainerComponent,\n ObjectPropertiesGroupComponent,\n ObjectPropertiesGroupComponent,\n ObjectPreviewComponent,\n ReactiveFormsModule\n ],\n templateUrl: './object-properties.component.html',\n styleUrls: ['./object-properties.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class ObjectPropertiesComponent\n extends BimplusLocalizedWidgetComponent\n implements OnInit\n{\n private readonly formBuilder = inject(FormBuilder);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly objectPropertiesService = inject(ObjectPropertiesService);\n\n protected _objectPropertiesForm = new FormGroup({});\n\n protected _objectPropertiesGroupForm(group_name: string): FormGroup {\n const _groupForm: FormGroup = this._objectPropertiesForm;\n return _groupForm.controls[group_name] as FormGroup;\n }\n\n constructor()\n {\n super();\n }\n\n protected _editMode = signal<boolean>(false);\n private _objectStructure: ObjectStructureNode | null = null;\n\n get objectStructure(): ObjectStructureNode | null {\n return this._objectStructure;\n }\n\n private _complexProperties: ComplexPropertiesNode | null = null;\n\n get complexProperties(): ComplexPropertiesNode | null {\n return this._complexProperties;\n }\n\n @Input() api: WebSdk.Api | null = null;\n @Input() revision: number | undefined = undefined;\n\n protected _canUpdateObject = signal<boolean>(false);\n @Input() set canUpdateObject(canUpdateObject: boolean) {\n this._canUpdateObject.set(canUpdateObject);\n }\n\n private _rootObjectId : string = \"\";\n @Input() set rootObjectId(id: string) {\n if(this._rootObjectId === id) {\n return;\n }\n this._cancelEditingProperties();\n\n this._currentObjectId$.next(id);\n this._createObjectStructure(id, this.revision);\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n private readonly isSaveButtonDisabled$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n protected readonly visibleNodeSignal:WritableSignal<PreviewObject> = signal({id:\"\",visible:false,opaque:false});\n protected readonly opaqueNodeSignal:WritableSignal<PreviewObject> = signal({id:\"\",visible:false,opaque:false});\n\n private readonly _currentObjectId$ = new BehaviorSubject<string> (\"\");\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string> (\"\");\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n configEditProperties: Array<BimplusButtonRowItem> = [];\n configEditedProperties: Array<BimplusButtonRowItem> = [];\n\n @Output() updatedObjectProperties = new EventEmitter<{ [key: string]: unknown }>();\n\n _editPropertiesButtonsConfiguration() {\n this.configEditProperties.push({\n id: 'edit-properties',\n title: this.translateService.instant('_Edit_properties'),\n tooltip: this.translateService.instant('_Edit_properties'),\n disabled: !this._canUpdateObject(),\n buttonStyle: 'primary',\n });\n }\n\n _editedPropertiesButtonsConfiguration() {\n this.configEditedProperties.push({\n id: 'save-changed-properties',\n title: this.translateService.instant('_Save'),\n tooltip: this.translateService.instant('_Save'),\n disabled: this.isSaveButtonDisabled$,\n buttonStyle: 'primary',\n });\n this.configEditedProperties.push({\n id: 'cancel-editing-properties',\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'secondary',\n });\n }\n\n ngOnInit() {\n this._editPropertiesButtonsConfiguration();\n this._editedPropertiesButtonsConfiguration();\n\n this.buttonRowItems = this.configEditProperties;\n\n this.subscribeProperties(); \n }\n\n subscribeProperties() {\n this._currentPropertiesObjectId$.subscribe({\n next: (id) => {\n if (id) {\n this._createObjectProperties(id, this.revision);\n }\n },\n });\n\n this._currentObjectId$.subscribe({\n next: (id) => {\n this._currentPropertiesObjectId$.next(id);\n this._createComplexPropertiestructure(id, this.revision);\n },\n });\n }\n\n handleObjectStructureNodeSelected(node: ObjectStructureNode) {\n console.log(node);\n this._currentObjectId$.next(node.id);\n }\n\n handleObjectStructureNodeVisible(node : ObjectStructureNode){\n const objNode: PreviewObject = {\n id:node.id,\n visible: node.visible,\n opaque: node.opaque};\n this.visibleNodeSignal.set(objNode); // Update the signal\n }\n\n handleObjectStructureNodeOpaque(node : ObjectStructureNode){\n const objNode: PreviewObject = {\n id:node.id,\n visible: node.visible,\n opaque: node.opaque};\n this.opaqueNodeSignal.set(objNode); // Update the signal\n }\n \n\n handleComplexPropertyNodeSelected(node : ComplexPropertiesNode){\n console.log(node);\n this._currentPropertiesObjectId$.next(node.id);\n }\n\n private _loadObjectStructure(objectId: string, revision: number | undefined) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.getTopology(objectId, revision, false, false, undefined)\n );\n }\n\n private _createObjectStructure(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectStructure(objectId, revision)?.subscribe({\n next: (structureData) => {\n if (structureData) {\n this._objectStructure =\n ObjectStructureNodeBuilder.createFromResponse(structureData);\n }\n },\n });\n }\n\n private _loadObjectComplexPropertiesStructure(\n objectId: string,\n revision: number | undefined\n ) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.getComplexPropertiesTopology(objectId, revision)\n );\n }\n\n private _createComplexPropertiestructure(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectComplexPropertiesStructure(objectId, revision)?.subscribe({\n next: (structureData) => {\n if (structureData) {\n const complexProps =\n ComplexPropertiesNodeBuilder.createFromResponse(structureData);\n if (complexProps?.children?.length) {\n this._complexProperties = complexProps;\n } else {\n this._complexProperties = null;\n }\n }\n },\n });\n }\n\n protected objectAttributeGroups = signal<ObjectAttributeGroup[]>([]);\n\n private _loadObjectProperties(\n objectId: string,\n revision: number | undefined\n ) {\n if (!this.api) {\n return;\n }\n\n if (!objectId) {\n return;\n }\n\n return from(\n this.api.objects.get(objectId, revision, '8', undefined, false, undefined)\n );\n }\n\n private _createObjectProperties(\n objectId: string,\n revision: number | undefined\n ) {\n this._loadObjectProperties(objectId, revision)?.subscribe({\n // properties response is badly structured, nearly impossible to create class structure from it. Therefore using shortcut\n // any for json response\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n next: (propertiesData: any) => {\n this.objectPropertiesService.setModel(propertiesData);\n this.objectAttributeGroups.set(this._createAttributeGroupsFromResponse(propertiesData));\n },\n error: () => {\n this.objectAttributeGroups.set([]);\n },\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _tooltip(attrib: any): string {\n const nameTitle: string = this.translateService.instant('_Name');\n const name: string = attrib.name ? attrib.name : '';\n const descriptionTitle: string =\n this.translateService.instant('description');\n const description: string = attrib.description;\n const uuidTitle: string = this.translateService.instant('_UUID');\n const uuid: string = attrib.id;\n if (\n description === null ||\n description === undefined ||\n description === ''\n ) {\n return `${nameTitle}: ${name}\\n${uuidTitle}: ${uuid}`;\n }\n return `${nameTitle}: ${name}\\n${descriptionTitle}: ${description}\\n${uuidTitle}: ${uuid}`;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _createAttributeGroupsFromResponse(propertiesData: any) {\n const groups: Array<ObjectAttributeGroup> = [];\n let localizedAttribGroups = null;\n if (propertiesData.localizedAttributeGroups) {\n localizedAttribGroups = propertiesData.localizedAttributeGroups;\n }\n\n if (!propertiesData.attributes) {\n return groups;\n }\n\n const attribGroups = propertiesData.attributes;\n for (const [groupName, attribsObject] of Object.entries(attribGroups)) {\n const newGroup: ObjectAttributeGroup = {\n name: groupName,\n expanded: false,\n attributes: [],\n };\n\n if (localizedAttribGroups?.[groupName]) {\n newGroup.name = localizedAttribGroups[groupName];\n }\n\n if (!attribsObject) {\n continue;\n }\n\n for (const attrib of Object.values(attribsObject)) {\n const newAttrib: ObjectAttribute = {\n id: attrib.id,\n name: attrib.name,\n description: attrib.description,\n value: attrib.value,\n group: attrib.group,\n type: attrib.type,\n unit: attrib.unit,\n decimal: attrib.decimal,\n control: attrib.control,\n enumdefinition: attrib.enumdefinition,\n isChangeable: attrib.isChangeable,\n tooltip: this._tooltip(attrib),\n minValue: attrib.minValue,\n maxValue: attrib.maxValue,\n };\n\n newGroup.attributes.push(newAttrib);\n }\n groups.push(newGroup);\n }\n\n return groups;\n }\n\n _deleteForm() {\n this._objectPropertiesForm = new FormGroup({});\n }\n\n private initialFormValues: string = \"\";\n _createForm() {\n const _getAttributeValue = new GetAttributeValue();\n const _form: { [key: string]: FormGroup } = {};\n this.objectAttributeGroups().forEach(groupAttributes => {\n const _form_group: { [key: string]: FormControl | null } = {};\n groupAttributes.attributes.forEach(attribute => {\n if((typeof attribute.type === 'string' && /^boolean$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [Validators.pattern(/^(false|true|0|1)$/i)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^boolean$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^checkbox$/i.test(attribute.control))\n )\n {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^double$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleValidator(attribute.minValue, attribute.maxValue)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^int(32)?$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [integerValidator(attribute.minValue, attribute.maxValue)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^guid$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [guidValidator()] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^double$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^guid$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [guidEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^int(32)?$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [doubleEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^enumeration$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [stringEnumValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^string$/i.test(attribute.type))\n && (typeof attribute.control === 'string' && /^combobox$/i.test(attribute.control))\n ) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [stringComboboxValidator(attribute.enumdefinition)] : []\n );\n return;\n }\n if((typeof attribute.type === 'string' && /^datetime$/i.test(attribute.type)) && !attribute.control) {\n _form_group[attribute.id] = this.formBuilder.control(\n _getAttributeValue.transform(attribute)\n , attribute.isChangeable ? [] : []\n );\n return;\n }\n });\n _form[groupAttributes.name] = this.formBuilder.group(_form_group);\n });\n this._objectPropertiesForm = this.formBuilder.group(_form);\n\n this.initialFormValues = JSON.stringify(this._objectPropertiesForm.value);\n this._objectPropertiesForm.valueChanges.subscribe({\n next: (value) => {\n const changed: boolean = JSON.stringify(value) !== this.initialFormValues;\n this.isSaveButtonDisabled$.next(!(this._objectPropertiesForm.valid && changed));\n }\n });\n }\n\n private _getPropertyName(uuid: string): string {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.name;\n }\n }\n }\n return '';\n }\n\n private _getPropertyType(uuid: string): string {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.type;\n }\n }\n }\n return '';\n }\n\n private _getPropertyControl(uuid: string): string | undefined {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return attr.control;\n }\n }\n }\n return '';\n }\n\n private _convertValueToBoolean(value: string): boolean {\n return /^true$/i.test(value) || /^1$/i.test(value);\n }\n\n private _convertValueToDouble(value: string): number {\n return parseFloat(value);\n }\n\n private _hasBeenValueChanged(uuid: string, value: string | number | boolean): boolean {\n const attrGroups: ObjectAttributeGroup[] = this.objectAttributeGroups();\n for (const attrGroup of attrGroups) {\n for (const attr of attrGroup.attributes) {\n if (attr.id === uuid) {\n return value !== attr.value;\n }\n }\n }\n return false;\n }\n\n private _getChangedData(formGroup: FormGroup): { [key: string]: unknown } {\n const changedData: { [key: string]: unknown } = {};\n\n Object.keys(formGroup.controls).forEach(key => {\n const control = formGroup.get(key);\n\n if (control instanceof FormControl) {\n // If it's a FormControl and it's dirty, capture the changed value\n if (control.dirty) {\n const propName: string = this._getPropertyName(key);\n const propType: string = this._getPropertyType(key);\n // const propControl: string = this._getPropertyControl(key);\n if(propName === '') {\n const _newValue = {\n id: key,\n value: control.value\n };\n changedData[key] = _newValue;\n } else {\n if(/^boolean$/i.test(propType)) {\n const _val: boolean = this._convertValueToBoolean(control.value);\n if(this._hasBeenValueChanged(key, _val)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n else if(/^double$/i.test(propType)) {\n const _val: number = this._convertValueToDouble(control.value);\n if(this._hasBeenValueChanged(key, _val)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n else {\n const _val: string = control.value;\n\n if(this._hasBeenValueChanged(key, control.value)) {\n const _newValue = {\n id: key,\n value: _val\n };\n changedData[propName] = _newValue;\n }\n }\n }\n }\n } else if (control instanceof FormGroup) {\n if(control.dirty) {\n // Recursively get changed data from nested FormGroup\n const nestedChanges = this._getChangedData(control);\n if (Object.keys(nestedChanges).length > 0) {\n changedData[key] = nestedChanges;\n }\n }\n }\n });\n\n return changedData;\n }\n\n private _saveObjectProperties() {\n const saveData: { [key: string]: unknown } = {};\n saveData['id'] = this._currentObjectId$.value;\n saveData['unsaved'] = true;\n saveData['attributes'] = this._getChangedData(this._objectPropertiesForm);\n this.saveObjectProperties(saveData);\n }\n\n private _cancelEditingProperties() {\n this._editMode.set(false);\n this._deleteForm();\n this.buttonRowItems = this.configEditProperties\n }\n\n protected buttonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'edit-properties') {\n this._editMode.set(true);\n this._createForm();\n console.log('Edit properties clicked');\n this.buttonRowItems = this.configEditedProperties;\n }\n\n if ($event.id === 'save-changed-properties') {\n this._saveObjectProperties();\n this._cancelEditingProperties();\n console.log('Save changed properties clicked');\n }\n\n if ($event.id === 'cancel-editing-properties') {\n this._cancelEditingProperties();\n console.log('Cancel edit properties clicked');\n }\n }\n\n hasSetAnyAttribute(objectAttributeGroup: ObjectAttributeGroup) {\n return objectAttributeGroup.attributes.some((attrib) => {\n return !isObjectPropertyValueBlank(attrib);\n });\n }\n\n protected saveObjectProperties(data: { [key: string]: unknown }): void {\n const selectedObjectId = this._currentPropertiesObjectId$.value;\n if (!data || !selectedObjectId) {\n return;\n }\n\n if (!this.api) {\n return;\n }\n\n from(this.api.objects.put(selectedObjectId, JSON.stringify(data))).subscribe({\n next: (response: { [key: string]: unknown }) => {\n this._createObjectProperties(selectedObjectId, this.revision);\n this._createObjectStructure(selectedObjectId, this.revision);\n this.updatedObjectProperties.emit({ id: selectedObjectId, request: data, response });\n },\n });\n }\n}\n","<lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n/>\n\n<div class=\"object-properties\">\n\n <lib-bimplus-scrollable-container>\n <lib-expansion-panel class=\"object-properties-preview-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-structure-header\">{{\"_3D preview\" | translate}}</span>\n </lib-expansion-panel-header>\n <lib-object-preview \n [api]=\"api\" \n [revision]=\"revision\" \n [objectId]=\"rootObjectId\"\n [visibleNode]=\"visibleNodeSignal()\"\t\n [opaqueNode]=\"opaqueNodeSignal()\"\n />\n </lib-expansion-panel>\n <!-- Object structure-->\n <lib-expansion-panel class=\"object-properties-object-structure-panel\">\n <lib-expansion-panel-header>\n <span class=\"object-structure-header\">{{\"_Object structure\" | translate}}</span>\n </lib-expansion-panel-header>\n @if (objectStructure) {\n <lib-bimplus-object-structure\n [objectStructure]=\"objectStructure\"\n [hasCheckBox1]=\"true\"\n [hasCheckBox2]=\"true\"\n (nodeSelected)=\"handleObjectStructureNodeSelected($event)\"\n (nodeVisible)= \"handleObjectStructureNodeVisible($event)\"\n (nodeOpaque)= \"handleObjectStructureNodeOpaque($event)\"\n />\n }\n </lib-expansion-panel>\n <!-- End Object structure-->\n\n <!-- Complex properties-->\n @if(complexProperties){\n <lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"object-properties-header\"> {{\"_Object multiproperties tree\" | translate}}</span>\n </lib-expansion-panel-header>\n <lib-bimplus-object-complex-properties\n [complexProperties]=\"complexProperties\"\n (nodeSelected)=\"handleComplexPropertyNodeSelected($event)\"\n />\n </lib-expansion-panel>\n }\n <!-- End Complex properties-->\n\n @if(objectAttributeGroups().length > 0){\n <lib-expansion-panel>\n <lib-expansion-panel-header>\n <span class=\"object-properties-header\">{{\"_Object properties\" | translate}}</span>\n </lib-expansion-panel-header>\n <form [formGroup]=\"_objectPropertiesForm\" class=\"input-form\">\n @for (attribGroup of objectAttributeGroups(); track attribGroup) {\n @if(_editMode() || hasSetAnyAttribute(attribGroup)){\n <lib-expansion-panel [expanded]=\"attribGroup.expanded\">\n <lib-expansion-panel-header>\n <span class=\"object-properties-group-header\"> {{attribGroup.name}}</span>\n </lib-expansion-panel-header>\n <lib-object-properties-group\n [attributesGroup]=\"attribGroup\"\n [editMode]=\"_editMode()\"\n [canUpdateObject]=\"_canUpdateObject()\"\n [objectPropertiesForm]=\"_objectPropertiesGroupForm(attribGroup.name)\"\n />\n </lib-expansion-panel>\n }\n }\n </form>\n </lib-expansion-panel>\n }\n </lib-bimplus-scrollable-container>\n</div>\n","import { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport {BimplusButtonsRowComponent} from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport {BimplusButtonClickEvent, BimplusButtonRowItem} from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\n\nexport interface ConfirmDialogInputData {\n title: string;\n message: string;\n acceptButtonLocalizedString: string;\n cancelButtonLocalizedString: string;\n acceptCallback: () => void;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-confirm',\n imports: [\n TranslateModule,\n BimplusButtonsRowComponent\n ],\n templateUrl: './bimplus-overlay-dialog-confirm.component.html',\n styleUrl: './bimplus-overlay-dialog-confirm.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\n\nexport class BimplusOverlayDialogConfirmComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n private _title: string = '';\n private _message: string = '';\n acceptButtonLocalizedString: string = '_Accept';\n cancelButtonLocalizedString: string = '_Cancel';\n acceptCallback: (() => void) | undefined;\n protected buttons: BimplusButtonRowItem[] = [];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n const data = this.dialogService.inputData as ConfirmDialogInputData;\n\n if (data) {\n this.title = data.title || '';\n this.message = data.message || '';\n this.acceptButtonLocalizedString = data.acceptButtonLocalizedString || '_Accept';\n this.cancelButtonLocalizedString = data.cancelButtonLocalizedString || '_Cancel';\n this.acceptCallback = data.acceptCallback;\n }\n\n this.initializeButtons();\n }\n\n initializeButtons() {\n this.buttons = [\n {\n id: \"accept\",\n title: this.translateService.instant(this.acceptButtonLocalizedString),\n tooltip: this.translateService.instant(this.acceptButtonLocalizedString),\n disabled: false,\n buttonStyle: 'primary'\n },\n {\n id: \"cancel\",\n title: this.translateService.instant(this.cancelButtonLocalizedString),\n tooltip: this.translateService.instant(this.cancelButtonLocalizedString),\n disabled: false,\n buttonStyle: 'secondary'\n }\n ];\n }\n\n close() {\n this.dialogService.close();\n (document.activeElement as HTMLElement)?.blur();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.dialogService.close();\n }\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n this.dialogService.close();\n\n if ($event.id === \"accept\") {\n this.acceptCallback?.();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"header\">\n <div class=\"icon\"></div>\n <div class=\"title-text\">\n {{ title }}\n </div>\n <div\n class=\"close-button\"\n (click)=\"close()\"\n (keydown)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"content\">\n <div class=\"text\" [innerHTML]=\"message\"></div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\"\n />\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport * as WebSdk from 'bimplus-websdk';\n@Injectable({\n providedIn: 'root'\n})\nexport class DecoratorsService {\n\n constructor() { }\n \n fmt(string: string, ...formats: unknown[]): string {\n let index = 0;\n\n return string.replace(/%@(\\d+)?/g, (match: string, argumentIndex: string) => {\n const argumentIndexN = argumentIndex ? parseInt(argumentIndex, 10) - 1 : index++;\n const _match = formats[argumentIndexN];\n\n if (_match === null) {\n return '(null)';\n }\n if (_match === undefined) {\n return '';\n }\n return _match.toString();\n });\n }\n/**--------------------------------------------------------------------------\n * decorate link\n --------------------------------------------------------------------------*/\n decorateLink(api:WebSdk.Api,link:WebSdk.AttachmentLink,objectIds:[string]):WebSdk.AttachmentLink{\n\n const retval:WebSdk.AttachmentLink = {\n id: link.id,\n name: link.name,\n fileName: link.fileName,\n size: link.size,\n link: link.link,\n fileNameShort: '',\n extension: '',\n objectIds: objectIds,\n version: link.version,\n sizeMB: \"\"\n };\n const access_token = api.getAccessToken();\n const attVersion = \"attachments/%@/versions/%@/download\";\n const url = api.getApiTeamUrl()+attVersion;\n const isEmbeddedAllplanMode = false;\n retval.size = parseFloat((link.size / 1000).toFixed(2));\n retval.link = `${this.fmt(url, link.id, link.version)}?api-token=${access_token}${ isEmbeddedAllplanMode ? '' : '&openInBrowser=true'}`;\n if (link.fileName.length > 20) {\n const fileParts = link.fileName.split('.');\n if (fileParts.length > 1) {\n retval.fileNameShort = fileParts.slice(0, -1).join('.');\n retval.extension = \".\" + fileParts.slice(-1);\n } else {\n retval.fileNameShort = link.fileName;\n }\n } else {\n retval.fileNameShort = link.fileName;\n } \n return retval;\n } \n}\n","import { Component, ViewEncapsulation, Input, OnInit, Renderer2, ElementRef, OnDestroy, booleanAttribute, Output, EventEmitter, inject } from '@angular/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as WebSdk from 'bimplus-websdk';\nimport { from , BehaviorSubject, switchMap, forkJoin } from 'rxjs';\nimport { concatMap } from 'rxjs/operators';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport { ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { BimplusButtonsRowComponent } from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport {\n BimplusOverlayDialogConfirmComponent\n} from \"../bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport * as WebClient from 'bimplus-webclient';\nimport {NewAttachInfo} from '../bimplus-object-comments-list/bimplus-object-comments-list.interface';\nimport {DecoratorsService } from '../../services/decorators.service';\nexport const EMBEDDED_MODAL_DIALOGE_TYPE_FILE = 'file';\n\nexport const postAttachmentLinks = (newAttachmentIDs: string[], objectId: string, api: WebSdk.Api) => {\n // Create an array of observables for each post request\n const postRequests = newAttachmentIDs.map((id) => \n from(api.objects.postAttachmentLink(objectId, JSON.stringify({ attachmentId: id}))) \n );\n\n // Use forkJoin to wait for all post requests to complete in parallel\n return forkJoin(postRequests)\n .pipe(\n // After all posts are complete, switch to the next call to get updated links\n concatMap(() => from(api.objects.getAttachmentLinks(objectId)))\n )\n}\n\n@Component({\n selector: 'lib-links-to-documents',\n imports: [\n TranslateModule,\n BimplusScrollableContainerComponent,\n BimplusButtonsRowComponent,\n ],\n templateUrl: './links-to-documents.component.html',\n styleUrls: ['./links-to-documents.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class LinksToDocumentsComponent extends BimplusLocalizedWidgetComponent implements OnInit, OnDestroy {\n private readonly dialogService = inject(DialogService);\n private readonly renderer = inject(Renderer2);\n private readonly el = inject(ElementRef);\n private readonly decorators = inject(DecoratorsService);\n\n\n constructor() {\n super();\n\n this.shadowRootElement = this.el.nativeElement.shadowRoot;\n }\n\n private readonly shadowRootElement: HTMLElement;\n private _rootObjectId : string = \"\";\n isDestroyed = false;\n localWormHole:boolean = true;\n //When is true then it means the creation of link is in progress\n inProgress:boolean= false;\n\n @Input({ required: true }) api!: WebSdk.Api | null;\n @Input() canCreateAttachmentLink: boolean = true;\n /** Input Attribute to specify if should show only list of attachments. */\n @Input({ transform: booleanAttribute }) listOnly = false;\n /** Input Attribute to specify if should show message when no attachments found. */\n @Input({ transform: booleanAttribute }) showEmptyMessage: boolean = true;\n /** Input Attribute to tell if show/hide attachemt size information. */\n @Input({ transform: booleanAttribute }) hideAttachmentSize = false;\n\n @Input() inputBaseUrl: string =''; // base url for the embedded modal\n \n _attachments: WebSdk.AttachmentLink[] = [];\n\n @Input()\n set attachments(value: WebSdk.AttachmentLink[]) {\n this._attachments = value;\n this.onAttachmentsChange();\n }\n\n get attachments(): WebSdk.AttachmentLink[] {\n return this._attachments;\n }\n\n onAttachmentsChange() {\n if(this.api && this.rootObjectId){\n this._attachments = this.decorateAttachmentLinks(this.api,this._attachments); \n }\n }\n\n\n @Output() attachmentsChange = new EventEmitter<string[]>();\n @Output() attachmentsLinkChange = new EventEmitter<NewAttachInfo[]>();\n @Input() canDeleteAttachmentLink:boolean = true;\n @Input() project : ProjectNavigatorProject | null = null;\n @Input() wormholeSelector : string | undefined= \"localEmbeddedModalId\"; // calling application can provide a place where the iframe for documents selection will be rendered\n @Input() env : string = 'dev';\n\n @Input()\n set rootObjectId(id : string|undefined){\n if(!id){\n return;\n }\n this._currentObjectId$.next(id);\n this._rootObjectId = id;\n }\n\n get rootObjectId() : string{\n return this._rootObjectId;\n }\n\n private readonly _currentObjectId$ = new BehaviorSubject<string> (\"\");\n _attachmentCount : number = 0;\n buttonRowItems: Array<BimplusButtonRowItem> = [\n {\n id: \"add-documents\"\n , title: this.translateService.instant('_Add_document')\n , tooltip: this.translateService.instant('_Add_document')\n , disabled: !this.canCreateAttachmentLink\n , buttonStyle: 'primary'\n }\n ];\n\n ngOnInit() {\n if (!this.listOnly) {\n this._currentObjectId$.subscribe({\n next: (id) => {\n this._createAttachmentLinkStructure(id);\n }\n });\n }\n };\n\n ngOnDestroy(): void {\n this.isDestroyed = true;\n }\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private decorateAttachmentId(item:any){\n const it:NewAttachInfo = {\n id: item.id,\n name: item.name,\n nameShort: item.name,\n url:'',\n iconClass: '',\n iconTitle: '',\n type: 'AttachmentLink',\n deleteButtonTitle:'' \n }; \n return it;\n }\n\n private decorateAttachmentLinks(api:WebSdk.Api, links:WebSdk.AttachmentLinksResponse):WebSdk.AttachmentLink[]{\n const decoratedLinks = links.map((link) => this.decorators.decorateLink(api,link,[this._currentObjectId$.value]));\n decoratedLinks.sort((a,b) => {\n if(a.fileName.toLowerCase() < b.fileName.toLowerCase() ) return -1;\n if(a.fileName.toLowerCase() > b.fileName.toLowerCase() ) return 1;\n return 0;\n });\n return decoratedLinks;\n }\n\n private _createAttachmentLinkStructure(objectId : string){\n\n this._loadAttachmentLinkStructure(objectId)?.subscribe({\n next :(structureData) => {\n if(structureData){\n //this._attachmentLinkStructure = _attachmentLink StructureBuilder.createFromResponse(structureData);\n this._attachmentCount = structureData?.length;\n if(this.api){\n const retval = this.decorateAttachmentLinks(this.api,structureData);\n if(retval){\n this._attachments = retval;\n }\n }\n }\n }\n })\n }\n\n private _loadAttachmentLinkStructure(objectId : string){\n if(!this.api){\n return;\n }\n\n if(!objectId) {\n return;\n }\n return from(this.api.objects.getAttachmentLinks(objectId));\n }\n\n documentSelection :string[] | null = null;\n isOpened:boolean = false;\n embeddedModalContainer:string = 'embedded-modal';\n\n // show or hide embedded modal\n setModalVisibility(opened = true) {\n if(!this.wormholeSelector){\n return;\n }\n const element = this.localWormHole ? this.shadowRootElement.querySelector(\"#\" + this.wormholeSelector):\n document.getElementById(this.wormholeSelector);\n if (!element) {\n return;\n }\n if(this.localWormHole){\n if(element.parentElement){\n this.renderer.setStyle(element.parentElement,'display',opened?'block':'none')\n }\n } else {\n this.renderer.setStyle(element.parentElement,'display',opened?'block':'none')\n }\n\n ///containerEl.fadeIn(\"fast\") : containerEl.fadeOut(\"fast\");\n this.isOpened = opened;\n }\n\n\n closeEmbeddedModalFileSelection() {\n this.setModalVisibility(false);\n }\n\n _addLink(api:WebSdk.Api, ids:string[]) {\n // filter out already existing attachment links \n const newAttachmentIDs = ids.filter( item => !this.attachments.find(n => n.id === item) );\n if( !newAttachmentIDs.length ){\n return;\n }\n if(this.inProgress){\n console.log('in progress');\n return;\n }\n\n if(!this.rootObjectId){\n // we don't know to which object we want to attach the documents\n // so we will deliver just information about selected documents\n const getRequests = newAttachmentIDs.map((id) => \n from(api.objects.get(id,0,undefined,undefined,undefined,undefined))\n );\n \n forkJoin(getRequests).subscribe({\n next: (results) => {\n // Process the array of results\n (results as WebSdk.AttachmentLink[])?.forEach((item) => {\n if(item?.id && !this.attachments.find(attachment => attachment?.id === item.id)){\n this._attachments.push(item);\n }\n });\n const retval:NewAttachInfo[] = this._attachments.map((item) => this.decorateAttachmentId(item)); \n this.attachmentsLinkChange.emit(retval);\n },\n error: (err) => {\n console.error('Error occurred during requests:', err);\n this._attachments=[];\n }\n });\n return;\n }\n\n // we know to which object we want to attach the documents\n this.inProgress = true;\n postAttachmentLinks(newAttachmentIDs, this.rootObjectId, api)\n .subscribe({\n next: (updatedAttachments) => {\n this._attachments = this.decorateAttachmentLinks(\n api,\n updatedAttachments\n ); // Update attachments in component \n this.inProgress = false; \n this.attachmentsChange.emit(newAttachmentIDs) \n },\n error: (err) => {\n console.error('Failed to add or reload attachments:', err);\n this.inProgress = false;\n }\n });\n }\n\n\n createAttachmentLink(api: WebSdk.Api){\n console.log('createAttachmentLink')\n this.localWormHole = this.wormholeSelector === \"localEmbeddedModalId\";\n const callbackF = (docIDs:string[]):void => {\n const ids = (typeof docIDs === 'string') ? [docIDs] : docIDs;\n const foundDocuments = ids && ids.length > 0;\n if(!this.isDestroyed){\n this.closeEmbeddedModalFileSelection();\n if (foundDocuments) {\n this._addLink(api,ids);\n }\n }\n }\n\n if (typeof callbackF !== \"function\" || !this.project || !this.api) {\n return;\n }\n\n setTimeout(() => {\n const isLocalhost = window.location.href.includes(\"localhost\");\n let access_token :string|null |undefined= '';\n access_token = this.api?.getAccessToken();\n if (!access_token) {\n access_token = window.localStorage.getItem('access_token');\n if (!access_token /*&& isLocalhost*/) {\n return;\n }\n }\n const newClient = new WebClient.ExternalClient('BImplusNGXComponentClient');\n newClient?.initialize();\n // Make embedded windows pointing to the current feature branch with baseUrl setup\n const options:{baseUrl?:string} = {};\n // In case of localhost ommit explicit setup of baseUrl\n if (!isLocalhost) {\n // Remove '/viewer/' from the end of pathname\n let filteredPathname = window.location.pathname.replace(/\\/viewer\\/$/, '/');\n // Remove '/connexis/' from the end of pathname if we use temporary url for connexis like https://portal-dev.bimplus.net/connexis/?embedded...\n filteredPathname = filteredPathname.replace(/\\/connexis\\/$/, '/');\n options.baseUrl = this.inputBaseUrl ? this.inputBaseUrl: window.location.origin + filteredPathname;\n }\n\n ///const env:string=\"dev\"; ///!!! to-do introduce env variable into components\n const clientModule = WebClient.BimFilesSelect;\n if(this.wormholeSelector){\n const documentSelection = new clientModule(this.wormholeSelector, access_token, newClient, this.env, options);\n if (!documentSelection) {\n return;\n }\n documentSelection.onAttachmentSelected = callbackF;\n\n if(this.project){\n if(this.localWormHole){\n documentSelection.loadShadowRoot(this.shadowRootElement,this.project.teamSlug , this.project.id);\n }else{\n documentSelection.load(this.project.teamSlug , this.project.id);\n }\n }\n this.setModalVisibility(true);\n }\n },200);\n\n }\n\n _deleteAttachmentLink(api:WebSdk.Api ,id:string,$event:Event){\n $event.stopPropagation();\n $event.preventDefault();\n const objects = api.objects;\n const objectId = this._currentObjectId$.value;\n from(api.objects.deleteAttachmentLink(this.rootObjectId,id)).pipe(\n switchMap(() => from(objects.getAttachmentLinks(objectId)))\n ).subscribe({\n next: (updatedAttachments) => {\n if(this.api){\n this._attachments = this.decorateAttachmentLinks(this.api,updatedAttachments); // Update attachments in component\n // Process the array of results\n const retval:NewAttachInfo[] = this._attachments?.map((item) => this.decorateAttachmentId(item));\n this.attachmentsLinkChange.emit(retval);\n }\n },\n error: (err) => {\n console.error('Failed to delete or reload attachments:', err);\n }\n });\n }\n\n deleteAttachmentLink(attachment:WebSdk.AttachmentLink,$event:Event){\n if(!this.api){\n return;\n }\n if(!attachment) {\n return;\n }\n const api = this.api;\n this.dialogService.open(BimplusOverlayDialogConfirmComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true\n }, data: {\n title: this.translateService.instant('_Delete_attachmentlink'),\n message: this.translateService.instant('_Attachmentlink_delete_confirmation_message'),\n acceptButtonLocalizedString: \"_Delete\",\n acceptCallback: () => {\n this._deleteAttachmentLink(api,attachment.id,$event);\n }\n }\n });\n }\n\n\n buttonClicked($event: BimplusButtonClickEvent){\n if(!this.api){\n return;\n }\n const api = this.api;\n if($event.id == \"add-documents\"){\n this.createAttachmentLink(api);\n }\n }\n}\n","<div class=\"links-to-documents\">\n @if (canCreateAttachmentLink && !listOnly) {\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonClicked($event)\"\n />\n }\n @if (wormholeSelector === 'localEmbeddedModalId'){\n <div class='embedded-modal-container'>\n <iframe id={{wormholeSelector}} [title]=\"\"></iframe>\n </div> \n }\n @if (!_attachments.length && showEmptyMessage) {\n <div \n data-test=\"no-attachment-links\"\n class=\"bim-attachment-not-found\"\n > {{ '_No_attachmentlinks_found' | translate }}\n </div>\n } @else {\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n @for (attachment of _attachments; track attachment; let i = $index) {\n <div class=\"attachment-row\">\n @if (canDeleteAttachmentLink) {\n <span class=\"bim-attachment-delete-button\" (click)=\"deleteAttachmentLink(attachment,$event)\" (keydown)=\"deleteAttachmentLink(attachment,$event)\">\n <div\n title=\"{{ '_Delete_attachmentlink' | translate }}\"\n >\n &#10005;&#xFE0E;\n </div>\n </span>\n }\n <a class=\"bim-attachmentlink-item\" href={{attachment.link}} target='_blank' rel='noopener noreferrer'>\n <div class=\"bim-attachment-name\" title={{attachment.fileName}}>\n {{attachment.name ? attachment.name : attachment.fileName}}\n </div>\n @if (!hideAttachmentSize) {\n <div class=\"bim-attachment-size\" title={{attachment.name}}>\n ({{attachment.size}} kB)\n </div>\n }\n </a>\n </div>\n }\n </lib-bimplus-scrollable-container>\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { BimplusLocalizedWidgetComponent } from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport { TranslateModule } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-object-hyperlinks-item',\n imports: [\n TranslateModule\n ],\n templateUrl: './object-hyperlinks-item.component.html',\n styleUrl: './object-hyperlinks-item.component.less'\n})\nexport class ObjectHyperlinksItemComponent extends BimplusLocalizedWidgetComponent {\n constructor() {\n super();\n }\n\n @Input() hyperlink: WebSdk.Hyperlink | undefined;\n @Input() deleteButtonEnabled: boolean = true;\n\n @Output() deleteButtonClicked = new EventEmitter<void>();\n\n onDeleteButtonClick(): void {\n this.deleteButtonClicked.emit();\n }\n\n onDeleteButtonKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === ' ') {\n $event.preventDefault();\n\n this.onDeleteButtonClick();\n }\n }\n}\n","<div class=\"hyperlink-item\">\n @if (deleteButtonEnabled) {\n <div class=\"bim-list-button delete\" title=\"{{ '_Hyperlink delete confirmation title' | translate }}\" (click)=\"onDeleteButtonClick()\"\n (keydown)=\"onDeleteButtonKeyDown($event)\">\n &#10005;&#xFE0E;\n </div>\n }\n\n <a href=\"{{ hyperlink?.url }}\" class='bim-hyperlink-url' target=\"_blank\" title=\"{{ hyperlink?.url }}\">\n <div class=\"bim-hyperlink-name\">\n {{ hyperlink?.name }}\n </div>\n </a>\n</div>\n","import { Component, Input, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport {BimplusButtonsRowComponent} from \"../bimplus-buttons-row/bimplus-buttons-row.component\";\nimport {BimplusButtonClickEvent, BimplusButtonRowItem} from \"../bimplus-buttons-row/bimplus-buttons-row.interface\";\nimport {BimplusLocalizedWidgetComponent} from \"../bimplus-localized-widget/bimplus-localized-widget.component\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {\n BimplusScrollableContainerComponent\n} from \"../bimplus-scrollable-container/bimplus-scrollable-container.component\";\nimport {ObjectHyperlinksItemComponent} from \"../object-hyperlinks-item/object-hyperlinks-item.component\";\nimport * as WebSdk from \"bimplus-websdk\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {NgForOf} from \"@angular/common\";\nimport {DialogService} from \"../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service\";\nimport {\n BimplusOverlayDialogConfirmComponent\n} from \"../bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component\";\nimport {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BimplusInputTextFieldComponent} from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\n\n@Component({\n selector: 'lib-object-hyperlinks',\n imports: [\n BimplusButtonsRowComponent,\n BimplusScrollableContainerComponent,\n ObjectHyperlinksItemComponent,\n NgForOf,\n TranslateModule,\n ReactiveFormsModule,\n BimplusInputTextFieldComponent\n ],\n templateUrl: './object-hyperlinks.component.html',\n styleUrl: './object-hyperlinks.component.less',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ObjectHyperlinksComponent extends BimplusLocalizedWidgetComponent implements OnInit {\n private readonly dialogService = inject(DialogService);\n private readonly formBuilder = inject(FormBuilder);\n\n hyperlinkForm: FormGroup;\n\n constructor() {\n super();\n\n this.hyperlinkForm = this.formBuilder.group({\n name: ['', []],\n url: ['',\n [\n Validators.required,\n Validators.pattern(/^[^<>]*$/), // Do not allow < or >\n Validators.pattern(/^(?!\\s*$).+/) // Do not allow all empty string, but allow text after spaces\n ]\n ]\n });\n\n this.hyperlinkForm.statusChanges.subscribe(status => {\n this.buttonRowItems[0].disabled = status !== 'VALID';\n });\n }\n\n @Input() api: WebSdk.Api | null = null;\n\n @Input()\n set rootObjectId(id: string) {\n this._currentObjectId$.next(id);\n this.loadHyperlinks(id);\n\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n private readonly _currentObjectId$ = new BehaviorSubject<string>(\"\");\n private readonly _currentPropertiesObjectId$ = new BehaviorSubject<string>(\"\");\n private _rootObjectId: string = \"\";\n\n buttonRowItems: Array<BimplusButtonRowItem> = [];\n\n @Input() canCreateHyperlinks: boolean = true;\n @Input() canDeleteHyperlinks: boolean = true;\n\n hyperlinks: Array<WebSdk.Hyperlink> = [];\n\n ngOnInit() {\n this.buttonRowItems.push(\n {\n id: \"add-hyperlink\"\n , title: this.translateService.instant('_Add hyperlink')\n , tooltip: this.translateService.instant('_Add hyperlink')\n , disabled: true\n , buttonStyle: 'primary'\n }\n );\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === \"add-hyperlink\") {\n if (this.hyperlinkForm.valid) {\n this.addHyperlink(this.hyperlinkForm.value['name'], this.hyperlinkForm.value['url'], this._rootObjectId).then(() => {\n this.loadHyperlinks(this._rootObjectId);\n this.hyperlinkForm.reset();\n });\n }\n }\n }\n\n private loadHyperlinks(objectId: string) {\n if (!this.api)\n return;\n\n this.api.objects.getHyperlinks(objectId).then((response: WebSdk.HyperlinksResponse) => {\n this.hyperlinks = response;\n });\n }\n\n private addHyperlink(name: string, url: string, objectId: string): Promise<WebSdk.Hyperlink> {\n if (!this.api)\n return Promise.reject(new Error('API not available'));\n\n let sanitizedUrl: string = url.trim();\n\n if (!RegExp(/^http(s?):\\/\\//).exec(sanitizedUrl)) {\n sanitizedUrl = 'https://' + sanitizedUrl;\n }\n\n let sanitizedName = name?.trim() ?? '';\n\n if (sanitizedName === '') {\n sanitizedName = sanitizedUrl;\n }\n\n sanitizedName = sanitizedName?.replace(/^http(s?):\\/\\//, '');\n\n const data = JSON.stringify({\n name: sanitizedName,\n url: sanitizedUrl,\n objectId: objectId\n });\n\n return this.api.objects.postHyperlink(objectId, data);\n }\n\n onHyperlinkItemDeleteButtonClicked(hyperlink: WebSdk.Hyperlink) {\n this.dialogService.open(BimplusOverlayDialogConfirmComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true\n }, data: {\n title: this.translateService.instant('_Hyperlink delete confirmation title'),\n message: this.translateService.instant('_Hyperlink delete confirmation message'),\n acceptButtonLocalizedString: \"_Delete\",\n acceptCallback: () => {\n this.deleteHyperlink(hyperlink.id);\n }\n }\n });\n }\n\n private deleteHyperlink(id: string) {\n if (!this.api)\n return;\n\n this.api.hyperlinks.delete(id).then(() => {\n this.loadHyperlinks(this._rootObjectId);\n });\n }\n}\n","@if (canCreateHyperlinks) {\n <form [formGroup]=\"hyperlinkForm\" class=\"input-form\">\n <div>\n <lib-bimplus-input-text-field formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\"/>\n </div>\n <div>\n <lib-bimplus-input-text-field formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\"/>\n </div>\n\n <lib-bimplus-buttons-row [items]=\"buttonRowItems\" (buttonClicked)=\"buttonRowButtonClicked($event)\"/>\n </form>\n}\n\n<div class=\"list-anchor\">\n <div class=\"list\">\n <lib-bimplus-scrollable-container>\n @if (hyperlinks.length > 0) {\n <div style=\"padding-left: 8px\" *ngFor=\"let hyperlink of hyperlinks\">\n <lib-object-hyperlinks-item [hyperlink]=\"hyperlink\" [deleteButtonEnabled]=\"canDeleteHyperlinks\"\n (deleteButtonClicked)=\"onHyperlinkItemDeleteButtonClicked(hyperlink)\"/>\n </div>\n } @else {\n <div class=\"no-links\">{{ \"_No hyperlinks found\" | translate }}</div>\n }\n </lib-bimplus-scrollable-container>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\n\nexport interface ErrorDialogInputData {\n title: string;\n message: string;\n}\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-error',\n imports: [CommonModule, TranslateModule, BimplusButtonsRowComponent],\n templateUrl: './bimplus-overlay-dialog-error.component.html',\n styleUrls: ['./bimplus-overlay-dialog-error.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogErrorComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n\n private _title: string = '';\n private _message: string = '';\n private readonly _data: ErrorDialogInputData | undefined;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: \"errorDialogAcceptButton\",\n title: this.translateService.instant('_Ok'),\n tooltip: this.translateService.instant('_Ok'),\n disabled: false,\n buttonStyle: 'primary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this._data = this.dialogService.inputData as ErrorDialogInputData;\n this._title = this._data?.title || '';\n this._message = this._data?.message || '';\n }\n\n close() {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n buttonRowButtonClicked(): void {\n this.close();\n\n this.acceptCallback?.();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\">\n </div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{title}}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div class=\"overlay-dialog-container_content_msg\">\n {{this.message}}\n </div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked()\"\n />\n </div>\n </div>\n</div>\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport type BimplusTabComponentModel = {\r\n id: string;\r\n title: string;\r\n img: {\r\n default: string;\r\n active: string;\r\n };\r\n};\r\n\r\nexport const DEFAULT_TAB_SWITCHER_ELEMENTS: BimplusTabComponentModel[] = [\r\n { id: 'object-properties', img: { default: 'ic_models', active: 'ic_models_maincolor' }, title: '_Object properties' },\r\n { id: 'comments', img: { default: 'Comments_18_gray', active: 'Comments_18_maincolor' }, title: '_Comments' },\r\n { id: 'attachments', img: { default: 'Attachment_18_gray', active: 'Attachment_18_maincolor' }, title: '_Attachments' },\r\n { id: 'hyperlinks', img: { default: 'Links_18_gray', active: 'Links_18_maincolor' }, title: 'hyperlinks' },\r\n { id: 'links-to-documents', img: { default: 'Attachmentlink_18_gray', active: 'Attachmentlink_18_maincolor' }, title: '_Links_to_documents' },\r\n];\r\n\r\nexport type BimplusTabsSwitcherConfig = {\r\n defaultTabsSwitcherElements?: BimplusTabComponentModel[];\r\n disabled: Partial<{\r\n all: boolean;\r\n id: string;\r\n }>\r\n};\r\n\r\nexport const BIMPLUS_TABS_SWITCHER_CONFIG = new InjectionToken<BimplusTabsSwitcherConfig>('bimplus-tabs-switcher-config');","import { Injectable, inject } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { BIMPLUS_TABS_SWITCHER_CONFIG, BimplusTabComponentModel, BimplusTabsSwitcherConfig, DEFAULT_TAB_SWITCHER_ELEMENTS } from '../bimplus-tabs-switcher.interface';\r\n\r\n@Injectable()\r\nexport class BimplusTabsSwitcherService {\n private readonly bimplusTabsSwitcherConfig = inject<Pick<BimplusTabsSwitcherConfig, 'defaultTabsSwitcherElements'>>(BIMPLUS_TABS_SWITCHER_CONFIG, { optional: true });\n\r\n /** Default tab switcher elements. */\r\n private readonly tabSwitcherElements = new BehaviorSubject<\r\n BimplusTabComponentModel[]\r\n >(DEFAULT_TAB_SWITCHER_ELEMENTS);\r\n public readonly tabSwitcherElements$ =\r\n this.tabSwitcherElements.asObservable();\r\n\r\n /** Attribute to indicate active tab. (only for BimplusTabComponent) */\r\n private readonly activeTab = new Subject<string>();\r\n public readonly activeTab$ = this.activeTab.asObservable();\r\n\r\n public setActiveTab(key: string): void {\r\n this.activeTab.next(key);\r\n }\r\n\r\n constructor() {\r\n // if there is new default tabs from configuration token then use them instead of original default tabs\r\n if (this.bimplusTabsSwitcherConfig?.defaultTabsSwitcherElements) {\r\n this.tabSwitcherElements.next(\r\n this.bimplusTabsSwitcherConfig.defaultTabsSwitcherElements\r\n );\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, computed, EventEmitter, HostListener, Input, OnInit, Output, signal, inject } from '@angular/core';\r\nimport { BimplusTabsSwitcherService } from '../../services/bimplus-tabs-switcher.service';\r\nimport { BIMPLUS_TABS_SWITCHER_CONFIG, BimplusTabComponentModel, BimplusTabsSwitcherConfig } from '../../bimplus-tabs-switcher.interface';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nconst DEFAULT_IMAGE_SRC = '../../../../../../';\r\n\r\n@Component({\r\n selector: 'lib-bimplus-tab',\r\n imports: [NgClass, TranslateModule],\r\n templateUrl: './bimplus-tab.component.html',\r\n styleUrl: './bimplus-tab.component.less'\r\n})\r\nexport class BimplusTabComponent implements OnInit {\n private readonly bimplusTabsSwitcherConfig = inject<BimplusTabsSwitcherConfig>(BIMPLUS_TABS_SWITCHER_CONFIG, { optional: true });\n protected readonly bimplusTabsSwitcherService = inject(BimplusTabsSwitcherService);\n\r\n @Input({ required: true }) bimplusTabComponentModel!: BimplusTabComponentModel;\r\n @Input() imageBaseSrc?: string | null = DEFAULT_IMAGE_SRC;\r\n /** Currently active tab. */\r\n @Input() set activeTab(value: string | undefined) {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n this.bimplusTabsSwitcherService.setActiveTab(value);\r\n }\r\n @Output() activeTabChange = new EventEmitter<string>();\r\n\r\n /** Attribute indicating active tab. */\r\n protected readonly activeTabSignal = toSignal(this.bimplusTabsSwitcherService.activeTab$);\r\n /** Indicate that tab is active or not. */\r\n protected readonly isActive = computed(() => this.activeTabSignal() === this.bimplusTabComponentModel.id);\r\n /** Indicate that tab is disabled or not. */\r\n protected readonly isDisabled = signal<boolean>(false);\r\n /** Computed property for image file name based on active/default state. */\r\n protected readonly imgName = computed(() =>\r\n this.isActive() ? this.bimplusTabComponentModel.img.active : this.bimplusTabComponentModel.img.default\r\n )\r\n protected readonly onHoverOver = signal<boolean>(false);\r\n\r\n /** Whether all tabs is disabled based on configuration token. */\r\n private readonly isAllDisabled = this.bimplusTabsSwitcherConfig?.disabled?.all ?? false;\r\n\r\n constructor() {\r\n if (this.isAllDisabled) {\r\n this.isDisabled.set(true);\r\n }\r\n }\r\n\r\n @HostListener('mouseenter')\r\n protected onMouseEnter(): void {\r\n this.onHoverOver.set(true)\r\n }\r\n\r\n @HostListener('mouseleave')\r\n protected onMouseLeave(): void {\r\n this.onHoverOver.set(false)\r\n }\r\n\r\n public ngOnInit(): void {\r\n // wheter specific tab is disabled\r\n if (!this.isAllDisabled && this.bimplusTabsSwitcherConfig?.disabled?.id) {\r\n this.isDisabled.set(this.bimplusTabsSwitcherConfig.disabled?.id === this.bimplusTabComponentModel.id);\r\n }\r\n }\r\n\r\n /**\r\n * Will update active tab to service state.\r\n * @protected\r\n * @returns void\r\n */\r\n protected activate(): void {\r\n if (this.isDisabled()) {\r\n return;\r\n }\r\n\r\n this.bimplusTabsSwitcherService.setActiveTab(this.bimplusTabComponentModel.id);\r\n this.activeTabChange.emit(this.bimplusTabComponentModel.id);\r\n }\r\n}\r\n","<div\r\n class=\"tab-element\"\r\n [title]=\"bimplusTabComponentModel.title | translate\"\r\n [class.disabled]=\"isDisabled()\"\r\n (click)=\"!isDisabled() && activate()\"\r\n (keypress)=\"!isDisabled() && activate()\"\r\n>\r\n <img src=\"{{imageBaseSrc}}assets/images/default/{{imgName()}}.svg\" [alt]=\"imgName()\">\r\n <div\r\n [attr.data-test]=\"'underline-switcher-' + bimplusTabComponentModel.id\"\r\n [ngClass]=\"{\r\n 'underline-switcher': true,\r\n 'highlight': isActive(),\r\n 'hovering': onHoverOver()\r\n }\"\r\n ></div>\r\n</div>\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, signal, Signal, Output, EventEmitter, Input, inject } from '@angular/core';\nimport { BimplusTabsSwitcherService } from './services/bimplus-tabs-switcher.service';\nimport { BimplusTabComponent } from './components/bimplus-tab/bimplus-tab.component';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BimplusTabComponentModel, DEFAULT_TAB_SWITCHER_ELEMENTS } from './bimplus-tabs-switcher.interface';\nimport { APP_BASE_HREF } from '@angular/common';\n\n@Component({\n selector: 'lib-bimplus-tabs-switcher',\n imports: [BimplusTabComponent],\n templateUrl: './bimplus-tabs-switcher.component.html',\n styleUrls: ['./bimplus-tabs-switcher.component.less'],\n providers: [BimplusTabsSwitcherService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusTabsSwitcherComponent {\n private readonly bimplusTabsSwitcherService = inject(BimplusTabsSwitcherService, { optional: true, skipSelf: true });\n\n @Input() activeTab?: string;\n @Output() activeTabChange = new EventEmitter<string>();\n\n /** default tab elements, can be chanaged from outside by BimplusTabsSwitcherService */\n protected readonly tabSwitcherElements: Signal<BimplusTabComponentModel[]>;\n /** app base href */\n protected readonly baseHref = inject(APP_BASE_HREF, { optional: true });\n\n constructor() {\n // will check wheter is used from outside and if not then add default tabs\n if (this.bimplusTabsSwitcherService) {\n this.tabSwitcherElements = toSignal(this.bimplusTabsSwitcherService.tabSwitcherElements$) as Signal<BimplusTabComponentModel[]>\n } else {\n this.tabSwitcherElements = signal<BimplusTabComponentModel[]>(DEFAULT_TAB_SWITCHER_ELEMENTS).asReadonly();\n }\n }\n}\n","<div class=\"tabswitcher-container\">\n @for (tabElement of tabSwitcherElements(); track tabElement.id) {\n <lib-bimplus-tab\n [attr.data-test]=\"tabElement.id\"\n [activeTab]=\"activeTab\"\n [imageBaseSrc]=\"baseHref\"\n (activeTabChange)=\"activeTabChange.emit($event)\"\n [bimplusTabComponentModel]=\"{ id: tabElement.id, title: tabElement.title, img: { active: tabElement.img.active, default: tabElement.img.default }}\"\n />\n }\n <ng-content></ng-content>\n</div>","import { DecimalPipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\nconst MB_SIZE = 1000;\r\n\r\nexport const BitConverterSize = {\r\n KB: 'kB',\r\n GB: 'gib',\r\n MB: 'mb'\r\n // more..\r\n} as const;\r\n\r\ntype SizeType = typeof BitConverterSize['GB' | 'KB' | 'MB'];\r\n\r\n@Pipe({\r\n name: 'bitConverter',\r\n standalone: true\r\n})\r\nexport class BitConverterPipe extends DecimalPipe implements PipeTransform {\r\n override transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\r\n override transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\r\n override transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null;\r\n override transform(value: unknown, sizeToConvert: SizeType = BitConverterSize.KB, digitsInfo: string = '1.2-2', base: number = MB_SIZE): string | null {\r\n if (!this.isNumber(value)) {\r\n throw new Error('[BitConverterPipe]: value is not a number');\r\n }\r\n const size = this.getSizeFromBites(value, sizeToConvert, base);\r\n let decimalValue = super.transform(size, digitsInfo);\r\n decimalValue ??= value.toString();\r\n\r\n return `(${decimalValue} ${sizeToConvert})`;\r\n }\r\n\r\n private getSizeFromBites(value: number, size: SizeType, base: number): number {\r\n switch(size) {\r\n case 'kB':\r\n return value / base;\r\n case 'mb':\r\n return value / (base * base);\r\n case 'gib':\r\n return value / (base * base * base);\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n private isNumber(value: unknown): value is number {\r\n return typeof value === 'number' && !isNaN(value);\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\n\nexport type BimplusAttachmentsConfig = {\n buttons?: BimplusButtonRowItem[];\n hideDeleteAttachmentButton?: boolean;\n showNoAttachmentsFound?: boolean;\n hideAttachmentSize?: boolean;\n};\nexport const BIMPLUS_ATTACHMENTS_CONFIG =\n new InjectionToken<BimplusAttachmentsConfig>('bimplus-attachments-config');\n\nexport interface IAttachment {\n id: string;\n fileName: string;\n size: number | undefined;\n file?: File;\n}\n\nexport class Attachment implements Partial<IAttachment> {\n public id: string;\n public fileName: string;\n public size: number | undefined;\n public file?: File;\n\n constructor(data: Partial<IAttachment>) {\n this.id = data.id ?? '';\n this.fileName = data.fileName ?? '';\n this.size = data.size ?? 0;\n }\n}\n\ntype Builder = typeof AttachmentBuilder;\n\nexport abstract class AttachmentBuilder {\n private static attachment = new Attachment({});\n\n public static create(value: Attachment): Builder {\n this.attachment = new Attachment(value);\n return this;\n }\n\n public static setId(id: string): Builder {\n this.attachment.id = id;\n return this;\n }\n\n public static setFileName(name: string): Builder {\n this.attachment.fileName = name;\n return this;\n }\n\n public static setSize(size: number): Builder {\n this.attachment.size = size;\n return this;\n }\n\n public static setFile(file: File): Builder {\n this.attachment.file = file;\n return this;\n }\n\n public static build(): Attachment {\n const attachmentToReturn = structuredClone(this.attachment);\n this.attachment = new Attachment({});\n\n return attachmentToReturn;\n }\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { BitConverterPipe } from '../../../../pipes/bit-converter.pipe';\nimport { TranslateModule } from '@ngx-translate/core';\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n} from '../../bimplus-attachments.interface';\n\nconst BIM_ATTACHMENT_DELETE_BUTTON_WIDTH = 30;\nconst BIM_ATTACHMENT_ITEM_PADDING_LEFT = 28;\n\n@Component({\n selector: 'lib-bimplus-attachment-item',\n imports: [BitConverterPipe, TranslateModule],\n templateUrl: './bimplus-attachment-item.component.html',\n styleUrl: './bimplus-attachment-item.component.less'\n})\nexport class BimplusAttachmentItemComponent\n implements AfterViewInit, OnDestroy\n{\n @Input() closeIconTemplate?: TemplateRef<unknown>;\n @ViewChild('attachmentSizeRef') attachmentSizeRef?: ElementRef<HTMLElement>;\n @ViewChild('attachmentNameRef') attachmentNameRef!: ElementRef<HTMLElement>;\n @Input({ required: true }) attachment!: Attachment;\n @Input() set parentWidth(value: number | undefined) {\n if (!value) {\n return;\n }\n\n this.parentWidthSignal.set(value);\n }\n @Output() deleteAttachment = new EventEmitter<Attachment>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n get type(): string {\n return `.${this.attachment.fileName.split('.').at(-1)}`;\n }\n\n private intersectionObserver?: IntersectionObserver;\n /** Parent element width. */\n private readonly parentWidthSignal = signal<number | undefined>(undefined);\n /** Attachment size text width. */\n private readonly attachmentSizeWidth = signal<number>(0);\n /** Wheter name is fully visible or not based on parent width. */\n protected readonly nameIsFullyVisible = signal<boolean>(false);\n\n protected readonly config = inject(BIMPLUS_ATTACHMENTS_CONFIG, {\n optional: true,\n });\n\n /** Attribute to indicate if show/hide size of File. */\n protected readonly hideSize = !!this.config?.hideAttachmentSize;\n\n /** Width size of file name line. */\n protected readonly nameInfoLineWidth = computed<number>(() => {\n const parentWidth = this.parentWidthSignal();\n const attachmentSizeWidth = this.attachmentSizeWidth();\n const nameIsFullyVisible = this.nameIsFullyVisible();\n\n if (!parentWidth) {\n return 0;\n }\n\n if (nameIsFullyVisible) {\n return parentWidth - BIM_ATTACHMENT_DELETE_BUTTON_WIDTH;\n }\n\n return (\n parentWidth -\n attachmentSizeWidth -\n (BIM_ATTACHMENT_DELETE_BUTTON_WIDTH + BIM_ATTACHMENT_ITEM_PADDING_LEFT)\n );\n });\n\n public ngAfterViewInit(): void {\n if (this.attachmentSizeRef) {\n this.attachmentSizeWidth.set(\n +this.attachmentSizeRef.nativeElement.clientWidth\n );\n this.createIntersectionObserver();\n this.intersectionObserver!.observe(this.attachmentNameRef.nativeElement);\n }\n }\n\n public ngOnDestroy(): void {\n this.intersectionObserver?.unobserve(this.attachmentNameRef.nativeElement);\n }\n\n private createIntersectionObserver(): void {\n const options: IntersectionObserverInit = {\n root: null,\n rootMargin: '0px',\n threshold: 1.0,\n };\n const callback: IntersectionObserverCallback = (entries) =>\n entries.forEach(({ intersectionRect, boundingClientRect }) => {\n const isWidthFullyVisible = intersectionRect.width === boundingClientRect.width;\n this.nameIsFullyVisible.set(isWidthFullyVisible);\n });\n\n this.intersectionObserver = new IntersectionObserver(callback, options);\n }\n}\n","<div class=\"bim-attachment-item\">\n <div\n data-test=\"bim-attachment\"\n (click)=\"getAttachment.emit(attachment)\"\n (keypress)=\"$event.preventDefault()\"\n title=\"{{ attachment.fileName }}\"\n class=\"bim-attachment-name\"\n [style.width.px]=\"nameInfoLineWidth()\"\n >\n <span #attachmentNameRef>{{ attachment.fileName }}</span>\n @if (nameIsFullyVisible() && !hideSize) {\n <span class=\"bim-attachment-size\">{{ attachment.size | bitConverter:'kB':'1.2-2' }}</span>\n }\n </div>\n @if(!nameIsFullyVisible() && !hideSize) {\n <span>{{ type }} </span>\n <div #attachmentSizeRef class=\"bim-attachment-size\">\n {{ attachment.size | bitConverter:'kB':'1.2-2' }}\n </div>\n }\n @if (!config?.hideDeleteAttachmentButton) {\n <span\n data-test=\"delete-attachment-btn\"\n class=\"bim-attachment-delete-button\"\n title=\"{{ '_Delete attachment' | translate }}\"\n (click)=\"deleteAttachment.emit(attachment)\"\n (keypress)=\"$event.preventDefault()\"\n >\n <span class=\"icon\">✕︎</span>\n </span>\n }\n</div>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusAttachmentItemComponent } from './components/bimplus-attachment-item/bimplus-attachment-item.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component'\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n} from './bimplus-attachments.interface';\nimport * as WebSdk from 'bimplus-websdk';\n@Component({\n selector: 'lib-bimplus-attachments',\n imports: [\n TranslateModule,\n BimplusButtonsRowComponent,\n BimplusAttachmentItemComponent,\n BimplusScrollableContainerComponent\n ],\n templateUrl: './bimplus-attachments.component.html',\n styleUrl: './bimplus-attachments.component.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusAttachmentsComponent\n extends BimplusLocalizedWidgetComponent\n implements AfterViewInit, OnDestroy\n{\n @Input() api : WebSdk.Api | null = null;\n /** Attribute for attachments which were saved to server. */\n @Input() attachments: Attachment[] = [];\n @Input() closeIconTemplate?: TemplateRef<unknown>;\n /** Attribute to set if should button display or no. */\n @Input({ transform: booleanAttribute }) listOnly = false;\n @ViewChild('attachmentListRef') attachmentListRef!: ElementRef<HTMLElement>;\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @Output() deleteAttachment = new EventEmitter<Attachment>();\n @Output() addAttachment = new EventEmitter<File>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n private resizeObserver!: ResizeObserver;\n /** Configuration token. */\n protected readonly config = inject(BIMPLUS_ATTACHMENTS_CONFIG, {\n optional: true,\n });\n /** Attachments buttons. */\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: 'add-attachment',\n title: this.translateService.instant('_Add attachment'),\n tooltip: this.translateService.instant('_Add attachment'),\n disabled: false,\n buttonStyle: 'primary',\n type: 'file',\n },\n ];\n /** Width size of file name line. */\n protected readonly attachmentListWidth = signal<number | undefined>(\n undefined\n );\n\n /**\n * Will open window to select File.\n * @return void\n * @public\n */\n public open(): void {\n this.fileInput.nativeElement.click();\n }\n\n public ngAfterViewInit(): void {\n this.createResizeObserver();\n this.resizeObserver.observe(this.attachmentListRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.resizeObserver.unobserve(this.attachmentListRef.nativeElement);\n }\n\n protected onFileChanged(files: File[] | Event, inputElement?: HTMLInputElement): void {\n let filesArray: File[] = [];\n if(files instanceof FileList){\n filesArray = Array.from(files);\n } else if(files instanceof Event){\n const input = files.target as HTMLInputElement;\n if (input?.files) { \n filesArray = Array.from(input.files); \n }\n } \n for (const file of filesArray) {\n if (file instanceof File) {\n this.addAttachment.emit(file);\n } \n } \n // reset value to be able select same value again\n if (inputElement) {\n inputElement.value = ''\n }\n }\n\n private createResizeObserver(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const { width }: DOMRectReadOnly = entries[0].contentRect;\n this.attachmentListWidth.set(width);\n });\n }\n}\n","<div class=\"bim-attachments\">\r\n @if (listOnly) {\r\n <input #fileInput hidden type=\"file\" (change)=\"onFileChanged($event, fileInput)\" multiple>\r\n } @else {\r\n <lib-bimplus-buttons-row [items]=\"config?.buttons ?? buttons\" (fileChanged)=\"onFileChanged($event)\" [isMultiple]=\"true\"/>\r\n }\r\n\r\n @if (listOnly) {\r\n <section #attachmentListRef class=\"bim-attachments-list\">\r\n @if (!attachments.length) {\r\n @if (config?.showNoAttachmentsFound) {\r\n <div\r\n data-test=\"no-attachments\"\r\n class=\"bim-attachments-list-empty\"\r\n >{{ '_No attachments found' | translate }}</div>\r\n }\r\n } @else {\r\n @for (attachment of attachments; track attachment.id) {\r\n <lib-bimplus-attachment-item\r\n [closeIconTemplate]=\"closeIconTemplate\"\r\n [attr.data-test]=\"attachment.id\"\r\n (deleteAttachment)=\"deleteAttachment.emit($event)\"\r\n (getAttachment)=\"getAttachment.emit($event)\"\r\n [parentWidth]=\"attachmentListWidth()\"\r\n [attachment]=\"attachment\"\r\n />\r\n }\r\n }\r\n </section>\r\n } @else {\r\n <div class=\"scrollable-content-container\">\r\n <lib-bimplus-scrollable-container>\r\n <section #attachmentListRef class=\"bim-attachments-list\">\r\n @if (!attachments.length) {\r\n @if (config?.showNoAttachmentsFound) {\r\n <div\r\n data-test=\"no-attachments\"\r\n class=\"bim-attachments-list-empty\"\r\n >{{ '_No attachments found' | translate }}</div>\r\n }\r\n } @else {\r\n @for (attachment of attachments; track attachment.id) {\r\n <lib-bimplus-attachment-item\r\n [closeIconTemplate]=\"closeIconTemplate\"\r\n [attr.data-test]=\"attachment.id\"\r\n (deleteAttachment)=\"deleteAttachment.emit($event)\"\r\n (getAttachment)=\"getAttachment.emit($event)\"\r\n [parentWidth]=\"attachmentListWidth()\"\r\n [attachment]=\"attachment\"\r\n />\r\n }\r\n }\r\n </section>\r\n </lib-bimplus-scrollable-container>\r\n </div> \r\n }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n Attachment,\r\n AttachmentBuilder,\r\n} from '../bimplus-attachments.interface';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BimplusAttachmentsService {\r\n public getAttachment(value: Attachment | File): Attachment {\r\n let attachment: Attachment;\r\n if (value instanceof File) {\r\n attachment = AttachmentBuilder.setFile(value)\r\n .setFileName(value.name)\r\n .build();\r\n } else {\r\n attachment = AttachmentBuilder.create(value).build();\r\n }\r\n\r\n return attachment;\r\n }\r\n\r\n public download(href: string, fileName: string): void {\r\n const anchor: HTMLAnchorElement = document.createElement('a');\r\n anchor.rel = 'noopener noreferrer';\r\n anchor.target = '_blank';\r\n anchor.href = href;\r\n anchor.download = fileName;\r\n anchor.click();\r\n }\r\n}\r\n","import { Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\n\nexport interface CommentDialogData {\n title: string;\n message: string;\n acceptCallback: () => void;\n}\n\nconst DELETE_BUTTON_ID = 'delete';\nconst CANCEL_BUTTON_ID = 'cancel';\n\n@Component({\n selector: 'lib-bimplus-overlay-dialog-delete',\n templateUrl: './bimplus-overlay-dialog-delete.component.html',\n styleUrls: ['./bimplus-overlay-dialog-delete.component.less'],\n imports: [TranslateModule, BimplusButtonsRowComponent],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusOverlayDialogDeleteComponent {\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n\n\n private _title: string = '';\n private _message: string = '';\n private readonly data: CommentDialogData | undefined;\n acceptCallback: (() => void) | undefined;\n protected readonly buttons: BimplusButtonRowItem[] = [\n {\n id: DELETE_BUTTON_ID,\n title: this.translateService.instant('_Delete'),\n tooltip: this.translateService.instant('_Delete'),\n disabled: false,\n buttonStyle: 'primary'\n },\n {\n id: CANCEL_BUTTON_ID,\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'secondary'\n }\n ];\n\n @Input()\n get title(): string {\n return this._title;\n }\n set title(value: string) {\n this._title = value;\n }\n\n @Input()\n get message(): string {\n return this._message;\n }\n set message(value: string) {\n this._message = value;\n }\n\n constructor() {\n this.data = this.dialogService.inputData as CommentDialogData;\n if (this.data) {\n this._title = this.data.title || '';\n this._message = this.data.message || '';\n this.acceptCallback = this.data.acceptCallback;\n }\n }\n\n close(): void {\n this.dialogService.close();\n }\n\n keypressClose(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.dialogService.close();\n }\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent): void {\n this.dialogService.close();\n\n if ($event.id === DELETE_BUTTON_ID) {\n this.acceptCallback?.();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n}\n","<div class=\"overlay-dialog-container\">\n <div class=\"overlay-dialog-container_title\">\n <div class=\"overlay-dialog-container_title_icon\"></div>\n <div class=\"overlay-dialog-container_title_msg\">\n {{title}}\n </div>\n <div\n class=\"overlay-dialog-container_title_close\"\n (click)=\"close()\"\n (keypress)=\"keypressClose($event)\"\n ></div>\n </div>\n <div class=\"overlay-dialog-container_content\">\n <div\n class=\"overlay-dialog-container_content_msg\"\n [innerHTML]=\"message\">\n </div>\n <div class=\"buttons\">\n <lib-bimplus-buttons-row\n [items]=\"buttons\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\"\n />\n </div>\n </div>\n</div>\n","import { Directive, ElementRef, HostListener, Input, inject } from '@angular/core';\n\n@Directive({\n selector: '[libAutoResizeTextarea]',\n standalone: true\n})\nexport class AutoResizeTextareaDirective {\n private el = inject(ElementRef);\n\n\n private _libAutoResizeTextarea = false;\n private _autoResizeMinRows = 1;\n private _autoResizeMaxRows = 1;\n private currentRows = 1;\n private offsetHeight = 0;\n private readonly input: HTMLTextAreaElement;\n private avgLineHeight = 0;\n\n @Input()\n set autoResizeMinRows(value: number) {\n this._autoResizeMinRows = value > 0 ? value : 1;\n this.currentRows = this.currentRows < value ? value : this.currentRows;\n this.input.rows = value;\n }\n get autoResizeMinRows(): number {\n return this._autoResizeMinRows;\n }\n\n @Input()\n set autoResizeMaxRows(value: number) {\n this._autoResizeMaxRows = value < 1 ? 1 : value;\n }\n get autoResizeMaxRows(): number {\n return this._autoResizeMaxRows;\n }\n\n @Input()\n set libAutoResizeTextarea(condition: boolean) {\n this._libAutoResizeTextarea = condition;\n }\n get libAutoResizeTextarea(): boolean {\n return this._libAutoResizeTextarea;\n }\n\n constructor() {\n this.input = this.el.nativeElement;\n }\n\n @HostListener('input')\n onInput(): void {\n if (this.libAutoResizeTextarea) {\n this.calculateLineHeight();\n this.updateRows();\n }\n }\n\n private calculateLineHeight(): void {\n const style = window.getComputedStyle(this.input, null);\n const lineHeight = style.getPropertyValue('line-height');\n let newLineHeight = 0;\n if (lineHeight === 'normal') {\n newLineHeight = (parseFloat(style.getPropertyValue('font-size')) || 16) * 1.14;\n } else {\n newLineHeight = parseFloat(lineHeight);\n }\n this.avgLineHeight = Math.trunc(newLineHeight);\n }\n\n private updateRows(): void {\n if (this.offsetHeight <= 0) {\n this.offsetHeight = this.input.scrollHeight;\n }\n\n this.input.rows = this._autoResizeMinRows;\n\n const rows = Math.floor(\n (this.input.scrollHeight - this.offsetHeight) /\n this.avgLineHeight\n );\n\n const rowsCount = this._autoResizeMinRows + rows;\n\n this.input.rows = rowsCount > this._autoResizeMaxRows\n ? this._autoResizeMaxRows\n : rowsCount;\n }\n\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { AutoResizeTextareaDirective } from './auto-resize-textarea.directive';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'lib-bimplus-textarea',\n templateUrl: './bimplus-textarea.component.html',\n styleUrls: ['./bimplus-textarea.component.less'],\n imports: [ReactiveFormsModule, AutoResizeTextareaDirective, TranslateModule]\n})\nexport class BimplusTextareaComponent implements OnInit, OnDestroy {\n\n textareaControl = new FormControl();\n\n private _textareaSubscription?: Subscription;\n\n @Output() textAreaValueChange = new EventEmitter<string>();\n\n private _name = '';\n private _placeholder = '';\n private _readonly = false;\n private _required = false;\n private _rows = 1;\n private _activeAutoResizeTextarea = false;\n private _minRows = 1;\n private _maxRows = 1;\n private _clearValue = false;\n\n @Input()\n set name(value: string) {\n this._name = value;\n }\n get name(): string {\n return this._name;\n }\n\n @Input()\n set placeholder(value: string) {\n this._placeholder = value;\n }\n get placeholder(): string {\n return this._placeholder;\n }\n\n @Input()\n set readonly(value: boolean) {\n this._readonly = value;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n @Input()\n set required(value: boolean) {\n this._required = value;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set minRows(value: number) {\n this._minRows = value;\n }\n get minRows(): number {\n return this._minRows;\n }\n\n @Input()\n set maxRows(value: number) {\n this._maxRows = value;\n }\n get maxRows(): number {\n return this._maxRows;\n }\n\n @Input()\n set activeAutoResizeTextarea(value: boolean) {\n this._activeAutoResizeTextarea = value;\n }\n get activeAutoResizeTextarea(): boolean {\n return this._activeAutoResizeTextarea;\n }\n\n @Input()\n set clearValue(clear: boolean) {\n if (clear) {\n this.textareaControl.reset();\n this._clearValue = false;\n } else {\n this._clearValue = clear;\n }\n }\n get clearValue(): boolean {\n return this._clearValue;\n }\n\n @Input()\n set rows(value: number) {\n this._rows = value;\n }\n get rows(): number {\n return this._rows;\n }\n\n constructor() {}\n\n ngOnInit() {\n this._textareaSubscription = this.textareaControl.valueChanges.subscribe(value => {\n this.textAreaValueChange.emit(value);\n });\n }\n\n getTextareaValue() {\n return this.textareaControl.value;\n }\n\n onKeydown(event: KeyboardEvent): boolean {\n const forbiddenKeys = ['<', '>'];\n if (forbiddenKeys.includes(event.key)) {\n event.preventDefault();\n return false;\n }\n return true;\n }\n\n ngOnDestroy() {\n this._textareaSubscription?.unsubscribe();\n }\n}\n","@if(activeAutoResizeTextarea){\n <textarea\n [formControl]=\"textareaControl\"\n [placeholder]=\"placeholder | translate\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (keydown)=\"onKeydown($event)\"\n [libAutoResizeTextarea]=\"activeAutoResizeTextarea\"\n [autoResizeMinRows]=\"minRows\"\n [autoResizeMaxRows]=\"maxRows\"\n ></textarea>\n } @else {\n <textarea\n [formControl]=\"textareaControl\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (keydown)=\"onKeydown($event)\"\n [rows]=\"rows\"\n ></textarea>\n }\n","import { formatDate, NgForOf } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { TranslatePipe } from \"@ngx-translate/core\";\nimport { BimplusAttachmentsComponent } from '../bimplus-attachments/bimplus-attachments.component';\nimport { Attachment, BIMPLUS_ATTACHMENTS_CONFIG, BimplusAttachmentsConfig } from '../bimplus-attachments/bimplus-attachments.interface';\nimport { CommentOutputData } from '../bimplus-object-comments-list/bimplus-object-comments-list.interface';\n\nconst config: BimplusAttachmentsConfig = {\n hideDeleteAttachmentButton: true,\n hideAttachmentSize: true\n}\n\n@Component({\n selector: 'lib-bimplus-comment',\n templateUrl: './bimplus-comment.component.html',\n styleUrls: ['./bimplus-comment.component.less'],\n imports: [NgForOf, TranslatePipe, BimplusAttachmentsComponent],\n providers: [{ provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config }],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusCommentComponent {\n\n @Output() outputActionCommentEvent = new EventEmitter<CommentOutputData>();\n @Output() getAttachment = new EventEmitter<Attachment>();\n\n private _message: string | undefined = undefined;\n \n @Input() api : WebSdk.Api | null = null;\n\n /** Attachments links to particular comment. */\n @Input() attachmentLinkItems:WebSdk.AttachmentLink[] = []\n\n @Input()\n set message(value: string | undefined) {\n this._message = value;\n }\n get message(): string | undefined {\n return this._message;\n }\n\n private _date = '';\n @Input()\n set date(value: string) {\n const formattedValue = new Intl.DateTimeFormat(undefined, { timeStyle: \"short\" }).format(new Date(value));\n this._date = formattedValue;\n }\n get date(): string {\n return this._date;\n }\n\n private _action = 'close';\n @Input()\n set action(value: string) {\n this._action = value;\n }\n get action(): string {\n return this._action;\n }\n\n private _commentId = '';\n @Input()\n set commentId(value: string) {\n this._commentId = value;\n }\n get commentId(): string {\n return this._commentId;\n }\n\n private _isActUserAuthor = true;\n @Input()\n set isActUserAuthor(value: boolean) {\n this._isActUserAuthor = value;\n }\n get isActUserAuthor(): boolean {\n return this._isActUserAuthor;\n }\n\n private _displayname = '';\n @Input()\n set displayname(value: string) {\n this._displayname = value;\n }\n get displayname(): string {\n return this._displayname;\n }\n\n @Input() hyperlinks: WebSdk.Hyperlink[] | undefined = [];\n\n /** Attachments related to particular comment. */\n @Input() attachments: WebSdk.Attachment[] = [];\n\n emitAction(data: CommentOutputData): void {\n this.outputActionCommentEvent.emit(data);\n }\n\n close(): void {\n const data: CommentOutputData = { action: this.action, data: { commentId: this.commentId } };\n this.emitAction(data);\n }\n\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.close();\n }\n }\n\n formatTime(date: string): string {\n const locale = window.navigator.language;\n const unformattedDate = new Date(date);\n if (locale.includes('en')) {\n return formatDate(unformattedDate, 'hh:mm a', locale);\n }\n return formatDate(unformattedDate, 'hh:mm', locale);\n }\n}\n","@if (message !== undefined) {\n<div \n class=\"comment-item-container\"\n [class]=\"isActUserAuthor ? 'author' : ''\">\n @if (!isActUserAuthor) {\n <div class=\"comment-header\">\n <div class=\"comment-title\">{{isActUserAuthor? '' : displayname}}</div> \n </div>\n }\n @if (isActUserAuthor) {\n <div\n class=\"comment-close\"\n (click)=\"close()\"\n (keydown)=\"onKeyPress($event)\"\n ></div>\n }\n @if (message !== undefined){\n <div class=\"comment-item-text\">{{message}}</div>\n }\n\n @if (attachments.length) {\n <lib-bimplus-attachments \n listOnly \n [attachments]=\"attachments\" \n (getAttachment)=\"getAttachment.emit($event)\"\n />\n }\n\n @if (attachmentLinkItems.length) {\n <a *ngFor=\"let attachmentLink of attachmentLinkItems\" class=\"item-row\" href=\"{{attachmentLink.link}}\" target=\"_blank\">\n <div class=\"attachment-link-icon\" title=\"{{ '_Attachment_link' | translate }}\"></div>\n <div class=\"text\" title=\"{{ attachmentLink.name }}\">{{ attachmentLink.name}}</div>\n </a> \n }\n\n <a *ngFor=\"let link of hyperlinks\" class=\"item-row\" href=\"{{ link.url }}\" target=\"_blank\">\n <div class=\"link-icon\" title=\"{{ '_Hyperlink' | translate }}\"></div>\n <div class=\"text\" title=\"{{ link.url }}\">{{ link.name }}</div>\n </a>\n \n @if (date && date.length > 0){\n <div class=\"comment-item-date\">\n {{date}}\n </div>\n }\n</div>\n}\n","import { inject, Injectable } from '@angular/core';\nimport * as WebSdk from \"bimplus-websdk\";\nimport {catchError, defaultIfEmpty, first, forkJoin, from, map, Observable, of, switchMap} from 'rxjs';\nimport { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';\nimport { Attachment } from '../bimplus-attachments/bimplus-attachments.interface';\nimport { postAttachmentLinks } from '../links-to-documents/links-to-documents.component';\nimport {DecoratorsService } from '../../services/decorators.service';\n\n@Injectable()\nexport class BimplusObjectCommentsListService {\n private readonly decorators = inject(DecoratorsService);\n\n public api!: WebSdk.Api;\n\n private readonly bimplusAttachmentsService = inject(BimplusAttachmentsService);\n\n\n public deleteComment(commentId: string) {\n return from(this.api.comments.delete(commentId));\n }\n\n public downloadAttachment(attachment: Attachment) {\n const { id, fileName } = attachment;\n if (!this.api) {\n return;\n }\n const api = this.api;\n const path = `${api.getApiTeamUrl()}attachments/${id}/download?api-token=${api.getAccessToken()}&openInBrowser=true`;\n this.bimplusAttachmentsService.download(path, fileName);\n }\n\n public postComments(\n rootObjectId: string,\n dataText: string,\n hyperlinks: Partial<WebSdk.Hyperlink>[],\n attachments: Attachment[],\n newAttachmentIDs: string[]\n ): Observable<string | null> {\n return from(this.api.objects.postComment(rootObjectId, dataText)).pipe(\n switchMap(createdComment => {\n const { id: createdCommentId } = createdComment;\n\n // Create form data for attachments\n const formData = attachments.map(attachment => {\n const attachmentsPayload = new FormData();\n attachmentsPayload.append('file', attachment.file!);\n attachmentsPayload.append('name', attachment.fileName);\n attachmentsPayload.append('size', attachment.file!.size.toString());\n attachmentsPayload.append('type', attachment.file!.type);\n attachmentsPayload.append('objectId', createdCommentId);\n return attachmentsPayload;\n });\n\n // Post attachments if any, otherwise continue\n const attachmentCalls = formData.length\n ? forkJoin(formData.map(data => from(this.api.objects.postAttachment(createdCommentId, data, undefined, ''))))\n : of([]);\n\n return attachmentCalls.pipe(map(() => createdCommentId));\n }),\n switchMap(createdCommentId => {\n // Post attachment links\n return newAttachmentIDs.length\n ? postAttachmentLinks(newAttachmentIDs, createdCommentId, this.api).pipe(map(() => createdCommentId))\n : of(createdCommentId);\n }),\n switchMap(createdCommentId => {\n // Manage hyperlinks\n return hyperlinks.length\n ? this.manageHyperLinks(createdCommentId, hyperlinks).pipe(map(() => createdCommentId))\n : of(createdCommentId);\n }),\n defaultIfEmpty(null),\n first(),\n catchError(error => {\n console.error('Error in postComments:', error);\n return of(null); // Ensure the stream completes with null in case of an error\n })\n );\n }\n private decorateComment(comment: WebSdk.CommentResponse) {\n if(comment.attachmentLinks && comment.attachmentLinks.length > 0) {\n const decoratedLinks = comment.attachmentLinks.map((link) => this.decorators.decorateLink(this.api!,link, [comment.id])); \n comment.attachmentLinks = decoratedLinks; \n }\n }\n\n private decorateComments(comments: WebSdk.CommentsResponse) { \n comments.forEach((comment) => {\n this.decorateComment(comment);\n });\n return comments;\n }\n\n public loadComments(objectId: string): Observable<WebSdk.CommentsResponse> {\n return from(this.api.objects.getComments(objectId)).pipe(\n map((response: WebSdk.CommentsResponse | undefined) => {\n if (!response) {\n throw new Error('Comments response is undefined'); // Handle undefined response\n }\n // Modify the response here\n return this.decorateComments(response!); \n })\n );\n }\n\n public manageHyperLinks(\n createdCommentId: string,\n hyperlinks: Partial<WebSdk.Hyperlink>[]\n ) {\n const hyperlinkPromises: (Promise<void | WebSdk.Hyperlink> | undefined)[] =\n [];\n\n hyperlinks.forEach((h) => {\n if (!h) {\n return;\n }\n const hyperlinkData = JSON.stringify({\n name: h.name,\n objectId: h.objectId,\n url: h.url\n });\n const promise = this.api?.objects\n .postHyperlink(createdCommentId, hyperlinkData)\n .catch((err) => {\n console.log(err);\n });\n hyperlinkPromises.push(promise);\n });\n\n return from(Promise.all(hyperlinkPromises));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { StatusBarData } from './statusBar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BimplusStatusBarService {\n\n _statusBarData: BehaviorSubject<StatusBarData> = new BehaviorSubject<StatusBarData>({\n title: '',\n statusBarVisible: false\n });\n\n constructor() { }\n\n get statusBarVisible(): boolean {\n return this._statusBarData.value.statusBarVisible;\n }\n\n get title(): string {\n return this._statusBarData.value.title;\n }\n\n get statusBarData(): StatusBarData {\n return this._statusBarData.value;\n }\n\n get statusBarDataSubscription(): BehaviorSubject<StatusBarData> {\n return this._statusBarData;\n }\n\n setStatusBarData(data: StatusBarData): void {\n this._statusBarData.next(data);\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, signal, SimpleChanges, ViewEncapsulation, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BimplusOverlayDialogDeleteComponent } from '../bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AsyncPipe, DatePipe, NgFor } from '@angular/common';\nimport { DialogService } from '../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nimport { BimplusTextareaComponent } from '../bimplus-textarea/bimplus-textarea.component';\nimport { BimplusCommentComponent } from '../bimplus-comment/bimplus-comment.component';\nimport * as WebSdk from \"bimplus-websdk\";\nimport { BimplusButtonClickEvent, BimplusButtonRowItem } from '../bimplus-buttons-row/bimplus-buttons-row.interface';\nimport { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';\nimport { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';\nimport { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component';\nimport { CommentData, CommentOutputData, IDialogConfirmClose } from './bimplus-object-comments-list.interface';\nimport { BimplusInputTextFieldComponent } from \"../bimplus-input-text-field/bimplus-input-text-field.component\";\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from \"@angular/forms\";\nimport { BimplusAttachmentsComponent } from '../bimplus-attachments/bimplus-attachments.component';\nimport { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';\nimport {\n Attachment,\n BIMPLUS_ATTACHMENTS_CONFIG,\n BimplusAttachmentsConfig,\n} from '../bimplus-attachments/bimplus-attachments.interface';\nimport { BehaviorSubject, switchMap } from 'rxjs';\nimport { BimplusObjectCommentsListService } from './bimplus-object-comments-list.service';\nimport { LinksToDocumentsComponent } from '../links-to-documents/links-to-documents.component';\nimport { ProjectNavigatorProject } from '../project-models/project-models.interface';\nimport { BimplusStatusBarService } from '../bimplus-status-bar/bimplus-status-bar.service';\nimport { NewAttachInfo } from './bimplus-object-comments-list.interface';\n\n\nconst config: BimplusAttachmentsConfig = {\n showNoAttachmentsFound: false,\n hideAttachmentSize: true,\n};\n@Component({\n selector: 'lib-bimplus-object-comments-list',\n templateUrl: './bimplus-object-comments-list.component.html',\n styleUrls: ['./bimplus-object-comments-list.component.less'],\n imports: [\n NgFor,\n CommonModule,\n BimplusTextareaComponent,\n BimplusCommentComponent,\n BimplusButtonsRowComponent,\n TranslateModule,\n BimplusScrollableContainerComponent,\n BimplusInputTextFieldComponent,\n BimplusAttachmentsComponent,\n LinksToDocumentsComponent,\n FormsModule,\n ReactiveFormsModule,\n AsyncPipe,\n ],\n providers: [\n DatePipe,\n BimplusObjectCommentsListService,\n BimplusAttachmentsService,\n { provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusObjectCommentsListComponent\n extends BimplusLocalizedWidgetComponent\n implements OnInit, OnChanges {\n private readonly dialogService = inject(DialogService);\n private readonly datePipe = inject(DatePipe);\n private readonly formBuilder = inject(FormBuilder);\n protected readonly bimplusAttachmentsService = inject(BimplusAttachmentsService);\n private readonly bimplusObjectCommentsListService = inject(BimplusObjectCommentsListService);\n private statusBarService = inject(BimplusStatusBarService);\n\n hyperlinkForm: FormGroup;\n\n @Input({ required: true }) api!: WebSdk.Api | null;\n @Input() project: ProjectNavigatorProject | null = null;\n @Input() wormholeSelector: string = \"localEmbeddedModalId\";\n @Input() env: string = \"prod\";\n @Input() attachmentLinkItems: WebSdk.AttachmentLink[] = []\n @Input() inputBaseUrl: string = '';\n protected readonly commentsList$ = new BehaviorSubject<WebSdk.CommentResponse[]>([]);\n protected readonly loading = signal(false);\n protected readonly attachmentsState = signal<Attachment[]>([]);\n buttonRowItems: BimplusButtonRowItem[] = [];\n hyperlinkButtonRowItems: BimplusButtonRowItem[] = [];\n textAreaValue: string | null = null;\n lastShownDate = '';\n placeholder = '';\n name = '';\n readonly = false;\n autoResizeTextarea = true;\n minRows = 3;\n maxRows = 10;\n clearValue = false;\n statusBarTitleMessage = this.translateService.instant('_Loading');\n\n // attachment ids ready to map to concrete comment\n newAttachmentIDs: string[] = []\n\n isAddingHyperlink: boolean = false;\n\n newCommentAttachments: NewAttachInfo[] = [];\n\n private _rootObjectId = '';\n private _userId = '';\n\n @Input()\n set rootObjectId(id: string) {\n this._rootObjectId = id;\n }\n\n get rootObjectId(): string {\n return this._rootObjectId;\n }\n\n @Input()\n set userId(id: string) {\n this._userId = id;\n }\n\n get userId(): string {\n return this._userId;\n }\n\n constructor() {\n super();\n\n this.hyperlinkForm = this.formBuilder.group({\n name: ['', []],\n url: [\n '',\n [\n Validators.required,\n Validators.pattern(/^[^<>]*$/), // Do not allow < or >\n Validators.pattern(/^(?!\\s*$).+/), // Do not allow all empty string, but allow text after spaces\n ],\n ],\n });\n }\n\n isCreateButtonDisabled(): boolean {\n return !(\n this.textAreaValue ||\n this.newAttachmentIDs?.length > 0 ||\n this.getHyperlinks(this.rootObjectId)?.length > 0 ||\n this.attachmentsState()?.length > 0\n );\n }\n\n checkCreateButtonState() {\n if (!this.buttonRowItems?.[0]) {\n return;\n }\n this.buttonRowItems[0].disabled = this.isCreateButtonDisabled();\n }\n\n public ngOnInit(): void {\n this.bimplusObjectCommentsListService.api = this.api!;\n this.loadComments();\n const submit: BimplusButtonRowItem[] = [\n {\n id: 'submit',\n title: this.translateService.instant('_Add comment'),\n tooltip: this.translateService.instant('_Add comment'),\n disabled: this.isCreateButtonDisabled(),\n buttonStyle: 'primary',\n },\n ];\n this.placeholder = this.translateService.instant(\n '_Place comment text here'\n );\n this.name = this.translateService.instant('comment');\n this.buttonRowItems = submit;\n\n this.hyperlinkButtonRowItems.push(\n {\n id: 'cancel-hyperlink',\n title: this.translateService.instant('_Cancel'),\n tooltip: this.translateService.instant('_Cancel'),\n disabled: false,\n buttonStyle: 'primary',\n },\n {\n id: 'add-hyperlink',\n title: this.translateService.instant('_Add hyperlink'),\n tooltip: this.translateService.instant('_Add hyperlink'),\n disabled: true,\n buttonStyle: 'primary',\n }\n );\n\n this.hyperlinkForm.statusChanges.subscribe((status) => {\n this.hyperlinkButtonRowItems[1].disabled = status !== 'VALID';\n });\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rootObjectId'] && !changes['rootObjectId'].firstChange) {\n this.lastShownDate = '';\n this.loadComments();\n }\n }\n\n protected onAttachmentsLinkChange(newAttachments: NewAttachInfo[]): void {\n const newDecoratedAttachments: NewAttachInfo[] = newAttachments.map((attachment) => {\n attachment.iconClass = 'fa fa-link';\n attachment.iconTitle = this.translateService.instant('_Attachment_link');\n attachment.deleteButtonTitle = this.translateService.instant('_Delete_attachmentlink');\n return attachment;\n });\n const newCommentAttachments = this.newCommentAttachments.filter((attachment) => attachment?.type === 'Hyperlink');\n this.newCommentAttachments = [...newCommentAttachments, ...newDecoratedAttachments];\n this.newAttachmentIDs = newAttachments.map((attachment) => attachment.id);\n this.checkCreateButtonState();\n }\n\n\n protected onAddAttachment(file: File): void {\n const attachment = this.bimplusAttachmentsService.getAttachment(file);\n this.attachmentsState.update(attachments => ([...attachments, attachment]));\n this.checkCreateButtonState();\n }\n\n protected onDeleteAttachment(attachment: Attachment): void {\n this.attachmentsState.update(attachments => attachments.filter(a => a !== attachment));\n this.checkCreateButtonState();\n }\n\n /** Event on click attachment. */\n protected onGetAttachment(attachment: Attachment): void {\n this.bimplusObjectCommentsListService.downloadAttachment(attachment);\n }\n\n onTextareaValueChange(value: string) {\n this.textAreaValue = value;\n this.checkCreateButtonState();\n }\n\n handleActionCommentEvent(event: CommentOutputData) {\n if (event.action === 'delete') {\n const data = event.data as CommentData;\n this.openDialogDeleteComment(data.commentId);\n }\n }\n\n actionDialogClose(data: IDialogConfirmClose) {\n this.dialogService.close(data);\n }\n\n openDialogDeleteComment(commentId: string) {\n this.dialogService.open(BimplusOverlayDialogDeleteComponent, {\n options: {\n position: 'middle',\n positionOptions: {},\n overlayClickEnabled: false,\n overlayVisibilityEnabled: true,\n draggable: true,\n },\n data: {\n title: this.translateService.instant(\n '_Comment delete confirmation title'\n ),\n message: this.translateService.instant(\n '_Comment delete confirmation message'\n ),\n acceptCallback: () => {\n this.deleteComment(commentId);\n },\n },\n });\n }\n\n isSameDate(date?: string): boolean {\n if (!date) {\n return false;\n }\n const shortDate = this.datePipe.transform(date, 'shortDate');\n if (!shortDate) {\n // Transformation date to shortDate failed\n return false;\n }\n if (this.lastShownDate === shortDate) {\n // Date is identical to the last shown date\n return true;\n }\n // Valid date but not identical to last one\n this.lastShownDate = shortDate;\n return false;\n }\n\n buttonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'submit') {\n if (!this.api || !this.rootObjectId) return;\n this.loading.set(true);\n\n const data = {\n text: this.textAreaValue,\n objectId: this.rootObjectId,\n };\n const dataText = JSON.stringify(data);\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Creating new comment') });\n this.bimplusObjectCommentsListService.postComments(this.rootObjectId, dataText, this.getHyperlinks(this.rootObjectId), this.attachmentsState(), this.newAttachmentIDs)\n .pipe(switchMap(() => this.bimplusObjectCommentsListService.loadComments(this.rootObjectId)))\n .subscribe({\n next: (comments) => this.commentsList$.next(comments),\n complete: () => {\n this.attachmentsState.set([]);\n this.newCommentAttachments = [];\n this.attachmentLinkItems = [];\n this.newAttachmentIDs = [];\n this.textAreaValue = null;\n this.clearValue = true;\n this.buttonRowItems[0].disabled = true;\n this.loading.set(false);\n this.statusBarService.setStatusBarData({ statusBarVisible: false, title: '' });\n }\n });\n }\n }\n\n hyperlinkButtonRowButtonClicked($event: BimplusButtonClickEvent) {\n if ($event.id === 'add-hyperlink') {\n this.addNewCommentHyperlink();\n } else if ($event.id === 'cancel-hyperlink') {\n this.hyperlinkForm.reset();\n this.isAddingHyperlink = false;\n }\n }\n\n addNewCommentHyperlink() {\n if (!this.hyperlinkForm.valid) {\n return;\n }\n\n let sanitizedUrl: string = this.hyperlinkForm.value['url'].trim();\n if (!RegExp(/^http(s?):\\/\\//).exec(sanitizedUrl)) {\n sanitizedUrl = 'https://' + sanitizedUrl;\n }\n let sanitizedName = this.hyperlinkForm.value['name']?.trim() ?? '';\n if (sanitizedName === '') {\n sanitizedName = sanitizedUrl;\n }\n const newItem: NewAttachInfo = {\n id: '',\n type: 'Hyperlink',\n nameShort: sanitizedName,\n name: sanitizedName,\n url: sanitizedUrl,\n iconClass: 'fa fa-link',\n iconTitle: this.translateService.instant('_Hyperlink'),\n deleteButtonTitle: this.translateService.instant('_Remove hyperlink'),\n };\n this.newCommentAttachments.push(newItem);\n this.hyperlinkForm.reset();\n this.isAddingHyperlink = false;\n this.checkCreateButtonState();\n }\n\n deleteComment(commentId: string) {\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Deleting the comment') });\n this.bimplusObjectCommentsListService.deleteComment(commentId)\n .subscribe(() => this.loadComments())\n }\n\n addHyperlinkIconClicked() {\n this.isAddingHyperlink = !this.isAddingHyperlink;\n }\n\n addHyperlinkIconKeypress(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n this.addHyperlinkIconClicked();\n }\n }\n\n removeNewCommentAttachment(link: NewAttachInfo) {\n this.newCommentAttachments = this.newCommentAttachments.filter(\n (commentLink) => commentLink.id !== link.id\n );\n if (link?.type !== 'Hyperlink') {\n this.attachmentLinkItems = this.attachmentLinkItems.filter(\n (attachmentLink) => attachmentLink.id !== link.id\n );\n this.newAttachmentIDs = this.newAttachmentIDs.filter(id => id !== link.id)\n }\n this.checkCreateButtonState();\n }\n\n removeNewCommentAttachmentKeypress(\n event: KeyboardEvent,\n link: NewAttachInfo\n ) {\n if (event.key === 'Enter' || event.key === ' ') {\n this.removeNewCommentAttachment(link);\n }\n }\n\n isActUserAuthor(item: WebSdk.CommentResponse) {\n return item.author?.id === this.userId;\n }\n\n displayName(item: WebSdk.CommentResponse): string {\n return item.author?.displayname ? item.author?.displayname : '';\n }\n\n formatDate(date: string): string {\n const locale = window.navigator.language;\n if (locale.includes('en')) {\n const unformattedDate = new Date(date);\n return unformattedDate.getMonth() + '/' + unformattedDate.getDate() + '/' + unformattedDate.getFullYear();\n }\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"short\" }).format(new Date(date));\n }\n\n clearTextareaValue() {\n return this.clearValue;\n }\n\n\n private loadComments() {\n this.statusBarService.setStatusBarData({ statusBarVisible: true, title: this.translateService.instant('_Loading comments list') });\n this.loading.set(true);\n this.bimplusObjectCommentsListService\n .loadComments(this.rootObjectId)\n .subscribe({\n next: comments => {\n this.commentsList$.next(comments)\n },\n\n complete: () => {\n this.loading.set(false);\n this.statusBarService.setStatusBarData({ statusBarVisible: false, title: '' });\n }\n })\n }\n\n private getHyperlinks(objectId: string): Partial<WebSdk.Hyperlink>[] {\n return this.newCommentAttachments\n .filter(h => h?.type === 'Hyperlink') // Filter objects with type 'Hyperlink'\n .map((h) => ({\n ...h,\n objectId,\n }));\n }\n\n onEnterKeyPressedInHyperlinkForm() {\n this.addNewCommentHyperlink();\n }\n}\n","@if (!loading()) {\n<div class=\"comment-tab-container\">\n <div class=\"textarea-container\">\n <lib-bimplus-textarea\n (textAreaValueChange)=\"onTextareaValueChange($event)\"\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [activeAutoResizeTextarea]=\"true\"\n [minRows]=\"minRows\"\n [maxRows]=\"maxRows\"\n [clearValue]=\"clearTextareaValue()\"\n ></lib-bimplus-textarea>\n </div>\n\n <lib-bimplus-attachments\n #attachments\n listOnly\n [class]=\"['new-comment-attachments']\"\n [attachments]=\"attachmentsState()\"\n (addAttachment)=\"onAddAttachment($event)\"\n (deleteAttachment)=\"onDeleteAttachment($event)\"\n />\n\n <lib-links-to-documents \n #linksToDocuments\n listOnly\n hideAttachmentSize\n showEmptyMessage=\"false\" \n [attachments]=\"attachmentLinkItems\"\n (attachmentsLinkChange)=\"onAttachmentsLinkChange($event)\"\n [api]=\"api\" \n [project]=\"project\"\n [rootObjectId]=''\n [canCreateAttachmentLink]=\"true\"\n [canDeleteAttachmentLink]=\"true\"\n [wormholeSelector]=\"wormholeSelector\"\n [env]=\"env\"\n [inputBaseUrl]=\"inputBaseUrl\"\n />\n\n @if (newCommentAttachments.length > 0) {\n <div class=\"new-comment-attachment-list\">\n <div *ngFor=\"let item of newCommentAttachments\" \n [ngClass]=\"'new-comment-attachment ' + item.type\"\n [title]=\"item.type === 'Hyperlink' ? item.url: item.name\">\n <div \n [ngClass]=\"'icon-small ' + item.type\" \n [title]=\"item.type === 'Hyperlink' ? item.url: item.name\">\n </div>\n <div class=\"text\">{{ item.name }} </div> \n <span class=\"cancel-icon\" title=\"{{ item.deleteButtonTitle}}\" (click)=\"removeNewCommentAttachment(item)\" (keydown)=\"removeNewCommentAttachmentKeypress($event, item)\"></span>\n </div> \n </div>\n }\n\n @if (isAddingHyperlink) {\n <form [formGroup]=\"hyperlinkForm\" class=\"hyperlink-input-form\">\n <div class=\"hyperlink-input-row\">\n <div class=\"link-icon icon-next-to-text-input\"></div>\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\n </div>\n <div class=\"hyperlink-input-row\">\n <div class=\"icon-next-to-text-input\"></div>\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\n </div>\n\n <lib-bimplus-buttons-row [items]=\"hyperlinkButtonRowItems\" (buttonClicked)=\"hyperlinkButtonRowButtonClicked($event)\"/>\n </form>\n }\n\n <div class=\"comments-tab-attachments-section\">\n <div class=\"comments-attachments-list\">\n <div class=\"tab-attachments icon attachments-icon hidden\"></div>\n <div class=\"attachment-icon icon-small interactive\" [title]=\"'_Add attachment' | translate\" (click)=\"attachments.open()\" (keydown)=\"attachments.open()\"></div>\n <div class=\"link-icon icon-small interactive\" [title]=\"'_Add hyperlink' | translate\" (click)=\"addHyperlinkIconClicked()\" (keydown)=\"addHyperlinkIconKeypress($event)\"></div>\n <div class=\"attachment-link-icon icon-small interactive\" [title]=\"'_Add_attachment_link' | translate\" (click)=\"linksToDocuments.createAttachmentLink(api!)\" (keydown)=\"linksToDocuments.createAttachmentLink(api!)\"></div>\n <div class=\"tab-attachmentlinks icon attachments-icon hidden\"></div>\n </div>\n <div class=\"add-comment\">\n <lib-bimplus-buttons-row\n [items]=\"buttonRowItems\"\n (buttonClicked)=\"buttonRowButtonClicked($event)\" />\n </div>\n </div>\n\n <div class=\"comments-separator\"></div>\n\n <div class=\"scrollable-content-container\">\n <lib-bimplus-scrollable-container>\n @if ((commentsList$ | async)?.length === 0) {\n <div class=\"no-comments-found\">\n {{ '_No comments found' | translate }}\n </div>\n } @else {\n @for (item of commentsList$ | async; track item) {\n @if(item.createdAt && !isSameDate(item.createdAt)) {\n <div class=\"comment-list-date\">\n {{formatDate(item.createdAt)}}\n </div>\n }\n <lib-bimplus-comment\n (outputActionCommentEvent)=\"handleActionCommentEvent($event)\"\n (getAttachment)=\"onGetAttachment($event)\"\n [message]=\"item.text\"\n [api]=\"api\"\n [date]=\"item.createdAt ? item.createdAt : ''\"\n action=\"delete\"\n [commentId]=\"item.id\"\n [attachments]=\"item.attachments ?? []\"\n [attachmentLinkItems]=\"item.attachmentLinks ?? []\"\n [hyperlinks]=\"item.hyperlinks\"\n [isActUserAuthor]=\"isActUserAuthor(item)\"\n [displayname]=\"displayName(item)\">\n </lib-bimplus-comment>\n }\n }\n </lib-bimplus-scrollable-container>\n </div>\n</div>\n}\n","import { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { BimplusStatusBarService } from './bimplus-status-bar.service';\nimport { StatusBarData } from './statusBar';\n\n@Component({\n selector: 'lib-bimplus-status-bar',\n templateUrl: './bimplus-status-bar.component.html',\n styleUrls: ['./bimplus-status-bar.component.less'],\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class BimplusStatusBarComponent implements OnInit {\n private statusBarService = inject(BimplusStatusBarService);\n\n\n private _title = '';\n get title(): string {\n return this._title;\n }\n\n ngOnInit(): void {\n this.statusBarService.statusBarDataSubscription.subscribe((data: StatusBarData) => {\n this._title = data.title;\n });\n }\n\n closeClick(): void {\n this.statusBarService.setStatusBarData({\n title: '',\n statusBarVisible: false\n });\n }\n\n closeKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Escape') {\n this.closeClick();\n }\n }\n\n}\n","<div\n class=\"statusBar-container\">\n <span \n class=\"status-bar-text\"\n [innerHTML]=\"title\">\n </span>\n <div\n class=\"close-button\"\n title=\"Close\"\n (click)=\"closeClick()\"\n (keydown)=\"closeKeyDown($event)\">\n </div>\n</div>","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\nexport class BimplusMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n console.warn(\"Missing translation string \" + params.key);\n return params.key;\n }\n}\n","/*\n * Public API Surface of ngx-bimplus-components\n */\n\nexport * from './lib/ngx-bimplus-components.service';\nexport * from './lib/ngx-bimplus-components.component';\nexport * from './lib/interfaces/bimplus-opacity-properties.interface';\nexport * from './lib/interfaces/bimplus-visibility-properties.interface';\nexport * from './lib/components/bimplus-connection-designer/bimplus-connection-designer.component';\nexport * from './lib/components/bimplus-connection-designer/bimplus-connection-designer.interface';\nexport * from './lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component';\nexport * from './lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.interface';\nexport * from './lib/components/bimplus-floating-bar/bimplus-floating-bar.interface';\nexport * from './lib/components/project-models/project-models.interface';\nexport * from './lib/components/bimplus-floating-bar-hide-objects/bimplus-floating-bar-hide-objects.component';\nexport * from './lib/components/bimplus-floating-bar-isolation-objects/bimplus-floating-bar-isolation-objects.component';\nexport * from './lib/components/bimplus-floating-bar-project-navigator/bimplus-floating-bar-project-navigator.component';\nexport * from './lib/components/bimplus-localized-widget/bimplus-localized-widget.component';\nexport * from './lib/components/bimplus-overlay-message/bimplus-overlay-message.component';\nexport * from './lib/components/bimplus-sidenav/bimplus-sidenav.component';\nexport * from './lib/components/bimplus-sidenav-drawer-content/bimplus-sidenav-drawer-content.component';\nexport * from './lib/components/bimplus-tool-hub/bimplus-tool-hub.component';\nexport * from './lib/components/bimplus-tool-hub/bimplus-tool-hub.interface';\nexport * from './lib/components/bimplus-flat-tree/bimplus-flat-tree.component';\nexport * from './lib/components/bimplus-flat-tree/bimplus-flat-tree.interface';\nexport * from './lib/components/bimplus-context-menu/bimplus-context-menu.component';\nexport * from './lib/components/bimplus-context-menu/bimplus-context-menu.interface';\nexport * from './lib/components/loading-spinner/loading-spinner.component';\nexport * from './lib/components/bimplus-object-navigator/bimplus-object-navigator.component';\nexport * from './lib/components/bimplus-object-navigator/bimplus-object-navigator.interface';\nexport * from './lib/components/bimplus-tooltip-message/bimplus-tooltip-message.component';\nexport * from './lib/components/bimplus-tooltip-message/bimplus-tooltip-message.interface';\nexport * from './lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component';\nexport * from './lib/services/language-strings.service';\nexport * from './lib/services/resize-observer.service';\nexport * from './lib/services/cursors.service';\nexport * from './lib/types/types';\nexport * from './lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component';\nexport * from './lib/components/resizable-panel/resizable-panel.component';\nexport * from './lib/components/object-properties-header/object-properties-header.component';\nexport * from './lib/components/object-properties-header/object-properties-header.interface';\nexport * from './lib/components/object-properties/object-properties.component';\nexport * from './lib/components/links-to-documents/links-to-documents.component';\nexport * from './lib/components/object-hyperlinks/object-hyperlinks.component';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component';\nexport * from './lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component';\nexport * from './lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component';\nexport * from './lib/components/bimplus-input-text-field/bimplus-input-text-field.component';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service';\nexport * from './lib/components/bimplus-general-overlay-dialog/bimplus-general-dialog-config-settings';\nexport * from './lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component';\nexport * from './lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service';\nexport * from './lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component';\nexport * from './lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface';\nexport * from './lib/components/bimplus-attachments/bimplus-attachments.component';\nexport * from './lib/components/bimplus-attachments/services/bimplus-attachments.service';\nexport * from './lib/components/bimplus-attachments/bimplus-attachments.interface';\nexport * from './lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component';\nexport * from './lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service';\nexport * from './lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component';\nexport * from './lib/components/bimplus-comment/bimplus-comment.component';\nexport * from './lib/components/bimplus-textarea/bimplus-textarea.component';\nexport * from './lib/components/bimplus-status-bar/bimplus-status-bar.component';\nexport * from './lib/components/bimplus-link-tooltip-message/bimplus-link-tooltip-message.component';\nexport * from './lib/components/bimplus-status-bar/bimplus-status-bar.service';\nexport * from './lib/components/object-properties/object-properties.service';\nexport * from './lib/utils/utils';\nexport * from './lib/testing/bimplus-missing-translatetranslation-handler';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","DEFAULT_POSITION_LEFT","DEFAULT_POSITION_TOP","i3","BehaviorSubject","concatMap","config"],"mappings":"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"}