@siemens/element-ng 47.4.0 → 47.6.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/breadcrumb-router/index.d.ts +8 -0
- package/breadcrumb-router/package.json +3 -0
- package/breadcrumb-router/si-breadcrumb-default-resolver.service.d.ts +23 -0
- package/breadcrumb-router/si-breadcrumb-router.component.d.ts +30 -0
- package/breadcrumb-router/si-breadcrumb-router.model.d.ts +53 -0
- package/breadcrumb-router/si-breadcrumb-router.module.d.ts +7 -0
- package/common/models/status-type.model.d.ts +2 -0
- package/datatable/index.d.ts +42 -0
- package/datatable/package.json +3 -0
- package/datatable/si-datatable-interaction.directive.d.ts +34 -0
- package/datatable/si-datatable.module.d.ts +7 -0
- package/date-range-filter/si-date-range-filter.component.d.ts +5 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +263 -0
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +173 -0
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +26 -5
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-filtered-search.mjs +1139 -0
- package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-formly.mjs +935 -0
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-icon.mjs +29 -15
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +390 -0
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +15 -12
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +269 -0
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-modal.mjs +5 -2
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +802 -0
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-password-strength.mjs +22 -16
- package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-phone-number.mjs +426 -0
- package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-resize-observer.mjs +6 -3
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +74 -0
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-shadow-root.mjs +70 -0
- package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-side-panel.mjs +554 -0
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-status-bar.mjs +348 -0
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tabs-next.mjs +356 -0
- package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tabs.mjs +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +319 -0
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tour.mjs +384 -0
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +2936 -0
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-wizard.mjs +2 -2
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/filtered-search/index.d.ts +7 -0
- package/filtered-search/package.json +3 -0
- package/filtered-search/si-filtered-search-helper.d.ts +22 -0
- package/filtered-search/si-filtered-search-value.component.d.ts +53 -0
- package/filtered-search/si-filtered-search.component.d.ts +329 -0
- package/filtered-search/si-filtered-search.model.d.ts +139 -0
- package/filtered-search/si-filtered-search.module.d.ts +7 -0
- package/filtered-search/values/date-value/si-filtered-search-date-value.component.d.ts +57 -0
- package/filtered-search/values/si-filtered-search-value.base.d.ts +27 -0
- package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +45 -0
- package/formly/fields/button/si-formly-button.component.d.ts +7 -0
- package/formly/fields/date-range/si-formly-date-range.component.d.ts +6 -0
- package/formly/fields/datetime/si-formly-datetime.component.d.ts +13 -0
- package/formly/fields/email/si-formly-email.component.d.ts +6 -0
- package/formly/fields/ip-input/si-formly-ip-input.component.d.ts +6 -0
- package/formly/fields/number/si-formly-number.component.d.ts +6 -0
- package/formly/fields/password/si-formly-password.component.d.ts +6 -0
- package/formly/fields/select/si-formly-select.component.d.ts +6 -0
- package/formly/fields/text/si-formly-text-display.component.d.ts +7 -0
- package/formly/fields/textarea/si-formly-textarea.component.d.ts +18 -0
- package/formly/fields/time/si-formly-time.component.d.ts +13 -0
- package/formly/index.d.ts +6 -0
- package/formly/package.json +3 -0
- package/formly/si-formly-translate.extension.d.ts +11 -0
- package/formly/si-formly.component.d.ts +62 -0
- package/formly/si-formly.module.d.ts +35 -0
- package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +13 -0
- package/formly/structural/si-formly-array/si-formly-array.component.d.ts +6 -0
- package/formly/structural/si-formly-object/si-formly-object.component.d.ts +6 -0
- package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +22 -0
- package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +21 -0
- package/formly/structural/si-formly-object-plain/si-formly-object-plain.component.d.ts +6 -0
- package/formly/structural/si-formly-tabset/si-formly-object-tabset.component.d.ts +7 -0
- package/formly/utils.d.ts +6 -0
- package/formly/wrapper/si-formly-fieldset.component.d.ts +8 -0
- package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +19 -0
- package/formly/wrapper/si-formly-horizontal-wrapper.component.d.ts +6 -0
- package/formly/wrapper/si-formly-icon-wrapper.component.d.ts +6 -0
- package/formly/wrapper/si-formly-wrapper.component.d.ts +8 -0
- package/icon/element-icons.d.ts +5 -0
- package/list-details/index.d.ts +12 -0
- package/list-details/package.json +3 -0
- package/list-details/si-details-pane/si-details-pane.component.d.ts +8 -0
- package/list-details/si-details-pane-body/si-details-pane-body.component.d.ts +6 -0
- package/list-details/si-details-pane-footer/si-details-pane-footer.component.d.ts +6 -0
- package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +38 -0
- package/list-details/si-list-details.component.d.ts +100 -0
- package/list-details/si-list-pane/si-list-pane.component.d.ts +10 -0
- package/list-details/si-list-pane-body/si-list-pane-body.component.d.ts +6 -0
- package/list-details/si-list-pane-header/si-list-pane-header.component.d.ts +6 -0
- package/loading-spinner/si-loading-spinner.directive.d.ts +3 -2
- package/main-detail-container/index.d.ts +6 -0
- package/main-detail-container/package.json +3 -0
- package/main-detail-container/si-main-detail-container.component.d.ts +151 -0
- package/main-detail-container/si-main-detail-container.module.d.ts +7 -0
- package/navbar-vertical/index.d.ts +7 -0
- package/navbar-vertical/package.json +3 -0
- package/navbar-vertical/si-navbar-vertical-divider.component.d.ts +5 -0
- package/navbar-vertical/si-navbar-vertical-group-trigger.directive.d.ts +38 -0
- package/navbar-vertical/si-navbar-vertical-group.component.d.ts +16 -0
- package/navbar-vertical/si-navbar-vertical-header.component.d.ts +6 -0
- package/navbar-vertical/si-navbar-vertical-item-legacy.component.d.ts +17 -0
- package/navbar-vertical/si-navbar-vertical-item.component.d.ts +21 -0
- package/navbar-vertical/si-navbar-vertical.component.d.ts +148 -0
- package/navbar-vertical/si-navbar-vertical.model.d.ts +77 -0
- package/navbar-vertical/si-navbar-vertical.module.d.ts +7 -0
- package/navbar-vertical/si-navbar-vertical.provider.d.ts +7 -0
- package/package.json +93 -9
- package/password-strength/si-password-strength.directive.d.ts +11 -0
- package/phone-number/index.d.ts +7 -0
- package/phone-number/package.json +3 -0
- package/phone-number/si-phone-number-input-select.directive.d.ts +10 -0
- package/phone-number/si-phone-number-input.component.d.ts +137 -0
- package/phone-number/si-phone-number-input.models.d.ts +48 -0
- package/phone-number/si-phone-number-input.module.d.ts +7 -0
- package/resize-observer/si-resize-observer.directive.d.ts +3 -1
- package/result-details-list/index.d.ts +7 -0
- package/result-details-list/package.json +3 -0
- package/result-details-list/si-result-details-list.component.d.ts +14 -0
- package/result-details-list/si-result-details-list.datamodel.d.ts +48 -0
- package/result-details-list/si-result-details-list.module.d.ts +7 -0
- package/shadow-root/index.d.ts +5 -0
- package/shadow-root/package.json +3 -0
- package/shadow-root/si-shadow-root.directive.d.ts +39 -0
- package/side-panel/index.d.ts +9 -0
- package/side-panel/package.json +3 -0
- package/side-panel/si-side-panel-content.component.d.ts +105 -0
- package/side-panel/si-side-panel.component.d.ts +108 -0
- package/side-panel/si-side-panel.module.d.ts +8 -0
- package/side-panel/si-side-panel.service.d.ts +45 -0
- package/side-panel/side-panel.model.d.ts +16 -0
- package/status-bar/index.d.ts +7 -0
- package/status-bar/package.json +3 -0
- package/status-bar/si-status-bar-item/index.d.ts +6 -0
- package/status-bar/si-status-bar-item/si-status-bar-item.component.d.ts +22 -0
- package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +33 -0
- package/status-bar/si-status-bar.component.d.ts +116 -0
- package/status-bar/si-status-bar.module.d.ts +7 -0
- package/tabs-next/index.d.ts +7 -0
- package/tabs-next/package.json +3 -0
- package/tabs-next/si-tab-next-base.directive.d.ts +63 -0
- package/tabs-next/si-tab-next-link.component.d.ts +16 -0
- package/tabs-next/si-tab-next.component.d.ts +16 -0
- package/tabs-next/si-tabs-tokens.d.ts +7 -0
- package/tabs-next/si-tabset-next.component.d.ts +57 -0
- package/template-i18n.json +45 -0
- package/threshold/index.d.ts +6 -0
- package/threshold/package.json +3 -0
- package/threshold/si-readonly-threshold-option.component.d.ts +11 -0
- package/threshold/si-threshold.component.d.ts +147 -0
- package/threshold/si-threshold.module.d.ts +7 -0
- package/tour/index.d.ts +6 -0
- package/tour/package.json +3 -0
- package/tour/si-tour-highlight.component.d.ts +15 -0
- package/tour/si-tour-token.model.d.ts +27 -0
- package/tour/si-tour.component.d.ts +31 -0
- package/tour/si-tour.model.d.ts +51 -0
- package/tour/si-tour.service.d.ts +62 -0
- package/translate/si-translatable-keys.interface.d.ts +45 -0
- package/tree-view/drag-drop.util.d.ts +32 -0
- package/tree-view/index.d.ts +12 -0
- package/tree-view/package.json +3 -0
- package/tree-view/si-tree-view-converter.service.d.ts +41 -0
- package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +105 -0
- package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +24 -0
- package/tree-view/si-tree-view-item-context.d.ts +11 -0
- package/tree-view/si-tree-view-item-height.service.d.ts +49 -0
- package/tree-view/si-tree-view-item-template.directive.d.ts +18 -0
- package/tree-view/si-tree-view-virtualization.service.d.ts +150 -0
- package/tree-view/si-tree-view.component.d.ts +466 -0
- package/tree-view/si-tree-view.model.d.ts +146 -0
- package/tree-view/si-tree-view.module.d.ts +10 -0
- package/tree-view/si-tree-view.service.d.ts +55 -0
- package/tree-view/si-tree-view.utils.d.ts +46 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, inject, ElementRef, HostListener, HostBinding, Directive, NgModule } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Copyright Siemens 2016 - 2025.
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*/
|
|
8
|
+
class SiDatatableInteractionDirective {
|
|
9
|
+
/**
|
|
10
|
+
* The selection type of the datatable, will automatically be set if set for datatable.
|
|
11
|
+
*
|
|
12
|
+
* @defaultValue ''
|
|
13
|
+
*/
|
|
14
|
+
selectionType = input('');
|
|
15
|
+
/**
|
|
16
|
+
* Automatically select every row or cell that is navigated trough.
|
|
17
|
+
* Is ignored unless `selectionType` is `single` or `cell`.
|
|
18
|
+
*
|
|
19
|
+
* @defaultValue false
|
|
20
|
+
*/
|
|
21
|
+
datatableInteractionAutoSelect = input(false, { transform: booleanAttribute });
|
|
22
|
+
tabIndex = '0';
|
|
23
|
+
element = inject(ElementRef).nativeElement;
|
|
24
|
+
tableBody;
|
|
25
|
+
autoSelectTimeout;
|
|
26
|
+
isMousedown = false;
|
|
27
|
+
onKeydown(event) {
|
|
28
|
+
if (event.key === 'ArrowDown') {
|
|
29
|
+
const first = this.selectionType() === 'cell'
|
|
30
|
+
? this.element.querySelector('.datatable-row-wrapper > .datatable-body-row .datatable-body-cell')
|
|
31
|
+
: this.element.querySelector('.datatable-row-wrapper > .datatable-body-row');
|
|
32
|
+
if (first) {
|
|
33
|
+
first.focus();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (event.key === 'ArrowUp') {
|
|
37
|
+
const last = this.selectionType() === 'cell'
|
|
38
|
+
? this.element.querySelector('.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell')
|
|
39
|
+
: this.element.querySelector('.datatable-row-wrapper:last-child > .datatable-body-row');
|
|
40
|
+
if (last) {
|
|
41
|
+
last.focus();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
onMousedown(event) {
|
|
46
|
+
this.isMousedown = true;
|
|
47
|
+
}
|
|
48
|
+
onMouseup(event) {
|
|
49
|
+
this.isMousedown = false;
|
|
50
|
+
}
|
|
51
|
+
onFocusin(event) {
|
|
52
|
+
const target = event.target;
|
|
53
|
+
if (!target) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
clearTimeout(this.autoSelectTimeout);
|
|
57
|
+
// Re-select on every element
|
|
58
|
+
const selectionType = this.selectionType();
|
|
59
|
+
if (!this.isMousedown &&
|
|
60
|
+
this.datatableInteractionAutoSelect() &&
|
|
61
|
+
(selectionType === 'single' || selectionType === 'cell')) {
|
|
62
|
+
const rowOrCell = target.closest(selectionType === 'cell' ? 'datatable-body-cell' : 'datatable-body-row');
|
|
63
|
+
if (!rowOrCell) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.autoSelectTimeout = setTimeout(() => {
|
|
67
|
+
rowOrCell.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13 }));
|
|
68
|
+
}, 100);
|
|
69
|
+
}
|
|
70
|
+
if (this.element.classList.contains('virtualized')) {
|
|
71
|
+
if (this.tableBody) {
|
|
72
|
+
const lastList = selectionType === 'cell'
|
|
73
|
+
? this.tableBody.querySelectorAll('.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell')
|
|
74
|
+
: this.tableBody.querySelectorAll('.datatable-row-wrapper:last-child > .datatable-body-row');
|
|
75
|
+
if (Array.from(lastList).includes(target)) {
|
|
76
|
+
this.tableBody.scrollTop = this.tableBody.scrollTop + lastList[0].clientHeight;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const firstList = selectionType === 'cell'
|
|
80
|
+
? this.tableBody.querySelectorAll('.datatable-row-wrapper:first-child > .datatable-body-row .datatable-body-cell')
|
|
81
|
+
: this.tableBody.querySelectorAll('.datatable-row-wrapper:first-child > .datatable-body-row');
|
|
82
|
+
if (Array.from(firstList).includes(target)) {
|
|
83
|
+
this.tableBody.scrollTop = this.tableBody.scrollTop - firstList[0].clientHeight;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
ngOnInit() {
|
|
90
|
+
this.tableBody = this.element.querySelector('datatable-body');
|
|
91
|
+
if (this.tableBody) {
|
|
92
|
+
this.tableBody.tabIndex = -1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
ngOnDestroy() {
|
|
96
|
+
clearTimeout(this.autoSelectTimeout);
|
|
97
|
+
}
|
|
98
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableInteractionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
99
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.6", type: SiDatatableInteractionDirective, isStandalone: true, selector: "[siDatatableInteraction]", inputs: { selectionType: { classPropertyName: "selectionType", publicName: "selectionType", isSignal: true, isRequired: false, transformFunction: null }, datatableInteractionAutoSelect: { classPropertyName: "datatableInteractionAutoSelect", publicName: "datatableInteractionAutoSelect", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)", "mousedown": "onMousedown($event)", "mouseup": "onMouseup($event)", "focusin": "onFocusin($event)" }, properties: { "attr.tabindex": "this.tabIndex" } }, exportAs: ["si-datatable-interaction"], ngImport: i0 });
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableInteractionDirective, decorators: [{
|
|
102
|
+
type: Directive,
|
|
103
|
+
args: [{
|
|
104
|
+
selector: '[siDatatableInteraction]',
|
|
105
|
+
exportAs: 'si-datatable-interaction'
|
|
106
|
+
}]
|
|
107
|
+
}], propDecorators: { tabIndex: [{
|
|
108
|
+
type: HostBinding,
|
|
109
|
+
args: ['attr.tabindex']
|
|
110
|
+
}], onKeydown: [{
|
|
111
|
+
type: HostListener,
|
|
112
|
+
args: ['keydown', ['$event']]
|
|
113
|
+
}], onMousedown: [{
|
|
114
|
+
type: HostListener,
|
|
115
|
+
args: ['mousedown', ['$event']]
|
|
116
|
+
}], onMouseup: [{
|
|
117
|
+
type: HostListener,
|
|
118
|
+
args: ['mouseup', ['$event']]
|
|
119
|
+
}], onFocusin: [{
|
|
120
|
+
type: HostListener,
|
|
121
|
+
args: ['focusin', ['$event']]
|
|
122
|
+
}] } });
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Copyright Siemens 2016 - 2025.
|
|
126
|
+
* SPDX-License-Identifier: MIT
|
|
127
|
+
*/
|
|
128
|
+
class SiDatatableModule {
|
|
129
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
130
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableModule, imports: [SiDatatableInteractionDirective], exports: [SiDatatableInteractionDirective] });
|
|
131
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableModule });
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDatatableModule, decorators: [{
|
|
134
|
+
type: NgModule,
|
|
135
|
+
args: [{
|
|
136
|
+
imports: [SiDatatableInteractionDirective],
|
|
137
|
+
exports: [SiDatatableInteractionDirective]
|
|
138
|
+
}]
|
|
139
|
+
}] });
|
|
140
|
+
|
|
141
|
+
const SI_DATATABLE_CONFIG = {
|
|
142
|
+
cssClasses: {
|
|
143
|
+
sortAscending: 'icon element-sort-up text-primary',
|
|
144
|
+
sortDescending: 'icon element-sort-down text-primary',
|
|
145
|
+
pagerLeftArrow: 'icon element-left-2 flip-rtl',
|
|
146
|
+
pagerRightArrow: 'icon element-right-2 flip-rtl',
|
|
147
|
+
pagerPrevious: 'icon element-double-left flip-rtl',
|
|
148
|
+
pagerNext: 'icon element-double-right flip-rtl',
|
|
149
|
+
sortUnset: ''
|
|
150
|
+
},
|
|
151
|
+
headerHeight: 40,
|
|
152
|
+
footerHeight: 40,
|
|
153
|
+
rowHeight: 64,
|
|
154
|
+
rowHeightSmall: 48,
|
|
155
|
+
rowHeightExtraSmall: 32,
|
|
156
|
+
rowHeightTiny: 24
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Provides element configuration for the \@siemens/ngx-datatable.
|
|
160
|
+
*
|
|
161
|
+
* @param configOverrides - overrides that will be merged with the element configuration.
|
|
162
|
+
*/
|
|
163
|
+
const provideSiDatatableConfig = (configOverrides) => ({
|
|
164
|
+
provide: 'configuration',
|
|
165
|
+
useValue: { ...SI_DATATABLE_CONFIG, ...configOverrides }
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Generated bundle index. Do not edit.
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
export { SI_DATATABLE_CONFIG, SiDatatableInteractionDirective, SiDatatableModule, provideSiDatatableConfig };
|
|
173
|
+
//# sourceMappingURL=siemens-element-ng-datatable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-datatable.mjs","sources":["../../../../projects/element-ng/datatable/si-datatable-interaction.directive.ts","../../../../projects/element-ng/datatable/si-datatable.module.ts","../../../../projects/element-ng/datatable/index.ts","../../../../projects/element-ng/datatable/siemens-element-ng-datatable.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n OnDestroy,\n OnInit\n} from '@angular/core';\n\n@Directive({\n selector: '[siDatatableInteraction]',\n exportAs: 'si-datatable-interaction'\n})\nexport class SiDatatableInteractionDirective implements OnDestroy, OnInit {\n /**\n * The selection type of the datatable, will automatically be set if set for datatable.\n *\n * @defaultValue ''\n */\n readonly selectionType = input('');\n\n /**\n * Automatically select every row or cell that is navigated trough.\n * Is ignored unless `selectionType` is `single` or `cell`.\n *\n * @defaultValue false\n */\n readonly datatableInteractionAutoSelect = input(false, { transform: booleanAttribute });\n\n @HostBinding('attr.tabindex') protected tabIndex = '0';\n\n private element: HTMLElement = inject(ElementRef).nativeElement;\n private tableBody?: HTMLElement;\n\n private autoSelectTimeout: any;\n\n private isMousedown = false;\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n const first =\n this.selectionType() === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper > .datatable-body-row');\n if (first) {\n (first as HTMLElement).focus();\n }\n } else if (event.key === 'ArrowUp') {\n const last =\n this.selectionType() === 'cell'\n ? this.element.querySelector(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.element.querySelector('.datatable-row-wrapper:last-child > .datatable-body-row');\n if (last) {\n (last as HTMLElement).focus();\n }\n }\n }\n\n @HostListener('mousedown', ['$event'])\n protected onMousedown(event: MouseEvent): void {\n this.isMousedown = true;\n }\n\n @HostListener('mouseup', ['$event'])\n protected onMouseup(event: MouseEvent): void {\n this.isMousedown = false;\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusin(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n if (!target) {\n return;\n }\n\n clearTimeout(this.autoSelectTimeout);\n // Re-select on every element\n\n const selectionType = this.selectionType();\n if (\n !this.isMousedown &&\n this.datatableInteractionAutoSelect() &&\n (selectionType === 'single' || selectionType === 'cell')\n ) {\n const rowOrCell = target.closest(\n selectionType === 'cell' ? 'datatable-body-cell' : 'datatable-body-row'\n );\n if (!rowOrCell) {\n return;\n }\n this.autoSelectTimeout = setTimeout(() => {\n rowOrCell.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', keyCode: 13 }));\n }, 100);\n }\n if (this.element.classList.contains('virtualized')) {\n if (this.tableBody) {\n const lastList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:last-child > .datatable-body-row'\n );\n if (Array.from(lastList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop + lastList[0].clientHeight;\n } else {\n const firstList =\n selectionType === 'cell'\n ? this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row .datatable-body-cell'\n )\n : this.tableBody.querySelectorAll(\n '.datatable-row-wrapper:first-child > .datatable-body-row'\n );\n if (Array.from(firstList).includes(target)) {\n this.tableBody.scrollTop = this.tableBody.scrollTop - firstList[0].clientHeight;\n }\n }\n }\n }\n }\n\n ngOnInit(): void {\n this.tableBody = this.element.querySelector('datatable-body') as HTMLElement;\n if (this.tableBody) {\n this.tableBody.tabIndex = -1;\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.autoSelectTimeout);\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiDatatableInteractionDirective } from './si-datatable-interaction.directive';\n\n@NgModule({\n imports: [SiDatatableInteractionDirective],\n exports: [SiDatatableInteractionDirective]\n})\nexport class SiDatatableModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Provider } from '@angular/core';\n\nexport * from './si-datatable-interaction.directive';\nexport * from './si-datatable.module';\n\n/*\n * Configuration interface for the upstream @siemens/ngx-datatable project.\n * See https://github.com/siemens/ngx-datatable/blob/6baa21a9aa37639c8060b0f6c4040ae242186517/projects/ngx-datatable/src/lib/ngx-datatable.module.ts#L107.\n */\nexport interface INgxDatatableConfig {\n messages?: {\n emptyMessage: string;\n totalMessage: string;\n selectedMessage: string;\n };\n cssClasses?: {\n sortAscending: string;\n sortDescending: string;\n sortUnset: string;\n pagerLeftArrow: string;\n pagerRightArrow: string;\n pagerPrevious: string;\n pagerNext: string;\n };\n headerHeight?: number;\n footerHeight?: number;\n rowHeight?: number;\n}\n\n/*\n * Extends the original INgxDatatableConfig with additional properties and makes all fields required to maintain compatibility.\n */\ninterface SiDatatableConfig extends INgxDatatableConfig {\n cssClasses: Exclude<INgxDatatableConfig['cssClasses'], undefined>;\n headerHeight: number;\n footerHeight: number;\n rowHeight: number;\n rowHeightSmall: number;\n rowHeightExtraSmall: number;\n rowHeightTiny: number;\n}\n\nexport const SI_DATATABLE_CONFIG: SiDatatableConfig = {\n cssClasses: {\n sortAscending: 'icon element-sort-up text-primary',\n sortDescending: 'icon element-sort-down text-primary',\n pagerLeftArrow: 'icon element-left-2 flip-rtl',\n pagerRightArrow: 'icon element-right-2 flip-rtl',\n pagerPrevious: 'icon element-double-left flip-rtl',\n pagerNext: 'icon element-double-right flip-rtl',\n sortUnset: ''\n },\n headerHeight: 40,\n footerHeight: 40,\n rowHeight: 64,\n rowHeightSmall: 48,\n rowHeightExtraSmall: 32,\n rowHeightTiny: 24\n};\n\n/**\n * Provides element configuration for the \\@siemens/ngx-datatable.\n *\n * @param configOverrides - overrides that will be merged with the element configuration.\n */\nexport const provideSiDatatableConfig = (configOverrides?: INgxDatatableConfig): Provider => ({\n provide: 'configuration',\n useValue: { ...SI_DATATABLE_CONFIG, ...configOverrides }\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
2
|
+
import { MediaMatcher } from '@angular/cdk/layout';
|
|
1
3
|
import { CdkOption, CdkListbox } from '@angular/cdk/listbox';
|
|
2
|
-
import
|
|
4
|
+
import * as i2 from '@angular/cdk/overlay';
|
|
5
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
6
|
+
import { DatePipe, NgTemplateOutlet, NgClass } from '@angular/common';
|
|
3
7
|
import * as i0 from '@angular/core';
|
|
4
8
|
import { Injectable, input, booleanAttribute, output, signal, computed, ChangeDetectionStrategy, Component, Pipe, inject, model, NgModule } from '@angular/core';
|
|
5
9
|
import * as i1 from '@angular/forms';
|
|
6
10
|
import { FormsModule } from '@angular/forms';
|
|
7
11
|
import { SiCalendarButtonComponent, SiDatepickerComponent, SiDatepickerDirective } from '@siemens/element-ng/datepicker';
|
|
12
|
+
import { addIcons, elementDown2, SiIconNextComponent } from '@siemens/element-ng/icon';
|
|
13
|
+
import { BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
|
|
8
14
|
import { SiSearchBarComponent } from '@siemens/element-ng/search-bar';
|
|
9
|
-
import * as
|
|
15
|
+
import * as i3 from '@siemens/element-translate-ng/translate';
|
|
10
16
|
import { SiTranslateModule } from '@siemens/element-translate-ng/translate';
|
|
11
17
|
import { SiNumberInputComponent } from '@siemens/element-ng/number-input';
|
|
12
18
|
import { SiSelectComponent, SiSelectSingleValueDirective, SiSelectSimpleOptionsDirective } from '@siemens/element-ng/select';
|
|
@@ -204,6 +210,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImpor
|
|
|
204
210
|
}] });
|
|
205
211
|
class SiDateRangeFilterComponent {
|
|
206
212
|
service = inject(SiDateRangeCalculationService);
|
|
213
|
+
mediaMatcher = inject(MediaMatcher);
|
|
214
|
+
smallScreen = this.mediaMatcher.matchMedia(`(max-width: ${BOOTSTRAP_BREAKPOINTS.mdMinimum}px)`).matches;
|
|
207
215
|
/** The filter range object */
|
|
208
216
|
range = model.required();
|
|
209
217
|
/** List of preset time ranges. When not present or empty, the preset section won't show */
|
|
@@ -411,6 +419,7 @@ class SiDateRangeFilterComponent {
|
|
|
411
419
|
applyClicked = output();
|
|
412
420
|
/** Base configuration on how the dates should be displayed, parts of it may be overwritten internally. */
|
|
413
421
|
datepickerConfig = input();
|
|
422
|
+
icons = addIcons({ elementDown2 });
|
|
414
423
|
advancedMode = false;
|
|
415
424
|
dateRange = { start: undefined, end: undefined };
|
|
416
425
|
point1Now = true;
|
|
@@ -441,6 +450,7 @@ class SiDateRangeFilterComponent {
|
|
|
441
450
|
return (this.presetList() ?? []).filter(timeFilter);
|
|
442
451
|
});
|
|
443
452
|
presetFilter = signal('');
|
|
453
|
+
presetOpen = signal(false);
|
|
444
454
|
inputMode = computed(() => this.basicMode() === 'input' || this.enableTimeSelection());
|
|
445
455
|
ngOnChanges(changes) {
|
|
446
456
|
if (changes.enableTimeSelection ||
|
|
@@ -586,7 +596,7 @@ class SiDateRangeFilterComponent {
|
|
|
586
596
|
}));
|
|
587
597
|
}
|
|
588
598
|
}
|
|
589
|
-
selectPresetItem(item) {
|
|
599
|
+
selectPresetItem(event, item) {
|
|
590
600
|
const newRange = item.type === 'custom'
|
|
591
601
|
? item.calculate(item, this.range())
|
|
592
602
|
: { point1: 'now', range: 'before', point2: item.offset };
|
|
@@ -597,26 +607,37 @@ class SiDateRangeFilterComponent {
|
|
|
597
607
|
else {
|
|
598
608
|
this.updateSimpleMode(newRange);
|
|
599
609
|
}
|
|
610
|
+
if (this.smallScreen) {
|
|
611
|
+
// Prevent re-opening the dropdown when pressing enter on the selected item
|
|
612
|
+
event.preventDefault();
|
|
613
|
+
this.presetOpen.set(false);
|
|
614
|
+
}
|
|
600
615
|
}
|
|
601
616
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDateRangeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
602
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiDateRangeFilterComponent, isStandalone: true, selector: "si-date-range-filter", inputs: { range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: true, transformFunction: null }, presetList: { classPropertyName: "presetList", publicName: "presetList", isSignal: true, isRequired: false, transformFunction: null }, presetSearch: { classPropertyName: "presetSearch", publicName: "presetSearch", isSignal: true, isRequired: false, transformFunction: null }, enableTimeSelection: { classPropertyName: "enableTimeSelection", publicName: "enableTimeSelection", isSignal: true, isRequired: false, transformFunction: null }, basicMode: { classPropertyName: "basicMode", publicName: "basicMode", isSignal: true, isRequired: false, transformFunction: null }, reverseInputFields: { classPropertyName: "reverseInputFields", publicName: "reverseInputFields", isSignal: true, isRequired: false, transformFunction: null }, showApplyButton: { classPropertyName: "showApplyButton", publicName: "showApplyButton", isSignal: true, isRequired: false, transformFunction: null }, hideAdvancedMode: { classPropertyName: "hideAdvancedMode", publicName: "hideAdvancedMode", isSignal: true, isRequired: false, transformFunction: null }, refLabel: { classPropertyName: "refLabel", publicName: "refLabel", isSignal: true, isRequired: false, transformFunction: null }, fromLabel: { classPropertyName: "fromLabel", publicName: "fromLabel", isSignal: true, isRequired: false, transformFunction: null }, toLabel: { classPropertyName: "toLabel", publicName: "toLabel", isSignal: true, isRequired: false, transformFunction: null }, rangeLabel: { classPropertyName: "rangeLabel", publicName: "rangeLabel", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, nowLabel: { classPropertyName: "nowLabel", publicName: "nowLabel", isSignal: true, isRequired: false, transformFunction: null }, dateLabel: { classPropertyName: "dateLabel", publicName: "dateLabel", isSignal: true, isRequired: false, transformFunction: null }, previewLabel: { classPropertyName: "previewLabel", publicName: "previewLabel", isSignal: true, isRequired: false, transformFunction: null }, datePlaceholder: { classPropertyName: "datePlaceholder", publicName: "datePlaceholder", isSignal: true, isRequired: false, transformFunction: null }, beforeLabel: { classPropertyName: "beforeLabel", publicName: "beforeLabel", isSignal: true, isRequired: false, transformFunction: null }, afterLabel: { classPropertyName: "afterLabel", publicName: "afterLabel", isSignal: true, isRequired: false, transformFunction: null }, withinLabel: { classPropertyName: "withinLabel", publicName: "withinLabel", isSignal: true, isRequired: false, transformFunction: null }, valueLabel: { classPropertyName: "valueLabel", publicName: "valueLabel", isSignal: true, isRequired: false, transformFunction: null }, unitLabel: { classPropertyName: "unitLabel", publicName: "unitLabel", isSignal: true, isRequired: false, transformFunction: null }, searchLabel: { classPropertyName: "searchLabel", publicName: "searchLabel", isSignal: true, isRequired: false, transformFunction: null }, presetLabel: { classPropertyName: "presetLabel", publicName: "presetLabel", isSignal: true, isRequired: false, transformFunction: null }, advancedLabel: { classPropertyName: "advancedLabel", publicName: "advancedLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, datepickerConfig: { classPropertyName: "datepickerConfig", publicName: "datepickerConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { range: "rangeChange", applyClicked: "applyClicked" }, usesOnChanges: true, ngImport: i0, template: "@if (presetList()?.length) {\n <div class=\"preset-select border-end\">\n @if (presetSearch()) {\n <si-search-bar\n colorVariant=\"base-0\"\n class=\"mx-6 mt-5 mb-6\"\n [placeholder]=\"searchLabel() | translate\"\n [showIcon]=\"true\"\n [(ngModel)]=\"presetFilter\"\n />\n }\n <ul class=\"overflow-auto\" cdkListbox [attr.aria-label]=\"presetLabel() | translate\">\n @for (item of filteredPresetList(); track $index) {\n @if (item.label | translate | presetMatchFilter: presetFilter()) {\n <li\n class=\"preset-item focus-inside px-8 py-5\"\n [cdkOption]=\"item.label\"\n (click)=\"selectPresetItem(item)\"\n (keydown.enter)=\"selectPresetItem(item)\"\n >\n {{ item.label | translate }}\n </li>\n }\n }\n </ul>\n </div>\n}\n<form class=\"main-form d-flex flex-column flex-fill\">\n @if (advancedMode || inputMode()) {\n <div class=\"advanced-form px-6 py-4\">\n @if (!reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n\n <div class=\"mb-8\">\n @if (point2Mode === 'date') {\n <ng-container *ngTemplateOutlet=\"formPoint2Date\" />\n }\n @if (point2Mode === 'duration') {\n <ng-container *ngTemplateOutlet=\"formPoint2Duration\" />\n }\n </div>\n\n @if (reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n </div>\n } @else {\n <si-datepicker\n [config]=\"dateRangeConfig()\"\n [focusedDate]=\"dateRange.end ?? dateRange.start\"\n [(dateRange)]=\"dateRange\"\n (dateRangeChange)=\"updateFromDateRange()\"\n />\n }\n\n @if (advancedMode || !hideAdvancedMode()) {\n <label class=\"form-switch form-check ms-6\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"advancedMode\"\n role=\"switch\"\n [(ngModel)]=\"advancedMode\"\n (ngModelChange)=\"updateOnModeChange()\"\n />\n <span class=\"form-check-label\">{{ advancedLabel() | translate }}</span>\n </label>\n }\n\n <div class=\"mt-4 mb-6 ms-6\">\n {{ previewLabel() | translate }}:\n <span class=\"preview\">\n @if (calculatedRange().valid) {\n {{ calculatedRange().start | date: pipeFormat() }} -\n {{ calculatedRange().end | date: pipeFormat() }}\n } @else {\n ?\n }\n </span>\n </div>\n</form>\n\n@if (showApplyButton()) {\n <div class=\"footer border-top px-6 py-5 d-flex\">\n <button type=\"button\" class=\"btn btn-primary ms-auto\" (click)=\"applyClicked.emit()\">\n {{ applyLabel() | translate }}\n </button>\n </div>\n}\n\n<ng-template #formReferencePoint>\n <div class=\"mb-8\">\n <label class=\"d-block\">\n <span class=\"form-label\">{{\n (advancedMode ? refLabel() : reverseInputFields() ? toLabel() : fromLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point1\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [disabled]=\"point1Now\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point1date\"\n (ngModelChange)=\"point1Changed()\"\n />\n </si-calendar-button>\n </label>\n <label class=\"ms-4 mt-4 text-nowrap form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"point1now\"\n [(ngModel)]=\"point1Now\"\n (ngModelChange)=\"point1Changed()\"\n />\n <span class=\"form-check-label\">{{\n (enableTimeSelection() ? nowLabel() : todayLabel()) | translate\n }}</span>\n </label>\n </div>\n</ng-template>\n\n<ng-template #formPoint2Date>\n <label class=\"d-block mb-4 bp-9\">\n <span class=\"form-label\">{{\n (reverseInputFields() ? fromLabel() : toLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point2\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [attr.aria-label]=\"dateLabel() | translate\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point2date\"\n (ngModelChange)=\"point2Changed()\"\n />\n </si-calendar-button>\n </label>\n</ng-template>\n\n<ng-template #formPoint2Duration>\n <div>\n <span class=\"form-label\">{{ rangeLabel() | translate }}</span>\n <si-relative-date\n class=\"d-block mb-4\"\n [unitLabel]=\"unitLabel() | translate\"\n [valueLabel]=\"valueLabel() | translate\"\n [enableTimeSelection]=\"enableTimeSelection()\"\n [(value)]=\"point2offset\"\n (valueChange)=\"point2Changed()\"\n />\n <div class=\"range-type ms-4\">\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"before\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ beforeLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"after\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ afterLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"within\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ withinLabel() | translate }}\n </span>\n </label>\n </div>\n </div>\n</ng-template>\n", styles: [":host{display:inline-grid;background:var(--element-base-1);grid-template-areas:\"preset main\" \"footer footer\"}.main-form{inline-size:348px;grid-area:main}.advanced-form{block-size:392px}.preset-select{display:flex;inline-size:200px;flex-direction:column;grid-area:preset}ul{flex:1 1 0;padding-inline-start:0;list-style:none}.preset-item{cursor:pointer;line-height:1.143}.preset-item:hover{background:var(--element-base-1-hover)}label{display:inline-flex;align-items:center}.form-check-input{inset-block-start:0}.element-zoom{rotate:45deg}.footer{grid-area:footer}\n"], dependencies: [{ kind: "directive", type: CdkOption, selector: "[cdkOption]", inputs: ["id", "cdkOption", "cdkOptionTypeaheadLabel", "cdkOptionDisabled", "tabindex"], exportAs: ["cdkOption"] }, { kind: "directive", type: CdkListbox, selector: "[cdkListbox]", inputs: ["id", "tabindex", "cdkListboxValue", "cdkListboxMultiple", "cdkListboxDisabled", "cdkListboxUseActiveDescendant", "cdkListboxOrientation", "cdkListboxCompareWith", "cdkListboxNavigationWrapDisabled", "cdkListboxNavigatesDisabledOptions"], outputs: ["cdkListboxValueChange"], exportAs: ["cdkListbox"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: PresetMatchFilterPipe, name: "presetMatchFilter" }, { kind: "component", type: SiCalendarButtonComponent, selector: "si-calendar-button", inputs: ["ariaLabel"] }, { kind: "component", type: SiDatepickerComponent, selector: "si-datepicker", inputs: ["focusedDate", "date", "dateRange", "dateRangeRole", "initialFocus", "disabledTime", "config", "previousLabel", "nextLabel", "calenderWeekLabel", "time12h", "rangeType", "minMonth", "maxMonth", "hideTimeToggle", "hideCalendar", "timepickerLabel", "activeHover"], outputs: ["focusedDateChange", "dateChange", "dateRangeChange", "disabledTimeChange", "configChange", "rangeTypeChange", "activeHoverChange"] }, { kind: "directive", type: SiDatepickerDirective, selector: "[siDatepicker]", inputs: ["autoClose", "triggeringInput"], exportAs: ["siDatepicker"] }, { kind: "component", type: SiRelativeDateComponent, selector: "si-relative-date", inputs: ["value", "enableTimeSelection", "valueLabel", "unitLabel"], outputs: ["valueChange"] }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled"], outputs: ["searchChange"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i2.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
617
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", type: SiDateRangeFilterComponent, isStandalone: true, selector: "si-date-range-filter", inputs: { range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: true, transformFunction: null }, presetList: { classPropertyName: "presetList", publicName: "presetList", isSignal: true, isRequired: false, transformFunction: null }, presetSearch: { classPropertyName: "presetSearch", publicName: "presetSearch", isSignal: true, isRequired: false, transformFunction: null }, enableTimeSelection: { classPropertyName: "enableTimeSelection", publicName: "enableTimeSelection", isSignal: true, isRequired: false, transformFunction: null }, basicMode: { classPropertyName: "basicMode", publicName: "basicMode", isSignal: true, isRequired: false, transformFunction: null }, reverseInputFields: { classPropertyName: "reverseInputFields", publicName: "reverseInputFields", isSignal: true, isRequired: false, transformFunction: null }, showApplyButton: { classPropertyName: "showApplyButton", publicName: "showApplyButton", isSignal: true, isRequired: false, transformFunction: null }, hideAdvancedMode: { classPropertyName: "hideAdvancedMode", publicName: "hideAdvancedMode", isSignal: true, isRequired: false, transformFunction: null }, refLabel: { classPropertyName: "refLabel", publicName: "refLabel", isSignal: true, isRequired: false, transformFunction: null }, fromLabel: { classPropertyName: "fromLabel", publicName: "fromLabel", isSignal: true, isRequired: false, transformFunction: null }, toLabel: { classPropertyName: "toLabel", publicName: "toLabel", isSignal: true, isRequired: false, transformFunction: null }, rangeLabel: { classPropertyName: "rangeLabel", publicName: "rangeLabel", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, nowLabel: { classPropertyName: "nowLabel", publicName: "nowLabel", isSignal: true, isRequired: false, transformFunction: null }, dateLabel: { classPropertyName: "dateLabel", publicName: "dateLabel", isSignal: true, isRequired: false, transformFunction: null }, previewLabel: { classPropertyName: "previewLabel", publicName: "previewLabel", isSignal: true, isRequired: false, transformFunction: null }, datePlaceholder: { classPropertyName: "datePlaceholder", publicName: "datePlaceholder", isSignal: true, isRequired: false, transformFunction: null }, beforeLabel: { classPropertyName: "beforeLabel", publicName: "beforeLabel", isSignal: true, isRequired: false, transformFunction: null }, afterLabel: { classPropertyName: "afterLabel", publicName: "afterLabel", isSignal: true, isRequired: false, transformFunction: null }, withinLabel: { classPropertyName: "withinLabel", publicName: "withinLabel", isSignal: true, isRequired: false, transformFunction: null }, valueLabel: { classPropertyName: "valueLabel", publicName: "valueLabel", isSignal: true, isRequired: false, transformFunction: null }, unitLabel: { classPropertyName: "unitLabel", publicName: "unitLabel", isSignal: true, isRequired: false, transformFunction: null }, searchLabel: { classPropertyName: "searchLabel", publicName: "searchLabel", isSignal: true, isRequired: false, transformFunction: null }, presetLabel: { classPropertyName: "presetLabel", publicName: "presetLabel", isSignal: true, isRequired: false, transformFunction: null }, advancedLabel: { classPropertyName: "advancedLabel", publicName: "advancedLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, datepickerConfig: { classPropertyName: "datepickerConfig", publicName: "datepickerConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { range: "rangeChange", applyClicked: "applyClicked" }, host: { properties: { "class.mobile": "smallScreen" } }, usesOnChanges: true, ngImport: i0, template: "@if (presetList()?.length) {\n @if (this.smallScreen) {\n <div class=\"presets d-flex\">\n <button\n #presetTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"btn btn-tertiary dropdown-toggle m-5 flex-grow-1\"\n cdkOverlayOrigin\n [class.show]=\"presetOpen()\"\n [attr.aria-expanded]=\"presetOpen()\"\n (click)=\"presetOpen.set(true)\"\n >\n {{ presetLabel() | translate }}\n <si-icon-next class=\"dropdown-caret icon\" [icon]=\"icons.elementDown2\" />\n </button>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOpen]=\"presetOpen()\"\n [cdkConnectedOverlayOrigin]=\"presetTrigger\"\n [cdkConnectedOverlayMinWidth]=\"\n presetTrigger.elementRef.nativeElement?.getBoundingClientRect().width\n \"\n (backdropClick)=\"presetOpen.set(false)\"\n (detach)=\"presetOpen.set(false)\"\n >\n <div\n cdkTrapFocus\n class=\"preset-select mobile elevation-2 rounded-2 w-100\"\n cdkTrapFocusAutoCapture\n >\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n </ng-template>\n </div>\n } @else {\n <div class=\"preset-select border-end\">\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n }\n}\n<form class=\"main-form d-flex flex-column flex-fill\">\n @if (advancedMode || inputMode()) {\n <div class=\"advanced-form px-6 py-4\">\n @if (!reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n\n <div class=\"mb-8\">\n @if (point2Mode === 'date') {\n <ng-container *ngTemplateOutlet=\"formPoint2Date\" />\n }\n @if (point2Mode === 'duration') {\n <ng-container *ngTemplateOutlet=\"formPoint2Duration\" />\n }\n </div>\n\n @if (reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n </div>\n } @else {\n <si-datepicker\n [config]=\"dateRangeConfig()\"\n [focusedDate]=\"dateRange.end ?? dateRange.start\"\n [(dateRange)]=\"dateRange\"\n (dateRangeChange)=\"updateFromDateRange()\"\n />\n }\n\n @if (advancedMode || !hideAdvancedMode()) {\n <label class=\"form-switch form-check ms-6\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"advancedMode\"\n role=\"switch\"\n [(ngModel)]=\"advancedMode\"\n (ngModelChange)=\"updateOnModeChange()\"\n />\n <span class=\"form-check-label\">{{ advancedLabel() | translate }}</span>\n </label>\n }\n\n <div class=\"mt-4 mb-6 ms-6\">\n {{ previewLabel() | translate }}:\n <span class=\"preview\">\n @if (calculatedRange().valid) {\n {{ calculatedRange().start | date: pipeFormat() }} -\n {{ calculatedRange().end | date: pipeFormat() }}\n } @else {\n ?\n }\n </span>\n </div>\n</form>\n\n@if (showApplyButton()) {\n <div class=\"footer border-top px-6 py-5 d-flex\">\n <button type=\"button\" class=\"btn btn-primary ms-auto\" (click)=\"applyClicked.emit()\">\n {{ applyLabel() | translate }}\n </button>\n </div>\n}\n<ng-template #presets>\n @if (presetSearch()) {\n <si-search-bar\n colorVariant=\"base-0\"\n class=\"mx-6 mt-5 mb-6\"\n [placeholder]=\"searchLabel() | translate\"\n [showIcon]=\"true\"\n [(ngModel)]=\"presetFilter\"\n />\n }\n <ul class=\"overflow-auto\" cdkListbox [attr.aria-label]=\"presetLabel() | translate\">\n @for (item of filteredPresetList(); track $index) {\n @if (item.label | translate | presetMatchFilter: presetFilter()) {\n <li\n class=\"preset-item focus-inside px-8 py-5\"\n [cdkOption]=\"item.label\"\n (click)=\"selectPresetItem($event, item)\"\n (keydown.enter)=\"selectPresetItem($event, item)\"\n >\n {{ item.label | translate }}\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template #formReferencePoint>\n <div class=\"mb-8\">\n <label class=\"d-block\">\n <span class=\"form-label\">{{\n (advancedMode ? refLabel() : reverseInputFields() ? toLabel() : fromLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point1\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [disabled]=\"point1Now\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point1date\"\n (ngModelChange)=\"point1Changed()\"\n />\n </si-calendar-button>\n </label>\n <label class=\"ms-4 mt-4 text-nowrap form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"point1now\"\n [(ngModel)]=\"point1Now\"\n (ngModelChange)=\"point1Changed()\"\n />\n <span class=\"form-check-label\">{{\n (enableTimeSelection() ? nowLabel() : todayLabel()) | translate\n }}</span>\n </label>\n </div>\n</ng-template>\n\n<ng-template #formPoint2Date>\n <label class=\"d-block mb-4 bp-9\">\n <span class=\"form-label\">{{\n (reverseInputFields() ? fromLabel() : toLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point2\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [attr.aria-label]=\"dateLabel() | translate\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point2date\"\n (ngModelChange)=\"point2Changed()\"\n />\n </si-calendar-button>\n </label>\n</ng-template>\n\n<ng-template #formPoint2Duration>\n <div>\n <span class=\"form-label\">{{ rangeLabel() | translate }}</span>\n <si-relative-date\n class=\"d-block mb-4\"\n [unitLabel]=\"unitLabel() | translate\"\n [valueLabel]=\"valueLabel() | translate\"\n [enableTimeSelection]=\"enableTimeSelection()\"\n [(value)]=\"point2offset\"\n (valueChange)=\"point2Changed()\"\n />\n <div class=\"range-type ms-4\">\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"before\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ beforeLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"after\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ afterLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"within\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ withinLabel() | translate }}\n </span>\n </label>\n </div>\n </div>\n</ng-template>\n", styles: [":host{display:inline-grid;background:var(--element-base-1);grid-template-areas:\"preset main\" \"footer footer\"}:host.mobile{grid-template-areas:\"preset\" \"main\" \"footer\";justify-items:stretch}:host.mobile .presets{border-block-end:1px solid var(--element-ui-4)}.main-form{inline-size:348px;grid-area:main}.advanced-form{block-size:392px}.preset-select{display:flex;inline-size:200px;flex-direction:column;grid-area:preset;background:var(--element-base-1)}.preset-select.mobile{max-block-size:346px;inline-size:unset}ul{flex:1 1 auto;padding-inline-start:0;list-style:none}.preset-item{cursor:pointer;line-height:1.143}.preset-item:hover{background:var(--element-base-1-hover)}label{display:inline-flex;align-items:center}.form-check-input{inset-block-start:0}.element-zoom{rotate:45deg}.footer{grid-area:footer}\n"], dependencies: [{ kind: "directive", type: CdkOption, selector: "[cdkOption]", inputs: ["id", "cdkOption", "cdkOptionTypeaheadLabel", "cdkOptionDisabled", "tabindex"], exportAs: ["cdkOption"] }, { kind: "directive", type: CdkListbox, selector: "[cdkListbox]", inputs: ["id", "tabindex", "cdkListboxValue", "cdkListboxMultiple", "cdkListboxDisabled", "cdkListboxUseActiveDescendant", "cdkListboxOrientation", "cdkListboxCompareWith", "cdkListboxNavigationWrapDisabled", "cdkListboxNavigatesDisabledOptions"], outputs: ["cdkListboxValueChange"], exportAs: ["cdkListbox"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "pipe", type: PresetMatchFilterPipe, name: "presetMatchFilter" }, { kind: "component", type: SiCalendarButtonComponent, selector: "si-calendar-button", inputs: ["ariaLabel"] }, { kind: "component", type: SiDatepickerComponent, selector: "si-datepicker", inputs: ["focusedDate", "date", "dateRange", "dateRangeRole", "initialFocus", "disabledTime", "config", "previousLabel", "nextLabel", "calenderWeekLabel", "time12h", "rangeType", "minMonth", "maxMonth", "hideTimeToggle", "hideCalendar", "timepickerLabel", "activeHover"], outputs: ["focusedDateChange", "dateChange", "dateRangeChange", "disabledTimeChange", "configChange", "rangeTypeChange", "activeHoverChange"] }, { kind: "directive", type: SiDatepickerDirective, selector: "[siDatepicker]", inputs: ["autoClose", "triggeringInput"], exportAs: ["siDatepicker"] }, { kind: "component", type: SiIconNextComponent, selector: "si-icon-next", inputs: ["icon"] }, { kind: "component", type: SiRelativeDateComponent, selector: "si-relative-date", inputs: ["value", "enableTimeSelection", "valueLabel", "unitLabel"], outputs: ["valueChange"] }, { kind: "component", type: SiSearchBarComponent, selector: "si-search-bar", inputs: ["debounceTime", "prohibitedCharacters", "placeholder", "showIcon", "tabbable", "value", "readonly", "colorVariant", "disabled"], outputs: ["searchChange"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i3.SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
603
618
|
}
|
|
604
619
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiDateRangeFilterComponent, decorators: [{
|
|
605
620
|
type: Component,
|
|
606
621
|
args: [{ selector: 'si-date-range-filter', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
607
622
|
CdkOption,
|
|
608
623
|
CdkListbox,
|
|
624
|
+
CdkTrapFocus,
|
|
609
625
|
DatePipe,
|
|
610
626
|
FormsModule,
|
|
627
|
+
NgClass,
|
|
611
628
|
NgTemplateOutlet,
|
|
629
|
+
OverlayModule,
|
|
612
630
|
PresetMatchFilterPipe,
|
|
613
631
|
SiCalendarButtonComponent,
|
|
614
632
|
SiDatepickerComponent,
|
|
615
633
|
SiDatepickerDirective,
|
|
634
|
+
SiIconNextComponent,
|
|
616
635
|
SiRelativeDateComponent,
|
|
617
636
|
SiSearchBarComponent,
|
|
618
637
|
SiTranslateModule
|
|
619
|
-
],
|
|
638
|
+
], host: {
|
|
639
|
+
'[class.mobile]': 'smallScreen'
|
|
640
|
+
}, template: "@if (presetList()?.length) {\n @if (this.smallScreen) {\n <div class=\"presets d-flex\">\n <button\n #presetTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"btn btn-tertiary dropdown-toggle m-5 flex-grow-1\"\n cdkOverlayOrigin\n [class.show]=\"presetOpen()\"\n [attr.aria-expanded]=\"presetOpen()\"\n (click)=\"presetOpen.set(true)\"\n >\n {{ presetLabel() | translate }}\n <si-icon-next class=\"dropdown-caret icon\" [icon]=\"icons.elementDown2\" />\n </button>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayOpen]=\"presetOpen()\"\n [cdkConnectedOverlayOrigin]=\"presetTrigger\"\n [cdkConnectedOverlayMinWidth]=\"\n presetTrigger.elementRef.nativeElement?.getBoundingClientRect().width\n \"\n (backdropClick)=\"presetOpen.set(false)\"\n (detach)=\"presetOpen.set(false)\"\n >\n <div\n cdkTrapFocus\n class=\"preset-select mobile elevation-2 rounded-2 w-100\"\n cdkTrapFocusAutoCapture\n >\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n </ng-template>\n </div>\n } @else {\n <div class=\"preset-select border-end\">\n <ng-container *ngTemplateOutlet=\"presets\" />\n </div>\n }\n}\n<form class=\"main-form d-flex flex-column flex-fill\">\n @if (advancedMode || inputMode()) {\n <div class=\"advanced-form px-6 py-4\">\n @if (!reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n\n <div class=\"mb-8\">\n @if (point2Mode === 'date') {\n <ng-container *ngTemplateOutlet=\"formPoint2Date\" />\n }\n @if (point2Mode === 'duration') {\n <ng-container *ngTemplateOutlet=\"formPoint2Duration\" />\n }\n </div>\n\n @if (reverseInputFields()) {\n <ng-container *ngTemplateOutlet=\"formReferencePoint\" />\n }\n </div>\n } @else {\n <si-datepicker\n [config]=\"dateRangeConfig()\"\n [focusedDate]=\"dateRange.end ?? dateRange.start\"\n [(dateRange)]=\"dateRange\"\n (dateRangeChange)=\"updateFromDateRange()\"\n />\n }\n\n @if (advancedMode || !hideAdvancedMode()) {\n <label class=\"form-switch form-check ms-6\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"advancedMode\"\n role=\"switch\"\n [(ngModel)]=\"advancedMode\"\n (ngModelChange)=\"updateOnModeChange()\"\n />\n <span class=\"form-check-label\">{{ advancedLabel() | translate }}</span>\n </label>\n }\n\n <div class=\"mt-4 mb-6 ms-6\">\n {{ previewLabel() | translate }}:\n <span class=\"preview\">\n @if (calculatedRange().valid) {\n {{ calculatedRange().start | date: pipeFormat() }} -\n {{ calculatedRange().end | date: pipeFormat() }}\n } @else {\n ?\n }\n </span>\n </div>\n</form>\n\n@if (showApplyButton()) {\n <div class=\"footer border-top px-6 py-5 d-flex\">\n <button type=\"button\" class=\"btn btn-primary ms-auto\" (click)=\"applyClicked.emit()\">\n {{ applyLabel() | translate }}\n </button>\n </div>\n}\n<ng-template #presets>\n @if (presetSearch()) {\n <si-search-bar\n colorVariant=\"base-0\"\n class=\"mx-6 mt-5 mb-6\"\n [placeholder]=\"searchLabel() | translate\"\n [showIcon]=\"true\"\n [(ngModel)]=\"presetFilter\"\n />\n }\n <ul class=\"overflow-auto\" cdkListbox [attr.aria-label]=\"presetLabel() | translate\">\n @for (item of filteredPresetList(); track $index) {\n @if (item.label | translate | presetMatchFilter: presetFilter()) {\n <li\n class=\"preset-item focus-inside px-8 py-5\"\n [cdkOption]=\"item.label\"\n (click)=\"selectPresetItem($event, item)\"\n (keydown.enter)=\"selectPresetItem($event, item)\"\n >\n {{ item.label | translate }}\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template #formReferencePoint>\n <div class=\"mb-8\">\n <label class=\"d-block\">\n <span class=\"form-label\">{{\n (advancedMode ? refLabel() : reverseInputFields() ? toLabel() : fromLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point1\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [disabled]=\"point1Now\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point1date\"\n (ngModelChange)=\"point1Changed()\"\n />\n </si-calendar-button>\n </label>\n <label class=\"ms-4 mt-4 text-nowrap form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n name=\"point1now\"\n [(ngModel)]=\"point1Now\"\n (ngModelChange)=\"point1Changed()\"\n />\n <span class=\"form-check-label\">{{\n (enableTimeSelection() ? nowLabel() : todayLabel()) | translate\n }}</span>\n </label>\n </div>\n</ng-template>\n\n<ng-template #formPoint2Date>\n <label class=\"d-block mb-4 bp-9\">\n <span class=\"form-label\">{{\n (reverseInputFields() ? fromLabel() : toLabel()) | translate\n }}</span>\n <si-calendar-button class=\"w-100\">\n <input\n type=\"text\"\n class=\"form-control\"\n name=\"point2\"\n required\n siDatepicker\n [siDatepickerConfig]=\"datepickerConfigInternal()\"\n [attr.aria-label]=\"dateLabel() | translate\"\n [placeholder]=\"datePlaceholder() | translate\"\n [(ngModel)]=\"point2date\"\n (ngModelChange)=\"point2Changed()\"\n />\n </si-calendar-button>\n </label>\n</ng-template>\n\n<ng-template #formPoint2Duration>\n <div>\n <span class=\"form-label\">{{ rangeLabel() | translate }}</span>\n <si-relative-date\n class=\"d-block mb-4\"\n [unitLabel]=\"unitLabel() | translate\"\n [valueLabel]=\"valueLabel() | translate\"\n [enableTimeSelection]=\"enableTimeSelection()\"\n [(value)]=\"point2offset\"\n (valueChange)=\"point2Changed()\"\n />\n <div class=\"range-type ms-4\">\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"before\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ beforeLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"after\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ afterLabel() | translate }}\n </span>\n </label>\n <label class=\"form-check form-check-inline\">\n <input\n type=\"radio\"\n class=\"form-check-input\"\n value=\"within\"\n name=\"point2range\"\n [(ngModel)]=\"point2range\"\n (ngModelChange)=\"point2Changed()\"\n />\n <span class=\"form-check-label\">\n {{ withinLabel() | translate }}\n </span>\n </label>\n </div>\n </div>\n</ng-template>\n", styles: [":host{display:inline-grid;background:var(--element-base-1);grid-template-areas:\"preset main\" \"footer footer\"}:host.mobile{grid-template-areas:\"preset\" \"main\" \"footer\";justify-items:stretch}:host.mobile .presets{border-block-end:1px solid var(--element-ui-4)}.main-form{inline-size:348px;grid-area:main}.advanced-form{block-size:392px}.preset-select{display:flex;inline-size:200px;flex-direction:column;grid-area:preset;background:var(--element-base-1)}.preset-select.mobile{max-block-size:346px;inline-size:unset}ul{flex:1 1 auto;padding-inline-start:0;list-style:none}.preset-item{cursor:pointer;line-height:1.143}.preset-item:hover{background:var(--element-base-1-hover)}label{display:inline-flex;align-items:center}.form-check-input{inset-block-start:0}.element-zoom{rotate:45deg}.footer{grid-area:footer}\n"] }]
|
|
620
641
|
}] });
|
|
621
642
|
|
|
622
643
|
/**
|