@spicainternational/ngx-sds-components 2.24.2 → 2.25.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.
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
2
+ import { Injectable, EventEmitter, Component, Input, Output, ViewChild, NgModule } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i6 from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
6
6
  import { SdsDurationFormatPipe, SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
7
7
  import * as i2 from 'devextreme-angular';
8
- import { DxTextBoxModule, DxPopoverModule, DxScrollViewModule } from 'devextreme-angular';
8
+ import { DxTextBoxModule, DxPopoverModule, DxScrollViewModule, DxValidatorModule } from 'devextreme-angular';
9
9
  import * as i3 from 'devextreme-angular/ui/nested';
10
10
  import * as i5 from 'devextreme-angular/core';
11
11
 
@@ -76,6 +76,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
76
76
  }]
77
77
  }], ctorParameters: function () { return []; } });
78
78
 
79
+ /**
80
+ * Component allows user to enter duration in h:mm format. User may also select no value is this is applicable to the
81
+ * use case. A list of pre-defined durations can be provided for easier selection.
82
+ *
83
+ * The auto resolve function tries to convert entered text into minutes. The algorithm splits entry into two parts
84
+ * hours and minutes based on delimiter or if there is none - it takes last two digits as minutes.
85
+ *
86
+ * @export
87
+ * @class SdsDurationBoxComponent
88
+ */
79
89
  class SdsDurationBoxComponent {
80
90
  constructor(_durationInputResolver) {
81
91
  this._durationInputResolver = _durationInputResolver;
@@ -122,7 +132,27 @@ class SdsDurationBoxComponent {
122
132
  * @memberof SdsDurationBoxComponent
123
133
  */
124
134
  this.showClearButton = false;
125
- this.rangeViolated = new EventEmitter();
135
+ /**
136
+ * Specifies how range limits are handled.
137
+ *
138
+ * @type {('fallbackToLastValue' | 'showValidationError')}
139
+ * @memberof SdsDurationBoxComponent
140
+ */
141
+ this.rangeViolationHandling = 'autoResolve';
142
+ /**
143
+ * Range violation message. Applicable when rangeViolationHandling is set to 'autoResolve'
144
+ *
145
+ * @type {string}
146
+ * @memberof SdsDurationBoxComponent
147
+ */
148
+ this.rangeViolationText = 'value is outside the valid range';
149
+ /**
150
+ * Indicates whether the editor's value is valid.
151
+ *
152
+ * @type {boolean}
153
+ * @memberof SdsDurationBoxComponent
154
+ */
155
+ this.isValid = true;
126
156
  this.elementUUID = 'sds-db-' + crypto.randomUUID();
127
157
  this.inputValue = '';
128
158
  this.showOptions = false;
@@ -145,9 +175,15 @@ class SdsDurationBoxComponent {
145
175
  }
146
176
  };
147
177
  }
178
+ ngAfterViewInit() {
179
+ if (this._validationRule) {
180
+ this._validationRule.validationCallback = () => { return this.checkIfValid(); };
181
+ }
182
+ }
148
183
  ngOnChanges(changes) {
149
184
  if (changes['value']) {
150
185
  if (this.value === null) {
186
+ // handle null input
151
187
  if (this.allowEmptyValue) {
152
188
  this.setValue(null);
153
189
  }
@@ -157,7 +193,21 @@ class SdsDurationBoxComponent {
157
193
  }
158
194
  }
159
195
  else {
160
- this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
196
+ // handle value input
197
+ if (this._durationInputResolver.isValueWithinLimits(this.value, this.min, this.max)) {
198
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
199
+ }
200
+ else {
201
+ // value is out of range
202
+ if (this.rangeViolationHandling === 'autoResolve') {
203
+ this.setValue(this._durationInputResolver.getDefaultValue(this.min, this.max));
204
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
205
+ }
206
+ else {
207
+ this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
208
+ this.setValidationStatusAndValidate(false);
209
+ }
210
+ }
161
211
  }
162
212
  }
163
213
  }
@@ -170,24 +220,34 @@ class SdsDurationBoxComponent {
170
220
  if (!this._durationInputResolver.isValidInput(this.inputValue)) {
171
221
  // we have invalid input. use old value
172
222
  this.setInputValueInternally(this.value);
223
+ this.setValidationStatusAndValidate(true);
173
224
  }
174
225
  else {
175
226
  const resolvedValue = this._durationInputResolver.resolve(this.inputValue);
176
227
  if (resolvedValue === null && this.allowEmptyValue) {
177
228
  this.setValue(null);
229
+ this.setValidationStatusAndValidate(true);
178
230
  }
179
231
  else if (resolvedValue === null && !this.allowEmptyValue) {
180
232
  this.setValue(this._durationInputResolver.getDefaultValue());
233
+ this.setValidationStatusAndValidate(true);
181
234
  }
182
235
  else {
183
236
  // make sure that the value is within the min/max period
184
237
  if (this._durationInputResolver.isValueWithinLimits(resolvedValue, this.min, this.max)) {
185
238
  this.setValue(resolvedValue);
239
+ this.setValidationStatusAndValidate(true);
186
240
  }
187
241
  else {
188
242
  // use old value
189
- this.rangeViolated.emit({ min: this.min, max: this.max, value: resolvedValue });
190
- this.setInputValueInternally(this.value);
243
+ if (this.rangeViolationHandling === 'autoResolve') {
244
+ this.setInputValueInternally(this.value);
245
+ this.setValidationStatusAndValidate(true);
246
+ }
247
+ else {
248
+ this.setInputValueInternally(resolvedValue);
249
+ this.setValidationStatusAndValidate(false);
250
+ }
191
251
  }
192
252
  }
193
253
  }
@@ -198,6 +258,9 @@ class SdsDurationBoxComponent {
198
258
  this.isValueSetInternally = false;
199
259
  this.setValue(value);
200
260
  }
261
+ checkIfValid() {
262
+ return this.isValid;
263
+ }
201
264
  setValue(value) {
202
265
  this.isValueEmpty = (value === null);
203
266
  this.value = value;
@@ -207,15 +270,20 @@ class SdsDurationBoxComponent {
207
270
  setInputValueInternally(value) {
208
271
  this.isValueSetInternally = true;
209
272
  setTimeout(() => {
210
- this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
273
+ this.inputValue = this._durationPipe.transform(value, this.emptyValueText);
211
274
  }, 0);
212
275
  }
276
+ setValidationStatusAndValidate(isValid) {
277
+ var _a;
278
+ this.isValid = (this.rangeViolationHandling === 'autoResolve') || isValid;
279
+ (_a = this._validator) === null || _a === void 0 ? void 0 : _a.instance.validate();
280
+ }
213
281
  }
214
282
  SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: DurationService }], target: i0.ɵɵFactoryTarget.Component });
215
- SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton", max: "max", min: "min" }, outputs: { valueChange: "valueChange", rangeViolated: "rangeViolated" }, usesOnChanges: true, ngImport: i0, template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
283
+ SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton", max: "max", min: "min", rangeViolationHandling: "rangeViolationHandling", rangeViolationText: "rangeViolationText" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "_validationRule", first: true, predicate: ["validationRule"], descendants: true }, { propertyName: "_validator", first: true, predicate: ["validator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <dx-validator \r\n #validator\r\n *ngIf=\"rangeViolationHandling === 'markAsInvalid'\">\r\n <dxi-validation-rule\r\n #validationRule\r\n type=\"custom\"\r\n [message]=\"rangeViolationText\"\r\n [reevaluate]=\"true\"\r\n ></dxi-validation-rule>\r\n </dx-validator>\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n \r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i2.DxValidatorComponent, selector: "dx-validator", inputs: ["adapter", "elementAttr", "height", "name", "validationGroup", "validationRules", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onValidated", "adapterChange", "elementAttrChange", "heightChange", "nameChange", "validationGroupChange", "validationRulesChange", "widthChange"] }, { type: i3.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
216
284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
217
285
  type: Component,
218
- args: [{ selector: 'sds-duration-box', template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
286
+ args: [{ selector: 'sds-duration-box', template: "<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <dx-validator \r\n #validator\r\n *ngIf=\"rangeViolationHandling === 'markAsInvalid'\">\r\n <dxi-validation-rule\r\n #validationRule\r\n type=\"custom\"\r\n [message]=\"rangeViolationText\"\r\n [reevaluate]=\"true\"\r\n ></dxi-validation-rule>\r\n </dx-validator>\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n \r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
219
287
  }], ctorParameters: function () { return [{ type: DurationService }]; }, propDecorators: { value: [{
220
288
  type: Input
221
289
  }], valueChange: [{
@@ -236,8 +304,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
236
304
  type: Input
237
305
  }], min: [{
238
306
  type: Input
239
- }], rangeViolated: [{
240
- type: Output
307
+ }], rangeViolationHandling: [{
308
+ type: Input
309
+ }], rangeViolationText: [{
310
+ type: Input
311
+ }], _validationRule: [{
312
+ type: ViewChild,
313
+ args: ['validationRule', { static: false }]
314
+ }], _validator: [{
315
+ type: ViewChild,
316
+ args: ['validator', { static: false }]
241
317
  }] } });
242
318
 
243
319
  const components = [
@@ -250,13 +326,15 @@ SdsDurationBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", ve
250
326
  SdsDurationPipeModule,
251
327
  DxTextBoxModule,
252
328
  DxPopoverModule,
253
- DxScrollViewModule], exports: [SdsDurationBoxComponent] });
329
+ DxScrollViewModule,
330
+ DxValidatorModule], exports: [SdsDurationBoxComponent] });
254
331
  SdsDurationBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, imports: [[
255
332
  CommonModule,
256
333
  SdsDurationPipeModule,
257
334
  DxTextBoxModule,
258
335
  DxPopoverModule,
259
336
  DxScrollViewModule,
337
+ DxValidatorModule,
260
338
  ]] });
261
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, decorators: [{
262
340
  type: NgModule,
@@ -270,6 +348,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
270
348
  DxTextBoxModule,
271
349
  DxPopoverModule,
272
350
  DxScrollViewModule,
351
+ DxValidatorModule,
273
352
  ],
274
353
  exports: [
275
354
  ...components
@@ -1 +1 @@
1
- {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DurationService {\r\n \r\n constructor() {}\r\n\r\n public resolve(input: string): number | null{\r\n if (!input || input.length === 0) {\r\n return 0;\r\n }\r\n\r\n const inputSegments = input.split(':');\r\n if (inputSegments.length > 2) {\r\n //invalid input\r\n return 0;\r\n } else if (inputSegments.length == 2){\r\n // we have hrs and minutes\r\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\r\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\r\n const totalMins = (hrs * 60) + mins;\r\n\r\n return totalMins;\r\n } else if (inputSegments.length == 1) {\r\n // take last two digits as mins\r\n const nonSeparated = inputSegments[0];\r\n\r\n let totalMins = 0;\r\n if (nonSeparated.length <= 2) {\r\n totalMins = parseInt(nonSeparated)\r\n } else {\r\n const lastIndex = nonSeparated.length - 2;\r\n const part1 = nonSeparated.slice(0, lastIndex);\r\n const part2 = nonSeparated.slice(lastIndex);\r\n const hrs = parseInt(part1);\r\n const mins = parseInt(part2);\r\n totalMins = (hrs * 60) + mins; \r\n }\r\n return totalMins;\r\n }\r\n return 0; \r\n }\r\n\r\n public isValidInput(input: string) {\r\n const regexNumbersOnly = /^[+-]?\\d+$/;\r\n const regexColonSeparated = /^[+-]?\\d+:\\d+$/;\r\n return regexNumbersOnly.test(input) || regexColonSeparated.test(input);\r\n }\r\n\r\n public getDefaultValue(min?: number, max?: number): number {\r\n let defaultValue = 0;\r\n // try keeping the 0 as default\r\n // if it is outside the min/max then adjust\r\n if (min) {\r\n defaultValue = Math.max(defaultValue, min);\r\n }\r\n if (max) {\r\n defaultValue = Math.min(defaultValue, max);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n public isValueWithinLimits(value: number, min?: number, max?: number): boolean {\r\n return !((min && value < min) || (max && value > max))\r\n } \r\n\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\r\nimport { DurationBoxRangeViolation } from './duration.model';\r\nimport { DurationService } from './duration.service';\r\n\r\n@Component({\r\n selector: 'sds-duration-box',\r\n templateUrl: './duration-box.component.html',\r\n styleUrls: ['./duration-box.component.scss'],\r\n})\r\nexport class SdsDurationBoxComponent implements OnInit, OnChanges {\r\n /**\r\n * Duration length expressed in minutes; when we allow empty values this property can be null.\r\n *\r\n * @type {(number | null)}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() value: number | null = null;\r\n @Output() valueChange = new EventEmitter<number | null>();\r\n\r\n /**\r\n * Allow user to select empty value. You should provide emptyValueText in this case. The emitted value is 'null'.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() allowEmptyValue: boolean = true;\r\n\r\n /**\r\n * Text to be displayed when value is cleared\r\n *\r\n * @type {string}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() emptyValueText: string = 'not set';\r\n\r\n /**\r\n * Array of pre-defined durations that will be displayed in dropdown for easier selection.\r\n *\r\n * @type {number[]}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() options?: number[];\r\n \r\n /**\r\n * Width of component. By default 10rem.\r\n *\r\n * @type {string}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() width: string = '10rem';\r\n\r\n /**\r\n * Specifies whether the UI component responds to user interaction.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() disabled: boolean = false;\r\n \r\n /**\r\n * Specifies whether to display the Clear button in the UI component.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() showClearButton: boolean = false;\r\n\r\n /**\r\n * The maximum value accepted by the duration box.\r\n *\r\n * @type {number}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() max?: number;\r\n\r\n /**\r\n * The minimum value accepted by the duration box.\r\n *\r\n * @type {number}\r\n * @memberof SdsDurationBoxComponent\r\n */ \r\n @Input() min?: number;\r\n\r\n\r\n @Output() rangeViolated = new EventEmitter<DurationBoxRangeViolation>();\r\n\r\n public elementUUID = 'sds-db-' + crypto.randomUUID();\r\n\r\n public inputValue: string = '';\r\n public showOptions: boolean = false;\r\n \r\n public optionsDropdownButton;\r\n public clearValueButton;\r\n\r\n public isValueEmpty = false;\r\n\r\n private isValueSetInternally = false;\r\n private _durationPipe: SdsDurationFormatPipe;\r\n\r\n constructor(\r\n private _durationInputResolver: DurationService,\r\n ) {\r\n this._durationPipe = new SdsDurationFormatPipe();\r\n \r\n this.optionsDropdownButton = {\r\n icon: 'spindown',\r\n stylingMode: 'text',\r\n \r\n onClick: () => {\r\n this.showOptions = !this.showOptions;\r\n }\r\n }\r\n\r\n this.clearValueButton = {\r\n icon: 'clear',\r\n stylingMode: 'text',\r\n elementAttr: { class: 'sds-durationbox-clear-button' },\r\n onClick: () => {\r\n this.applyOption(null);\r\n }\r\n } \r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['value']) {\r\n if (this.value === null) {\r\n if (this.allowEmptyValue) {\r\n this.setValue(null);\r\n } else {\r\n this.setValue(this._durationInputResolver.getDefaultValue());\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n }\r\n } else {\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n public blockNonNumberOrSemicolon(e: any) {\r\n this.isValueSetInternally = false;\r\n }\r\n\r\n\r\n public resolveInput() {\r\n if (!this.isValueSetInternally){\r\n if (!this._durationInputResolver.isValidInput(this.inputValue)) {\r\n // we have invalid input. use old value\r\n this.setInputValueInternally(this.value);\r\n } else {\r\n const resolvedValue = this._durationInputResolver.resolve(this.inputValue);\r\n \r\n if (resolvedValue === null && this.allowEmptyValue) {\r\n this.setValue(null);\r\n } else if (resolvedValue === null && !this.allowEmptyValue) {\r\n this.setValue(this._durationInputResolver.getDefaultValue());\r\n } else {\r\n\r\n // make sure that the value is within the min/max period\r\n if (this._durationInputResolver.isValueWithinLimits(resolvedValue as number, this.min, this.max)) {\r\n this.setValue(resolvedValue);\r\n } else {\r\n // use old value\r\n this.rangeViolated.emit({min: this.min, max: this.max, value: resolvedValue});\r\n this.setInputValueInternally(this.value);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public applyOption(value: number | null){\r\n this.showOptions = false;\r\n this.isValueSetInternally = false;\r\n this.setValue(value);\r\n }\r\n\r\n private setValue(value: number | null){\r\n this.isValueEmpty = (value === null);\r\n this.value = value;\r\n this.valueChange.emit(this.value);\r\n this.setInputValueInternally(value);\r\n }\r\n\r\n private setInputValueInternally(value: number | null){\r\n this.isValueSetInternally = true;\r\n setTimeout(() => {\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n }, 0);\r\n }\r\n\r\n}\r\n","<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdsDurationBoxComponent } from './duration-box.component';\r\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';\r\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\r\n\r\n\r\n\r\nconst components = [\r\n SdsDurationBoxComponent\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n SdsDurationBoxComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n\r\n SdsDurationPipeModule,\r\n \r\n DxTextBoxModule,\r\n DxPopoverModule,\r\n DxScrollViewModule,\r\n ],\r\n exports: [\r\n ...components\r\n ]\r\n})\r\nexport class SdsDurationBoxModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationService"],"mappings":"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"}
1
+ {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DurationService {\r\n \r\n constructor() {}\r\n\r\n public resolve(input: string): number | null{\r\n if (!input || input.length === 0) {\r\n return 0;\r\n }\r\n\r\n const inputSegments = input.split(':');\r\n if (inputSegments.length > 2) {\r\n //invalid input\r\n return 0;\r\n } else if (inputSegments.length == 2){\r\n // we have hrs and minutes\r\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\r\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\r\n const totalMins = (hrs * 60) + mins;\r\n\r\n return totalMins;\r\n } else if (inputSegments.length == 1) {\r\n // take last two digits as mins\r\n const nonSeparated = inputSegments[0];\r\n\r\n let totalMins = 0;\r\n if (nonSeparated.length <= 2) {\r\n totalMins = parseInt(nonSeparated)\r\n } else {\r\n const lastIndex = nonSeparated.length - 2;\r\n const part1 = nonSeparated.slice(0, lastIndex);\r\n const part2 = nonSeparated.slice(lastIndex);\r\n const hrs = parseInt(part1);\r\n const mins = parseInt(part2);\r\n totalMins = (hrs * 60) + mins; \r\n }\r\n return totalMins;\r\n }\r\n return 0; \r\n }\r\n\r\n public isValidInput(input: string) {\r\n const regexNumbersOnly = /^[+-]?\\d+$/;\r\n const regexColonSeparated = /^[+-]?\\d+:\\d+$/;\r\n return regexNumbersOnly.test(input) || regexColonSeparated.test(input);\r\n }\r\n\r\n public getDefaultValue(min?: number, max?: number): number {\r\n let defaultValue = 0;\r\n // try keeping the 0 as default\r\n // if it is outside the min/max then adjust\r\n if (min) {\r\n defaultValue = Math.max(defaultValue, min);\r\n }\r\n if (max) {\r\n defaultValue = Math.min(defaultValue, max);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n public isValueWithinLimits(value: number, min?: number, max?: number): boolean {\r\n return !((min && value < min) || (max && value > max))\r\n } \r\n\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\r\nimport { DxValidatorComponent } from 'devextreme-angular';\r\nimport { DxiValidationRuleComponent } from 'devextreme-angular/ui/nested';\r\nimport { DurationBoxRangeViolationHandling } from './duration-box.types';\r\nimport { DurationService } from './duration.service';\r\n\r\n/**\r\n * Component allows user to enter duration in h:mm format. User may also select no value is this is applicable to the \r\n * use case. A list of pre-defined durations can be provided for easier selection.\r\n * \r\n * The auto resolve function tries to convert entered text into minutes. The algorithm splits entry into two parts \r\n * hours and minutes based on delimiter or if there is none - it takes last two digits as minutes.\r\n *\r\n * @export\r\n * @class SdsDurationBoxComponent\r\n */\r\n@Component({\r\n selector: 'sds-duration-box',\r\n templateUrl: './duration-box.component.html',\r\n styleUrls: ['./duration-box.component.scss'],\r\n})\r\nexport class SdsDurationBoxComponent implements OnInit, OnChanges, AfterViewInit {\r\n /**\r\n * Duration length expressed in minutes; when we allow empty values this property can be null.\r\n *\r\n * @type {(number | null)}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() value: number | null = null;\r\n @Output() valueChange = new EventEmitter<number | null>();\r\n\r\n /**\r\n * Allow user to select empty value. You should provide emptyValueText in this case. The emitted value is 'null'.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() allowEmptyValue: boolean = true;\r\n\r\n /**\r\n * Text to be displayed when value is cleared\r\n *\r\n * @type {string}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() emptyValueText: string = 'not set';\r\n\r\n /**\r\n * Array of pre-defined durations that will be displayed in dropdown for easier selection.\r\n *\r\n * @type {number[]}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() options?: number[];\r\n \r\n /**\r\n * Width of component. By default 10rem.\r\n *\r\n * @type {string}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() width: string = '10rem';\r\n\r\n /**\r\n * Specifies whether the UI component responds to user interaction.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() disabled: boolean = false;\r\n \r\n /**\r\n * Specifies whether to display the Clear button in the UI component.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() showClearButton: boolean = false;\r\n\r\n /**\r\n * The maximum value accepted by the duration box.\r\n *\r\n * @type {number}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() max?: number;\r\n\r\n /**\r\n * The minimum value accepted by the duration box.\r\n *\r\n * @type {number}\r\n * @memberof SdsDurationBoxComponent\r\n */ \r\n @Input() min?: number;\r\n\r\n /**\r\n * Specifies how range limits are handled.\r\n *\r\n * @type {('fallbackToLastValue' | 'showValidationError')}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() rangeViolationHandling: DurationBoxRangeViolationHandling = 'autoResolve';\r\n\r\n /**\r\n * Range violation message. Applicable when rangeViolationHandling is set to 'autoResolve'\r\n *\r\n * @type {string}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n @Input() rangeViolationText: string = 'value is outside the valid range';\r\n\r\n /**\r\n * Indicates whether the editor's value is valid.\r\n *\r\n * @type {boolean}\r\n * @memberof SdsDurationBoxComponent\r\n */\r\n public isValid: boolean = true;\r\n\r\n\r\n\r\n public elementUUID = 'sds-db-' + crypto.randomUUID();\r\n\r\n public inputValue: string = '';\r\n public showOptions: boolean = false;\r\n \r\n public optionsDropdownButton;\r\n public clearValueButton;\r\n\r\n public isValueEmpty = false;\r\n\r\n\r\n @ViewChild('validationRule', { static: false }) private _validationRule: DxiValidationRuleComponent | undefined;\r\n @ViewChild('validator', { static: false }) private _validator: DxValidatorComponent | undefined;\r\n\r\n private isValueSetInternally = false;\r\n private _durationPipe: SdsDurationFormatPipe;\r\n\r\n constructor(\r\n private _durationInputResolver: DurationService,\r\n ) {\r\n this._durationPipe = new SdsDurationFormatPipe();\r\n \r\n this.optionsDropdownButton = {\r\n icon: 'spindown',\r\n stylingMode: 'text',\r\n \r\n onClick: () => {\r\n this.showOptions = !this.showOptions;\r\n }\r\n }\r\n\r\n this.clearValueButton = {\r\n icon: 'clear',\r\n stylingMode: 'text',\r\n elementAttr: { class: 'sds-durationbox-clear-button' },\r\n onClick: () => {\r\n this.applyOption(null);\r\n }\r\n } \r\n }\r\n ngAfterViewInit(): void {\r\n if (this._validationRule) {\r\n this._validationRule.validationCallback = () => { return this.checkIfValid() };\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['value']) {\r\n if (this.value === null) {\r\n // handle null input\r\n if (this.allowEmptyValue) {\r\n this.setValue(null);\r\n } else {\r\n this.setValue(this._durationInputResolver.getDefaultValue());\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n }\r\n } else {\r\n // handle value input\r\n if (this._durationInputResolver.isValueWithinLimits(this.value, this.min, this.max)){\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n } else {\r\n // value is out of range\r\n if (this.rangeViolationHandling === 'autoResolve'){\r\n this.setValue(this._durationInputResolver.getDefaultValue(this.min, this.max));\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n } else {\r\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\r\n this.setValidationStatusAndValidate(false);\r\n }\r\n }\r\n }\r\n } \r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n public blockNonNumberOrSemicolon(e: any) {\r\n this.isValueSetInternally = false;\r\n }\r\n\r\n public resolveInput() {\r\n if (!this.isValueSetInternally){\r\n if (!this._durationInputResolver.isValidInput(this.inputValue)) {\r\n // we have invalid input. use old value\r\n this.setInputValueInternally(this.value);\r\n this.setValidationStatusAndValidate(true);\r\n } else {\r\n const resolvedValue = this._durationInputResolver.resolve(this.inputValue);\r\n if (resolvedValue === null && this.allowEmptyValue) {\r\n this.setValue(null);\r\n this.setValidationStatusAndValidate(true);\r\n } else if (resolvedValue === null && !this.allowEmptyValue) {\r\n this.setValue(this._durationInputResolver.getDefaultValue());\r\n this.setValidationStatusAndValidate(true);\r\n } else {\r\n // make sure that the value is within the min/max period\r\n if (this._durationInputResolver.isValueWithinLimits(resolvedValue as number, this.min, this.max)) {\r\n this.setValue(resolvedValue);\r\n this.setValidationStatusAndValidate(true);\r\n } else {\r\n // use old value\r\n if (this.rangeViolationHandling === 'autoResolve'){\r\n this.setInputValueInternally(this.value);\r\n this.setValidationStatusAndValidate(true);\r\n } else {\r\n this.setInputValueInternally(resolvedValue);\r\n this.setValidationStatusAndValidate(false);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public applyOption(value: number | null){\r\n this.showOptions = false;\r\n this.isValueSetInternally = false;\r\n this.setValue(value);\r\n }\r\n\r\n public checkIfValid() {\r\n return this.isValid;\r\n }\r\n\r\n private setValue(value: number | null){\r\n this.isValueEmpty = (value === null);\r\n this.value = value;\r\n this.valueChange.emit(this.value);\r\n this.setInputValueInternally(value);\r\n }\r\n\r\n private setInputValueInternally(value: number | null){\r\n this.isValueSetInternally = true;\r\n setTimeout(() => {\r\n this.inputValue = this._durationPipe.transform(value, this.emptyValueText);\r\n }, 0);\r\n }\r\n\r\n private setValidationStatusAndValidate(isValid: boolean){\r\n this.isValid = (this.rangeViolationHandling === 'autoResolve') || isValid;\r\n this._validator?.instance.validate();\r\n }\r\n\r\n}\r\n","<dx-text-box\r\n #textbox\r\n [id]=\"elementUUID\"\r\n class=\"sds-durationbox\"\r\n [(value)]=\"inputValue\"\r\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\r\n (onChange)=\"resolveInput()\"\r\n [width]=\"width\"\r\n [disabled]=\"disabled\"\r\n >\r\n\r\n <dx-validator \r\n #validator\r\n *ngIf=\"rangeViolationHandling === 'markAsInvalid'\">\r\n <dxi-validation-rule\r\n #validationRule\r\n type=\"custom\"\r\n [message]=\"rangeViolationText\"\r\n [reevaluate]=\"true\"\r\n ></dxi-validation-rule>\r\n </dx-validator>\r\n\r\n <dxi-button\r\n *ngIf=\"allowEmptyValue && showClearButton\"\r\n name=\"clearValue\"\r\n location=\"after\"\r\n [options]=\"clearValueButton\"\r\n ></dxi-button>\r\n \r\n <dxi-button\r\n *ngIf=\"options && options.length > 0\"\r\n name=\"optionsDropdown\"\r\n location=\"after\"\r\n [options]=\"optionsDropdownButton\"\r\n ></dxi-button>\r\n</dx-text-box>\r\n\r\n\r\n<dx-popover\r\n target=\"#{{elementUUID}}\"\r\n [(visible)]=\"showOptions\"\r\n [minWidth]=\"width\"\r\n [hideOnOutsideClick]=\"true\"\r\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\r\n >\r\n\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view>\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"isValueEmpty\"\r\n (click)=\"applyOption(null)\"\r\n > {{ emptyValueText}}\r\n </button>\r\n\r\n <div *ngFor=\"let option of options\">\r\n <button\r\n class=\"dropdown-item border-0\"\r\n [class.selected] = \"option === value\"\r\n (click)=\"applyOption(option)\"\r\n > {{option | sdsDurationFormat}}\r\n </button>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n</dx-popover>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdsDurationBoxComponent } from './duration-box.component';\r\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule, DxValidatorModule } from 'devextreme-angular';\r\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\r\n\r\n\r\n\r\nconst components = [\r\n SdsDurationBoxComponent\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n SdsDurationBoxComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n\r\n SdsDurationPipeModule,\r\n \r\n DxTextBoxModule,\r\n DxPopoverModule,\r\n DxScrollViewModule,\r\n DxValidatorModule,\r\n ],\r\n exports: [\r\n ...components\r\n ]\r\n})\r\nexport class SdsDurationBoxModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationService"],"mappings":"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"}
@@ -7,7 +7,8 @@ import { NavigationStart, RouterModule } from '@angular/router';
7
7
  import * as i2$1 from '@fortawesome/angular-fontawesome';
8
8
  import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
9
9
  import { faAngleUp, faAngleDown } from '@fortawesome/pro-regular-svg-icons';
10
- import { Subject, filter, takeUntil } from 'rxjs';
10
+ import { Subject } from 'rxjs';
11
+ import { filter, takeUntil } from 'rxjs/operators';
11
12
 
12
13
  class SdsNavigationSeparatorComponent {
13
14
  constructor() { }
@@ -1 +1 @@
1
- {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-navigation.mjs","sources":["../../../projects/ngx-sds-components/src/lib/navigation/navigation-separator/navigation-separator.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-separator/navigation-separator.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-header/navigation-header.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-header/navigation-header.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-route-link/navigation-route-link.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-route-link/navigation-route-link.component.html","../../../projects/ngx-sds-components/src/lib/navigation/pipes/navigation-route-active.pipe.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-group/navigation-group.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-group/navigation-group.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-container/navigation-container.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-container/navigation-container.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-external-link/navigation-external-link.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-external-link/navigation-external-link.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation.module.ts","../../../projects/ngx-sds-components/src/lib/navigation/spicainternational-ngx-sds-components-src-lib-navigation.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-separator',\r\n templateUrl: './navigation-separator.component.html',\r\n styleUrls: ['./navigation-separator.component.scss']\r\n})\r\nexport class SdsNavigationSeparatorComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"sds-navigation-separator nav-separator\"></div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-header',\r\n templateUrl: './navigation-header.component.html',\r\n styleUrls: ['./navigation-header.component.scss'],\r\n})\r\nexport class SdsNavigationHeaderComponent implements OnInit {\r\n @Input() text: string;\r\n\r\n constructor() {\r\n this.text = '';\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div class=\"sds-navigation-header\">\r\n {{ text }}\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-route-link',\r\n templateUrl: './navigation-route-link.component.html',\r\n styleUrls: ['./navigation-route-link.component.scss'],\r\n})\r\nexport class SdsNavigationRouteLinkComponent implements OnInit {\r\n @Input() routerLink: string = '';\r\n @Input() text: string = '';\r\n\r\n @Input() additionalInfo: string | undefined = undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<!-- class=\"sds-navigation-router-link sidebar-item-x d-flex justify-content-start align-items-center sidebar-item-x py-1\"> -->\r\n<div \r\n class=\"sds-navigation-router-link sds-navigation-item-container\"\r\n routerLinkActive=\"active\">\r\n <a class=\"sds-navigation-item-content w-100\" [routerLink]=\"routerLink\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n <span *ngIf=\"additionalInfo\"\r\n class=\"sds-navigation-router-link-additional-info badge badge-pill badge-warning\"\r\n >{{ additionalInfo }}</span\r\n > \r\n </div>\r\n </a>\r\n</div>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'navigationRouteActive'\r\n})\r\nexport class NavigationRouteActivePipe implements PipeTransform {\r\n\r\n transform(currentUrl: string[], ...args: unknown[]): boolean {\r\n if (!currentUrl || currentUrl?.length === 0) {\r\n return false;\r\n }\r\n const nestedRoutes: string[] = args[0] as string[];\r\n const defaultGroupUrl: string = (args[1] as string).replace('/', '');\r\n\r\n if (nestedRoutes?.length > 0) {\r\n // Nested routes are provided. We should find out if current url is on the list of\r\n // the provided nested routes\r\n const lastRouteItem = currentUrl.reverse().find((item, index) => index === 0);\r\n\r\n const routeItemIsPartOfNestedRoutes = nestedRoutes.some((routeName) => routeName === lastRouteItem);\r\n if (routeItemIsPartOfNestedRoutes) {\r\n return true;\r\n }\r\n console.warn(\r\n `Nested routes were defined in sds-navigation-group component, however route ${lastRouteItem} is\r\n not a part of the nested routes list. Maybe you forgot to include it? `\r\n );\r\n }\r\n\r\n const currentUrlContainsGroupUrl = currentUrl.some(path => path === defaultGroupUrl);\r\n return currentUrlContainsGroupUrl;\r\n }\r\n\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { NavigationStart, Router } from '@angular/router';\r\nimport { SdsNavigationRouteLinkComponent } from '../navigation-route-link/navigation-route-link.component';\r\n\r\nimport { faAngleUp, faAngleDown } from '@fortawesome/pro-regular-svg-icons';\r\nimport { filter, Subject, takeUntil } from 'rxjs';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'sds-navigation-group',\r\n templateUrl: './navigation-group.component.html',\r\n styleUrls: ['./navigation-group.component.scss'],\r\n})\r\nexport class SdsNavigationGroupComponent implements OnInit, OnDestroy {\r\n /**\r\n * List of paths allowed/expected within this module.\r\n * These are paths that are not accessible through child navigation\r\n * elements, but through links in other parts of the application (e.g. link\r\n * on form)\r\n */\r\n private _navigationGroupNestedRoutes: string[] = [];\r\n @Input()\r\n set navigationGroupNestedRoutes(value: string[]) {\r\n this._navigationGroupNestedRoutes = value;\r\n }\r\n get navigationGroupNestedRoutes() {\r\n return this._navigationGroupNestedRoutes;\r\n }\r\n\r\n @Input() text: string = '';\r\n @Input() icon: string = '';\r\n @Input() defaultRouterLink: string = '';\r\n @Input() reverse = false;\r\n\r\n @ContentChildren(SdsNavigationRouteLinkComponent)\r\n routerLinkComponents: QueryList<SdsNavigationRouteLinkComponent> = new QueryList<SdsNavigationRouteLinkComponent>();\r\n\r\n active: boolean = false;\r\n\r\n faAngleUpRegular = faAngleUp;\r\n faAngleDownRegular = faAngleDown;\r\n\r\n /**\r\n * Current app URL (e.g. ['layout-showcase', 'default'])\r\n */\r\n currentUrl: string[] = [];\r\n\r\n private _unsubscribe: Subject<void> = new Subject<void>();\r\n\r\n constructor(private _router: Router) {}\r\n\r\n ngOnInit(): void {\r\n this._router.events.pipe(\r\n filter((event) => event instanceof NavigationStart),\r\n takeUntil(this._unsubscribe)\r\n ).subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n const route: string[] = event.url.split('/').filter(item => item.length > 0)\r\n this.currentUrl = route;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribe.next();\r\n this._unsubscribe.complete();\r\n }\r\n\r\n navigateToDefaultRouterLink() {\r\n this._router.navigateByUrl(this.defaultRouterLink);\r\n }\r\n\r\n}\r\n","<div class=\"sds-navigation-group sds-navigation-item-container d-flex\"\r\n [class.flex-column-reverse]=\"reverse\"\r\n [class.flex-column]=\"!reverse\"\r\n [class]=\"{'active': currentUrl | navigationRouteActive :navigationGroupNestedRoutes: defaultRouterLink}\">\r\n <a class=\"w-100 sds-navigation-item-content\" style=\"cursor: pointer\"\r\n (click)=\"navigateToDefaultRouterLink()\">\r\n\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n <div class=\"text-right\">\r\n <fa-icon *ngIf=\"!reverse\" [icon]=\"faAngleDownRegular\"></fa-icon>\r\n <fa-icon *ngIf=\"reverse\" [icon]=\"faAngleUpRegular\"></fa-icon>\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"sds-navigation-group-items\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-container',\r\n templateUrl: './navigation-container.component.html',\r\n styleUrls: ['./navigation-container.component.scss'],\r\n})\r\nexport class SdsNavigationContainerComponent implements OnInit {\r\n @Input() product: string;\r\n\r\n constructor() {\r\n this.product = 'all-hours';\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div \r\n class=\"sds-navigation-container\"\r\n [class]=\"'product-' + product\">\r\n <ng-content></ng-content>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-external-link',\r\n templateUrl: './navigation-external-link.component.html',\r\n styleUrls: ['./navigation-external-link.component.scss']\r\n})\r\nexport class SdsNavigationExternalLinkComponent implements OnInit {\r\n\r\n @Input() link: string = '';\r\n @Input() text: string = '';\r\n @Input() tabName: string = '_blank'\r\n\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n openLink(){\r\n window.open(this.link, this.tabName);\r\n }\r\n\r\n}\r\n","<!-- class=\"sds-navigation-router-link d-flex justify-content-start align-items-center py-1\"> -->\r\n<div \r\n class=\"sds-navigation-router-link sds-navigation-item-container\">\r\n <a class=\"w-100 sds-navigation-item-content\" (click)=\"openLink()\" >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n </div>\r\n </a>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\nimport { SdsNavigationSeparatorComponent } from './navigation-separator/navigation-separator.component';\r\nimport { SdsNavigationHeaderComponent } from './navigation-header/navigation-header.component';\r\nimport { SdsNavigationGroupComponent } from './navigation-group/navigation-group.component';\r\nimport { SdsNavigationRouteLinkComponent } from './navigation-route-link/navigation-route-link.component';\r\nimport { SdsNavigationContainerComponent } from './navigation-container/navigation-container.component';\r\nimport { SdsNavigationExternalLinkComponent } from './navigation-external-link/navigation-external-link.component';\r\nimport { NavigationRouteActivePipe } from './pipes';\r\n\r\n// import { NavigationGroupComponent } from './navigation-group/navigation-group.component';\r\n// import { NavigationRouteLinkComponent } from './navigation-route-link/navigation-route-link.component';\r\n// import { NavigationSeparatorComponent } from './navigation-separator/navigation-separator.component';\r\n// import { NavigationHeaderComponent } from './navigation-header/navigation-header.component';\r\n\r\nconst components = [\r\n SdsNavigationGroupComponent,\r\n SdsNavigationRouteLinkComponent,\r\n SdsNavigationSeparatorComponent,\r\n SdsNavigationHeaderComponent,\r\n SdsNavigationContainerComponent,\r\n SdsNavigationExternalLinkComponent\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n NavigationRouteActivePipe\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FontAwesomeModule\r\n ],\r\n exports: [\r\n ...components\r\n ]\r\n})\r\nexport class SdsNavigationModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4.NavigationRouteActivePipe"],"mappings":"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"}
1
+ {"version":3,"file":"spicainternational-ngx-sds-components-src-lib-navigation.mjs","sources":["../../../projects/ngx-sds-components/src/lib/navigation/navigation-separator/navigation-separator.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-separator/navigation-separator.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-header/navigation-header.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-header/navigation-header.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-route-link/navigation-route-link.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-route-link/navigation-route-link.component.html","../../../projects/ngx-sds-components/src/lib/navigation/pipes/navigation-route-active.pipe.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-group/navigation-group.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-group/navigation-group.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-container/navigation-container.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-container/navigation-container.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation-external-link/navigation-external-link.component.ts","../../../projects/ngx-sds-components/src/lib/navigation/navigation-external-link/navigation-external-link.component.html","../../../projects/ngx-sds-components/src/lib/navigation/navigation.module.ts","../../../projects/ngx-sds-components/src/lib/navigation/spicainternational-ngx-sds-components-src-lib-navigation.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-separator',\r\n templateUrl: './navigation-separator.component.html',\r\n styleUrls: ['./navigation-separator.component.scss']\r\n})\r\nexport class SdsNavigationSeparatorComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<div class=\"sds-navigation-separator nav-separator\"></div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-header',\r\n templateUrl: './navigation-header.component.html',\r\n styleUrls: ['./navigation-header.component.scss'],\r\n})\r\nexport class SdsNavigationHeaderComponent implements OnInit {\r\n @Input() text: string;\r\n\r\n constructor() {\r\n this.text = '';\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div class=\"sds-navigation-header\">\r\n {{ text }}\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-route-link',\r\n templateUrl: './navigation-route-link.component.html',\r\n styleUrls: ['./navigation-route-link.component.scss'],\r\n})\r\nexport class SdsNavigationRouteLinkComponent implements OnInit {\r\n @Input() routerLink: string = '';\r\n @Input() text: string = '';\r\n\r\n @Input() additionalInfo: string | undefined = undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<!-- class=\"sds-navigation-router-link sidebar-item-x d-flex justify-content-start align-items-center sidebar-item-x py-1\"> -->\r\n<div \r\n class=\"sds-navigation-router-link sds-navigation-item-container\"\r\n routerLinkActive=\"active\">\r\n <a class=\"sds-navigation-item-content w-100\" [routerLink]=\"routerLink\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n <span *ngIf=\"additionalInfo\"\r\n class=\"sds-navigation-router-link-additional-info badge badge-pill badge-warning\"\r\n >{{ additionalInfo }}</span\r\n > \r\n </div>\r\n </a>\r\n</div>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'navigationRouteActive'\r\n})\r\nexport class NavigationRouteActivePipe implements PipeTransform {\r\n\r\n transform(currentUrl: string[], ...args: unknown[]): boolean {\r\n if (!currentUrl || currentUrl?.length === 0) {\r\n return false;\r\n }\r\n const nestedRoutes: string[] = args[0] as string[];\r\n const defaultGroupUrl: string = (args[1] as string).replace('/', '');\r\n\r\n if (nestedRoutes?.length > 0) {\r\n // Nested routes are provided. We should find out if current url is on the list of\r\n // the provided nested routes\r\n const lastRouteItem = currentUrl.reverse().find((item, index) => index === 0);\r\n\r\n const routeItemIsPartOfNestedRoutes = nestedRoutes.some((routeName) => routeName === lastRouteItem);\r\n if (routeItemIsPartOfNestedRoutes) {\r\n return true;\r\n }\r\n console.warn(\r\n `Nested routes were defined in sds-navigation-group component, however route ${lastRouteItem} is\r\n not a part of the nested routes list. Maybe you forgot to include it? `\r\n );\r\n }\r\n\r\n const currentUrlContainsGroupUrl = currentUrl.some(path => path === defaultGroupUrl);\r\n return currentUrlContainsGroupUrl;\r\n }\r\n\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { NavigationStart, Router } from '@angular/router';\r\nimport { SdsNavigationRouteLinkComponent } from '../navigation-route-link/navigation-route-link.component';\r\n\r\nimport { faAngleUp, faAngleDown } from '@fortawesome/pro-regular-svg-icons';\r\nimport { Subject } from 'rxjs';\r\nimport { filter, takeUntil } from \"rxjs/operators\";\r\n\r\n@Component({\r\n selector: 'sds-navigation-group',\r\n templateUrl: './navigation-group.component.html',\r\n styleUrls: ['./navigation-group.component.scss'],\r\n})\r\nexport class SdsNavigationGroupComponent implements OnInit, OnDestroy {\r\n /**\r\n * List of paths allowed/expected within this module.\r\n * These are paths that are not accessible through child navigation\r\n * elements, but through links in other parts of the application (e.g. link\r\n * on form)\r\n */\r\n private _navigationGroupNestedRoutes: string[] = [];\r\n @Input()\r\n set navigationGroupNestedRoutes(value: string[]) {\r\n this._navigationGroupNestedRoutes = value;\r\n }\r\n get navigationGroupNestedRoutes() {\r\n return this._navigationGroupNestedRoutes;\r\n }\r\n\r\n @Input() text: string = '';\r\n @Input() icon: string = '';\r\n @Input() defaultRouterLink: string = '';\r\n @Input() reverse = false;\r\n\r\n @ContentChildren(SdsNavigationRouteLinkComponent)\r\n routerLinkComponents: QueryList<SdsNavigationRouteLinkComponent> = new QueryList<SdsNavigationRouteLinkComponent>();\r\n\r\n active: boolean = false;\r\n\r\n faAngleUpRegular = faAngleUp;\r\n faAngleDownRegular = faAngleDown;\r\n\r\n /**\r\n * Current app URL (e.g. ['layout-showcase', 'default'])\r\n */\r\n currentUrl: string[] = [];\r\n\r\n private _unsubscribe: Subject<void> = new Subject<void>();\r\n\r\n constructor(private _router: Router) {}\r\n\r\n ngOnInit(): void {\r\n this._router.events.pipe(\r\n filter((event) => event instanceof NavigationStart),\r\n takeUntil(this._unsubscribe)\r\n ).subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n const route: string[] = event.url.split('/').filter(item => item.length > 0)\r\n this.currentUrl = route;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribe.next();\r\n this._unsubscribe.complete();\r\n }\r\n\r\n navigateToDefaultRouterLink() {\r\n this._router.navigateByUrl(this.defaultRouterLink);\r\n }\r\n\r\n}\r\n","<div class=\"sds-navigation-group sds-navigation-item-container d-flex\"\r\n [class.flex-column-reverse]=\"reverse\"\r\n [class.flex-column]=\"!reverse\"\r\n [class]=\"{'active': currentUrl | navigationRouteActive :navigationGroupNestedRoutes: defaultRouterLink}\">\r\n <a class=\"w-100 sds-navigation-item-content\" style=\"cursor: pointer\"\r\n (click)=\"navigateToDefaultRouterLink()\">\r\n\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n <div class=\"text-right\">\r\n <fa-icon *ngIf=\"!reverse\" [icon]=\"faAngleDownRegular\"></fa-icon>\r\n <fa-icon *ngIf=\"reverse\" [icon]=\"faAngleUpRegular\"></fa-icon>\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"sds-navigation-group-items\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-container',\r\n templateUrl: './navigation-container.component.html',\r\n styleUrls: ['./navigation-container.component.scss'],\r\n})\r\nexport class SdsNavigationContainerComponent implements OnInit {\r\n @Input() product: string;\r\n\r\n constructor() {\r\n this.product = 'all-hours';\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<div \r\n class=\"sds-navigation-container\"\r\n [class]=\"'product-' + product\">\r\n <ng-content></ng-content>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-navigation-external-link',\r\n templateUrl: './navigation-external-link.component.html',\r\n styleUrls: ['./navigation-external-link.component.scss']\r\n})\r\nexport class SdsNavigationExternalLinkComponent implements OnInit {\r\n\r\n @Input() link: string = '';\r\n @Input() text: string = '';\r\n @Input() tabName: string = '_blank'\r\n\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n openLink(){\r\n window.open(this.link, this.tabName);\r\n }\r\n\r\n}\r\n","<!-- class=\"sds-navigation-router-link d-flex justify-content-start align-items-center py-1\"> -->\r\n<div \r\n class=\"sds-navigation-router-link sds-navigation-item-container\">\r\n <a class=\"w-100 sds-navigation-item-content\" (click)=\"openLink()\" >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"sds-navigation-icon\" >\r\n <ng-content select=\"[navigationIcon]\"></ng-content>\r\n </div>\r\n <div class=\"sds-navigation-text\">\r\n {{ text }}\r\n </div>\r\n </div>\r\n </a>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\nimport { SdsNavigationSeparatorComponent } from './navigation-separator/navigation-separator.component';\r\nimport { SdsNavigationHeaderComponent } from './navigation-header/navigation-header.component';\r\nimport { SdsNavigationGroupComponent } from './navigation-group/navigation-group.component';\r\nimport { SdsNavigationRouteLinkComponent } from './navigation-route-link/navigation-route-link.component';\r\nimport { SdsNavigationContainerComponent } from './navigation-container/navigation-container.component';\r\nimport { SdsNavigationExternalLinkComponent } from './navigation-external-link/navigation-external-link.component';\r\nimport { NavigationRouteActivePipe } from './pipes';\r\n\r\n// import { NavigationGroupComponent } from './navigation-group/navigation-group.component';\r\n// import { NavigationRouteLinkComponent } from './navigation-route-link/navigation-route-link.component';\r\n// import { NavigationSeparatorComponent } from './navigation-separator/navigation-separator.component';\r\n// import { NavigationHeaderComponent } from './navigation-header/navigation-header.component';\r\n\r\nconst components = [\r\n SdsNavigationGroupComponent,\r\n SdsNavigationRouteLinkComponent,\r\n SdsNavigationSeparatorComponent,\r\n SdsNavigationHeaderComponent,\r\n SdsNavigationContainerComponent,\r\n SdsNavigationExternalLinkComponent\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n NavigationRouteActivePipe\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FontAwesomeModule\r\n ],\r\n exports: [\r\n ...components\r\n ]\r\n})\r\nexport class SdsNavigationModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4.NavigationRouteActivePipe"],"mappings":"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"}