@siemens/element-ng 49.14.0 → 51.0.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/siemens-element-ng-about.mjs +41 -25
- package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-accordion.mjs +58 -40
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-action-modal.mjs +83 -53
- package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ag-grid.mjs +15 -12
- package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-application-header.mjs +176 -166
- package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +34 -28
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-autocomplete.mjs +27 -22
- package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-avatar.mjs +31 -21
- package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-badge.mjs +9 -8
- package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +17 -14
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +21 -17
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-card.mjs +71 -46
- package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-carousel.mjs +57 -33
- package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs +181 -117
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-circle-status.mjs +39 -25
- package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-color-picker.mjs +26 -17
- package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +56 -35
- package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +12 -12
- package/fesm2022/siemens-element-ng-connection-strength.mjs +14 -12
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-content-action-bar.mjs +36 -27
- package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-copyright-notice.mjs +19 -14
- package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-dashboard.mjs +335 -221
- package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +8 -8
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +119 -72
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datepicker.mjs +376 -244
- package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs +22 -17
- package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-empty-state.mjs +15 -12
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-file-uploader.mjs +105 -91
- package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filter-bar.mjs +32 -24
- package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +251 -153
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-footer.mjs +12 -10
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-form.mjs +345 -113
- package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly-legacy.mjs +99 -0
- package/fesm2022/siemens-element-ng-formly-legacy.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-formly.mjs +222 -316
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +40 -30
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-help-button.mjs +5 -5
- package/fesm2022/siemens-element-ng-help-button.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-icon.mjs +46 -47
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-info-page.mjs +17 -11
- package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +19 -14
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ip-input.mjs +25 -25
- package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-landing-page.mjs +120 -74
- package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-language-switcher.mjs +16 -12
- package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-link.mjs +31 -21
- package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +76 -56
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +46 -63
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-localization.mjs +14 -12
- package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +47 -30
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-maplibre.mjs +42 -0
- package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs +6 -5
- package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +56 -48
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs +14 -11
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +249 -204
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +120 -83
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar.mjs +72 -45
- package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-notification-item.mjs +19 -11
- package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-number-input.mjs +40 -28
- package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pagination.mjs +31 -20
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-strength.mjs +32 -23
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-password-toggle.mjs +18 -13
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs +123 -139
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-photo-upload.mjs +84 -51
- package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pills-input.mjs +63 -58
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover-legacy.mjs +43 -28
- package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +35 -27
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-progressbar.mjs +23 -16
- package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-resize-observer.mjs +32 -43
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +12 -10
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-search-bar.mjs +38 -31
- package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +218 -163
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-shadow-root.mjs +3 -3
- package/fesm2022/siemens-element-ng-side-panel.mjs +128 -86
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-skip-links.mjs +21 -24
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-slider.mjs +44 -29
- package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs +273 -293
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +65 -51
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-counter.mjs +15 -11
- package/fesm2022/siemens-element-ng-status-counter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-toggle.mjs +26 -16
- package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-chip.mjs +25 -16
- package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-summary-widget.mjs +27 -17
- package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-system-banner.mjs +11 -8
- package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs +20 -17
- package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +73 -70
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-theme.mjs +29 -6
- package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +60 -41
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-toast-notification.mjs +45 -40
- package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +105 -82
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tour.mjs +24 -18
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs +0 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +96 -75
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +76 -70
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs +72 -48
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/formly-legacy/package.json +4 -0
- package/maplibre/package.json +4 -0
- package/maplibre/styles/_index.scss +1 -0
- package/maplibre/styles/maplibre-gl.scss +715 -0
- package/package.json +37 -23
- package/schematics/migration.json +4 -4
- package/schematics/migrations/data/class-member-replacement.js +1 -19
- package/schematics/migrations/data/component-property-names.js +1 -25
- package/schematics/migrations/data/element-class-changes.js +1 -28
- package/schematics/migrations/data/element-migration-data.js +2 -0
- package/schematics/migrations/data/element-selectors.js +1 -11
- package/schematics/migrations/data/index.js +0 -4
- package/schematics/migrations/data/migration-test-data.js +9 -6
- package/schematics/migrations/data/provider-function-removals.js +7 -0
- package/schematics/migrations/data/symbol-removals.js +7 -7
- package/schematics/migrations/data/symbol-renaming.js +1 -48
- package/schematics/migrations/element-migration/element-migration.js +3 -6
- package/schematics/migrations/utilities/import-removal.js +39 -0
- package/schematics/migrations/utilities/index.js +2 -0
- package/schematics/migrations/utilities/provider-function-removal.migration.js +116 -0
- package/schematics/ng-update/index.js +1 -1
- package/schematics/ng-update/migrate-split-sizes.js +105 -0
- package/schematics/ng-update/{migrate-to-v49.js → migrate-to-v51.js} +5 -3
- package/template-i18n.json +45 -47
- package/types/siemens-element-ng-application-header.d.ts +8 -28
- package/types/siemens-element-ng-breadcrumb.d.ts +1 -1
- package/types/siemens-element-ng-chat-messages.d.ts +11 -9
- package/types/siemens-element-ng-circle-status.d.ts +1 -1
- package/types/siemens-element-ng-content-action-bar.d.ts +1 -1
- package/types/siemens-element-ng-dashboard.d.ts +2 -2
- package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
- package/types/siemens-element-ng-datepicker.d.ts +3 -14
- package/types/siemens-element-ng-electron-titlebar.d.ts +1 -1
- package/types/siemens-element-ng-file-uploader.d.ts +13 -31
- package/types/siemens-element-ng-filter-bar.d.ts +1 -1
- package/types/siemens-element-ng-filtered-search.d.ts +4 -4
- package/types/siemens-element-ng-form.d.ts +180 -44
- package/types/siemens-element-ng-formly-legacy.d.ts +40 -0
- package/types/siemens-element-ng-formly.d.ts +34 -167
- package/types/siemens-element-ng-icon.d.ts +2 -19
- package/types/siemens-element-ng-ip-input.d.ts +1 -1
- package/types/siemens-element-ng-landing-page.d.ts +2 -2
- package/types/siemens-element-ng-loading-spinner.d.ts +7 -17
- package/types/siemens-element-ng-maplibre.d.ts +26 -0
- package/types/siemens-element-ng-navbar-vertical-next.d.ts +86 -38
- package/types/siemens-element-ng-navbar-vertical.d.ts +1 -1
- package/types/siemens-element-ng-navbar.d.ts +3 -3
- package/types/siemens-element-ng-notification-item.d.ts +12 -0
- package/types/siemens-element-ng-phone-number.d.ts +5 -8
- package/types/siemens-element-ng-photo-upload.d.ts +4 -4
- package/types/siemens-element-ng-resize-observer.d.ts +0 -17
- package/types/siemens-element-ng-search-bar.d.ts +1 -1
- package/types/siemens-element-ng-select.d.ts +1 -1
- package/types/siemens-element-ng-side-panel.d.ts +3 -3
- package/types/siemens-element-ng-split.d.ts +99 -70
- package/types/siemens-element-ng-status-bar.d.ts +5 -13
- package/types/siemens-element-ng-status-counter.d.ts +1 -1
- package/types/siemens-element-ng-tabs.d.ts +1 -2
- package/types/siemens-element-ng-theme.d.ts +12 -2
- package/types/siemens-element-ng-threshold.d.ts +1 -1
- package/types/siemens-element-ng-toast-notification.d.ts +0 -1
- package/types/siemens-element-ng-tooltip.d.ts +7 -7
- package/types/siemens-element-ng-translate.d.ts +2 -5
- package/fesm2022/siemens-element-ng-icon-status.mjs +0 -46
- package/fesm2022/siemens-element-ng-icon-status.mjs.map +0 -1
- package/fesm2022/siemens-element-ng-sort-bar.mjs +0 -99
- package/fesm2022/siemens-element-ng-sort-bar.mjs.map +0 -1
- package/icon-status/package.json +0 -4
- package/schematics/vitest-setup.js +0 -5
- package/sort-bar/package.json +0 -4
- package/types/siemens-element-ng-icon-status.d.ts +0 -25
- package/types/siemens-element-ng-sort-bar.d.ts +0 -59
- /package/{LICENSE.md → LICENSE} +0 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, booleanAttribute, numberAttribute, output, signal, linkedSignal, computed, inject, ElementRef, effect, untracked, Component, contentChildren, NgZone, ChangeDetectorRef, DOCUMENT, DestroyRef, NgModule } from '@angular/core';
|
|
3
3
|
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { elementDoubleRight } from '@siemens/element-icons';
|
|
5
|
+
import { addIcons, SiIconComponent } from '@siemens/element-ng/icon';
|
|
6
|
+
import { t, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
|
|
6
7
|
import { __decorate } from 'tslib';
|
|
8
|
+
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
9
|
import { SI_UI_STATE_SERVICE, isRTL, WebComponentContentChildren } from '@siemens/element-ng/common';
|
|
8
10
|
import { asapScheduler, merge, fromEvent } from 'rxjs';
|
|
9
11
|
import { observeOn, takeUntil } from 'rxjs/operators';
|
|
@@ -12,38 +14,50 @@ import { observeOn, takeUntil } from 'rxjs/operators';
|
|
|
12
14
|
* Copyright (c) Siemens 2016 - 2026
|
|
13
15
|
* SPDX-License-Identifier: MIT
|
|
14
16
|
*/
|
|
15
|
-
/* eslint-disable @angular-eslint/prefer-output-emitter-ref */
|
|
16
17
|
class SiSplitPartComponent {
|
|
17
|
-
|
|
18
|
-
actions = [];
|
|
18
|
+
icons = addIcons({ elementDoubleRight });
|
|
19
19
|
/**
|
|
20
|
+
* Action buttons displayed in the split part header.
|
|
21
|
+
*
|
|
22
|
+
* @defaultValue []
|
|
23
|
+
*/
|
|
24
|
+
actions = input([], /* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
|
|
26
|
+
/**
|
|
27
|
+
* Defines which direction the split part collapses to.
|
|
28
|
+
*
|
|
20
29
|
* @defaultValue 'start'
|
|
21
30
|
*/
|
|
22
|
-
collapseDirection = 'start'
|
|
31
|
+
collapseDirection = input('start', /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "collapseDirection" }] : /* istanbul ignore next */ []));
|
|
23
33
|
/**
|
|
24
34
|
* Sets the icon class that is used in the buttons of split parts to
|
|
25
35
|
* collapse and uncollapse the parts.
|
|
26
|
-
*
|
|
27
|
-
* @defaultValue 'element-double-right'
|
|
28
36
|
*/
|
|
29
|
-
collapseIconClass =
|
|
37
|
+
collapseIconClass = input(/* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [undefined, { debugName: "collapseIconClass" }] : /* istanbul ignore next */ []));
|
|
30
39
|
/**
|
|
31
40
|
* Collapse only to the given min size.
|
|
32
41
|
*
|
|
33
42
|
* @defaultValue false
|
|
34
43
|
*/
|
|
35
|
-
collapseToMinSize = false;
|
|
36
|
-
|
|
44
|
+
collapseToMinSize = input(false, { ...(ngDevMode ? { debugName: "collapseToMinSize" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
45
|
+
/**
|
|
46
|
+
* Custom template for the split part header. The template receives the component instance as implicit context.
|
|
47
|
+
*/
|
|
48
|
+
headerTemplate = input(/* @ts-ignore */
|
|
49
|
+
...(ngDevMode ? [undefined, { debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
|
|
37
50
|
/**
|
|
38
51
|
* Sets the title of the split part header.
|
|
39
52
|
*/
|
|
40
|
-
heading
|
|
53
|
+
heading = input(/* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [undefined, { debugName: "heading" }] : /* istanbul ignore next */ []));
|
|
41
55
|
/**
|
|
42
56
|
* Minimum size in px.
|
|
43
57
|
*
|
|
44
58
|
* @defaultValue 0
|
|
45
59
|
*/
|
|
46
|
-
minSize = 0;
|
|
60
|
+
minSize = input(0, { ...(ngDevMode ? { debugName: "minSize" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
47
61
|
/**
|
|
48
62
|
* When a split part is collapsed, the content gets hidden but it will
|
|
49
63
|
* still remain within the DOM. If you want to remove and destroy the component
|
|
@@ -52,41 +66,52 @@ class SiSplitPartComponent {
|
|
|
52
66
|
*
|
|
53
67
|
* @defaultValue false
|
|
54
68
|
*/
|
|
55
|
-
removeContentOnCollapse = false;
|
|
69
|
+
removeContentOnCollapse = input(false, { ...(ngDevMode ? { debugName: "removeContentOnCollapse" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
56
70
|
/**
|
|
57
71
|
* Defines the behavior of the split part during scaling.
|
|
58
72
|
* E.g. when set to `none`, the spit part will keep its current size even when the parent container grows or shrinks.
|
|
59
73
|
*
|
|
60
74
|
* @defaultValue 'auto'
|
|
61
75
|
*/
|
|
62
|
-
scale = 'auto'
|
|
76
|
+
scale = input('auto', /* @ts-ignore */
|
|
77
|
+
...(ngDevMode ? [{ debugName: "scale" }] : /* istanbul ignore next */ []));
|
|
63
78
|
/**
|
|
64
79
|
* Defines if the collapse button of a split part is displayed. Default value is true.
|
|
65
80
|
*
|
|
66
81
|
* @defaultValue true
|
|
67
82
|
*/
|
|
68
|
-
showCollapseButton = true;
|
|
83
|
+
showCollapseButton = input(true, { ...(ngDevMode ? { debugName: "showCollapseButton" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
69
84
|
/**
|
|
70
85
|
* Defines if the header of the split part is visible. Default is true.
|
|
71
86
|
*
|
|
72
87
|
* @defaultValue true
|
|
73
88
|
*/
|
|
74
|
-
showHeader = true;
|
|
89
|
+
showHeader = input(true, { ...(ngDevMode ? { debugName: "showHeader" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
75
90
|
/**
|
|
76
91
|
* Aria label for collapse button. Needed for a11y
|
|
77
92
|
*
|
|
78
|
-
* @defaultValue
|
|
93
|
+
* @defaultValue
|
|
94
|
+
* ```
|
|
95
|
+
* t(() => $localize`:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`)
|
|
96
|
+
* ```
|
|
79
97
|
*/
|
|
80
|
-
collapseLabel =
|
|
98
|
+
collapseLabel = input(t(() => $localize `:@@SI_SPLIT.COLLAPSE_LABEL:Collapse`), /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "collapseLabel" }] : /* istanbul ignore next */ []));
|
|
81
100
|
/**
|
|
82
101
|
* An optional stateId to uniquely identify a component instance.
|
|
83
102
|
* Required for persistence of ui state.
|
|
84
103
|
*/
|
|
85
|
-
stateId
|
|
104
|
+
stateId = input(/* @ts-ignore */
|
|
105
|
+
...(ngDevMode ? [undefined, { debugName: "stateId" }] : /* istanbul ignore next */ []));
|
|
106
|
+
/**
|
|
107
|
+
* Expanded size.
|
|
108
|
+
*/
|
|
109
|
+
size = input.required({ ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
86
110
|
/**
|
|
87
|
-
*
|
|
111
|
+
* Unit for the configured {@link size}.
|
|
88
112
|
*/
|
|
89
|
-
|
|
113
|
+
unit = input.required(/* @ts-ignore */
|
|
114
|
+
...(ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []));
|
|
90
115
|
/**
|
|
91
116
|
* This toggles the behavior when collapsing this split part.
|
|
92
117
|
* If enabled, all split parts between this one and the end of the split in the respective direction will be collapsed if this part is collapsed.
|
|
@@ -94,21 +119,43 @@ class SiSplitPartComponent {
|
|
|
94
119
|
*
|
|
95
120
|
* @defaultValue false
|
|
96
121
|
*/
|
|
97
|
-
collapseOthers = false;
|
|
98
|
-
|
|
99
|
-
|
|
122
|
+
collapseOthers = input(false, { ...(ngDevMode ? { debugName: "collapseOthers" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
123
|
+
/**
|
|
124
|
+
* Sets the initial expanded or collapsed state of the split part.
|
|
125
|
+
*
|
|
126
|
+
* @defaultValue true
|
|
127
|
+
*/
|
|
128
|
+
expanded = input(true, { ...(ngDevMode ? { debugName: "expanded" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
129
|
+
collapseChanged = output();
|
|
130
|
+
stateChange = output();
|
|
100
131
|
/** @internal */
|
|
101
132
|
index = 0;
|
|
102
133
|
/** @internal */
|
|
103
|
-
before
|
|
104
|
-
|
|
105
|
-
after;
|
|
134
|
+
before = signal(undefined, /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "before" }] : /* istanbul ignore next */ []));
|
|
106
136
|
/** @internal */
|
|
107
|
-
|
|
137
|
+
after = signal(undefined, /* @ts-ignore */
|
|
138
|
+
...(ngDevMode ? [{ debugName: "after" }] : /* istanbul ignore next */ []));
|
|
108
139
|
/** @internal */
|
|
109
|
-
|
|
140
|
+
fractionalSize = linkedSignal(() => (this.unit() === 'fr' ? this.size() : undefined), /* @ts-ignore */
|
|
141
|
+
...(ngDevMode ? [{ debugName: "fractionalSize" }] : /* istanbul ignore next */ []));
|
|
110
142
|
/** @internal */
|
|
111
|
-
|
|
143
|
+
collapsedSize = computed(() => (this.collapseToMinSize() ? (this.minSize() ?? 40) : 40), /* @ts-ignore */
|
|
144
|
+
...(ngDevMode ? [{ debugName: "collapsedSize" }] : /* istanbul ignore next */ []));
|
|
145
|
+
/**
|
|
146
|
+
* Internal, mutable collapsed state. Initialized from the {@link expanded} input but can be
|
|
147
|
+
* overwritten while toggling, cascading to sibling parts or restoring the persisted ui state.
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
collapsedState = linkedSignal(() => !this.expanded(), /* @ts-ignore */
|
|
151
|
+
...(ngDevMode ? [{ debugName: "collapsedState" }] : /* istanbul ignore next */ []));
|
|
152
|
+
/**
|
|
153
|
+
* Internal, mutable collapse direction. Initialized from the {@link collapseDirection}
|
|
154
|
+
* input but can be overwritten while cascading collapse state to sibling parts.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
collapseDirectionState = linkedSignal(() => this.collapseDirection(), /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "collapseDirectionState" }] : /* istanbul ignore next */ []));
|
|
112
159
|
/**
|
|
113
160
|
* Get collapsed state.
|
|
114
161
|
* @returns True if the split part is collapsed, false is expanded.
|
|
@@ -117,14 +164,16 @@ class SiSplitPartComponent {
|
|
|
117
164
|
return this.collapsedState();
|
|
118
165
|
}
|
|
119
166
|
/** @internal */
|
|
120
|
-
expandedSize =
|
|
167
|
+
expandedSize = linkedSignal({ ...(ngDevMode ? { debugName: "expandedSize" } : /* istanbul ignore next */ {}), source: () => ({ size: this.size(), unit: this.unit() }),
|
|
168
|
+
computation: source => (source.unit === 'fr' ? undefined : source.size) });
|
|
121
169
|
/** @internal */
|
|
122
170
|
actualSize = computed(() => {
|
|
123
171
|
if (this.collapsedState()) {
|
|
124
172
|
return this.collapsedSize();
|
|
125
173
|
}
|
|
126
174
|
return this.expandedSize() ?? 0;
|
|
127
|
-
},
|
|
175
|
+
}, /* @ts-ignore */
|
|
176
|
+
...(ngDevMode ? [{ debugName: "actualSize" }] : /* istanbul ignore next */ []));
|
|
128
177
|
/** @internal */
|
|
129
178
|
saveUIState;
|
|
130
179
|
/** @internal */
|
|
@@ -132,34 +181,25 @@ class SiSplitPartComponent {
|
|
|
132
181
|
if (!this.collapsedState()) {
|
|
133
182
|
return this;
|
|
134
183
|
}
|
|
135
|
-
const
|
|
184
|
+
const after = this.after();
|
|
185
|
+
const nextExpanded = after ? after.nextExpandedAfter() : this;
|
|
136
186
|
return nextExpanded;
|
|
137
|
-
},
|
|
187
|
+
}, /* @ts-ignore */
|
|
188
|
+
...(ngDevMode ? [{ debugName: "nextExpandedAfter" }] : /* istanbul ignore next */ []));
|
|
138
189
|
elementRef = inject(ElementRef);
|
|
139
190
|
headerContext = {
|
|
140
191
|
$implicit: this
|
|
141
192
|
};
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
ngOnChanges(changes) {
|
|
154
|
-
if (changes.collapseToMinSize && this.collapseToMinSize) {
|
|
155
|
-
this.collapsedSize.set(this.minSize ?? 40);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
this.collapsedSize.set(40); // 40px is default size of the header
|
|
159
|
-
}
|
|
160
|
-
if (changes.size) {
|
|
161
|
-
this.expandedSize.set(this.size);
|
|
162
|
-
}
|
|
193
|
+
constructor() {
|
|
194
|
+
effect(() => {
|
|
195
|
+
this.expanded();
|
|
196
|
+
untracked(() => {
|
|
197
|
+
if (this.collapseOthers()) {
|
|
198
|
+
this.before()?.refreshCollapseToStart();
|
|
199
|
+
this.after()?.refreshCollapsedToEnd();
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
});
|
|
163
203
|
}
|
|
164
204
|
/** @internal */
|
|
165
205
|
refreshSizePx(orientation) {
|
|
@@ -178,223 +218,160 @@ class SiSplitPartComponent {
|
|
|
178
218
|
*/
|
|
179
219
|
toggleCollapse() {
|
|
180
220
|
this.collapsedState.update(v => !v);
|
|
181
|
-
if (this.collapseOthers) {
|
|
182
|
-
this.before?.refreshCollapseToStart();
|
|
183
|
-
this.after?.refreshCollapsedToEnd();
|
|
221
|
+
if (this.collapseOthers()) {
|
|
222
|
+
this.before()?.refreshCollapseToStart();
|
|
223
|
+
this.after()?.refreshCollapsedToEnd();
|
|
184
224
|
}
|
|
185
225
|
this.collapseChanged.emit(this.collapsedState());
|
|
186
|
-
this.stateChange.emit({ expanded: this.
|
|
226
|
+
this.stateChange.emit({ expanded: !this.collapsedState(), size: this.actualSize() });
|
|
187
227
|
this.saveUIState();
|
|
188
228
|
}
|
|
189
229
|
refreshCollapsedToEnd() {
|
|
190
|
-
|
|
230
|
+
const before = this.before();
|
|
231
|
+
if (before?.collapsedState() && before.collapseDirectionState() === 'end') {
|
|
191
232
|
this.collapsedState.set(true);
|
|
192
|
-
this.
|
|
193
|
-
this.after?.refreshCollapsedToEnd();
|
|
233
|
+
this.collapseDirectionState.set('end');
|
|
234
|
+
this.after()?.refreshCollapsedToEnd();
|
|
194
235
|
}
|
|
195
236
|
}
|
|
196
237
|
refreshCollapseToStart() {
|
|
197
|
-
|
|
238
|
+
const after = this.after();
|
|
239
|
+
if (after?.collapsedState() && after.collapseDirectionState() === 'start') {
|
|
198
240
|
this.collapsedState.set(true);
|
|
199
|
-
this.
|
|
200
|
-
this.before?.refreshCollapseToStart();
|
|
241
|
+
this.collapseDirectionState.set('start');
|
|
242
|
+
this.before()?.refreshCollapseToStart();
|
|
201
243
|
}
|
|
202
244
|
}
|
|
203
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
204
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
245
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitPartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SiSplitPartComponent, isStandalone: true, selector: "si-split-part", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, collapseDirection: { classPropertyName: "collapseDirection", publicName: "collapseDirection", isSignal: true, isRequired: false, transformFunction: null }, collapseIconClass: { classPropertyName: "collapseIconClass", publicName: "collapseIconClass", isSignal: true, isRequired: false, transformFunction: null }, collapseToMinSize: { classPropertyName: "collapseToMinSize", publicName: "collapseToMinSize", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, minSize: { classPropertyName: "minSize", publicName: "minSize", isSignal: true, isRequired: false, transformFunction: null }, removeContentOnCollapse: { classPropertyName: "removeContentOnCollapse", publicName: "removeContentOnCollapse", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, showCollapseButton: { classPropertyName: "showCollapseButton", publicName: "showCollapseButton", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, collapseLabel: { classPropertyName: "collapseLabel", publicName: "collapseLabel", isSignal: true, isRequired: false, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: true, transformFunction: null }, collapseOthers: { classPropertyName: "collapseOthers", publicName: "collapseOthers", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapseChanged: "collapseChanged", stateChange: "stateChange" }, host: { properties: { "class.is-collapsed": "collapsedState()", "class.collapse-start": "collapseDirectionState() === \"start\"", "style.grid-area": "\"p-\" + this.index" } }, ngImport: i0, template: "@if (!headerTemplate() && showHeader()) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading() | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n class=\"si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (showCollapseButton()) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"si-split-button\"\n [attr.aria-label]=\"collapseLabel() | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"collapse-icon\" [icon]=\"collapseIconClass() ?? icons.elementDoubleRight\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate(); as headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse() && collapsedState() && !collapseToMinSize()\"\n>\n @if (!removeContentOnCollapse() || !collapsedState()) {\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}.si-split-part-content{flex:1 1 auto;display:flex;overflow:hidden;flex-direction:column}.si-split-part-header{display:flex;flex-direction:row;flex:none;align-items:center;padding:6px;background:var(--element-base-0);block-size:40px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header{flex:auto;flex-direction:column;max-block-size:100%;padding:6px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-title{inline-size:100%;writing-mode:vertical-rl;transform:rotate(180deg)}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-collapse-button{order:-1}.si-split-part-title{font-weight:600;flex:1}.si-split-part-actions{padding-inline:8px;flex:0 0 auto}.si-split-button{display:inline-block;padding:4px;color:var(--element-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:none;font-size:20px;line-height:1;vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:0;cursor:pointer}.si-split-button:hover{background:var(--element-action-secondary-hover)}:host-context(.vertical)>:host .si-split-button{--orientation-rotate: rotate(90deg)}[dir=rtl] :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:dir(rtl) :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:host(.is-collapsed) .si-split-button{--collapse-rotate: rotate(180deg)}:host(.collapse-start) .si-split-button{--collapse-direction: rotate(180deg)}.si-split-button .collapse-icon{transform:var(--orientation-rotate, rotate(0)) var(--collapse-rotate, rotate(0)) var(--collapse-direction, rotate(0)) var(--orientation-rtl, scaleX(1))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
205
247
|
}
|
|
206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitPartComponent, decorators: [{
|
|
207
249
|
type: Component,
|
|
208
|
-
args: [{ selector: 'si-split-part', imports: [NgTemplateOutlet, SiIconComponent, SiTranslatePipe],
|
|
250
|
+
args: [{ selector: 'si-split-part', imports: [NgTemplateOutlet, SiIconComponent, SiTranslatePipe], host: {
|
|
209
251
|
'[class.is-collapsed]': 'collapsedState()',
|
|
210
|
-
'[class.collapse-start]': '
|
|
252
|
+
'[class.collapse-start]': 'collapseDirectionState() === "start"',
|
|
211
253
|
'[style.grid-area]': '"p-" + this.index'
|
|
212
|
-
}, template: "@if (!headerTemplate && showHeader) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions; track $index) {\n <button\n type=\"button\"\n class=\"si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (showCollapseButton) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"si-split-button\"\n [attr.aria-label]=\"collapseLabel | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"collapse-icon\" [icon]=\"collapseIconClass\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse && collapsedState() && !collapseToMinSize\"\n>\n @if (!removeContentOnCollapse || !collapsedState()) {\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}.si-split-part-content{flex:1 1 auto;display:flex;overflow:hidden;flex-direction:column}.si-split-part-header{display:flex;flex-direction:row;flex:none;align-items:center;padding:6px;background:var(--element-base-0);block-size:40px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header{flex:auto;flex-direction:column;max-block-size:100%;padding:6px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-title{inline-size:100%;writing-mode:vertical-rl;transform:rotate(180deg)}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-collapse-button{order:-1}.si-split-part-title{font-weight:600;flex:1}.si-split-part-actions{padding-inline:8px;flex:0 0 auto}.si-split-button{display:inline-block;padding:4px;color:var(--element-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:none;font-size:20px;line-height:1;vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:0;cursor:pointer}.si-split-button:hover{background:var(--element-action-secondary-hover)}:host-context(.vertical)>:host .si-split-button{--orientation-rotate: rotate(90deg)}[dir=rtl] :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:dir(rtl) :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:host(.is-collapsed) .si-split-button{--collapse-rotate: rotate(180deg)}:host(.collapse-start) .si-split-button{--collapse-direction: rotate(180deg)}.si-split-button .collapse-icon{transform:var(--orientation-rotate, rotate(0)) var(--collapse-rotate, rotate(0)) var(--collapse-direction, rotate(0)) var(--orientation-rtl, scaleX(1))}\n"] }]
|
|
213
|
-
}], propDecorators: { actions: [{
|
|
214
|
-
type: Input
|
|
215
|
-
}], collapseDirection: [{
|
|
216
|
-
type: Input
|
|
217
|
-
}], collapseIconClass: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], collapseToMinSize: [{
|
|
220
|
-
type: Input,
|
|
221
|
-
args: [{ transform: booleanAttribute }]
|
|
222
|
-
}], headerTemplate: [{
|
|
223
|
-
type: Input
|
|
224
|
-
}], heading: [{
|
|
225
|
-
type: Input
|
|
226
|
-
}], minSize: [{
|
|
227
|
-
type: Input,
|
|
228
|
-
args: [{ transform: numberAttribute }]
|
|
229
|
-
}], removeContentOnCollapse: [{
|
|
230
|
-
type: Input,
|
|
231
|
-
args: [{ transform: booleanAttribute }]
|
|
232
|
-
}], scale: [{
|
|
233
|
-
type: Input
|
|
234
|
-
}], showCollapseButton: [{
|
|
235
|
-
type: Input,
|
|
236
|
-
args: [{ transform: booleanAttribute }]
|
|
237
|
-
}], showHeader: [{
|
|
238
|
-
type: Input,
|
|
239
|
-
args: [{ transform: booleanAttribute }]
|
|
240
|
-
}], collapseLabel: [{
|
|
241
|
-
type: Input
|
|
242
|
-
}], stateId: [{
|
|
243
|
-
type: Input
|
|
244
|
-
}], size: [{
|
|
245
|
-
type: Input,
|
|
246
|
-
args: [{ transform: numberAttribute }]
|
|
247
|
-
}], collapseOthers: [{
|
|
248
|
-
type: Input,
|
|
249
|
-
args: [{ transform: booleanAttribute }]
|
|
250
|
-
}], collapseChanged: [{
|
|
251
|
-
type: Output
|
|
252
|
-
}], stateChange: [{
|
|
253
|
-
type: Output
|
|
254
|
-
}], expanded: [{
|
|
255
|
-
type: Input,
|
|
256
|
-
args: [{ transform: booleanAttribute }]
|
|
257
|
-
}] } });
|
|
254
|
+
}, template: "@if (!headerTemplate() && showHeader()) {\n <div class=\"si-split-part-header\" [class.is-collapsed]=\"collapsedState()\">\n <div class=\"si-split-part-title text-truncate\">\n {{ heading() | translate }}\n </div>\n @if (!collapsedState()) {\n <div class=\"si-split-part-actions\">\n @for (action of actions(); track $index) {\n <button\n type=\"button\"\n class=\"si-split-button\"\n [title]=\"action.tooltip || ''\"\n [attr.aria-label]=\"action.tooltip\"\n (click)=\"action.click($event)\"\n >\n <si-icon [icon]=\"action.iconClass\" />\n </button>\n }\n </div>\n }\n @if (showCollapseButton()) {\n <div class=\"si-split-part-collapse-button\">\n <button\n type=\"button\"\n class=\"si-split-button\"\n [attr.aria-label]=\"collapseLabel() | translate\"\n (click)=\"toggleCollapse()\"\n >\n <si-icon class=\"collapse-icon\" [icon]=\"collapseIconClass() ?? icons.elementDoubleRight\" />\n </button>\n </div>\n }\n </div>\n}\n\n@if (headerTemplate(); as headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: headerContext\" />\n}\n\n<div\n class=\"si-split-part-content\"\n [class.d-none]=\"!removeContentOnCollapse() && collapsedState() && !collapseToMinSize()\"\n>\n @if (!removeContentOnCollapse() || !collapsedState()) {\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}.si-split-part-content{flex:1 1 auto;display:flex;overflow:hidden;flex-direction:column}.si-split-part-header{display:flex;flex-direction:row;flex:none;align-items:center;padding:6px;background:var(--element-base-0);block-size:40px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header{flex:auto;flex-direction:column;max-block-size:100%;padding:6px}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-title{inline-size:100%;writing-mode:vertical-rl;transform:rotate(180deg)}:host-context(.horizontal)>:host(.is-collapsed) .si-split-part-header .si-split-part-collapse-button{order:-1}.si-split-part-title{font-weight:600;flex:1}.si-split-part-actions{padding-inline:8px;flex:0 0 auto}.si-split-button{display:inline-block;padding:4px;color:var(--element-text-primary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-decoration:none;font-size:20px;line-height:1;vertical-align:middle;-webkit-user-select:none;user-select:none;background:none;border:0;cursor:pointer}.si-split-button:hover{background:var(--element-action-secondary-hover)}:host-context(.vertical)>:host .si-split-button{--orientation-rotate: rotate(90deg)}[dir=rtl] :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:dir(rtl) :host-context(.horizontal)>:host .si-split-button{--orientation-rtl: scaleX(-1)}:host(.is-collapsed) .si-split-button{--collapse-rotate: rotate(180deg)}:host(.collapse-start) .si-split-button{--collapse-direction: rotate(180deg)}.si-split-button .collapse-icon{transform:var(--orientation-rotate, rotate(0)) var(--collapse-rotate, rotate(0)) var(--collapse-direction, rotate(0)) var(--orientation-rtl, scaleX(1))}\n"] }]
|
|
255
|
+
}], ctorParameters: () => [], propDecorators: { actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], collapseDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseDirection", required: false }] }], collapseIconClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseIconClass", required: false }] }], collapseToMinSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseToMinSize", required: false }] }], headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTemplate", required: false }] }], heading: [{ type: i0.Input, args: [{ isSignal: true, alias: "heading", required: false }] }], minSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSize", required: false }] }], removeContentOnCollapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeContentOnCollapse", required: false }] }], scale: [{ type: i0.Input, args: [{ isSignal: true, alias: "scale", required: false }] }], showCollapseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCollapseButton", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], collapseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseLabel", required: false }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: true }] }], unit: [{ type: i0.Input, args: [{ isSignal: true, alias: "unit", required: true }] }], collapseOthers: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseOthers", required: false }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }], collapseChanged: [{ type: i0.Output, args: ["collapseChanged"] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }] } });
|
|
258
256
|
|
|
259
257
|
class SiSplitComponent {
|
|
260
|
-
/**
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
258
|
+
/**
|
|
259
|
+
* Size of the gutter (divider) between split parts in pixels.
|
|
260
|
+
*
|
|
261
|
+
* @defaultValue 16
|
|
262
|
+
*/
|
|
263
|
+
gutterSize = input(16, /* @ts-ignore */
|
|
264
|
+
...(ngDevMode ? [{ debugName: "gutterSize" }] : /* istanbul ignore next */ []));
|
|
265
|
+
/**
|
|
266
|
+
* Defines the split layout direction.
|
|
267
|
+
*
|
|
268
|
+
* @defaultValue 'horizontal'
|
|
269
|
+
*/
|
|
270
|
+
orientation = input('horizontal', /* @ts-ignore */
|
|
271
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
272
272
|
/**
|
|
273
273
|
* An optional stateId to uniquely identify a component instance.
|
|
274
274
|
* Required for persistence of ui state.
|
|
275
275
|
*/
|
|
276
|
-
stateId
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
276
|
+
stateId = input(/* @ts-ignore */
|
|
277
|
+
...(ngDevMode ? [undefined, { debugName: "stateId" }] : /* istanbul ignore next */ []));
|
|
278
|
+
sizesChange = output();
|
|
279
|
+
parts = contentChildren(SiSplitPartComponent, /* @ts-ignore */
|
|
280
|
+
...(ngDevMode ? [{ debugName: "parts" }] : /* istanbul ignore next */ []));
|
|
281
|
+
gutters = signal([], /* @ts-ignore */
|
|
282
|
+
...(ngDevMode ? [{ debugName: "gutters" }] : /* istanbul ignore next */ []));
|
|
283
|
+
gridTemplate = computed(() => {
|
|
284
|
+
if (!this.initialized()) {
|
|
285
|
+
return '';
|
|
286
|
+
}
|
|
287
|
+
return this.parts()
|
|
288
|
+
.map(part => part.collapsedState()
|
|
289
|
+
? part.collapseToMinSize()
|
|
290
|
+
? `${part.minSize()}px`
|
|
291
|
+
: 'min-content'
|
|
292
|
+
: part.unit() === 'px'
|
|
293
|
+
? `minmax(${part.minSize()}px, ${part.expandedSize() ?? part.size()}px)`
|
|
294
|
+
: `minmax(${part.minSize()}px, ${part.expandedSize() === undefined
|
|
295
|
+
? part.fractionalSize() * this.fractionalSizeToExpandedSizeFactor()
|
|
296
|
+
: part.fractionalSize()}fr)`)
|
|
297
|
+
.join(' min-content ');
|
|
298
|
+
}, /* @ts-ignore */
|
|
299
|
+
...(ngDevMode ? [{ debugName: "gridTemplate" }] : /* istanbul ignore next */ []));
|
|
300
|
+
gridTemplateRows = computed(() => this.orientation() === 'vertical' ? this.gridTemplate() : '1fr', /* @ts-ignore */
|
|
301
|
+
...(ngDevMode ? [{ debugName: "gridTemplateRows" }] : /* istanbul ignore next */ []));
|
|
302
|
+
gridTemplateColumns = computed(() => this.orientation() === 'horizontal' ? this.gridTemplate() : '1fr', /* @ts-ignore */
|
|
303
|
+
...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : /* istanbul ignore next */ []));
|
|
304
|
+
gridTemplateAreas = computed(() => {
|
|
305
|
+
if (!this.initialized()) {
|
|
306
|
+
return '';
|
|
307
|
+
}
|
|
308
|
+
const areaNames = this.parts()
|
|
309
|
+
.map((part, index) => [`p-${index}`, part.after() ? `g-${index}` : []])
|
|
310
|
+
.flat(2);
|
|
311
|
+
if (this.orientation() === 'horizontal') {
|
|
312
|
+
return `"${areaNames.join(' ')}"`;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
return `"${areaNames.join('" "')}"`;
|
|
316
|
+
}
|
|
317
|
+
}, /* @ts-ignore */
|
|
318
|
+
...(ngDevMode ? [{ debugName: "gridTemplateAreas" }] : /* istanbul ignore next */ []));
|
|
286
319
|
elementRef = inject((ElementRef));
|
|
287
320
|
ngZone = inject(NgZone);
|
|
288
321
|
changeDetectorRef = inject(ChangeDetectorRef);
|
|
289
322
|
document = inject(DOCUMENT);
|
|
290
323
|
uiStateService = inject(SI_UI_STATE_SERVICE, { optional: true });
|
|
291
|
-
|
|
292
|
-
//
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
this.
|
|
309
|
-
this.gutters = [];
|
|
310
|
-
for (let index = 0; index < this.parts.length; index++) {
|
|
311
|
-
const component = this.parts.get(index);
|
|
312
|
-
component.index = index;
|
|
313
|
-
component.after = this.parts.get(index + 1);
|
|
314
|
-
component.before = this.parts.get(index - 1);
|
|
315
|
-
component.fractionalSize.set(this.sizes[index]);
|
|
316
|
-
component.saveUIState = () => this.saveUIState();
|
|
317
|
-
if (component.after) {
|
|
318
|
-
this.gutters.push({
|
|
319
|
-
before: component,
|
|
320
|
-
after: this.parts.get(index + 1),
|
|
321
|
-
visible: computed(() => {
|
|
322
|
-
const afterPart = component.after.nextExpandedAfter();
|
|
323
|
-
return !afterPart.collapsedState() && !component.collapsedState();
|
|
324
|
-
})
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
this.alignRelativeSizes();
|
|
329
|
-
this.updateFractionalSizeToExpandSizeFactor();
|
|
330
|
-
this.restoreFormUIState();
|
|
331
|
-
const gridTemplate = computed(() => this.parts
|
|
332
|
-
.map(part => part.collapsedState()
|
|
333
|
-
? part.collapseToMinSize
|
|
334
|
-
? `${part.minSize}px`
|
|
335
|
-
: 'min-content'
|
|
336
|
-
: part.actualSize()
|
|
337
|
-
? part.scale === 'auto'
|
|
338
|
-
? `minmax(${part.minSize}px, ${part.actualSize()}fr)`
|
|
339
|
-
: `minmax(${part.minSize}px, ${part.actualSize()}px)`
|
|
340
|
-
: `minmax(${part.minSize}px, ${part.fractionalSize() * this.fractionalSizeToExpandedSizeFactor}fr)`)
|
|
341
|
-
.join(' min-content '), ...(ngDevMode ? [{ debugName: "gridTemplate" }] : []));
|
|
342
|
-
this.gridTemplateRows = computed(() => this._orientation() === 'vertical' ? gridTemplate() : '1fr', ...(ngDevMode ? [{ debugName: "gridTemplateRows" }] : []));
|
|
343
|
-
this.gridTemplateColumns = computed(() => this._orientation() === 'horizontal' ? gridTemplate() : '1fr', ...(ngDevMode ? [{ debugName: "gridTemplateColumns" }] : []));
|
|
344
|
-
this.gridTemplateAreas = computed(() => {
|
|
345
|
-
const areaNames = this.parts
|
|
346
|
-
.map((part, index) => [`p-${index}`, part.after ? `g-${index}` : []])
|
|
347
|
-
.flat(2);
|
|
348
|
-
if (this._orientation() === 'horizontal') {
|
|
349
|
-
return `"${areaNames.join(' ')}"`;
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
return `"${areaNames.join('" "')}"`;
|
|
353
|
-
}
|
|
354
|
-
}, ...(ngDevMode ? [{ debugName: "gridTemplateAreas" }] : []));
|
|
355
|
-
setTimeout(() => this.refreshAllPartSizes());
|
|
356
|
-
});
|
|
357
|
-
this.parts.notifyOnChanges();
|
|
358
|
-
}
|
|
359
|
-
alignRelativeSizes() {
|
|
360
|
-
const requestedNoSize = this.parts.filter(part => !part.size && !part.fractionalSize());
|
|
361
|
-
const requestedRelSize = this.parts.filter(part => part.fractionalSize() && !part.size);
|
|
362
|
-
if (requestedRelSize.length) {
|
|
363
|
-
const totalRequestedRelSize = requestedRelSize.reduce((a, b) => a + b.fractionalSize(), 0);
|
|
364
|
-
const averageRelSize = totalRequestedRelSize / requestedRelSize.length;
|
|
365
|
-
const totalAssignedRelSize = totalRequestedRelSize + requestedNoSize.length * averageRelSize;
|
|
366
|
-
requestedNoSize.forEach(part => part.fractionalSize.set(averageRelSize / totalAssignedRelSize));
|
|
367
|
-
requestedRelSize.forEach(part => part.fractionalSize.set(part.fractionalSize() / totalAssignedRelSize));
|
|
368
|
-
}
|
|
369
|
-
else {
|
|
370
|
-
requestedNoSize.forEach(part => part.fractionalSize.set(1 / requestedNoSize.length));
|
|
371
|
-
}
|
|
324
|
+
destroyRef = inject(DestroyRef);
|
|
325
|
+
// Existing fr parts are measured in pixels after layout or dragging, so their fr weights become
|
|
326
|
+
// pixel-derived. A newly added fr part has not been measured yet and still has its configured
|
|
327
|
+
// weight. This factor converts that configured weight into the same scale until it is measured.
|
|
328
|
+
// It is the ratio of measured expanded sizes to configured weights of visible measured fr parts.
|
|
329
|
+
fractionalSizeToExpandedSizeFactor = computed(() => {
|
|
330
|
+
const measuredParts = this.parts().filter(part => !part.collapsedState() && part.unit() === 'fr' && part.expandedSize() !== undefined);
|
|
331
|
+
const configuredSizeSum = measuredParts.reduce((sum, part) => sum + part.size(), 0);
|
|
332
|
+
const expandedSizeSum = measuredParts.reduce((sum, part) => sum + part.expandedSize(), 0);
|
|
333
|
+
return configuredSizeSum ? expandedSizeSum / configuredSizeSum : 1;
|
|
334
|
+
}, /* @ts-ignore */
|
|
335
|
+
...(ngDevMode ? [{ debugName: "fractionalSizeToExpandedSizeFactor" }] : /* istanbul ignore next */ []));
|
|
336
|
+
initialized = signal(false, /* @ts-ignore */
|
|
337
|
+
...(ngDevMode ? [{ debugName: "initialized" }] : /* istanbul ignore next */ []));
|
|
338
|
+
constructor() {
|
|
339
|
+
toObservable(this.parts)
|
|
340
|
+
.pipe(observeOn(asapScheduler), takeUntilDestroyed())
|
|
341
|
+
.subscribe(() => this.setupParts());
|
|
372
342
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
343
|
+
setupParts() {
|
|
344
|
+
this.initialized.set(true);
|
|
345
|
+
const gutters = [];
|
|
346
|
+
const parts = this.parts();
|
|
347
|
+
for (let index = 0; index < parts.length; index++) {
|
|
348
|
+
const component = parts[index];
|
|
349
|
+
component.index = index;
|
|
350
|
+
component.after.set(parts[index + 1]);
|
|
351
|
+
component.before.set(parts[index - 1]);
|
|
352
|
+
component.saveUIState = () => this.saveUIState();
|
|
353
|
+
if (component.after()) {
|
|
354
|
+
gutters.push({
|
|
355
|
+
before: component,
|
|
356
|
+
after: parts[index + 1],
|
|
357
|
+
visible: computed(() => {
|
|
358
|
+
const afterPart = component.after().nextExpandedAfter();
|
|
359
|
+
return !afterPart.collapsedState() && !component.collapsedState();
|
|
360
|
+
})
|
|
361
|
+
});
|
|
381
362
|
}
|
|
382
363
|
}
|
|
383
|
-
this.
|
|
384
|
-
|
|
385
|
-
|
|
364
|
+
this.gutters.set(gutters);
|
|
365
|
+
this.restoreFromUIState();
|
|
366
|
+
setTimeout(() => this.refreshAllPartSizes());
|
|
386
367
|
}
|
|
387
368
|
refreshAllPartSizes() {
|
|
388
|
-
|
|
389
|
-
part.
|
|
390
|
-
(part.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
const beforeToAfterFactor = afterFrSum / beforeFrSum;
|
|
395
|
-
this.parts
|
|
396
|
-
.filter(part => part.collapsedState() && (part.scale === 'auto' || part.expandedSize() === undefined))
|
|
397
|
-
.forEach(part => part.expandedSize.update(prev => (prev ?? part.fractionalSize()) * beforeToAfterFactor));
|
|
369
|
+
this.parts().forEach(part => {
|
|
370
|
+
part.refreshSizePx(this.orientation());
|
|
371
|
+
if (!part.collapsedState() && part.unit() === 'fr') {
|
|
372
|
+
part.fractionalSize.set(part.expandedSize());
|
|
373
|
+
}
|
|
374
|
+
});
|
|
398
375
|
}
|
|
399
376
|
resizeStart(gutter, event) {
|
|
400
377
|
this.refreshAllPartSizes();
|
|
@@ -405,17 +382,17 @@ class SiSplitComponent {
|
|
|
405
382
|
let appliedDelta = 0;
|
|
406
383
|
const rtl = isRTL();
|
|
407
384
|
const startPosition = this.getPosition(event);
|
|
408
|
-
const minDelta = -1 * (beforeSize - gutter.before.minSize);
|
|
409
|
-
const maxDelta = afterSize - afterPart.minSize;
|
|
385
|
+
const minDelta = -1 * (beforeSize - gutter.before.minSize());
|
|
386
|
+
const maxDelta = afterSize - afterPart.minSize();
|
|
410
387
|
const containerSize = this.measureContainerSize();
|
|
411
388
|
event.preventDefault(); // prevents text-selection
|
|
412
389
|
this.ngZone.runOutsideAngular(() => {
|
|
413
390
|
merge(fromEvent(this.document, 'mousemove'), fromEvent(this.document, 'touchmove'))
|
|
414
|
-
.pipe(takeUntil(merge(fromEvent(this.document, 'mouseup'), fromEvent(this.document, 'touchend'))))
|
|
391
|
+
.pipe(takeUntil(merge(fromEvent(this.document, 'mouseup'), fromEvent(this.document, 'touchend'))), takeUntilDestroyed(this.destroyRef))
|
|
415
392
|
.subscribe({
|
|
416
393
|
next: move => {
|
|
417
394
|
let delta = this.getPosition(move) - startPosition;
|
|
418
|
-
if (rtl && this.orientation === 'horizontal') {
|
|
395
|
+
if (rtl && this.orientation() === 'horizontal') {
|
|
419
396
|
delta *= -1;
|
|
420
397
|
}
|
|
421
398
|
delta -= appliedDelta;
|
|
@@ -433,13 +410,19 @@ class SiSplitComponent {
|
|
|
433
410
|
appliedDelta += delta;
|
|
434
411
|
gutter.before.expandedSize.set(beforeSize);
|
|
435
412
|
afterPart.expandedSize.set(afterSize);
|
|
436
|
-
if (
|
|
413
|
+
if (gutter.before.unit() === 'fr') {
|
|
414
|
+
gutter.before.fractionalSize.set(beforeSize);
|
|
415
|
+
}
|
|
416
|
+
if (afterPart.unit() === 'fr') {
|
|
417
|
+
afterPart.fractionalSize.set(afterSize);
|
|
418
|
+
}
|
|
419
|
+
if (this.orientation() === 'vertical') {
|
|
437
420
|
this.elementRef.nativeElement.style.setProperty('grid-template-rows', this.gridTemplateRows());
|
|
438
421
|
}
|
|
439
422
|
else {
|
|
440
423
|
this.elementRef.nativeElement.style.setProperty('grid-template-columns', this.gridTemplateColumns());
|
|
441
424
|
}
|
|
442
|
-
this.ngZone.run(() => this.sizesChange.emit(this.parts.map(part => (part.actualSize() * 100) / containerSize)));
|
|
425
|
+
this.ngZone.run(() => this.sizesChange.emit(this.parts().map(part => (part.actualSize() * 100) / containerSize)));
|
|
443
426
|
},
|
|
444
427
|
complete: () => this.saveUIState()
|
|
445
428
|
});
|
|
@@ -447,7 +430,7 @@ class SiSplitComponent {
|
|
|
447
430
|
}
|
|
448
431
|
measureContainerSize() {
|
|
449
432
|
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
450
|
-
if (this.
|
|
433
|
+
if (this.orientation() === 'vertical') {
|
|
451
434
|
return rect.height;
|
|
452
435
|
}
|
|
453
436
|
else {
|
|
@@ -456,86 +439,83 @@ class SiSplitComponent {
|
|
|
456
439
|
}
|
|
457
440
|
getPosition(event) {
|
|
458
441
|
const positionObject = event.touches?.[0] ?? event;
|
|
459
|
-
return this.orientation === 'horizontal'
|
|
442
|
+
return this.orientation() === 'horizontal'
|
|
460
443
|
? (positionObject.clientX ?? 0)
|
|
461
444
|
: (positionObject.clientY ?? 0);
|
|
462
445
|
}
|
|
463
446
|
saveUIState() {
|
|
464
|
-
|
|
447
|
+
const stateId = this.stateId();
|
|
448
|
+
if (!stateId || !this.uiStateService) {
|
|
465
449
|
return;
|
|
466
450
|
}
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
if (
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
451
|
+
const state = this.parts().reduce((partState, part) => {
|
|
452
|
+
const partStateId = part.stateId();
|
|
453
|
+
if (partStateId) {
|
|
454
|
+
const unit = part.unit();
|
|
455
|
+
partState[partStateId] = {
|
|
456
|
+
size: unit === 'px' ? part.expandedSize() : part.fractionalSize(),
|
|
457
|
+
initialSize: part.size(),
|
|
458
|
+
initialUnit: unit,
|
|
459
|
+
expanded: !part.collapsedState()
|
|
474
460
|
};
|
|
475
461
|
}
|
|
476
462
|
return partState;
|
|
477
463
|
}, {});
|
|
478
|
-
this.uiStateService.save(
|
|
464
|
+
this.uiStateService.save(stateId, state);
|
|
479
465
|
}
|
|
480
|
-
|
|
481
|
-
|
|
466
|
+
restoreFromUIState() {
|
|
467
|
+
const stateId = this.stateId();
|
|
468
|
+
if (!stateId || !this.uiStateService) {
|
|
482
469
|
return;
|
|
483
470
|
}
|
|
484
|
-
this.uiStateService.load(
|
|
471
|
+
this.uiStateService.load(stateId).then(uiState => {
|
|
485
472
|
if (!uiState) {
|
|
486
473
|
return;
|
|
487
474
|
}
|
|
488
|
-
this.parts
|
|
489
|
-
.filter(part => part.stateId)
|
|
490
|
-
.map(part => ({ part, state: uiState[part.stateId] }))
|
|
491
|
-
.filter((
|
|
475
|
+
this.parts()
|
|
476
|
+
.filter(part => part.stateId())
|
|
477
|
+
.map(part => ({ part, state: uiState[part.stateId()] }))
|
|
478
|
+
.filter((item) => !!item.state &&
|
|
479
|
+
item.state.initialSize === item.part.size() &&
|
|
480
|
+
item.state.initialUnit === item.part.unit())
|
|
492
481
|
.forEach(({ part, state }) => {
|
|
493
|
-
part.
|
|
494
|
-
|
|
495
|
-
|
|
482
|
+
if (part.unit() === 'px') {
|
|
483
|
+
part.expandedSize.set(state.size);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
part.fractionalSize.set(state.size);
|
|
487
|
+
}
|
|
488
|
+
part.collapsedState.set(!state.expanded);
|
|
496
489
|
});
|
|
497
490
|
setTimeout(() => this.refreshAllPartSizes());
|
|
498
491
|
});
|
|
499
492
|
}
|
|
500
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
501
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
493
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
494
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SiSplitComponent, isStandalone: true, selector: "si-split", inputs: { gutterSize: { classPropertyName: "gutterSize", publicName: "gutterSize", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, stateId: { classPropertyName: "stateId", publicName: "stateId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sizesChange: "sizesChange" }, host: { properties: { "class": "orientation()", "style.grid-template-rows": "gridTemplateRows()", "style.grid-template-columns": "gridTemplateColumns()", "style.grid-template-areas": "gridTemplateAreas()" } }, queries: [{ propertyName: "parts", predicate: SiSplitPartComponent, isSignal: true }], ngImport: i0, template: "<ng-content />\n\n@for (gutter of gutters(); track $index) {\n @if ($index < parts().length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation() === 'horizontal' ? gutterSize() : null\"\n [style.height.px]=\"orientation() === 'vertical' ? gutterSize() : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n", styles: [":host{display:grid;inline-size:100%;block-size:100%}.si-split-gutter{flex:0 0 auto;background:var(--element-base-0);cursor:col-resize}.si-split-gutter:before{display:block;content:\"\";position:relative;inset-block-start:50%;margin-block-start:-20px;inset-inline-start:50%;margin-inline-start:-1px;inline-size:2px;block-size:40px;background:var(--element-ui-2)}:host(.vertical)>.si-split-gutter{inline-size:auto;cursor:row-resize}:host(.vertical)>.si-split-gutter:before{transform:rotate(90deg)}.si-split-gutter:hover:before{background:var(--element-ui-0-hover)}.si-split-gutter:active:before{background:var(--element-ui-0)}\n"] });
|
|
502
495
|
}
|
|
503
496
|
__decorate([
|
|
504
497
|
WebComponentContentChildren(SiSplitPartComponent)
|
|
505
498
|
], SiSplitComponent.prototype, "parts", void 0);
|
|
506
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitComponent, decorators: [{
|
|
507
500
|
type: Component,
|
|
508
|
-
args: [{ selector: 'si-split',
|
|
509
|
-
'[class]': '
|
|
501
|
+
args: [{ selector: 'si-split', host: {
|
|
502
|
+
'[class]': 'orientation()',
|
|
510
503
|
'[style.grid-template-rows]': 'gridTemplateRows()',
|
|
511
504
|
'[style.grid-template-columns]': 'gridTemplateColumns()',
|
|
512
505
|
'[style.grid-template-areas]': 'gridTemplateAreas()'
|
|
513
|
-
}, template: "<ng-content />\n\n@for (gutter of gutters; track $index) {\n @if ($index < parts.length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation === 'horizontal' ? gutterSize : null\"\n [style.height.px]=\"orientation === 'vertical' ? gutterSize : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n", styles: [":host{display:grid;inline-size:100%;block-size:100%}.si-split-gutter{flex:0 0 auto;background:var(--element-base-0);cursor:
|
|
514
|
-
}], propDecorators: { gutterSize: [{
|
|
515
|
-
type: Input
|
|
516
|
-
}], orientation: [{
|
|
517
|
-
type: Input
|
|
518
|
-
}], sizes: [{
|
|
519
|
-
type: Input
|
|
520
|
-
}], stateId: [{
|
|
521
|
-
type: Input
|
|
522
|
-
}], sizesChange: [{
|
|
523
|
-
type: Output
|
|
524
|
-
}], parts: [{
|
|
525
|
-
type: ContentChildren,
|
|
526
|
-
args: [SiSplitPartComponent]
|
|
527
|
-
}] } });
|
|
506
|
+
}, template: "<ng-content />\n\n@for (gutter of gutters(); track $index) {\n @if ($index < parts().length - 1) {\n <div\n class=\"si-split-gutter\"\n [class.d-none]=\"!gutter.visible()\"\n [style.grid-area]=\"'g-' + $index\"\n [style.width.px]=\"orientation() === 'horizontal' ? gutterSize() : null\"\n [style.height.px]=\"orientation() === 'vertical' ? gutterSize() : null\"\n (mousedown)=\"resizeStart(gutter, $event)\"\n (touchstart)=\"resizeStart(gutter, $event)\"\n ></div>\n }\n}\n", styles: [":host{display:grid;inline-size:100%;block-size:100%}.si-split-gutter{flex:0 0 auto;background:var(--element-base-0);cursor:col-resize}.si-split-gutter:before{display:block;content:\"\";position:relative;inset-block-start:50%;margin-block-start:-20px;inset-inline-start:50%;margin-inline-start:-1px;inline-size:2px;block-size:40px;background:var(--element-ui-2)}:host(.vertical)>.si-split-gutter{inline-size:auto;cursor:row-resize}:host(.vertical)>.si-split-gutter:before{transform:rotate(90deg)}.si-split-gutter:hover:before{background:var(--element-ui-0-hover)}.si-split-gutter:active:before{background:var(--element-ui-0)}\n"] }]
|
|
507
|
+
}], ctorParameters: () => [], propDecorators: { gutterSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutterSize", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], stateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateId", required: false }] }], sizesChange: [{ type: i0.Output, args: ["sizesChange"] }], parts: [] } });
|
|
528
508
|
|
|
529
509
|
/**
|
|
530
510
|
* Copyright (c) Siemens 2016 - 2026
|
|
531
511
|
* SPDX-License-Identifier: MIT
|
|
532
512
|
*/
|
|
533
513
|
class SiSplitModule {
|
|
534
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
535
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
536
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
515
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.7", ngImport: i0, type: SiSplitModule, imports: [SiSplitComponent, SiSplitPartComponent], exports: [SiSplitComponent, SiSplitPartComponent] });
|
|
516
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitModule, imports: [SiSplitPartComponent] });
|
|
537
517
|
}
|
|
538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SiSplitModule, decorators: [{
|
|
539
519
|
type: NgModule,
|
|
540
520
|
args: [{
|
|
541
521
|
imports: [SiSplitComponent, SiSplitPartComponent],
|