@spicainternational/ngx-sds-components 2.22.9 → 2.23.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.
Files changed (41) hide show
  1. package/esm2020/public-api.mjs +3 -1
  2. package/esm2020/src/lib/date-picker/date-picker.component.mjs +27 -6
  3. package/esm2020/src/lib/duration-box/duration-box.component.mjs +144 -0
  4. package/esm2020/src/lib/duration-box/duration-box.module.mjs +43 -0
  5. package/esm2020/src/lib/duration-box/duration-input-resolver.service.mjs +49 -0
  6. package/esm2020/src/lib/duration-box/public-api.mjs +3 -0
  7. package/esm2020/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +5 -0
  8. package/esm2020/src/lib/duration-pipe/duration-format.pipe.mjs +26 -0
  9. package/esm2020/src/lib/duration-pipe/duration-pipe.module.mjs +18 -0
  10. package/esm2020/src/lib/duration-pipe/public-api.mjs +3 -0
  11. package/esm2020/src/lib/duration-pipe/spicainternational-ngx-sds-components-src-lib-duration-pipe.mjs +5 -0
  12. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +27 -5
  13. package/fesm2015/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  14. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +237 -0
  15. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -0
  16. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-pipe.mjs +48 -0
  17. package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-pipe.mjs.map +1 -0
  18. package/fesm2015/spicainternational-ngx-sds-components.mjs +2 -0
  19. package/fesm2015/spicainternational-ngx-sds-components.mjs.map +1 -1
  20. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs +26 -5
  21. package/fesm2020/spicainternational-ngx-sds-components-src-lib-date-picker.mjs.map +1 -1
  22. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +237 -0
  23. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -0
  24. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-pipe.mjs +48 -0
  25. package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-pipe.mjs.map +1 -0
  26. package/fesm2020/spicainternational-ngx-sds-components.mjs +2 -0
  27. package/fesm2020/spicainternational-ngx-sds-components.mjs.map +1 -1
  28. package/package.json +17 -1
  29. package/public-api.d.ts +2 -0
  30. package/src/lib/date-picker/date-picker.component.d.ts +2 -0
  31. package/src/lib/duration-box/duration-box.component.d.ts +39 -0
  32. package/src/lib/duration-box/duration-box.module.d.ts +10 -0
  33. package/src/lib/duration-box/duration-input-resolver.service.d.ts +7 -0
  34. package/src/lib/duration-box/package.json +10 -0
  35. package/src/lib/duration-box/public-api.d.ts +2 -0
  36. package/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.d.ts +5 -0
  37. package/src/lib/duration-pipe/duration-format.pipe.d.ts +7 -0
  38. package/src/lib/duration-pipe/duration-pipe.module.d.ts +8 -0
  39. package/src/lib/duration-pipe/package.json +10 -0
  40. package/src/lib/duration-pipe/public-api.d.ts +2 -0
  41. package/src/lib/duration-pipe/spicainternational-ngx-sds-components-src-lib-duration-pipe.d.ts +5 -0
@@ -0,0 +1,144 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./duration-input-resolver.service";
4
+ import * as i2 from "devextreme-angular";
5
+ import * as i3 from "devextreme-angular/ui/nested";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "devextreme-angular/core";
8
+ import * as i6 from "@spicainternational/ngx-sds-components/src/lib/duration-pipe";
9
+ export class SdsDurationBoxComponent {
10
+ constructor(_durationInputResolver) {
11
+ this._durationInputResolver = _durationInputResolver;
12
+ this.value = null;
13
+ this.valueChange = new EventEmitter();
14
+ this.allowEmptyValue = true;
15
+ this.emptyValueText = 'not set';
16
+ this.width = '10rem';
17
+ this.elementUUID = 'sds-db-' + crypto.randomUUID();
18
+ this.inputValue = '';
19
+ this.showOptions = false;
20
+ this.optionsDropdownButton = {
21
+ icon: 'spindown',
22
+ stylingMode: 'text',
23
+ onClick: () => {
24
+ this.showOptions = !this.showOptions;
25
+ }
26
+ };
27
+ this.clearValueButton = {
28
+ icon: 'clear',
29
+ stylingMode: 'text',
30
+ onClick: () => {
31
+ this.applyOption(null);
32
+ }
33
+ };
34
+ this.isValueEmpty = false;
35
+ this.isValueSetInternally = false;
36
+ }
37
+ ngOnChanges(changes) {
38
+ if (changes['value']) {
39
+ if (this.value === null) {
40
+ if (this.allowEmptyValue) {
41
+ this.isValueEmpty = true;
42
+ this.inputValue = this.emptyValueText;
43
+ }
44
+ else {
45
+ this.inputValue = '0:00'; // TO-DO: resolve this scenario
46
+ }
47
+ }
48
+ else {
49
+ this.inputValue = this.minutesToDurationString(this.value);
50
+ }
51
+ }
52
+ }
53
+ ngOnInit() { }
54
+ blockNonNumberOrSemicolon(e) {
55
+ this.isValueSetInternally = false;
56
+ if (!(e.event.key === 'Enter' ||
57
+ e.event.key === 'NumpadEnter' ||
58
+ e.event.key === 'Delete' ||
59
+ e.event.key === 'Tab' ||
60
+ e.event.key === 'Backspace' ||
61
+ e.event.key === 'ArrowLeft' ||
62
+ e.event.key === 'ArrowRight' ||
63
+ e.event.key === 'ArrowTop' ||
64
+ e.event.key === 'ArrowBottom')) {
65
+ const regexNumberOfSemicolon = /\d|:/;
66
+ if (!regexNumberOfSemicolon.test(e.event.key)) {
67
+ e.event.preventDefault();
68
+ console.log(`${e.event.key} is not valid`);
69
+ }
70
+ else {
71
+ this.isValueEmpty = false;
72
+ }
73
+ }
74
+ }
75
+ resolveInput(data) {
76
+ if (!this.isValueSetInternally) {
77
+ if (this.isValueEmpty || (data.value === '' && this.allowEmptyValue)) {
78
+ // this.inputValue = this.emptyValueTextthis
79
+ // this.applyOption(null);
80
+ this.setValue(null);
81
+ }
82
+ else {
83
+ const resolvedValue = this._durationInputResolver.resolve(data.value);
84
+ if (resolvedValue === null && this.allowEmptyValue) {
85
+ this.setValue(null);
86
+ }
87
+ else if (resolvedValue === null && !this.allowEmptyValue) {
88
+ this.setValue(resolvedValue);
89
+ }
90
+ else {
91
+ this.setValue(resolvedValue);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ applyOption(value) {
97
+ this.showOptions = false;
98
+ this.isValueSetInternally = false;
99
+ this.setValue(value);
100
+ }
101
+ setValue(value) {
102
+ if ((this.isValueEmpty && value != null) || (!this.isValueEmpty && this.value != value)) {
103
+ this.value = value;
104
+ this.valueChange.emit(this.value);
105
+ if (value === null) {
106
+ this.isValueEmpty = true;
107
+ this.isValueSetInternally = true;
108
+ this.inputValue = this.emptyValueText;
109
+ }
110
+ else if (typeof value === 'number') {
111
+ this.isValueEmpty = false;
112
+ this.isValueSetInternally = true;
113
+ this.inputValue = this.minutesToDurationString(this.value);
114
+ }
115
+ }
116
+ }
117
+ minutesToDurationString(minutes) {
118
+ const hours = Math.floor(minutes / 60);
119
+ const mins = minutes % 60;
120
+ return `${hours.toString().padStart(1, "0")}:${mins.toString().padStart(2, "0")}`;
121
+ }
122
+ }
123
+ SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: i1.DurationInputResolverService }], target: i0.ɵɵFactoryTarget.Component });
124
+ 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" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textbox"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>", styles: [".duration-box-container{height:calc(1.5em + .75rem + 2px)}.duration-box-container .options-dropdown-button{box-shadow:none!important;border:1px solid white;flex:0;padding-top:.3rem!important;padding-bottom:.3rem!important}.duration-box-container input{border:0;min-width:0}.duration-box-container input:focus{outline:none}::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"] }], 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 } });
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
126
+ type: Component,
127
+ args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>", styles: [".duration-box-container{height:calc(1.5em + .75rem + 2px)}.duration-box-container .options-dropdown-button{box-shadow:none!important;border:1px solid white;flex:0;padding-top:.3rem!important;padding-bottom:.3rem!important}.duration-box-container input{border:0;min-width:0}.duration-box-container input:focus{outline:none}::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"] }]
128
+ }], ctorParameters: function () { return [{ type: i1.DurationInputResolverService }]; }, propDecorators: { value: [{
129
+ type: Input
130
+ }], valueChange: [{
131
+ type: Output
132
+ }], allowEmptyValue: [{
133
+ type: Input
134
+ }], emptyValueText: [{
135
+ type: Input
136
+ }], options: [{
137
+ type: Input
138
+ }], width: [{
139
+ type: Input
140
+ }], textbox: [{
141
+ type: ViewChild,
142
+ args: ['textbox', { static: true }]
143
+ }] } });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tYm94L2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVNoSSxNQUFNLE9BQU8sdUJBQXVCO0lBdUNoQyxZQUNZLHNCQUFvRDtRQUFwRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQThCO1FBdEN2RCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVcsU0FBUyxDQUFDO1FBR25DLFVBQUssR0FBVyxPQUFPLENBQUM7UUFLMUIsZ0JBQVcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTlDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsMEJBQXFCLEdBQUk7WUFDNUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1NBQ0osQ0FBQTtRQUVNLHFCQUFnQixHQUFJO1lBQ3ZCLElBQUksRUFBRSxPQUFP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QUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3RGLENBQUM7O29IQXBJUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4V0NUcEMsb29EQXlEYTsyRkRoREEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLGtCQUFrQjttSEFNbkIsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWdDLE9BQU87c0JBQTVDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeFRleHRCb3hDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZSB9IGZyb20gJy4vZHVyYXRpb24taW5wdXQtcmVzb2x2ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2RzLWR1cmF0aW9uLWJveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgdmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIEBJbnB1dCgpIGFsbG93RW1wdHlWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZW1wdHlWYWx1ZVRleHQ6IHN0cmluZyA9ICdub3Qgc2V0JztcblxuICAgIEBJbnB1dCgpIG9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzEwcmVtJztcblxuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7c3RhdGljOiB0cnVlfSkgdGV4dGJveD86IER4VGV4dEJveENvbXBvbmVudDtcblxuXG4gICAgcHVibGljIGVsZW1lbnRVVUlEID0gJ3Nkcy1kYi0nICsgY3J5cHRvLnJhbmRvbVVVSUQoKTtcblxuICAgIHB1YmxpYyBpbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICBwdWJsaWMgb3B0aW9uc0Ryb3Bkb3duQnV0dG9uID0gIHtcbiAgICAgICAgaWNvbjogJ3NwaW5kb3duJyxcbiAgICAgICAgc3R5bGluZ01vZGU6ICd0ZXh0JyxcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVmFsdWVCdXR0b24gPSAge1xuICAgICAgICBpY29uOiAnY2xlYXInLFxuICAgICAgICBzdHlsaW5nTW9kZTogJ3RleHQnLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2R1cmF0aW9uSW5wdXRSZXNvbHZlcjogRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZVxuICAgICkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnMDowMCc7IC8vIFRPLURPOiByZXNvbHZlIHRoaXMgc2NlbmFyaW9cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLm1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKHRoaXMudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbihlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghKFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdFbnRlcicgfHwgXG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ051bXBhZEVudGVyJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnVGFiJyB8fFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dUb3AnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93Qm90dG9tJ1xuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJPZlNlbWljb2xvbiA9IC9cXGR8Oi87XG4gICAgICAgICAgICBpZiAoIXJlZ2V4TnVtYmVyT2ZTZW1pY29sb24udGVzdChlLmV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICBlLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7ZS5ldmVudC5rZXl9IGlzIG5vdCB2YWxpZGApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVJbnB1dChkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5KXtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSB8fCAoZGF0YS52YWx1ZSA9PT0gJycgJiYgdGhpcy5hbGxvd0VtcHR5VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dHRoaXNcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHRoaXMuX2R1cmF0aW9uSW5wdXRSZXNvbHZlci5yZXNvbHZlKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmIHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmICF0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUocmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5T3B0aW9uKHZhbHVlOiBudW1iZXIgfCBudWxsKXtcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpe1xuICAgICAgICBpZiAoICh0aGlzLmlzVmFsdWVFbXB0eSAmJiB2YWx1ZSAhPSBudWxsKSAgfHwgKCF0aGlzLmlzVmFsdWVFbXB0eSAmJiB0aGlzLnZhbHVlICE9IHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZW1wdHlWYWx1ZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMubWludXRlc1RvRHVyYXRpb25TdHJpbmcodGhpcy52YWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKG1pbnV0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzLzYwKTtcbiAgICAgICAgY29uc3QgbWlucyA9IG1pbnV0ZXMgJSA2MDtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMSwgXCIwXCIpfToke21pbnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9YDtcbiAgICB9XG59XG4iLCI8ZHgtdGV4dC1ib3hcbiAgICAjdGV4dGJveFxuICAgIFtpZF09XCJlbGVtZW50VVVJRFwiXG4gICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxuICAgIChvbktleURvd24pPVwiYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbigkZXZlbnQpXCJcbiAgICAob25WYWx1ZUNoYW5nZWQpPVwicmVzb2x2ZUlucHV0KCRldmVudClcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgPlxuICAgIDxkeGktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiYWxsb3dFbXB0eVZhbHVlXCJcbiAgICAgICAgbmFtZT1cImNsZWFyVmFsdWVcIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwiY2xlYXJWYWx1ZUJ1dHRvblwiXG4gICAgPjwvZHhpLWJ1dHRvbj5cbiAgICA8ZHhpLWJ1dHRvblxuICAgICAgICBcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgIG5hbWU9XCJvcHRpb25zRHJvcGRvd25cIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc0Ryb3Bkb3duQnV0dG9uXCJcbiAgICA+PC9keGktYnV0dG9uPlxuPC9keC10ZXh0LWJveD5cblxuXG48ZHgtcG9wb3ZlclxuICAgIHRhcmdldD1cIiN7e2VsZW1lbnRVVUlEfX1cIlxuICAgIFsodmlzaWJsZSldPVwic2hvd09wdGlvbnNcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW3dyYXBwZXJBdHRyXT1cInsgY2xhc3M6ICdzZHMtZHVyYXRpb25ib3gtb3B0aW9ucy1wb3BvdmVyJyB9XCJcbiAgICA+XG5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF0gPSBcImlzVmFsdWVFbXB0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24obnVsbClcIlxuICAgICAgICAgICAgPiB7eyBlbXB0eVZhbHVlVGV4dH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdID0gXCJvcHRpb24gPT09IHZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgICA+IHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLTEgbXktMSBteC0xIG92ZXJmbG93LWF2YXRhci1jb250YWluZXJcIiA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHBsLTFcIj5cbiAgICAgICAgICAgIHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG48L2R4LXBvcG92ZXI+Il19
@@ -0,0 +1,43 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SdsDurationBoxComponent } from './duration-box.component';
4
+ import { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';
5
+ import { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
6
+ import * as i0 from "@angular/core";
7
+ const components = [
8
+ SdsDurationBoxComponent
9
+ ];
10
+ export class SdsDurationBoxModule {
11
+ }
12
+ SdsDurationBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ SdsDurationBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, declarations: [SdsDurationBoxComponent], imports: [CommonModule,
14
+ SdsDurationPipeModule,
15
+ DxTextBoxModule,
16
+ DxPopoverModule,
17
+ DxScrollViewModule], exports: [SdsDurationBoxComponent] });
18
+ SdsDurationBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, imports: [[
19
+ CommonModule,
20
+ SdsDurationPipeModule,
21
+ DxTextBoxModule,
22
+ DxPopoverModule,
23
+ DxScrollViewModule,
24
+ ]] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [
29
+ SdsDurationBoxComponent
30
+ ],
31
+ imports: [
32
+ CommonModule,
33
+ SdsDurationPipeModule,
34
+ DxTextBoxModule,
35
+ DxPopoverModule,
36
+ DxScrollViewModule,
37
+ ],
38
+ exports: [
39
+ ...components
40
+ ]
41
+ }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7O0FBSXJHLE1BQU0sVUFBVSxHQUFHO0lBQ2YsdUJBQXVCO0NBQzFCLENBQUE7QUFtQkQsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQWY3Qix1QkFBdUIsYUFHdkIsWUFBWTtRQUVaLHFCQUFxQjtRQUVyQixlQUFlO1FBQ2YsZUFBZTtRQUNmLGtCQUFrQixhQWRsQix1QkFBdUI7a0hBb0JkLG9CQUFvQixZQWJ0QjtZQUNQLFlBQVk7WUFFWixxQkFBcUI7WUFFckIsZUFBZTtZQUNmLGVBQWU7WUFDZixrQkFBa0I7U0FDbkI7MkZBS1Usb0JBQW9CO2tCQWpCaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFFWixxQkFBcUI7d0JBRXJCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxHQUFHLFVBQVU7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNkc0R1cmF0aW9uQm94Q29tcG9uZW50IH0gZnJvbSAnLi9kdXJhdGlvbi1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IER4UG9wb3Zlck1vZHVsZSwgRHhTY3JvbGxWaWV3TW9kdWxlLCBEeFRleHRCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgU2RzRHVyYXRpb25QaXBlTW9kdWxlIH0gZnJvbSAnQHNwaWNhaW50ZXJuYXRpb25hbC9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlJztcblxuXG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcbl1cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcblxuICAgIFNkc0R1cmF0aW9uUGlwZU1vZHVsZSxcbiAgICBcbiAgICBEeFRleHRCb3hNb2R1bGUsXG4gICAgRHhQb3BvdmVyTW9kdWxlLFxuICAgIER4U2Nyb2xsVmlld01vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIC4uLmNvbXBvbmVudHNcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZHNEdXJhdGlvbkJveE1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DurationInputResolverService {
4
+ constructor() { }
5
+ resolve(input) {
6
+ if (!input || input.length === 0) {
7
+ return 0;
8
+ }
9
+ const inputSegments = input.split(':');
10
+ if (inputSegments.length > 2) {
11
+ //invalid input
12
+ return 0;
13
+ }
14
+ else if (inputSegments.length == 2) {
15
+ // we have hrs and minutes
16
+ const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');
17
+ const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');
18
+ const totalMins = (hrs * 60) + mins;
19
+ return totalMins;
20
+ }
21
+ else if (inputSegments.length == 1) {
22
+ // take last two digits as mins
23
+ const nonSeparated = inputSegments[0];
24
+ let totalMins = 0;
25
+ if (nonSeparated.length <= 2) {
26
+ totalMins = parseInt(nonSeparated);
27
+ }
28
+ else {
29
+ const lastIndex = nonSeparated.length - 2;
30
+ const part1 = nonSeparated.slice(0, lastIndex);
31
+ const part2 = nonSeparated.slice(lastIndex);
32
+ const hrs = parseInt(part1);
33
+ const mins = parseInt(part2);
34
+ totalMins = (hrs * 60) + mins;
35
+ }
36
+ return totalMins;
37
+ }
38
+ return 0;
39
+ }
40
+ }
41
+ DurationInputResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
42
+ DurationInputResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, providedIn: 'root' });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, decorators: [{
44
+ type: Injectable,
45
+ args: [{
46
+ providedIn: 'root',
47
+ }]
48
+ }], ctorParameters: function () { return []; } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24taW5wdXQtcmVzb2x2ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1pbnB1dC1yZXNvbHZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsZ0JBQWUsQ0FBQztJQUVULE9BQU8sQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixlQUFlO1lBQ2YsT0FBTyxDQUFDLENBQUM7U0FDWjthQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7WUFDakMsMEJBQTBCO1lBQzFCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFcEMsT0FBTyxTQUFTLENBQUM7U0FDcEI7YUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ2xDLCtCQUErQjtZQUMvQixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDckM7aUJBQU07Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQztZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDOzt5SEF0Q1EsNEJBQTRCOzZIQUE1Qiw0QkFBNEIsY0FGekIsTUFBTTsyRkFFVCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEdXJhdGlvbklucHV0UmVzb2x2ZXJTZXJ2aWNlIHtcbiAgICBcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZShpbnB1dDogc3RyaW5nKTogbnVtYmVyIHwgbnVsbHtcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXRTZWdtZW50cyA9IGlucHV0LnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmIChpbnB1dFNlZ21lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIC8vaW52YWxpZCBpbnB1dFxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRTZWdtZW50cy5sZW5ndGggPT0gMil7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGhycyBhbmQgbWludXRlc1xuICAgICAgICAgICAgY29uc3QgaHJzID0gcGFyc2VJbnQoaW5wdXRTZWdtZW50c1swXSA/IGlucHV0U2VnbWVudHNbMF0gOiAnMCcpO1xuICAgICAgICAgICAgY29uc3QgbWlucyA9IHBhcnNlSW50KGlucHV0U2VnbWVudHNbMV0gPyBpbnB1dFNlZ21lbnRzWzFdIDogJzAnKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTWlucyA9IChocnMgKiA2MCkgKyBtaW5zO1xuXG4gICAgICAgICAgICByZXR1cm4gdG90YWxNaW5zO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0U2VnbWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIC8vIHRha2UgbGFzdCB0d28gZGlnaXRzIGFzIG1pbnNcbiAgICAgICAgICAgIGNvbnN0IG5vblNlcGFyYXRlZCA9IGlucHV0U2VnbWVudHNbMF07XG5cbiAgICAgICAgICAgIGxldCB0b3RhbE1pbnMgPSAwO1xuICAgICAgICAgICAgaWYgKG5vblNlcGFyYXRlZC5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgICAgIHRvdGFsTWlucyA9IHBhcnNlSW50KG5vblNlcGFyYXRlZClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gbm9uU2VwYXJhdGVkLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydDEgPSBub25TZXBhcmF0ZWQuc2xpY2UoMCwgbGFzdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0MiA9IG5vblNlcGFyYXRlZC5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhycyA9IHBhcnNlSW50KHBhcnQxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5zID0gcGFyc2VJbnQocGFydDIpO1xuICAgICAgICAgICAgICAgIHRvdGFsTWlucyA9IChocnMgKiA2MCkgKyBtaW5zOyAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsTWlucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDsgICAgICAgIFxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './duration-box.module';
2
+ export * from './duration-box.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZHVyYXRpb24tYm94Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpY2FpbnRlcm5hdGlvbmFsLW5neC1zZHMtY29tcG9uZW50cy1zcmMtbGliLWR1cmF0aW9uLWJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9zcGljYWludGVybmF0aW9uYWwtbmd4LXNkcy1jb21wb25lbnRzLXNyYy1saWItZHVyYXRpb24tYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SdsDurationFormatPipe {
4
+ transform(value, emptyValueText = '') {
5
+ if (value === null) {
6
+ return emptyValueText;
7
+ }
8
+ else if (typeof value === 'number') {
9
+ const sign = Math.sign(value);
10
+ value = Math.abs(value);
11
+ const hours = Math.floor(value / 60);
12
+ const mins = value % 60;
13
+ return `${sign === -1 ? '-' : ''}${hours.toString().padStart(1, '0')}:${mins.toString().padStart(2, '0')}`;
14
+ }
15
+ return '';
16
+ }
17
+ }
18
+ SdsDurationFormatPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
19
+ SdsDurationFormatPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationFormatPipe, name: "sdsDurationFormat" });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationFormatPipe, decorators: [{
21
+ type: Pipe,
22
+ args: [{
23
+ name: 'sdsDurationFormat',
24
+ }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tZm9ybWF0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlL2R1cmF0aW9uLWZvcm1hdC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFNBQVMsQ0FBQyxLQUFvQixFQUFFLGlCQUF5QixFQUFFO1FBQ3ZELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNoQixPQUFPLGNBQWMsQ0FBQztTQUN6QjthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1NBQzlHO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDOztrSEFaUSxxQkFBcUI7Z0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQUhqQyxJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxtQkFBbUI7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ3Nkc0R1cmF0aW9uRm9ybWF0JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkc0R1cmF0aW9uRm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIgfCBudWxsLCBlbXB0eVZhbHVlVGV4dDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWx1ZVRleHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBNYXRoLnNpZ24odmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gNjApO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zID0gdmFsdWUgJSA2MDtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3NpZ24gPT09IC0xID8gJy0nIDogJyd9JHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDEsICcwJyl9OiR7bWlucy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SdsDurationFormatPipe } from './duration-format.pipe';
4
+ import * as i0 from "@angular/core";
5
+ export class SdsDurationPipeModule {
6
+ }
7
+ SdsDurationPipeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ SdsDurationPipeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationPipeModule, declarations: [SdsDurationFormatPipe], imports: [CommonModule], exports: [SdsDurationFormatPipe] });
9
+ SdsDurationPipeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationPipeModule, imports: [[CommonModule]] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationPipeModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [SdsDurationFormatPipe],
14
+ imports: [CommonModule],
15
+ exports: [SdsDurationFormatPipe],
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tcGlwZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlL2R1cmF0aW9uLXBpcGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU8vRCxNQUFNLE9BQU8scUJBQXFCOztrSEFBckIscUJBQXFCO21IQUFyQixxQkFBcUIsaUJBSmYscUJBQXFCLGFBQzFCLFlBQVksYUFDWixxQkFBcUI7bUhBRXRCLHFCQUFxQixZQUhyQixDQUFDLFlBQVksQ0FBQzsyRkFHZCxxQkFBcUI7a0JBTGpDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2RzRHVyYXRpb25Gb3JtYXRQaXBlIH0gZnJvbSAnLi9kdXJhdGlvbi1mb3JtYXQucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbU2RzRHVyYXRpb25Gb3JtYXRQaXBlXSxcclxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICAgZXhwb3J0czogW1Nkc0R1cmF0aW9uRm9ybWF0UGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZHNEdXJhdGlvblBpcGVNb2R1bGUge31cclxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './duration-pipe.module';
2
+ export * from './duration-format.pipe';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLXBpcGUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2R1cmF0aW9uLXBpcGUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kdXJhdGlvbi1mb3JtYXQucGlwZSc7Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpY2FpbnRlcm5hdGlvbmFsLW5neC1zZHMtY29tcG9uZW50cy1zcmMtbGliLWR1cmF0aW9uLXBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlL3NwaWNhaW50ZXJuYXRpb25hbC1uZ3gtc2RzLWNvbXBvbmVudHMtc3JjLWxpYi1kdXJhdGlvbi1waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=