@siemens/element-ng 47.1.0 → 47.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/index.d.ts +9 -0
- package/accordion/package.json +3 -0
- package/accordion/si-accordion-hcollapse.service.d.ts +17 -0
- package/accordion/si-accordion.component.d.ts +37 -0
- package/accordion/si-accordion.module.d.ts +8 -0
- package/accordion/si-accordion.service.d.ts +17 -0
- package/accordion/si-collapsible-panel.component.d.ts +89 -0
- package/action-modal/index.d.ts +6 -0
- package/action-modal/package.json +3 -0
- package/action-modal/si-action-dialog.service.d.ts +49 -0
- package/action-modal/si-action-dialog.types.d.ts +92 -0
- package/action-modal/si-alert-dialog/si-alert-dialog.component.d.ts +32 -0
- package/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.d.ts +40 -0
- package/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.d.ts +45 -0
- package/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.d.ts +68 -0
- package/auto-collapsable-list/index.d.ts +10 -0
- package/auto-collapsable-list/package.json +3 -0
- package/auto-collapsable-list/si-auto-collapsable-list-additional-content.directive.d.ts +6 -0
- package/auto-collapsable-list/si-auto-collapsable-list-item.directive.d.ts +29 -0
- package/auto-collapsable-list/si-auto-collapsable-list-measurable.class.d.ts +16 -0
- package/auto-collapsable-list/si-auto-collapsable-list-overflow-item.directive.d.ts +12 -0
- package/auto-collapsable-list/si-auto-collapsable-list.directive.d.ts +47 -0
- package/auto-collapsable-list/si-auto-collapsable-list.module.d.ts +10 -0
- package/color-picker/index.d.ts +5 -0
- package/color-picker/package.json +3 -0
- package/color-picker/si-color-picker.component.d.ts +61 -0
- package/common/models/menu.model.d.ts +2 -2
- package/connection-strength/index.d.ts +6 -0
- package/connection-strength/package.json +3 -0
- package/connection-strength/si-connection-strength.component.d.ts +19 -0
- package/connection-strength/si-connection-strength.module.d.ts +7 -0
- package/copyright-notice/index.d.ts +7 -0
- package/copyright-notice/package.json +3 -0
- package/copyright-notice/si-copyright-notice.component.d.ts +18 -0
- package/copyright-notice/si-copyright-notice.d.ts +23 -0
- package/copyright-notice/si-copyright-notice.module.d.ts +7 -0
- package/empty-state/index.d.ts +6 -0
- package/empty-state/package.json +3 -0
- package/empty-state/si-empty-state.component.d.ts +18 -0
- package/empty-state/si-empty-state.module.d.ts +7 -0
- package/fesm2022/siemens-element-ng-accordion.mjs +314 -0
- package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-action-modal.mjs +363 -0
- package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +312 -0
- package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-color-picker.mjs +176 -0
- package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-connection-strength.mjs +58 -0
- package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-copyright-notice.mjs +71 -0
- package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-empty-state.mjs +59 -0
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-footer.mjs +55 -0
- package/fesm2022/siemens-element-ng-footer.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon.mjs +8 -1
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-inline-notification.mjs +82 -0
- package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +248 -0
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-menu.mjs +350 -0
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-modal.mjs +345 -0
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-pagination.mjs +145 -0
- package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-password-toggle.mjs +88 -0
- package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-summary-chip.mjs +77 -0
- package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tooltip.mjs +233 -0
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/footer/index.d.ts +6 -0
- package/footer/package.json +3 -0
- package/footer/si-footer.component.d.ts +14 -0
- package/footer/si-footer.module.d.ts +7 -0
- package/icon/element-icons.d.ts +7 -0
- package/inline-notification/index.d.ts +6 -0
- package/inline-notification/package.json +3 -0
- package/inline-notification/si-inline-notification.component.d.ts +42 -0
- package/inline-notification/si-inline-notification.module.d.ts +7 -0
- package/loading-spinner/index.d.ts +9 -0
- package/loading-spinner/package.json +3 -0
- package/loading-spinner/si-loading-button.component.d.ts +31 -0
- package/loading-spinner/si-loading-spinner.component.d.ts +32 -0
- package/loading-spinner/si-loading-spinner.directive.d.ts +36 -0
- package/loading-spinner/si-loading-spinner.module.d.ts +8 -0
- package/loading-spinner/si-loading-spinner.service.d.ts +18 -0
- package/menu/index.d.ts +15 -0
- package/menu/package.json +3 -0
- package/menu/si-menu-action.service.d.ts +13 -0
- package/menu/si-menu-bar.directive.d.ts +12 -0
- package/menu/si-menu-divider.directive.d.ts +5 -0
- package/menu/si-menu-factory-item-guard.directive.d.ts +11 -0
- package/menu/si-menu-factory.component.d.ts +15 -0
- package/menu/si-menu-header.directive.d.ts +5 -0
- package/menu/si-menu-item-base.directive.d.ts +16 -0
- package/menu/si-menu-item-checkbox.component.d.ts +10 -0
- package/menu/si-menu-item-radio.component.d.ts +10 -0
- package/menu/si-menu-item.component.d.ts +10 -0
- package/menu/si-menu-model.d.ts +91 -0
- package/menu/si-menu.directive.d.ts +6 -0
- package/menu/si-menu.module.d.ts +14 -0
- package/modal/index.d.ts +7 -0
- package/modal/modal.helpers.d.ts +8 -0
- package/modal/modalref.d.ts +64 -0
- package/modal/package.json +3 -0
- package/modal/si-modal.component.d.ts +32 -0
- package/modal/si-modal.service.d.ts +57 -0
- package/package.json +67 -3
- package/pagination/index.d.ts +6 -0
- package/pagination/package.json +3 -0
- package/pagination/si-pagination.component.d.ts +65 -0
- package/pagination/si-pagination.module.d.ts +7 -0
- package/password-toggle/index.d.ts +6 -0
- package/password-toggle/package.json +3 -0
- package/password-toggle/si-password-toggle.component.d.ts +39 -0
- package/password-toggle/si-password-toggle.module.d.ts +7 -0
- package/summary-chip/index.d.ts +5 -0
- package/summary-chip/package.json +3 -0
- package/summary-chip/si-summary-chip.component.d.ts +44 -0
- package/template-i18n.json +19 -1
- package/tooltip/index.d.ts +7 -0
- package/tooltip/package.json +3 -0
- package/tooltip/si-tooltip.component.d.ts +25 -0
- package/tooltip/si-tooltip.directive.d.ts +45 -0
- package/tooltip/si-tooltip.module.d.ts +7 -0
- package/tooltip/si-tooltip.service.d.ts +44 -0
- package/translate/si-translatable-keys.interface.d.ts +18 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
2
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { inject, signal, viewChild, HostListener, ChangeDetectionStrategy, Component, ApplicationRef, Injector, EnvironmentInjector, TemplateRef, createComponent, Injectable } from '@angular/core';
|
|
5
|
+
import { isRTL } from '@siemens/element-ng/common';
|
|
6
|
+
import { SiTranslateService, SiNoTranslateService } from '@siemens/element-translate-ng/translate';
|
|
7
|
+
import { Subject, ReplaySubject } from 'rxjs';
|
|
8
|
+
import * as i1 from '@angular/cdk/a11y';
|
|
9
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
10
|
+
import { DOCUMENT, NgClass } from '@angular/common';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Reference to a modal dialog
|
|
14
|
+
* @typeParam T - the type of the content
|
|
15
|
+
* @typeParam CT - the close type
|
|
16
|
+
*/
|
|
17
|
+
class ModalRef {
|
|
18
|
+
/** Emits the close value when the modal is hidden. */
|
|
19
|
+
hidden = new Subject();
|
|
20
|
+
/** Allows messaging state to consumer w/o closing the dialog. */
|
|
21
|
+
message = new Subject();
|
|
22
|
+
/** Emits the modal element reference when it is shown. */
|
|
23
|
+
shown = new ReplaySubject(1);
|
|
24
|
+
/**
|
|
25
|
+
* The modal options passed during creation.
|
|
26
|
+
*
|
|
27
|
+
* @defaultValue `{}`
|
|
28
|
+
* @see {@link SiModalService}
|
|
29
|
+
*/
|
|
30
|
+
data = {};
|
|
31
|
+
/** @defaultValue true */
|
|
32
|
+
ignoreBackdropClick = true;
|
|
33
|
+
/**
|
|
34
|
+
* Custom class for modal-dialog
|
|
35
|
+
*
|
|
36
|
+
* @defaultValue ''
|
|
37
|
+
*/
|
|
38
|
+
dialogClass = '';
|
|
39
|
+
/**
|
|
40
|
+
* The layer of the modal. The modal with the highest layer will be shown on top.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue 0
|
|
43
|
+
*/
|
|
44
|
+
layer = 0;
|
|
45
|
+
/** The default close value of the modal. */
|
|
46
|
+
closeValue;
|
|
47
|
+
get content() {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
/** Set the input of a component shown in the modal. */
|
|
51
|
+
setInput(input, value) { }
|
|
52
|
+
/**
|
|
53
|
+
* @defaultValue `() => false`
|
|
54
|
+
*/
|
|
55
|
+
isCurrent = () => false;
|
|
56
|
+
/**
|
|
57
|
+
* @defaultValue `() => {}`
|
|
58
|
+
*/
|
|
59
|
+
detach = () => { };
|
|
60
|
+
/**
|
|
61
|
+
* Close the modal with a custom close value.
|
|
62
|
+
*
|
|
63
|
+
* @defaultValue `() => {}`
|
|
64
|
+
*/
|
|
65
|
+
hide = () => { };
|
|
66
|
+
/**
|
|
67
|
+
* When `data.disableAutoHide` is set, messages the `reason`, otherwise calls {@link hide}.
|
|
68
|
+
*/
|
|
69
|
+
messageOrHide(reason) {
|
|
70
|
+
if (this.data.messageInsteadOfAutoHide) {
|
|
71
|
+
this.message.next(reason);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.hide(reason);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Copyright Siemens 2016 - 2025.
|
|
81
|
+
* SPDX-License-Identifier: MIT
|
|
82
|
+
*/
|
|
83
|
+
class SiModalComponent {
|
|
84
|
+
modalRef = inject((ModalRef));
|
|
85
|
+
dialogClass = this.modalRef.dialogClass ?? '';
|
|
86
|
+
titleId = this.modalRef.data?.ariaLabelledBy ?? '';
|
|
87
|
+
init = false;
|
|
88
|
+
show = signal(false);
|
|
89
|
+
showBackdropClass = signal(undefined);
|
|
90
|
+
clickStartInDialog = false;
|
|
91
|
+
origBodyOverflow;
|
|
92
|
+
showTimer;
|
|
93
|
+
backdropTimer;
|
|
94
|
+
backdropGhostClickPrevention = true;
|
|
95
|
+
document = inject(DOCUMENT);
|
|
96
|
+
modalContainerRef = viewChild.required('modalContainer');
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
setTimeout(() => (this.backdropGhostClickPrevention = false), this.animationTime(300));
|
|
99
|
+
this.init = true;
|
|
100
|
+
this.showTimer = setTimeout(() => {
|
|
101
|
+
this.show.set(true);
|
|
102
|
+
}, this.animationTime(150));
|
|
103
|
+
}
|
|
104
|
+
ngAfterViewInit() {
|
|
105
|
+
queueMicrotask(() => this.modalRef?.shown.next(this.modalContainerRef()));
|
|
106
|
+
}
|
|
107
|
+
ngOnDestroy() {
|
|
108
|
+
this.hideBackdrop();
|
|
109
|
+
}
|
|
110
|
+
/** @internal */
|
|
111
|
+
hideDialog(param) {
|
|
112
|
+
clearTimeout(this.showTimer);
|
|
113
|
+
this.show.set(false);
|
|
114
|
+
// set `detach()` in modal ref to no-op so that the animation is unaffected if called
|
|
115
|
+
const detach = this.modalRef.detach;
|
|
116
|
+
this.modalRef.detach = () => { };
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
this.hideBackdrop();
|
|
119
|
+
setTimeout(() => detach(), this.animationTime(150));
|
|
120
|
+
}, this.animationTime(300));
|
|
121
|
+
this.modalRef?.hidden.next(param);
|
|
122
|
+
this.modalRef?.hidden.complete();
|
|
123
|
+
this.modalRef?.message.complete();
|
|
124
|
+
}
|
|
125
|
+
/** @internal */
|
|
126
|
+
showBackdrop() {
|
|
127
|
+
if (this.modalRef?.data.animated !== false) {
|
|
128
|
+
this.showBackdropClass.set(false);
|
|
129
|
+
this.backdropTimer = setTimeout(() => {
|
|
130
|
+
this.showBackdropClass.set(true);
|
|
131
|
+
}, 16);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.showBackdropClass.set(true);
|
|
135
|
+
}
|
|
136
|
+
this.origBodyOverflow = this.document.body.style.overflow;
|
|
137
|
+
this.document.body.style.overflow = 'hidden';
|
|
138
|
+
}
|
|
139
|
+
hideBackdrop() {
|
|
140
|
+
clearTimeout(this.backdropTimer);
|
|
141
|
+
if (this.showBackdropClass !== undefined) {
|
|
142
|
+
this.showBackdropClass.set(false);
|
|
143
|
+
}
|
|
144
|
+
if (this.origBodyOverflow !== undefined) {
|
|
145
|
+
this.document.body.style.overflow = this.origBodyOverflow;
|
|
146
|
+
this.origBodyOverflow = undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
clickStarted(event) {
|
|
150
|
+
this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;
|
|
151
|
+
}
|
|
152
|
+
onClickStop(event) {
|
|
153
|
+
const clickedInBackdrop = event.target === this.modalContainerRef().nativeElement && !this.clickStartInDialog;
|
|
154
|
+
if (this.modalRef?.ignoreBackdropClick || !clickedInBackdrop) {
|
|
155
|
+
this.clickStartInDialog = false;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (!this.backdropGhostClickPrevention) {
|
|
159
|
+
// Called when backdrop close is allowed and user clicks on the backdrop
|
|
160
|
+
this.modalRef.messageOrHide(this.modalRef.closeValue);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// When in ghost click prevention mode, avoid text selection
|
|
164
|
+
this.document.getSelection()?.removeAllRanges();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
onEsc(event) {
|
|
168
|
+
if (this.modalRef?.data.keyboard && this.modalRef?.isCurrent()) {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
this.modalRef.messageOrHide(this.modalRef.closeValue);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
animationTime(millis) {
|
|
174
|
+
return this.modalRef?.data.animated !== false ? millis : 0;
|
|
175
|
+
}
|
|
176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiModalComponent, isStandalone: true, selector: "si-modal", host: { listeners: { "mousedown": "clickStarted($event)", "mouseup": "onClickStop($event)", "window:keydown.esc": "onEsc($event)" } }, viewQueries: [{ propertyName: "modalContainerRef", first: true, predicate: ["modalContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (showBackdropClass() !== undefined) {\n <div\n class=\"modal-backdrop\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"showBackdropClass()\"\n ></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div class=\"modal-dialog\" cdkTrapFocus cdkTrapFocusAutoCapture [ngClass]=\"dialogClass\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
178
|
+
}
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiModalComponent, decorators: [{
|
|
180
|
+
type: Component,
|
|
181
|
+
args: [{ selector: 'si-modal', changeDetection: ChangeDetectionStrategy.OnPush, imports: [A11yModule, NgClass], template: "@if (showBackdropClass() !== undefined) {\n <div\n class=\"modal-backdrop\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"showBackdropClass()\"\n ></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div class=\"modal-dialog\" cdkTrapFocus cdkTrapFocusAutoCapture [ngClass]=\"dialogClass\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n" }]
|
|
182
|
+
}], propDecorators: { clickStarted: [{
|
|
183
|
+
type: HostListener,
|
|
184
|
+
args: ['mousedown', ['$event']]
|
|
185
|
+
}], onClickStop: [{
|
|
186
|
+
type: HostListener,
|
|
187
|
+
args: ['mouseup', ['$event']]
|
|
188
|
+
}], onEsc: [{
|
|
189
|
+
type: HostListener,
|
|
190
|
+
args: ['window:keydown.esc', ['$event']]
|
|
191
|
+
}] } });
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Copyright Siemens 2016 - 2025.
|
|
195
|
+
* SPDX-License-Identifier: MIT
|
|
196
|
+
*/
|
|
197
|
+
class ModalRefImpl extends ModalRef {
|
|
198
|
+
contentRef;
|
|
199
|
+
viewRef;
|
|
200
|
+
modalCompRef;
|
|
201
|
+
componentRef;
|
|
202
|
+
overlayRef;
|
|
203
|
+
get content() {
|
|
204
|
+
return this.componentRef?.instance;
|
|
205
|
+
}
|
|
206
|
+
setInput(input, value) {
|
|
207
|
+
this.componentRef?.setInput(input, value);
|
|
208
|
+
}
|
|
209
|
+
constructor(contentRef, layer, data, closeValue) {
|
|
210
|
+
super();
|
|
211
|
+
this.contentRef = contentRef;
|
|
212
|
+
this.layer = layer;
|
|
213
|
+
this.data = data;
|
|
214
|
+
this.ignoreBackdropClick = data.ignoreBackdropClick !== false;
|
|
215
|
+
this.dialogClass = data?.class ?? '';
|
|
216
|
+
this.closeValue = closeValue;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
class SiModalService {
|
|
220
|
+
modalsCount = 0;
|
|
221
|
+
overlay = inject(Overlay);
|
|
222
|
+
appRef = inject(ApplicationRef);
|
|
223
|
+
injector = inject(Injector);
|
|
224
|
+
environmentInjector = inject(EnvironmentInjector);
|
|
225
|
+
/**
|
|
226
|
+
* Shows a modal with the given content and configuration.
|
|
227
|
+
* @param content - Content to be displayed in the modal can be a template reference or a component.
|
|
228
|
+
* @param config - Configuration for the modal.
|
|
229
|
+
* @param closeValue - Default closing value which can be overridden by calling `modalRef.hide(value)`.
|
|
230
|
+
* @returns A reference to the modal.
|
|
231
|
+
*/
|
|
232
|
+
show(content, config, closeValue) {
|
|
233
|
+
const modalRef = new ModalRefImpl(content, ++this.modalsCount, config, closeValue);
|
|
234
|
+
const siModalRef = this.attachComponent(modalRef);
|
|
235
|
+
modalRef.modalCompRef = siModalRef;
|
|
236
|
+
modalRef.detach = () => this.detach(modalRef);
|
|
237
|
+
modalRef.hide = (param) => siModalRef.instance.hideDialog(param);
|
|
238
|
+
modalRef.isCurrent = () => modalRef.layer === this.modalsCount;
|
|
239
|
+
if (this.modalsCount === 1) {
|
|
240
|
+
siModalRef.instance.showBackdrop();
|
|
241
|
+
}
|
|
242
|
+
return modalRef;
|
|
243
|
+
}
|
|
244
|
+
attachComponent(modalRef) {
|
|
245
|
+
const providers = [{ provide: ModalRef, useValue: modalRef }];
|
|
246
|
+
modalRef.data.providers?.forEach(p => providers.push(p));
|
|
247
|
+
const injector = Injector.create({
|
|
248
|
+
providers,
|
|
249
|
+
parent: modalRef.data.injector ?? this.buildInjector()
|
|
250
|
+
});
|
|
251
|
+
modalRef.overlayRef = this.overlay.create({
|
|
252
|
+
positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
|
|
253
|
+
direction: isRTL() ? 'rtl' : 'ltr'
|
|
254
|
+
});
|
|
255
|
+
return modalRef.overlayRef.attach(new ComponentPortal(SiModalComponent, null, injector, null, this.getContentProjectableNodes(injector, modalRef)));
|
|
256
|
+
}
|
|
257
|
+
getContentProjectableNodes(injector, modalRef) {
|
|
258
|
+
if (modalRef.contentRef instanceof TemplateRef) {
|
|
259
|
+
modalRef.viewRef = modalRef.contentRef.createEmbeddedView({
|
|
260
|
+
modalRef,
|
|
261
|
+
...modalRef.data.initialState,
|
|
262
|
+
...modalRef.data.inputValues
|
|
263
|
+
});
|
|
264
|
+
this.appRef.attachView(modalRef.viewRef);
|
|
265
|
+
return [modalRef.viewRef.rootNodes];
|
|
266
|
+
}
|
|
267
|
+
modalRef.componentRef = createComponent(modalRef.contentRef, {
|
|
268
|
+
environmentInjector: modalRef.data.environmentInjector ?? this.environmentInjector,
|
|
269
|
+
elementInjector: injector
|
|
270
|
+
});
|
|
271
|
+
Object.assign(modalRef.componentRef.instance, modalRef.data?.initialState);
|
|
272
|
+
// set initial @Input() / input()
|
|
273
|
+
for (const [key, value] of Object.entries(modalRef.data?.inputValues ?? {})) {
|
|
274
|
+
modalRef.componentRef?.setInput(key, value);
|
|
275
|
+
}
|
|
276
|
+
modalRef.componentRef.changeDetectorRef.detectChanges();
|
|
277
|
+
this.appRef.attachView(modalRef.componentRef.hostView);
|
|
278
|
+
return [[modalRef.componentRef.location.nativeElement]];
|
|
279
|
+
}
|
|
280
|
+
detach(modalRef) {
|
|
281
|
+
const ref = modalRef;
|
|
282
|
+
if (ref.modalCompRef) {
|
|
283
|
+
ref.modalCompRef?.destroy();
|
|
284
|
+
ref.modalCompRef = undefined;
|
|
285
|
+
ref.componentRef?.destroy();
|
|
286
|
+
ref.componentRef = undefined;
|
|
287
|
+
ref.viewRef?.destroy();
|
|
288
|
+
ref.viewRef = undefined;
|
|
289
|
+
ref.overlayRef?.dispose();
|
|
290
|
+
ref.shown.complete();
|
|
291
|
+
this.modalsCount--;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// TODO remove once translation must be defined at application start
|
|
295
|
+
// Notification service is provided in 'root'. If no translation is defined, SiNoTranslateService is not provided
|
|
296
|
+
buildInjector() {
|
|
297
|
+
let injector = this.injector;
|
|
298
|
+
if (!injector.get(SiTranslateService, null)) {
|
|
299
|
+
injector = Injector.create({
|
|
300
|
+
providers: [{ provide: SiTranslateService, useClass: SiNoTranslateService, deps: [] }],
|
|
301
|
+
parent: this.injector
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
return injector;
|
|
305
|
+
}
|
|
306
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
307
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiModalService, providedIn: 'root' });
|
|
308
|
+
}
|
|
309
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiModalService, decorators: [{
|
|
310
|
+
type: Injectable,
|
|
311
|
+
args: [{ providedIn: 'root' }]
|
|
312
|
+
}] });
|
|
313
|
+
|
|
314
|
+
let idCounter = 1;
|
|
315
|
+
const createModalConfig = (inputs) => {
|
|
316
|
+
if (inputs) {
|
|
317
|
+
Object.keys(inputs).forEach(k => inputs[k] === undefined && delete inputs[k]);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
inputs = {};
|
|
321
|
+
}
|
|
322
|
+
const config = {
|
|
323
|
+
inputValues: inputs,
|
|
324
|
+
ignoreBackdropClick: true,
|
|
325
|
+
keyboard: false,
|
|
326
|
+
animated: true,
|
|
327
|
+
class: 'modal-dialog-centered'
|
|
328
|
+
};
|
|
329
|
+
const id = `__si-modal-id-${idCounter++}`;
|
|
330
|
+
config.inputValues.titleId = id;
|
|
331
|
+
config.ariaLabelledBy = id;
|
|
332
|
+
return config;
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Copyright Siemens 2016 - 2025.
|
|
337
|
+
* SPDX-License-Identifier: MIT
|
|
338
|
+
*/
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Generated bundle index. Do not edit.
|
|
342
|
+
*/
|
|
343
|
+
|
|
344
|
+
export { ModalRef, SiModalService, createModalConfig };
|
|
345
|
+
//# sourceMappingURL=siemens-element-ng-modal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-modal.mjs","sources":["../../../../projects/element-ng/modal/modalref.ts","../../../../projects/element-ng/modal/si-modal.component.ts","../../../../projects/element-ng/modal/si-modal.component.html","../../../../projects/element-ng/modal/si-modal.service.ts","../../../../projects/element-ng/modal/modal.helpers.ts","../../../../projects/element-ng/modal/index.ts","../../../../projects/element-ng/modal/siemens-element-ng-modal.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ElementRef } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\nimport { ModalOptions } from './si-modal.service';\n\n/**\n * Reference to a modal dialog\n * @typeParam T - the type of the content\n * @typeParam CT - the close type\n */\nexport class ModalRef<T = never, CT = any> {\n /** Emits the close value when the modal is hidden. */\n hidden = new Subject<CT | undefined>();\n /** Allows messaging state to consumer w/o closing the dialog. */\n message = new Subject<CT | undefined>();\n /** Emits the modal element reference when it is shown. */\n shown = new ReplaySubject<ElementRef>(1);\n /**\n * The modal options passed during creation.\n *\n * @defaultValue `{}`\n * @see {@link SiModalService}\n */\n data: ModalOptions = {};\n /** @defaultValue true */\n ignoreBackdropClick = true;\n /**\n * Custom class for modal-dialog\n *\n * @defaultValue ''\n */\n dialogClass = '';\n /**\n * The layer of the modal. The modal with the highest layer will be shown on top.\n *\n * @defaultValue 0\n */\n layer = 0;\n /** The default close value of the modal. */\n closeValue?: CT;\n\n get content(): T {\n return undefined as unknown as T;\n }\n\n /** Set the input of a component shown in the modal. */\n setInput(input: string, value: unknown): void {}\n\n /**\n * @defaultValue `() => false`\n */\n isCurrent: () => boolean = () => false;\n /**\n * @defaultValue `() => {}`\n */\n detach: () => void = () => {};\n /**\n * Close the modal with a custom close value.\n *\n * @defaultValue `() => {}`\n */\n hide: (reason?: CT) => void = () => {};\n\n /**\n * When `data.disableAutoHide` is set, messages the `reason`, otherwise calls {@link hide}.\n */\n messageOrHide(reason?: CT): void {\n if (this.data.messageInsteadOfAutoHide) {\n this.message.next(reason);\n } else {\n this.hide(reason);\n }\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DOCUMENT, NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\n\nimport { ModalRef } from './modalref';\n\n@Component({\n selector: 'si-modal',\n templateUrl: './si-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, NgClass]\n})\nexport class SiModalComponent implements OnInit, AfterViewInit, OnDestroy {\n protected modalRef = inject(ModalRef<unknown, any>);\n\n protected dialogClass = this.modalRef.dialogClass ?? '';\n protected titleId = this.modalRef.data?.ariaLabelledBy ?? '';\n protected init = false;\n protected readonly show = signal(false);\n protected readonly showBackdropClass = signal<boolean | undefined>(undefined);\n\n private clickStartInDialog = false;\n private origBodyOverflow?: string;\n private showTimer: any;\n private backdropTimer: any;\n private backdropGhostClickPrevention = true;\n private document = inject(DOCUMENT);\n\n private readonly modalContainerRef = viewChild.required<ElementRef>('modalContainer');\n\n ngOnInit(): void {\n setTimeout(() => (this.backdropGhostClickPrevention = false), this.animationTime(300));\n this.init = true;\n this.showTimer = setTimeout(() => {\n this.show.set(true);\n }, this.animationTime(150));\n }\n\n ngAfterViewInit(): void {\n queueMicrotask(() => this.modalRef?.shown.next(this.modalContainerRef()));\n }\n\n ngOnDestroy(): void {\n this.hideBackdrop();\n }\n\n /** @internal */\n hideDialog(param?: any): void {\n clearTimeout(this.showTimer);\n\n this.show.set(false);\n // set `detach()` in modal ref to no-op so that the animation is unaffected if called\n const detach = this.modalRef.detach;\n this.modalRef.detach = () => {};\n\n setTimeout(() => {\n this.hideBackdrop();\n setTimeout(() => detach(), this.animationTime(150));\n }, this.animationTime(300));\n\n this.modalRef?.hidden.next(param);\n this.modalRef?.hidden.complete();\n this.modalRef?.message.complete();\n }\n\n /** @internal */\n showBackdrop(): void {\n if (this.modalRef?.data.animated !== false) {\n this.showBackdropClass.set(false);\n this.backdropTimer = setTimeout(() => {\n this.showBackdropClass.set(true);\n }, 16);\n } else {\n this.showBackdropClass.set(true);\n }\n this.origBodyOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private hideBackdrop(): void {\n clearTimeout(this.backdropTimer);\n if (this.showBackdropClass !== undefined) {\n this.showBackdropClass.set(false);\n }\n if (this.origBodyOverflow !== undefined) {\n this.document.body.style.overflow = this.origBodyOverflow;\n this.origBodyOverflow = undefined;\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected clickStarted(event: MouseEvent): void {\n this.clickStartInDialog = event.target !== this.modalContainerRef().nativeElement;\n }\n\n @HostListener('mouseup', ['$event'])\n protected onClickStop(event: MouseEvent): void {\n const clickedInBackdrop =\n event.target === this.modalContainerRef().nativeElement && !this.clickStartInDialog;\n if (this.modalRef?.ignoreBackdropClick || !clickedInBackdrop) {\n this.clickStartInDialog = false;\n return;\n }\n\n if (!this.backdropGhostClickPrevention) {\n // Called when backdrop close is allowed and user clicks on the backdrop\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n } else {\n // When in ghost click prevention mode, avoid text selection\n this.document.getSelection()?.removeAllRanges();\n }\n }\n\n @HostListener('window:keydown.esc', ['$event'])\n protected onEsc(event: KeyboardEvent): void {\n if (this.modalRef?.data.keyboard && this.modalRef?.isCurrent()) {\n event.preventDefault();\n this.modalRef.messageOrHide(this.modalRef.closeValue);\n }\n }\n\n private animationTime(millis: number): number {\n return this.modalRef?.data.animated !== false ? millis : 0;\n }\n}\n","@if (showBackdropClass() !== undefined) {\n <div\n class=\"modal-backdrop\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"showBackdropClass()\"\n ></div>\n}\n@if (init) {\n <div\n #modalContainer\n role=\"dialog\"\n class=\"modal d-block\"\n aria-modal=\"true\"\n [class.fade]=\"modalRef.data.animated !== false\"\n [class.show]=\"show()\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div class=\"modal-dialog\" cdkTrapFocus cdkTrapFocusAutoCapture [ngClass]=\"dialogClass\">\n <div class=\"modal-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n StaticProvider,\n TemplateRef,\n Type\n} from '@angular/core';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { SiNoTranslateService, SiTranslateService } from '@siemens/element-translate-ng/translate';\n\nimport { ModalRef } from './modalref';\nimport { SiModalComponent } from './si-modal.component';\n\nexport interface ModalDependencyInjectionOptions {\n /** Additional providers for the modal. */\n providers?: StaticProvider[];\n /** Optional element Injector. */\n injector?: Injector;\n /** Optional environment Injector. */\n environmentInjector?: EnvironmentInjector;\n}\n\nexport interface ModalOptions<T = Record<string, any>> extends ModalDependencyInjectionOptions {\n /**\n * Assign all values to the target component using `Object.assign(component, initialState)`.\n *\n * @deprecated Use {@link inputValues} instead.\n */\n initialState?: Partial<T>;\n /**\n * Use this to assign values to either `@Input()` or `input()` fields of the provided component.\n * If a template is used, the values are available in the template context.\n */\n inputValues?: Record<string, unknown>;\n /** When set to true, clicking the backdrop has no effect. */\n ignoreBackdropClick?: boolean;\n /** When set to true, backdrop click or Esc don't close the modal. Instead a message will be sent. */\n messageInsteadOfAutoHide?: boolean;\n /** Handle Esc to close/message. */\n keyboard?: boolean;\n /** Whether to enable animation. */\n animated?: boolean;\n /** Additional CSS class. */\n class?: string;\n /** aria-labelled-by value. */\n ariaLabelledBy?: string;\n}\n\nclass ModalRefImpl<T = never, CT = void> extends ModalRef<T, CT> {\n contentRef: TemplateRef<any> | Type<any>;\n viewRef?: EmbeddedViewRef<any>;\n modalCompRef?: ComponentRef<SiModalComponent>;\n componentRef?: ComponentRef<T>;\n overlayRef?: OverlayRef;\n\n override get content(): T {\n return this.componentRef?.instance as T;\n }\n\n override setInput(input: string, value: unknown): void {\n this.componentRef?.setInput(input, value);\n }\n\n constructor(\n contentRef: TemplateRef<any> | Type<any>,\n layer: number,\n data: ModalOptions,\n closeValue?: CT\n ) {\n super();\n this.contentRef = contentRef;\n this.layer = layer;\n this.data = data;\n this.ignoreBackdropClick = data.ignoreBackdropClick !== false;\n this.dialogClass = data?.class ?? '';\n this.closeValue = closeValue;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SiModalService {\n private modalsCount = 0;\n private readonly overlay = inject(Overlay);\n private appRef = inject(ApplicationRef);\n private injector = inject(Injector);\n private environmentInjector = inject(EnvironmentInjector);\n\n /**\n * Shows a modal with the given content and configuration.\n * @param content - Content to be displayed in the modal can be a template reference or a component.\n * @param config - Configuration for the modal.\n * @param closeValue - Default closing value which can be overridden by calling `modalRef.hide(value)`.\n * @returns A reference to the modal.\n */\n show<T, CT = any>(\n content: TemplateRef<any> | (new (...args: any[]) => T),\n config: ModalOptions<T>,\n closeValue?: CT\n ): ModalRef<T, CT> {\n const modalRef = new ModalRefImpl<T, CT>(content, ++this.modalsCount, config, closeValue);\n const siModalRef = this.attachComponent(modalRef);\n modalRef.modalCompRef = siModalRef;\n modalRef.detach = () => this.detach(modalRef);\n modalRef.hide = (param?: CT) => siModalRef.instance.hideDialog(param);\n modalRef.isCurrent = () => modalRef.layer === this.modalsCount;\n\n if (this.modalsCount === 1) {\n siModalRef.instance.showBackdrop();\n }\n\n return modalRef;\n }\n\n private attachComponent<T, CT>(modalRef: ModalRefImpl<T, CT>): ComponentRef<SiModalComponent> {\n const providers: StaticProvider[] = [{ provide: ModalRef, useValue: modalRef }];\n modalRef.data.providers?.forEach(p => providers.push(p));\n const injector = Injector.create({\n providers,\n parent: modalRef.data.injector ?? this.buildInjector()\n });\n\n modalRef.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n direction: isRTL() ? 'rtl' : 'ltr'\n });\n return modalRef.overlayRef.attach(\n new ComponentPortal(\n SiModalComponent,\n null,\n injector,\n null,\n this.getContentProjectableNodes(injector, modalRef)\n )\n );\n }\n\n private getContentProjectableNodes<T, CT>(\n injector: Injector,\n modalRef: ModalRefImpl<T, CT>\n ): Node[][] {\n if (modalRef.contentRef instanceof TemplateRef) {\n modalRef.viewRef = modalRef.contentRef.createEmbeddedView({\n modalRef,\n ...modalRef.data.initialState,\n ...modalRef.data.inputValues\n });\n this.appRef.attachView(modalRef.viewRef);\n return [modalRef.viewRef.rootNodes];\n }\n\n modalRef.componentRef = createComponent(modalRef.contentRef, {\n environmentInjector: modalRef.data.environmentInjector ?? this.environmentInjector,\n elementInjector: injector\n });\n Object.assign(modalRef.componentRef.instance as any, modalRef.data?.initialState);\n // set initial @Input() / input()\n for (const [key, value] of Object.entries(modalRef.data?.inputValues ?? {})) {\n modalRef.componentRef?.setInput(key, value);\n }\n modalRef.componentRef.changeDetectorRef.detectChanges();\n\n this.appRef.attachView(modalRef.componentRef.hostView);\n return [[modalRef.componentRef.location.nativeElement]];\n }\n\n protected detach(modalRef: ModalRef<unknown, any>): void {\n const ref = modalRef as ModalRefImpl<unknown>;\n if (ref.modalCompRef) {\n ref.modalCompRef?.destroy();\n ref.modalCompRef = undefined;\n ref.componentRef?.destroy();\n ref.componentRef = undefined;\n ref.viewRef?.destroy();\n ref.viewRef = undefined;\n ref.overlayRef?.dispose();\n ref.shown.complete();\n this.modalsCount--;\n }\n }\n\n // TODO remove once translation must be defined at application start\n // Notification service is provided in 'root'. If no translation is defined, SiNoTranslateService is not provided\n protected buildInjector(): Injector {\n let injector = this.injector;\n if (!injector.get(SiTranslateService, null)) {\n injector = Injector.create({\n providers: [{ provide: SiTranslateService, useClass: SiNoTranslateService, deps: [] }],\n parent: this.injector\n });\n }\n return injector;\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ModalOptions } from './si-modal.service';\n\nlet idCounter = 1;\n\nexport const createModalConfig = (inputs?: { [key: string]: any }): ModalOptions => {\n if (inputs) {\n Object.keys(inputs).forEach(k => inputs![k] === undefined && delete inputs![k]);\n } else {\n inputs = {};\n }\n const config: ModalOptions<any> = {\n inputValues: inputs as { [key: string]: any },\n ignoreBackdropClick: true,\n keyboard: false,\n animated: true,\n class: 'modal-dialog-centered'\n };\n const id = `__si-modal-id-${idCounter++}`;\n config.inputValues!.titleId = id;\n config.ariaLabelledBy = id;\n return config;\n};\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-modal.service';\nexport * from './modalref';\nexport * from './modal.helpers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, model, computed, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { addIcons, elementRight3, elementLeft3, SiIconNextComponent } from '@siemens/element-ng/icon';
|
|
4
|
+
import * as i1 from '@siemens/element-translate-ng/translate';
|
|
5
|
+
import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright Siemens 2016 - 2025.
|
|
9
|
+
* SPDX-License-Identifier: MIT
|
|
10
|
+
*/
|
|
11
|
+
class SiPaginationComponent {
|
|
12
|
+
static maxItems = 7;
|
|
13
|
+
/**
|
|
14
|
+
* The total number of pages.
|
|
15
|
+
* Alternatively use `itemsPerPage` and `totalItems`
|
|
16
|
+
*/
|
|
17
|
+
totalPages = input();
|
|
18
|
+
/**
|
|
19
|
+
* The current active page, counting starts from 1
|
|
20
|
+
*
|
|
21
|
+
* @defaultValue 1
|
|
22
|
+
*/
|
|
23
|
+
currentPage = model(1);
|
|
24
|
+
/**
|
|
25
|
+
* The number of items per page.
|
|
26
|
+
* Used to calculate the total number of page if `totalPages` is not available
|
|
27
|
+
*/
|
|
28
|
+
pageSize = input();
|
|
29
|
+
/**
|
|
30
|
+
* The total number of items.
|
|
31
|
+
* Used to calculate the total number of page if `totalPages` is not available
|
|
32
|
+
*/
|
|
33
|
+
totalRowCount = input();
|
|
34
|
+
/**
|
|
35
|
+
* The text of the back button for pagination. Required for a11y.
|
|
36
|
+
*
|
|
37
|
+
* @defaultValue
|
|
38
|
+
* ```
|
|
39
|
+
* $localize`:@@SI_PAGINATION.BACK:Back`
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
backButtonText = input($localize `:@@SI_PAGINATION.BACK:Back`);
|
|
43
|
+
/**
|
|
44
|
+
* The text of the forward button for pagination. Required for a11y.
|
|
45
|
+
*
|
|
46
|
+
* @defaultValue
|
|
47
|
+
* ```
|
|
48
|
+
* $localize`:@@SI_PAGINATION.FORWARD:Forward`
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
forwardButtonText = input($localize `:@@SI_PAGINATION.FORWARD:Forward`);
|
|
52
|
+
/**
|
|
53
|
+
* When multiple paginations are used on the same page each pagination needs a distinct aria label.
|
|
54
|
+
* Required for a11y.
|
|
55
|
+
*
|
|
56
|
+
* @defaultValue
|
|
57
|
+
* ```
|
|
58
|
+
* $localize`:@@SI_PAGINATION.NAV_LABEL:Pagination`
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
navAriaLabel = input($localize `:@@SI_PAGINATION.NAV_LABEL:Pagination`);
|
|
62
|
+
calculatedTotalPages = computed(() => this.totalPages() ?? Math.ceil((this.totalRowCount() ?? 0) / (this.pageSize() ?? 1)));
|
|
63
|
+
prevDisabled = computed(() => this.currentPage() === 1);
|
|
64
|
+
nextDisabled = computed(() => this.currentPage() === this.calculatedTotalPages());
|
|
65
|
+
pageButtons = computed(() => {
|
|
66
|
+
const pageButtons = [];
|
|
67
|
+
const totalPages = this.calculatedTotalPages();
|
|
68
|
+
const currentPage = this.currentPage();
|
|
69
|
+
if (totalPages <= SiPaginationComponent.maxItems) {
|
|
70
|
+
for (let i = 0; i < totalPages; i++) {
|
|
71
|
+
pageButtons.push({ page: i + 1, sep: false });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (currentPage < SiPaginationComponent.maxItems - 2) {
|
|
75
|
+
// separator only on the right (in LTR)
|
|
76
|
+
for (let i = 0; i < SiPaginationComponent.maxItems - 2; i++) {
|
|
77
|
+
pageButtons.push({ page: i + 1, sep: false });
|
|
78
|
+
}
|
|
79
|
+
pageButtons.push({ page: 0, sep: true });
|
|
80
|
+
pageButtons.push({ page: totalPages, sep: false });
|
|
81
|
+
}
|
|
82
|
+
else if (currentPage >= totalPages - 3) {
|
|
83
|
+
// separator only on the left (in LTR)
|
|
84
|
+
pageButtons.push({ page: 1, sep: false });
|
|
85
|
+
pageButtons.push({ page: 0, sep: true });
|
|
86
|
+
for (let i = totalPages - SiPaginationComponent.maxItems + 2; i < totalPages; i++) {
|
|
87
|
+
pageButtons.push({ page: i + 1, sep: false });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// separator on both sides
|
|
92
|
+
pageButtons.push({ page: 1, sep: false });
|
|
93
|
+
pageButtons.push({ page: 0, sep: true });
|
|
94
|
+
for (let i = -1; i <= 1; i++) {
|
|
95
|
+
pageButtons.push({ page: currentPage + i, sep: false });
|
|
96
|
+
}
|
|
97
|
+
pageButtons.push({ page: 0, sep: true });
|
|
98
|
+
pageButtons.push({ page: totalPages, sep: false });
|
|
99
|
+
}
|
|
100
|
+
return pageButtons;
|
|
101
|
+
});
|
|
102
|
+
icons = addIcons({ elementLeft3, elementRight3 });
|
|
103
|
+
direction(event, delta) {
|
|
104
|
+
this.setPage(event, this.currentPage() + delta);
|
|
105
|
+
}
|
|
106
|
+
setPage(event, page) {
|
|
107
|
+
event.currentTarget.blur();
|
|
108
|
+
this.currentPage.set(page);
|
|
109
|
+
}
|
|
110
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiPaginationComponent, isStandalone: true, selector: "si-pagination", inputs: { totalPages: { classPropertyName: "totalPages", publicName: "totalPages", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalRowCount: { classPropertyName: "totalRowCount", publicName: "totalRowCount", isSignal: true, isRequired: false, transformFunction: null }, backButtonText: { classPropertyName: "backButtonText", publicName: "backButtonText", isSignal: true, isRequired: false, transformFunction: null }, forwardButtonText: { classPropertyName: "forwardButtonText", publicName: "forwardButtonText", isSignal: true, isRequired: false, transformFunction: null }, navAriaLabel: { classPropertyName: "navAriaLabel", publicName: "navAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { currentPage: "currentPageChange" }, ngImport: i0, template: "<nav role=\"navigation\" [attr.aria-label]=\"navAriaLabel() | translate\">\n <ul class=\"pagination\">\n <li class=\"me-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"prevDisabled()\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"backButtonText() | translate\"\n (click)=\"direction($event, -1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n </li>\n @for (page of pageButtons(); track $index) {\n <li>\n @if (!page.sep) {\n <button\n type=\"button\"\n class=\"page-item\"\n [attr.aria-current]=\"page.page === currentPage() ? 'page' : ''\"\n [class.active]=\"page.page === currentPage()\"\n [disabled]=\"page.page === currentPage()\"\n (click)=\"setPage($event, page.page)\"\n >\n {{ page.page }}\n </button>\n }\n @if (page.sep) {\n <span class=\"page-item separator mx-2\">…</span>\n }\n </li>\n }\n <li class=\"ms-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"nextDisabled()\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"forwardButtonText() | translate\"\n (click)=\"direction($event, 1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
112
|
+
}
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationComponent, decorators: [{
|
|
114
|
+
type: Component,
|
|
115
|
+
args: [{ selector: 'si-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SiIconNextComponent, SiTranslateModule], template: "<nav role=\"navigation\" [attr.aria-label]=\"navAriaLabel() | translate\">\n <ul class=\"pagination\">\n <li class=\"me-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"prevDisabled()\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"backButtonText() | translate\"\n (click)=\"direction($event, -1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n </li>\n @for (page of pageButtons(); track $index) {\n <li>\n @if (!page.sep) {\n <button\n type=\"button\"\n class=\"page-item\"\n [attr.aria-current]=\"page.page === currentPage() ? 'page' : ''\"\n [class.active]=\"page.page === currentPage()\"\n [disabled]=\"page.page === currentPage()\"\n (click)=\"setPage($event, page.page)\"\n >\n {{ page.page }}\n </button>\n }\n @if (page.sep) {\n <span class=\"page-item separator mx-2\">…</span>\n }\n </li>\n }\n <li class=\"ms-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"nextDisabled()\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"forwardButtonText() | translate\"\n (click)=\"direction($event, 1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n </li>\n </ul>\n</nav>\n" }]
|
|
116
|
+
}] });
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Copyright Siemens 2016 - 2025.
|
|
120
|
+
* SPDX-License-Identifier: MIT
|
|
121
|
+
*/
|
|
122
|
+
class SiPaginationModule {
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
124
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationModule, imports: [SiPaginationComponent], exports: [SiPaginationComponent] });
|
|
125
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationModule, imports: [SiPaginationComponent] });
|
|
126
|
+
}
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiPaginationModule, decorators: [{
|
|
128
|
+
type: NgModule,
|
|
129
|
+
args: [{
|
|
130
|
+
imports: [SiPaginationComponent],
|
|
131
|
+
exports: [SiPaginationComponent]
|
|
132
|
+
}]
|
|
133
|
+
}] });
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Copyright Siemens 2016 - 2025.
|
|
137
|
+
* SPDX-License-Identifier: MIT
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Generated bundle index. Do not edit.
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
export { SiPaginationComponent, SiPaginationModule };
|
|
145
|
+
//# sourceMappingURL=siemens-element-ng-pagination.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-pagination.mjs","sources":["../../../../projects/element-ng/pagination/si-pagination.component.ts","../../../../projects/element-ng/pagination/si-pagination.component.html","../../../../projects/element-ng/pagination/si-pagination.module.ts","../../../../projects/element-ng/pagination/index.ts","../../../../projects/element-ng/pagination/siemens-element-ng-pagination.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport {\n addIcons,\n SiIconNextComponent,\n elementLeft3,\n elementRight3\n} from '@siemens/element-ng/icon';\nimport { SiTranslateModule } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-pagination',\n templateUrl: './si-pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SiIconNextComponent, SiTranslateModule]\n})\nexport class SiPaginationComponent {\n private static maxItems = 7;\n\n /**\n * The total number of pages.\n * Alternatively use `itemsPerPage` and `totalItems`\n */\n readonly totalPages = input<number>();\n /**\n * The current active page, counting starts from 1\n *\n * @defaultValue 1\n */\n readonly currentPage = model<number>(1);\n /**\n * The number of items per page.\n * Used to calculate the total number of page if `totalPages` is not available\n */\n readonly pageSize = input<number>();\n /**\n * The total number of items.\n * Used to calculate the total number of page if `totalPages` is not available\n */\n readonly totalRowCount = input<number>();\n\n /**\n * The text of the back button for pagination. Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_PAGINATION.BACK:Back`\n * ```\n */\n readonly backButtonText = input($localize`:@@SI_PAGINATION.BACK:Back`);\n\n /**\n * The text of the forward button for pagination. Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_PAGINATION.FORWARD:Forward`\n * ```\n */\n readonly forwardButtonText = input($localize`:@@SI_PAGINATION.FORWARD:Forward`);\n /**\n * When multiple paginations are used on the same page each pagination needs a distinct aria label.\n * Required for a11y.\n *\n * @defaultValue\n * ```\n * $localize`:@@SI_PAGINATION.NAV_LABEL:Pagination`\n * ```\n */\n readonly navAriaLabel = input($localize`:@@SI_PAGINATION.NAV_LABEL:Pagination`);\n\n private readonly calculatedTotalPages = computed(\n () => this.totalPages() ?? Math.ceil((this.totalRowCount() ?? 0) / (this.pageSize() ?? 1))\n );\n\n protected readonly prevDisabled = computed(() => this.currentPage() === 1);\n\n protected readonly nextDisabled = computed(\n () => this.currentPage() === this.calculatedTotalPages()\n );\n\n protected readonly pageButtons = computed(() => {\n const pageButtons: { page: number; sep: boolean }[] = [];\n const totalPages = this.calculatedTotalPages();\n const currentPage = this.currentPage();\n\n if (totalPages <= SiPaginationComponent.maxItems) {\n for (let i = 0; i < totalPages; i++) {\n pageButtons.push({ page: i + 1, sep: false });\n }\n } else if (currentPage < SiPaginationComponent.maxItems - 2) {\n // separator only on the right (in LTR)\n for (let i = 0; i < SiPaginationComponent.maxItems - 2; i++) {\n pageButtons.push({ page: i + 1, sep: false });\n }\n pageButtons.push({ page: 0, sep: true });\n pageButtons.push({ page: totalPages, sep: false });\n } else if (currentPage >= totalPages - 3) {\n // separator only on the left (in LTR)\n pageButtons.push({ page: 1, sep: false });\n pageButtons.push({ page: 0, sep: true });\n for (let i = totalPages - SiPaginationComponent.maxItems + 2; i < totalPages; i++) {\n pageButtons.push({ page: i + 1, sep: false });\n }\n } else {\n // separator on both sides\n pageButtons.push({ page: 1, sep: false });\n pageButtons.push({ page: 0, sep: true });\n for (let i = -1; i <= 1; i++) {\n pageButtons.push({ page: currentPage + i, sep: false });\n }\n pageButtons.push({ page: 0, sep: true });\n pageButtons.push({ page: totalPages, sep: false });\n }\n\n return pageButtons;\n });\n\n protected readonly icons = addIcons({ elementLeft3, elementRight3 });\n\n protected direction(event: Event, delta: number): void {\n this.setPage(event, this.currentPage() + delta);\n }\n\n protected setPage(event: Event, page: number): void {\n (event.currentTarget as HTMLElement).blur();\n this.currentPage.set(page);\n }\n}\n","<nav role=\"navigation\" [attr.aria-label]=\"navAriaLabel() | translate\">\n <ul class=\"pagination\">\n <li class=\"me-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"prevDisabled()\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"backButtonText() | translate\"\n (click)=\"direction($event, -1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementLeft3\" />\n </button>\n </li>\n @for (page of pageButtons(); track $index) {\n <li>\n @if (!page.sep) {\n <button\n type=\"button\"\n class=\"page-item\"\n [attr.aria-current]=\"page.page === currentPage() ? 'page' : ''\"\n [class.active]=\"page.page === currentPage()\"\n [disabled]=\"page.page === currentPage()\"\n (click)=\"setPage($event, page.page)\"\n >\n {{ page.page }}\n </button>\n }\n @if (page.sep) {\n <span class=\"page-item separator mx-2\">…</span>\n }\n </li>\n }\n <li class=\"ms-5\">\n <button\n type=\"button\"\n class=\"page-item mx-4\"\n [class.disabled]=\"nextDisabled()\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"forwardButtonText() | translate\"\n (click)=\"direction($event, 1)\"\n >\n <si-icon-next class=\"icon flip-rtl\" [icon]=\"icons.elementRight3\" />\n </button>\n </li>\n </ul>\n</nav>\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiPaginationComponent } from './si-pagination.component';\n\n@NgModule({\n imports: [SiPaginationComponent],\n exports: [SiPaginationComponent]\n})\nexport class SiPaginationModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-pagination.component';\nexport * from './si-pagination.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|