ngx-sfc-common 0.0.0-watch

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 (219) hide show
  1. package/README.md +644 -0
  2. package/esm2020/lib/components/button/button-type.enum.mjs +9 -0
  3. package/esm2020/lib/components/button/button.component.mjs +44 -0
  4. package/esm2020/lib/components/checkmark/checkmark-type.enum.mjs +7 -0
  5. package/esm2020/lib/components/checkmark/checkmark.component.mjs +39 -0
  6. package/esm2020/lib/components/close/close.component.mjs +16 -0
  7. package/esm2020/lib/components/delimeter/delimeter.component.mjs +28 -0
  8. package/esm2020/lib/components/dots/dots.component.mjs +30 -0
  9. package/esm2020/lib/components/hamburger/default/hamburger.component.mjs +12 -0
  10. package/esm2020/lib/components/hamburger/hamburger-base.component.mjs +23 -0
  11. package/esm2020/lib/components/hamburger/menu/hamburger-menu.component.mjs +18 -0
  12. package/esm2020/lib/components/icon/icon.component.mjs +21 -0
  13. package/esm2020/lib/components/index.mjs +34 -0
  14. package/esm2020/lib/components/load-container/load-container.component.mjs +180 -0
  15. package/esm2020/lib/components/load-container/load-container.constants.mjs +5 -0
  16. package/esm2020/lib/components/load-container/load-container.enum.mjs +11 -0
  17. package/esm2020/lib/components/load-container/models/load-container.model.mjs +2 -0
  18. package/esm2020/lib/components/load-container/models/load-more-parameters.model.mjs +2 -0
  19. package/esm2020/lib/components/load-container/models/load-more-predicate-parameters.model.mjs +2 -0
  20. package/esm2020/lib/components/load-container/models/load-more.model.mjs +2 -0
  21. package/esm2020/lib/components/load-container/service/load-more.service.mjs +27 -0
  22. package/esm2020/lib/components/load-more-button/load-more-button.component.mjs +31 -0
  23. package/esm2020/lib/components/loader/bounce/bounce-loader.component.mjs +13 -0
  24. package/esm2020/lib/components/loader/circle/circle-loader-type.enum.mjs +6 -0
  25. package/esm2020/lib/components/loader/circle/circle-loader.component.mjs +20 -0
  26. package/esm2020/lib/components/loader/loader-base.component.mjs +51 -0
  27. package/esm2020/lib/components/loader/loader.constants.mjs +6 -0
  28. package/esm2020/lib/components/loader/loader.event.mjs +2 -0
  29. package/esm2020/lib/components/loader/service/loader.service.mjs +76 -0
  30. package/esm2020/lib/components/modal/directive/click/modal-open-on-click.directive.mjs +50 -0
  31. package/esm2020/lib/components/modal/directive/open/modal-open.directive.mjs +28 -0
  32. package/esm2020/lib/components/modal/footer/default/default-modal-footer.component.mjs +60 -0
  33. package/esm2020/lib/components/modal/footer/default/default-modal-footer.model.mjs +2 -0
  34. package/esm2020/lib/components/modal/header/default/default-modal-header.component.mjs +38 -0
  35. package/esm2020/lib/components/modal/header/default/default-modal-header.model.mjs +2 -0
  36. package/esm2020/lib/components/modal/modal-template.enum.mjs +7 -0
  37. package/esm2020/lib/components/modal/modal.component.mjs +103 -0
  38. package/esm2020/lib/components/modal/service/modal.event.mjs +2 -0
  39. package/esm2020/lib/components/modal/service/modal.service.mjs +31 -0
  40. package/esm2020/lib/components/pagination/models/pagination-view.model.mjs +2 -0
  41. package/esm2020/lib/components/pagination/pagination.component.mjs +104 -0
  42. package/esm2020/lib/components/pagination/pagination.constants.mjs +6 -0
  43. package/esm2020/lib/components/pagination/service/pagination.event.mjs +2 -0
  44. package/esm2020/lib/components/pagination/service/pagination.service.mjs +47 -0
  45. package/esm2020/lib/components/sorting/service/sorting.event.mjs +2 -0
  46. package/esm2020/lib/components/sorting/service/sorting.service.mjs +21 -0
  47. package/esm2020/lib/components/sorting/sorting.component.mjs +71 -0
  48. package/esm2020/lib/components/sorting/sorting.constants.mjs +6 -0
  49. package/esm2020/lib/components/sorting/sorting.model.mjs +2 -0
  50. package/esm2020/lib/components/template-content/template-content.component.mjs +31 -0
  51. package/esm2020/lib/components/toggle-switcher/toggle-switcher.component.mjs +38 -0
  52. package/esm2020/lib/components/toggle-switcher/toggle-switcher.model.mjs +2 -0
  53. package/esm2020/lib/components/tooltip/tooltip-type.enum.mjs +6 -0
  54. package/esm2020/lib/components/tooltip/tooltip.component.mjs +69 -0
  55. package/esm2020/lib/constants/common.constants.mjs +9 -0
  56. package/esm2020/lib/constants/date-time.constants.mjs +10 -0
  57. package/esm2020/lib/constants/file.constants.mjs +2 -0
  58. package/esm2020/lib/constants/index.mjs +4 -0
  59. package/esm2020/lib/constants/ui.constants.mjs +23 -0
  60. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +63 -0
  61. package/esm2020/lib/directives/click-outside/click-outside.event.mjs +2 -0
  62. package/esm2020/lib/directives/component-size/component-size.directive.mjs +59 -0
  63. package/esm2020/lib/directives/destroy-parent/destroy-parent.directive.mjs +27 -0
  64. package/esm2020/lib/directives/dom-changes/dom-changes.directive.mjs +32 -0
  65. package/esm2020/lib/directives/if/if.directive.mjs +26 -0
  66. package/esm2020/lib/directives/image-size/image-load.directive.mjs +41 -0
  67. package/esm2020/lib/directives/image-size/services/image-load.event.mjs +2 -0
  68. package/esm2020/lib/directives/image-size/services/image-load.service.mjs +22 -0
  69. package/esm2020/lib/directives/image-size/services/image-size.model.mjs +2 -0
  70. package/esm2020/lib/directives/index.mjs +14 -0
  71. package/esm2020/lib/directives/mouse-down/mouse-down.directive.mjs +37 -0
  72. package/esm2020/lib/directives/scroll-into-view/scroll-into-view.directive.mjs +39 -0
  73. package/esm2020/lib/directives/scroll-tracker/scroll-tracker.directive.mjs +39 -0
  74. package/esm2020/lib/directives/show-hide-element/show-hide-element.directive.mjs +42 -0
  75. package/esm2020/lib/directives/template-reference/template-reference.directive.mjs +23 -0
  76. package/esm2020/lib/directives/throw-element-on-hover/throw-element-on-hover.directive.mjs +38 -0
  77. package/esm2020/lib/enums/direction.enum.mjs +9 -0
  78. package/esm2020/lib/enums/index.mjs +9 -0
  79. package/esm2020/lib/enums/media.enum.mjs +13 -0
  80. package/esm2020/lib/enums/position.enum.mjs +12 -0
  81. package/esm2020/lib/enums/sequence.enum.mjs +9 -0
  82. package/esm2020/lib/enums/size.enum.mjs +11 -0
  83. package/esm2020/lib/enums/sorting-direction.enum.mjs +9 -0
  84. package/esm2020/lib/enums/theme.enum.mjs +9 -0
  85. package/esm2020/lib/enums/ui.enum.mjs +30 -0
  86. package/esm2020/lib/models/class.model.mjs +2 -0
  87. package/esm2020/lib/models/index.mjs +2 -0
  88. package/esm2020/lib/ngx-sfc-common.module.mjs +190 -0
  89. package/esm2020/lib/pipes/index.mjs +2 -0
  90. package/esm2020/lib/pipes/switch-multi-case/switch-multi-case.pipe.mjs +16 -0
  91. package/esm2020/lib/services/document-ref.service.mjs +71 -0
  92. package/esm2020/lib/services/index.mjs +4 -0
  93. package/esm2020/lib/services/resize.service.mjs +42 -0
  94. package/esm2020/lib/services/window-ref.service.mjs +70 -0
  95. package/esm2020/lib/utils/collections.utils.mjs +280 -0
  96. package/esm2020/lib/utils/common.utils.mjs +184 -0
  97. package/esm2020/lib/utils/date-time.utils.mjs +265 -0
  98. package/esm2020/lib/utils/file.utils.mjs +53 -0
  99. package/esm2020/lib/utils/index.mjs +7 -0
  100. package/esm2020/lib/utils/string.utils.mjs +31 -0
  101. package/esm2020/lib/utils/ui.utils.mjs +90 -0
  102. package/esm2020/ngx-sfc-common.mjs +5 -0
  103. package/esm2020/public-api.mjs +12 -0
  104. package/fesm2015/ngx-sfc-common.mjs +3097 -0
  105. package/fesm2015/ngx-sfc-common.mjs.map +1 -0
  106. package/fesm2020/ngx-sfc-common.mjs +3088 -0
  107. package/fesm2020/ngx-sfc-common.mjs.map +1 -0
  108. package/index.d.ts +5 -0
  109. package/lib/components/button/button-type.enum.d.ts +7 -0
  110. package/lib/components/button/button.component.d.ts +16 -0
  111. package/lib/components/checkmark/checkmark-type.enum.d.ts +5 -0
  112. package/lib/components/checkmark/checkmark.component.d.ts +11 -0
  113. package/lib/components/close/close.component.d.ts +6 -0
  114. package/lib/components/delimeter/delimeter.component.d.ts +9 -0
  115. package/lib/components/dots/dots.component.d.ts +9 -0
  116. package/lib/components/hamburger/default/hamburger.component.d.ts +6 -0
  117. package/lib/components/hamburger/hamburger-base.component.d.ts +7 -0
  118. package/lib/components/hamburger/menu/hamburger-menu.component.d.ts +7 -0
  119. package/lib/components/icon/icon.component.d.ts +9 -0
  120. package/lib/components/index.d.ts +44 -0
  121. package/lib/components/load-container/load-container.component.d.ts +50 -0
  122. package/lib/components/load-container/load-container.constants.d.ts +4 -0
  123. package/lib/components/load-container/load-container.enum.d.ts +8 -0
  124. package/lib/components/load-container/models/load-container.model.d.ts +14 -0
  125. package/lib/components/load-container/models/load-more-parameters.model.d.ts +5 -0
  126. package/lib/components/load-container/models/load-more-predicate-parameters.model.d.ts +3 -0
  127. package/lib/components/load-container/models/load-more.model.d.ts +5 -0
  128. package/lib/components/load-container/service/load-more.service.d.ts +12 -0
  129. package/lib/components/load-more-button/load-more-button.component.d.ts +12 -0
  130. package/lib/components/loader/bounce/bounce-loader.component.d.ts +6 -0
  131. package/lib/components/loader/circle/circle-loader-type.enum.d.ts +4 -0
  132. package/lib/components/loader/circle/circle-loader.component.d.ts +8 -0
  133. package/lib/components/loader/loader-base.component.d.ts +27 -0
  134. package/lib/components/loader/loader.constants.d.ts +5 -0
  135. package/lib/components/loader/loader.event.d.ts +4 -0
  136. package/lib/components/loader/service/loader.service.d.ts +33 -0
  137. package/lib/components/modal/directive/click/modal-open-on-click.directive.d.ts +17 -0
  138. package/lib/components/modal/directive/open/modal-open.directive.d.ts +13 -0
  139. package/lib/components/modal/footer/default/default-modal-footer.component.d.ts +19 -0
  140. package/lib/components/modal/footer/default/default-modal-footer.model.d.ts +8 -0
  141. package/lib/components/modal/header/default/default-modal-header.component.d.ts +16 -0
  142. package/lib/components/modal/header/default/default-modal-header.model.d.ts +6 -0
  143. package/lib/components/modal/modal-template.enum.d.ts +5 -0
  144. package/lib/components/modal/modal.component.d.ts +26 -0
  145. package/lib/components/modal/service/modal.event.d.ts +4 -0
  146. package/lib/components/modal/service/modal.service.d.ts +13 -0
  147. package/lib/components/pagination/models/pagination-view.model.d.ts +12 -0
  148. package/lib/components/pagination/pagination.component.d.ts +31 -0
  149. package/lib/components/pagination/pagination.constants.d.ts +5 -0
  150. package/lib/components/pagination/service/pagination.event.d.ts +6 -0
  151. package/lib/components/pagination/service/pagination.service.d.ts +25 -0
  152. package/lib/components/sorting/service/sorting.event.d.ts +5 -0
  153. package/lib/components/sorting/service/sorting.service.d.ts +9 -0
  154. package/lib/components/sorting/sorting.component.d.ts +22 -0
  155. package/lib/components/sorting/sorting.constants.d.ts +4 -0
  156. package/lib/components/sorting/sorting.model.d.ts +12 -0
  157. package/lib/components/template-content/template-content.component.d.ts +14 -0
  158. package/lib/components/toggle-switcher/toggle-switcher.component.d.ts +12 -0
  159. package/lib/components/toggle-switcher/toggle-switcher.model.d.ts +5 -0
  160. package/lib/components/tooltip/tooltip-type.enum.d.ts +4 -0
  161. package/lib/components/tooltip/tooltip.component.d.ts +22 -0
  162. package/lib/constants/common.constants.d.ts +8 -0
  163. package/lib/constants/date-time.constants.d.ts +9 -0
  164. package/lib/constants/file.constants.d.ts +1 -0
  165. package/lib/constants/index.d.ts +4 -0
  166. package/lib/constants/ui.constants.d.ts +22 -0
  167. package/lib/directives/click-outside/click-outside.directive.d.ts +23 -0
  168. package/lib/directives/click-outside/click-outside.event.d.ts +4 -0
  169. package/lib/directives/component-size/component-size.directive.d.ts +18 -0
  170. package/lib/directives/destroy-parent/destroy-parent.directive.d.ts +10 -0
  171. package/lib/directives/dom-changes/dom-changes.directive.d.ts +12 -0
  172. package/lib/directives/if/if.directive.d.ts +11 -0
  173. package/lib/directives/image-size/image-load.directive.d.ts +12 -0
  174. package/lib/directives/image-size/services/image-load.event.d.ts +5 -0
  175. package/lib/directives/image-size/services/image-load.service.d.ts +10 -0
  176. package/lib/directives/image-size/services/image-size.model.d.ts +4 -0
  177. package/lib/directives/index.d.ts +16 -0
  178. package/lib/directives/mouse-down/mouse-down.directive.d.ts +12 -0
  179. package/lib/directives/scroll-into-view/scroll-into-view.directive.d.ts +11 -0
  180. package/lib/directives/scroll-tracker/scroll-tracker.directive.d.ts +11 -0
  181. package/lib/directives/show-hide-element/show-hide-element.directive.d.ts +13 -0
  182. package/lib/directives/template-reference/template-reference.directive.d.ts +10 -0
  183. package/lib/directives/throw-element-on-hover/throw-element-on-hover.directive.d.ts +13 -0
  184. package/lib/enums/direction.enum.d.ts +7 -0
  185. package/lib/enums/index.d.ts +8 -0
  186. package/lib/enums/media.enum.d.ts +11 -0
  187. package/lib/enums/position.enum.d.ts +10 -0
  188. package/lib/enums/sequence.enum.d.ts +7 -0
  189. package/lib/enums/size.enum.d.ts +9 -0
  190. package/lib/enums/sorting-direction.enum.d.ts +7 -0
  191. package/lib/enums/theme.enum.d.ts +7 -0
  192. package/lib/enums/ui.enum.d.ts +27 -0
  193. package/lib/models/class.model.d.ts +3 -0
  194. package/lib/models/index.d.ts +1 -0
  195. package/lib/ngx-sfc-common.module.d.ts +43 -0
  196. package/lib/pipes/index.d.ts +1 -0
  197. package/lib/pipes/switch-multi-case/switch-multi-case.pipe.d.ts +7 -0
  198. package/lib/services/document-ref.service.d.ts +43 -0
  199. package/lib/services/index.d.ts +3 -0
  200. package/lib/services/resize.service.d.ts +32 -0
  201. package/lib/services/window-ref.service.d.ts +43 -0
  202. package/lib/utils/collections.utils.d.ts +156 -0
  203. package/lib/utils/common.utils.d.ts +78 -0
  204. package/lib/utils/date-time.utils.d.ts +164 -0
  205. package/lib/utils/file.utils.d.ts +25 -0
  206. package/lib/utils/index.d.ts +6 -0
  207. package/lib/utils/string.utils.d.ts +19 -0
  208. package/lib/utils/ui.utils.d.ts +58 -0
  209. package/package.json +56 -0
  210. package/public-api.d.ts +8 -0
  211. package/styles/_colors.scss +48 -0
  212. package/styles/_index.scss +4 -0
  213. package/styles/_mixins-delimeter.scss +21 -0
  214. package/styles/_mixins-scroll.scss +38 -0
  215. package/styles/_mixins.scss +46 -0
  216. package/styles/_variables.scss +12 -0
  217. package/styles/themes/_dark.scss +17 -0
  218. package/styles/themes/_default.scss +18 -0
  219. package/styles/themes/_yellow.scss +3 -0
@@ -0,0 +1,3088 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, PLATFORM_ID, EventEmitter, Directive, Inject, Input, Output, HostListener, Pipe, Component, HostBinding, ContentChildren, ViewChild, NgModule } from '@angular/core';
3
+ import * as i1$1 from '@angular/common';
4
+ import { isPlatformBrowser, CommonModule } from '@angular/common';
5
+ import * as i3 from '@fortawesome/angular-fontawesome';
6
+ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
7
+ import { Subject, fromEvent, Observable, distinctUntilChanged, startWith, BehaviorSubject, filter, map, EMPTY, combineLatest, tap, switchMap, of } from 'rxjs';
8
+ import * as i1 from '@angular/platform-browser';
9
+ import { trigger, state, style, transition, group, query, animate, animateChild } from '@angular/animations';
10
+ import { faTimes, faWindowRestore, faCheck, faChevronLeft, faChevronRight, faChevronUp, faChevronDown, faChevronCircleDown } from '@fortawesome/free-solid-svg-icons';
11
+
12
+ /**
13
+ * Component sizes
14
+ */
15
+ var ComponentSize;
16
+ (function (ComponentSize) {
17
+ ComponentSize["Small"] = "small";
18
+ ComponentSize["Medium"] = "medium";
19
+ ComponentSize["Large"] = "large";
20
+ ComponentSize["Custom"] = "custom";
21
+ })(ComponentSize || (ComponentSize = {}));
22
+
23
+ /**
24
+ * Direction types
25
+ */
26
+ var Direction;
27
+ (function (Direction) {
28
+ Direction["Horizontal"] = "horizontal";
29
+ Direction["Vertical"] = "vertical";
30
+ })(Direction || (Direction = {}));
31
+
32
+ /**
33
+ * CSS Media limits
34
+ */
35
+ var MediaLimits;
36
+ (function (MediaLimits) {
37
+ MediaLimits[MediaLimits["LaptopLarge"] = 1440] = "LaptopLarge";
38
+ MediaLimits[MediaLimits["Laptop"] = 1024] = "Laptop";
39
+ MediaLimits[MediaLimits["Tablet"] = 768] = "Tablet";
40
+ MediaLimits[MediaLimits["MobileLarge"] = 425] = "MobileLarge";
41
+ MediaLimits[MediaLimits["Mobile"] = 375] = "Mobile";
42
+ MediaLimits[MediaLimits["MobileSmall"] = 320] = "MobileSmall";
43
+ })(MediaLimits || (MediaLimits = {}));
44
+
45
+ /**
46
+ * Position directions
47
+ */
48
+ var Position;
49
+ (function (Position) {
50
+ Position["Top"] = "top";
51
+ Position["Bottom"] = "bottom";
52
+ Position["Left"] = "left";
53
+ Position["Right"] = "right";
54
+ Position["Center"] = "center";
55
+ })(Position || (Position = {}));
56
+
57
+ /**
58
+ * Type of sorting
59
+ */
60
+ var SortingDirection;
61
+ (function (SortingDirection) {
62
+ SortingDirection["Ascending"] = "ascending";
63
+ SortingDirection["Descending"] = "descending";
64
+ })(SortingDirection || (SortingDirection = {}));
65
+
66
+ /**
67
+ * Theme types
68
+ */
69
+ var Theme;
70
+ (function (Theme) {
71
+ Theme["Default"] = "sfc-default-theme";
72
+ Theme["Dark"] = "sfc-dark-theme";
73
+ })(Theme || (Theme = {}));
74
+
75
+ /**
76
+ * UI classes
77
+ */
78
+ var UIClass;
79
+ (function (UIClass) {
80
+ UIClass["Active"] = "active";
81
+ UIClass["Valid"] = "valid";
82
+ UIClass["Invalid"] = "invalid";
83
+ UIClass["InnerInvalid"] = "inner-invalid";
84
+ UIClass["Enabled"] = "enabled";
85
+ UIClass["Disabled"] = "disabled";
86
+ UIClass["Selected"] = "selected";
87
+ UIClass["Empty"] = "empty";
88
+ UIClass["Focus"] = "focus";
89
+ UIClass["Open"] = "open";
90
+ UIClass["Loading"] = "loading";
91
+ UIClass["Removed"] = "removed";
92
+ UIClass["Visible"] = "visible";
93
+ UIClass["Hidden"] = "hidden";
94
+ UIClass["Animated"] = "animated";
95
+ UIClass["Expanded"] = "expanded";
96
+ UIClass["Fixed"] = "fixed";
97
+ UIClass["Bordered"] = "bordered";
98
+ UIClass["Even"] = "even";
99
+ UIClass["Pointer"] = "pointer";
100
+ UIClass["Default"] = "default";
101
+ UIClass["Initialization"] = "initialization";
102
+ })(UIClass || (UIClass = {}));
103
+ ;
104
+
105
+ /**
106
+ * Sequence types
107
+ */
108
+ var Sequence;
109
+ (function (Sequence) {
110
+ Sequence["Previous"] = "previous";
111
+ Sequence["Next"] = "next";
112
+ })(Sequence || (Sequence = {}));
113
+
114
+ /**
115
+ * Create a new injection token for injecting the Document into a component.
116
+ */
117
+ const DOCUMENT = new InjectionToken('DocumentToken');
118
+ /**
119
+ * Define abstract class for obtaining reference to the global Document object.
120
+ */
121
+ class DocumentRef {
122
+ get nativeDocument() {
123
+ throw new Error('Not implemented.');
124
+ }
125
+ }
126
+ /**
127
+ * Define class that implements the abstract class and returns the native Document object.
128
+ */
129
+ class BrowserDocumentRef extends DocumentRef {
130
+ constructor() {
131
+ super();
132
+ }
133
+ /**
134
+ * @returns Document object
135
+ */
136
+ get nativeDocument() {
137
+ return document;
138
+ }
139
+ }
140
+ BrowserDocumentRef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserDocumentRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
141
+ BrowserDocumentRef.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserDocumentRef });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserDocumentRef, decorators: [{
143
+ type: Injectable
144
+ }], ctorParameters: function () { return []; } });
145
+ /**
146
+ * Create an factory function that returns the native Document object.
147
+ * @param browserDocumentRef Native Document object
148
+ * @param platformId id of platform
149
+ * @returns type of platform of empty object
150
+ */
151
+ function documentFactory(browserDocumentRef, platformId) {
152
+ if (isPlatformBrowser(platformId)) {
153
+ return browserDocumentRef.nativeDocument;
154
+ }
155
+ const doc = {
156
+ hidden: false,
157
+ visibilityState: UIClass.Visible
158
+ };
159
+ return doc;
160
+ }
161
+ /**
162
+ * Create a injectable provider for the DocumentRef token that uses the BrowserDocumentRef class.
163
+ */
164
+ const browserDocumentProvider = {
165
+ provide: DocumentRef,
166
+ useClass: BrowserDocumentRef
167
+ };
168
+ /**
169
+ * Create an injectable provider that uses the DocumentFactory function for returning the native Document object.
170
+ */
171
+ const documentProvider = {
172
+ provide: DOCUMENT,
173
+ useFactory: documentFactory,
174
+ deps: [DocumentRef, PLATFORM_ID]
175
+ };
176
+ /**
177
+ * Create an array of providers.
178
+ */
179
+ const DOCUMENT_PROVIDERS = [browserDocumentProvider, documentProvider];
180
+
181
+ /**
182
+ * Create a new injection token for injecting the window into a component.
183
+ */
184
+ const WINDOW = new InjectionToken('WindowToken');
185
+ /**
186
+ * Define abstract class for obtaining reference to the global window object.
187
+ */
188
+ class WindowRef {
189
+ get nativeWindow() {
190
+ throw new Error('Not implemented.');
191
+ }
192
+ }
193
+ /**
194
+ * Define class that implements the abstract class and returns the native window object.
195
+ */
196
+ class BrowserWindowRef extends WindowRef {
197
+ constructor() {
198
+ super();
199
+ }
200
+ /**
201
+ * @returns window object
202
+ */
203
+ get nativeWindow() {
204
+ return window;
205
+ }
206
+ }
207
+ BrowserWindowRef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserWindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
208
+ BrowserWindowRef.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserWindowRef });
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BrowserWindowRef, decorators: [{
210
+ type: Injectable
211
+ }], ctorParameters: function () { return []; } });
212
+ /**
213
+ * Create an factory function that returns the native window object.
214
+ * @param browserWindowRef Native window object
215
+ * @param platformId id of platform
216
+ * @returns type of platform of empty object
217
+ */
218
+ function windowFactory(browserWindowRef, platformId) {
219
+ if (isPlatformBrowser(platformId)) {
220
+ return browserWindowRef.nativeWindow;
221
+ }
222
+ const obj = {
223
+ setTimeout: (func, time) => { },
224
+ clearTimeout: (a) => { }
225
+ };
226
+ return obj;
227
+ }
228
+ /**
229
+ * Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class.
230
+ */
231
+ const browserWindowProvider = {
232
+ provide: WindowRef,
233
+ useClass: BrowserWindowRef
234
+ };
235
+ /**
236
+ * Create an injectable provider that uses the windowFactory function for returning the native window object.
237
+ */
238
+ const windowProvider = {
239
+ provide: WINDOW,
240
+ useFactory: windowFactory,
241
+ deps: [WindowRef, PLATFORM_ID]
242
+ };
243
+ /**
244
+ * Create an array of providers.
245
+ */
246
+ const WINDOW_PROVIDERS = [browserWindowProvider, windowProvider];
247
+
248
+ class ResizeService {
249
+ constructor(eventManager) {
250
+ this.eventManager = eventManager;
251
+ this.resizeSubject = new Subject();
252
+ this.eventManager.addGlobalEventListener('window', 'resize', this.onResize.bind(this));
253
+ this.eventManager.addGlobalEventListener('window', 'onload', this.onLoaded.bind(this));
254
+ }
255
+ /**
256
+ * Makes resizeSubject become Observable
257
+ * @returns Observable of resizeSubject
258
+ */
259
+ get onResize$() {
260
+ return this.resizeSubject.asObservable();
261
+ }
262
+ /**
263
+ * Handler of 'resize' event. Passes data throw resizeSubject
264
+ * @param event Event Object of 'resize' event
265
+ */
266
+ onResize(event) {
267
+ this.resizeSubject.next(event.target);
268
+ }
269
+ /**
270
+ * Handler of 'onload' event. Defines the width of window
271
+ * @param event Event Object of 'onload' event
272
+ */
273
+ onLoaded(event) {
274
+ this.windowWidth = event.target;
275
+ }
276
+ }
277
+ ResizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResizeService, deps: [{ token: i1.EventManager }], target: i0.ɵɵFactoryTarget.Injectable });
278
+ ResizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResizeService, providedIn: 'root' });
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ResizeService, decorators: [{
280
+ type: Injectable,
281
+ args: [{
282
+ providedIn: 'root'
283
+ }]
284
+ }], ctorParameters: function () { return [{ type: i1.EventManager }]; } });
285
+
286
+ class ClickOutsideDirective {
287
+ constructor(elementRef, document) {
288
+ this.elementRef = elementRef;
289
+ this.document = document;
290
+ /**
291
+ * Toggler for checking ouside click event
292
+ */
293
+ this.listening = false;
294
+ /**
295
+ * Emitter for click event
296
+ */
297
+ this.action = new EventEmitter();
298
+ }
299
+ ngAfterViewInit() {
300
+ this._clickSubscription = fromEvent(this.document, 'click')
301
+ .subscribe(event => this.onClick(event));
302
+ }
303
+ ngOnDestroy() {
304
+ this._clickSubscription?.unsubscribe();
305
+ }
306
+ onClick(event) {
307
+ if (event instanceof MouseEvent && this.listening) {
308
+ const clickOutsideEvent = {
309
+ target: event.target,
310
+ value: !this.isDescendant(this.elementRef.nativeElement, event.target)
311
+ };
312
+ this.action.emit(clickOutsideEvent);
313
+ }
314
+ }
315
+ isDescendant(parent, child) {
316
+ let node = child;
317
+ while (node !== null) {
318
+ if (node === parent) {
319
+ return true;
320
+ }
321
+ else {
322
+ node = node.parentNode;
323
+ }
324
+ }
325
+ return false;
326
+ }
327
+ }
328
+ ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
329
+ ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ClickOutsideDirective, selector: "[sfcClickOutside]", inputs: { listening: ["sfcClickOutside", "listening"] }, outputs: { action: "action" }, ngImport: i0 });
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ClickOutsideDirective, decorators: [{
331
+ type: Directive,
332
+ args: [{
333
+ selector: '[sfcClickOutside]'
334
+ }]
335
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Document, decorators: [{
336
+ type: Inject,
337
+ args: [DOCUMENT]
338
+ }] }]; }, propDecorators: { listening: [{
339
+ type: Input,
340
+ args: ['sfcClickOutside']
341
+ }], action: [{
342
+ type: Output
343
+ }] } });
344
+
345
+ class CommonConstants {
346
+ }
347
+ CommonConstants.NOT_FOUND_INDEX = -1;
348
+ CommonConstants.EMPTY_STRING = '';
349
+ CommonConstants.MOUSE_BUTTON_LEFT = 0;
350
+ CommonConstants.FULL_PERCENTAGE = 100;
351
+ CommonConstants.COMMON_TEXT_DELIMETER = '/';
352
+ CommonConstants.PERCENTAGE_SYMBOL = '%';
353
+
354
+ class DateTimeConstants {
355
+ }
356
+ DateTimeConstants.DAYS_IN_WEEK = 7;
357
+ DateTimeConstants.HOURS_IN_SHORT_TIME = 12;
358
+ DateTimeConstants.HOURS_IN_TIME = 24;
359
+ DateTimeConstants.MIDNIGHT_HOUR = 0;
360
+ DateTimeConstants.MINUTES_IN_HOUR = 60;
361
+ DateTimeConstants.DAYS_OF_WEEK = ["S", "M", "T", "W", "T", "F", "S"];
362
+ DateTimeConstants.DAYS_OF_WEEK_3 = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
363
+
364
+ class UIConstants {
365
+ }
366
+ UIConstants.CSS_PIXELS = 'px';
367
+ UIConstants.CSS_PERCENTAGE = '%';
368
+ UIConstants.CSS_DEGREES = 'deg';
369
+ UIConstants.CSS_EM = 'em';
370
+ UIConstants.CSS_CH = 'ch';
371
+ UIConstants.CSS_INITIAL = 'initial';
372
+ UIConstants.CSS_INHERIT = 'inherit';
373
+ UIConstants.CSS_NONE = 'none';
374
+ UIConstants.CSS_VISIBILITY_VISIBLE = 'visible';
375
+ UIConstants.CSS_VISIBILITY_HIDDEN = 'hidden';
376
+ UIConstants.CSS_WIDTH = 'width';
377
+ UIConstants.CSS_LEFT = 'left';
378
+ UIConstants.CSS_RIGHT = 'right';
379
+ UIConstants.CSS_START = 'start';
380
+ UIConstants.CSS_END = 'end';
381
+ UIConstants.CSS_CENTER = 'center';
382
+ UIConstants.CSS_CLASS_FIXED = 'fixed';
383
+ UIConstants.CSS_CLASS_BACKGROUND = 'background';
384
+ UIConstants.CSS_CLASS_TOP = 'top';
385
+ UIConstants.RGB_OPACITY_PLACEHOLDER = '{opacity}';
386
+
387
+ class ShowHideElementDirective {
388
+ constructor(el) {
389
+ this.el = el;
390
+ this.SHOW_HIDE_TRANSITION_DELAY_DEFAULT = 0.5;
391
+ this.style.transition = this.getTransitionValue();
392
+ }
393
+ set showHideElement(show) {
394
+ this.style.visibility = show
395
+ ? UIConstants.CSS_VISIBILITY_VISIBLE
396
+ : UIConstants.CSS_VISIBILITY_HIDDEN;
397
+ this.style.opacity = show ? 1 : 0;
398
+ }
399
+ set delay(value) {
400
+ this.style.transition = this.getTransitionValue(value);
401
+ }
402
+ ;
403
+ get style() {
404
+ return this.el.nativeElement.style;
405
+ }
406
+ getTransitionValue(delay = this.SHOW_HIDE_TRANSITION_DELAY_DEFAULT) {
407
+ return `visibility ${delay}s,
408
+ opacity ${delay}s
409
+ linear`;
410
+ }
411
+ }
412
+ ShowHideElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ShowHideElementDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
413
+ ShowHideElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ShowHideElementDirective, selector: "[sfcShowHideElement]", inputs: { showHideElement: ["sfcShowHideElement", "showHideElement"], delay: "delay" }, ngImport: i0 });
414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ShowHideElementDirective, decorators: [{
415
+ type: Directive,
416
+ args: [{
417
+ selector: '[sfcShowHideElement]'
418
+ }]
419
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { showHideElement: [{
420
+ type: Input,
421
+ args: ['sfcShowHideElement']
422
+ }], delay: [{
423
+ type: Input
424
+ }] } });
425
+
426
+ class IfDirective {
427
+ constructor(el) {
428
+ this.el = el;
429
+ this.display = this.style.display;
430
+ }
431
+ set sfcIf(show) {
432
+ this.style.display = show
433
+ ? this.display || UIConstants.CSS_INITIAL
434
+ : UIConstants.CSS_NONE;
435
+ }
436
+ get style() { return this.el.nativeElement.style; }
437
+ }
438
+ IfDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IfDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
439
+ IfDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: IfDirective, selector: "[sfcIf]", inputs: { sfcIf: "sfcIf" }, ngImport: i0 });
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IfDirective, decorators: [{
441
+ type: Directive,
442
+ args: [{
443
+ selector: '[sfcIf]'
444
+ }]
445
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { sfcIf: [{
446
+ type: Input
447
+ }] } });
448
+
449
+ /**
450
+ * Set minutes for date
451
+ * @param date Date value
452
+ * @param minute Minute value
453
+ * @returns Date with minute value
454
+ */
455
+ function setMinutes(date, minute) {
456
+ const result = new Date(date);
457
+ result.setMinutes(minute);
458
+ return result;
459
+ }
460
+ /**
461
+ * Set hours for date
462
+ * @param date Date value
463
+ * @param hour Hour value
464
+ * @returns Date with hour value
465
+ */
466
+ function setHours(date, hour) {
467
+ const result = new Date(date);
468
+ result.setHours(hour);
469
+ return result;
470
+ }
471
+ /**
472
+ * Set day for date value
473
+ * @param date Date value
474
+ * @param dayNumber Day number
475
+ * @returns Date with day number
476
+ */
477
+ function setDay(date, dayNumber) {
478
+ const nextDate = new Date(date);
479
+ nextDate.setDate(dayNumber);
480
+ return nextDate;
481
+ }
482
+ /**
483
+ * Set year for date
484
+ * @param date Date value
485
+ * @param year Year value
486
+ * @returns Date with year value
487
+ */
488
+ function setYear(date, year) {
489
+ const result = new Date(date);
490
+ result.setFullYear(year);
491
+ return result;
492
+ }
493
+ /**
494
+ * Set seconds for date
495
+ * @param date Date value
496
+ * @param value Seconds value
497
+ * @returns Date with minute value
498
+ */
499
+ function setSeconds(date, value) {
500
+ const result = new Date(date);
501
+ result.setSeconds(value);
502
+ return result;
503
+ }
504
+ /**
505
+ * Set milliseconds for date
506
+ * @param date Date value
507
+ * @param value Milliseconds value
508
+ * @returns Date with minute value
509
+ */
510
+ function setMilliseconds(date, value) {
511
+ const result = new Date(date);
512
+ result.setMilliseconds(value);
513
+ return result;
514
+ }
515
+ /**
516
+ * Set 0 for seconds and milliseconds of date
517
+ * @param date Date value
518
+ * @returns Date with minute value
519
+ */
520
+ function setDefaultSecondsAndMiliseconds(date) {
521
+ const result = new Date(date);
522
+ result.setSeconds(0);
523
+ result.setMilliseconds(0);
524
+ return result;
525
+ }
526
+ /**
527
+ * Get next date
528
+ * @param date Date value
529
+ * @returns Next date
530
+ */
531
+ function getNextDate(date) {
532
+ const nextDate = new Date(date);
533
+ nextDate.setDate(date.getDate() + 1);
534
+ return nextDate;
535
+ }
536
+ /**
537
+ * Get next month as date
538
+ * @param date Date value
539
+ * @returns Next month as date
540
+ */
541
+ function getNextMonth(date) {
542
+ const nextMonth = new Date(date);
543
+ nextMonth.setMonth(date.getMonth() + 1);
544
+ return nextMonth;
545
+ }
546
+ /**
547
+ * Get previous month as date
548
+ * @param date Date value
549
+ * @returns Previous month as date
550
+ */
551
+ function getPreviousMonth(date) {
552
+ const prevMonth = new Date(date);
553
+ prevMonth.setMonth(date.getMonth() - 1);
554
+ return prevMonth;
555
+ }
556
+ /**
557
+ * Get next year as date
558
+ * @param date Date value
559
+ * @returns Next year as date
560
+ */
561
+ function getNextYear(date) {
562
+ const nextYear = new Date(date);
563
+ nextYear.setFullYear(date.getFullYear() + 1);
564
+ return nextYear;
565
+ }
566
+ /**
567
+ * Get previous year as date
568
+ * @param date Date value
569
+ * @returns Previous year as date
570
+ */
571
+ function getPreviousYear(date) {
572
+ const prevYear = new Date(date);
573
+ prevYear.setFullYear(date.getFullYear() - 1);
574
+ return prevYear;
575
+ }
576
+ /**
577
+ * Return first day of month as date from date value
578
+ * @param date Date value
579
+ * @returns First day of month as date
580
+ */
581
+ function getFirstDayOfMonth(date) {
582
+ if (isDefined(date) && date instanceof Date) {
583
+ const year = date.getFullYear(), month = date.getMonth();
584
+ return new Date(year, month, 1);
585
+ }
586
+ return date;
587
+ }
588
+ /**
589
+ * Return last day of month as date from date value
590
+ * @param date Date value
591
+ * @returns Last day of month as date
592
+ */
593
+ function getLastDayOfMonth(date) {
594
+ if (isDefined(date) && date instanceof Date) {
595
+ const year = date.getFullYear(), month = date.getMonth();
596
+ return new Date(year, month + 1, 0);
597
+ }
598
+ return date;
599
+ }
600
+ /**
601
+ * Return first day of year as date from date value
602
+ * @param date Date value
603
+ * @returns First day of year as date
604
+ */
605
+ function getFirstDayOfYear(date) {
606
+ if (isDefined(date) && date instanceof Date) {
607
+ return new Date(date.getFullYear(), 0, 1);
608
+ }
609
+ return date;
610
+ }
611
+ /**
612
+ * Return last day of year as date from date value
613
+ * @param date Date value
614
+ * @returns Last day of year as date
615
+ */
616
+ function getLastDayOfYear(date) {
617
+ if (isDefined(date) && date instanceof Date) {
618
+ return new Date(date.getFullYear(), 12, 0);
619
+ }
620
+ return date;
621
+ }
622
+ /**
623
+ * Return first day of month as date
624
+ * @param year Year value
625
+ * @param month Month value
626
+ * @returns First day of month
627
+ */
628
+ function getFirstDayOfMonthByYearAndMonth(year, month) {
629
+ return new Date(year, month, 1);
630
+ }
631
+ /**
632
+ * Return last day of month as date
633
+ * @param year Year value
634
+ * @param month Month value
635
+ * @returns Last day of month
636
+ */
637
+ function getLastDayOfMonthByYearAndMonth(year, month) {
638
+ return new Date(year, month + 1, 0);
639
+ }
640
+ /**
641
+ * Return week number in month from date value
642
+ * @param date Date value
643
+ * @returns Week number
644
+ */
645
+ function getWeeksNumberInMonth(date) {
646
+ const firstOfMonth = getFirstDayOfMonth(date), lastOfMonth = getLastDayOfMonth(date), used = firstOfMonth.getDay() + lastOfMonth.getDate();
647
+ return Math.ceil(used / DateTimeConstants.DAYS_IN_WEEK);
648
+ }
649
+ /**
650
+ * Return true if first and second date are equal
651
+ * @param date1 First date value
652
+ * @param date2 Second date value
653
+ * @returns True if first and second date are equal
654
+ */
655
+ function isEqualDates(date1, date2) {
656
+ const date1Value = new Date(date1), date2Value = new Date(date2);
657
+ date1Value.setHours(0, 0, 0, 0);
658
+ date2Value.setHours(0, 0, 0, 0);
659
+ return date1Value.getTime() === date2Value.getTime();
660
+ }
661
+ /**
662
+ * Return true if first and second datetime are equal
663
+ * @param date1 First datetime value
664
+ * @param date2 Second datetime value
665
+ * @returns True if first and second datetime are equal
666
+ */
667
+ function isEqualDateTimes(date1, date2) {
668
+ const date1Value = new Date(date1), date2Value = new Date(date2);
669
+ return date1Value.getTime() === date2Value.getTime();
670
+ }
671
+ /**
672
+ * Return true if first date greater than second date
673
+ * @param date1 First date value
674
+ * @param date2 Second date value
675
+ * @returns True if first date greater than second date
676
+ */
677
+ function isDateGreat(date1, date2) {
678
+ return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate())
679
+ > new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
680
+ }
681
+ /**
682
+ * Return true if first date greater or equal to second date
683
+ * @param date1 First date value
684
+ * @param date2 Second date value
685
+ * @returns True if first date greater or equal to second date
686
+ */
687
+ function isDateGreatOrEqual(date1, date2) {
688
+ return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate())
689
+ >= new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
690
+ }
691
+ /**
692
+ * Return true if first date time greater than second date time
693
+ * @param date1 First date time value
694
+ * @param date2 Second date time value
695
+ * @returns True if first date time greater than second date time
696
+ */
697
+ function isDateTimeGreat(date1, date2) {
698
+ return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate(), date1.getHours(), date1.getMinutes())
699
+ > new Date(date2.getFullYear(), date2.getMonth(), date2.getDate(), date2.getHours(), date2.getMinutes());
700
+ }
701
+ /**
702
+ * Return true if first date time greater or equal to second date time
703
+ * @param date1 First date time value
704
+ * @param date2 Second date time value
705
+ * @returns True if first date time greater or equal to second date time
706
+ */
707
+ function isDateTimeGreatOrEqual(date1, date2) {
708
+ return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate(), date1.getHours(), date1.getMinutes())
709
+ >= new Date(date2.getFullYear(), date2.getMonth(), date2.getDate(), date2.getHours(), date2.getMinutes());
710
+ }
711
+
712
+ /**
713
+ * Return true if value defined
714
+ * @param value Value to check
715
+ * @returns True if value is not null and defined
716
+ */
717
+ function isDefined(value) {
718
+ return value !== undefined && value !== null;
719
+ }
720
+ /**
721
+ * Return true if value is object
722
+ * @param value Value to check
723
+ * @returns True if value is object
724
+ */
725
+ function isObject(value) {
726
+ return (isDefined(value) && typeof value === 'object'
727
+ && !Array.isArray(value)
728
+ && !(value instanceof Date || value instanceof File));
729
+ }
730
+ /**
731
+ * Return true if data is observable
732
+ * @param data Object to check
733
+ * @returns True if data is observable
734
+ */
735
+ function isAsyncData(data) {
736
+ return data instanceof Observable;
737
+ }
738
+ /**
739
+ * Return extended object with new property
740
+ * @param obj Object to extend by property
741
+ * @param property New property name
742
+ * @param value Value for new property
743
+ * @returns Extended object with new property
744
+ */
745
+ function addPropertyToObject(obj, property, value = null) {
746
+ if (isDefined(property) && !obj.hasOwnProperty(property)) {
747
+ let newObj = {};
748
+ newObj[property] = value;
749
+ obj = { ...obj, ...newObj };
750
+ }
751
+ return obj;
752
+ }
753
+ /**
754
+ * Remove property from object
755
+ * @param obj Object for removing property
756
+ * @param property Property name to remove
757
+ */
758
+ function removePropertyFromObject(obj, property) {
759
+ if (obj.hasOwnProperty(property)) {
760
+ delete obj[property];
761
+ }
762
+ }
763
+ /**
764
+ * Deep merge object with others
765
+ * @param target Object to merge
766
+ * @param sources
767
+ */
768
+ /**
769
+ * Deep merge object with others
770
+ * @param target Object to merge
771
+ * @param sources Objects to be merged with target
772
+ * @returns Merged object
773
+ */
774
+ function mergeDeep(target, ...sources) {
775
+ if (!sources.length)
776
+ return target;
777
+ const source = sources.shift();
778
+ if (isObject(target) && isObject(source)) {
779
+ for (const key in source) {
780
+ if (isObject(source[key])) {
781
+ if (!target[key])
782
+ Object.assign(target, { [key]: {} });
783
+ mergeDeep(target[key], source[key]);
784
+ }
785
+ else {
786
+ Object.assign(target, { [key]: source[key] });
787
+ }
788
+ }
789
+ }
790
+ return mergeDeep(target, ...sources);
791
+ }
792
+ /**
793
+ * Get type's property name safety
794
+ * @param name KeyOf property
795
+ * @returns Type's property name
796
+ */
797
+ const nameof = (name) => name;
798
+ /**
799
+ * Determines if the input is a Number or something that can be coerced to a Number
800
+ * @param - The input to be tested
801
+ * @returns - An indication if the input is a Number or can be coerced to a Number
802
+ */
803
+ function isNumeric(number) {
804
+ return !isNaN(parseFloat(number));
805
+ }
806
+ /**
807
+ * Return true if current browser is Chrome
808
+ * @returns If current browser is Chrome
809
+ */
810
+ function isChromeBrowser() {
811
+ return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
812
+ }
813
+ /**
814
+ * Return true if value is valid email address
815
+ * @returns True if it's valid email address
816
+ */
817
+ function isEmail(value) {
818
+ return isDefined(value.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/));
819
+ }
820
+ /**
821
+ * Return true if string is "true"
822
+ * @returns parsed string as boolean
823
+ */
824
+ function parseBoolean(value) {
825
+ return /^true$/i.test(value);
826
+ }
827
+ /**
828
+ * Return true if values equal
829
+ * @param obj1 First value to compare
830
+ * @param obj2 Second value to compare
831
+ * @returns True if equal
832
+ */
833
+ function isEqual(obj1, obj2) {
834
+ /**
835
+ * More accurately check the type of a JavaScript object
836
+ * @param {Object} obj The object
837
+ * @return {String} The object type
838
+ */
839
+ function getType(obj) {
840
+ return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
841
+ }
842
+ function areArraysEqual() {
843
+ // Check length
844
+ if (obj1.length !== obj2.length)
845
+ return false;
846
+ // Check each item in the array
847
+ for (let i = 0; i < obj1.length; i++) {
848
+ if (!isEqual(obj1[i], obj2[i]))
849
+ return false;
850
+ }
851
+ // If no errors, return true
852
+ return true;
853
+ }
854
+ function areObjectsEqual() {
855
+ if (Object.keys(obj1).length !== Object.keys(obj2).length)
856
+ return false;
857
+ // Check each item in the object
858
+ for (let key in obj1) {
859
+ if (Object.prototype.hasOwnProperty.call(obj1, key)) {
860
+ if (!isEqual(obj1[key], obj2[key])) {
861
+ return false;
862
+ }
863
+ }
864
+ }
865
+ // If no errors, return true
866
+ return true;
867
+ }
868
+ function areFunctionsEqual() {
869
+ return obj1.toString() === obj2.toString();
870
+ }
871
+ function arePrimativesEqual() {
872
+ return obj1 === obj2;
873
+ }
874
+ function areDatesEqual() {
875
+ return isEqualDateTimes(obj1, obj2);
876
+ }
877
+ // Get the object type
878
+ let type = getType(obj1);
879
+ // If the two items are not the same type, return false
880
+ if (type !== getType(obj2))
881
+ return false;
882
+ // Compare based on type
883
+ if (type === 'array')
884
+ return areArraysEqual();
885
+ if (type === 'date')
886
+ return areDatesEqual();
887
+ if (type === 'object')
888
+ return areObjectsEqual();
889
+ if (type === 'function')
890
+ return areFunctionsEqual();
891
+ return arePrimativesEqual();
892
+ }
893
+
894
+ /**
895
+ * Return true if string has value(not empty string)
896
+ * @param value String value to check
897
+ * @returns True if string is not null and defined(not empty string)
898
+ */
899
+ function isNullOrEmptyString(value) {
900
+ return !isDefined(value) || value === CommonConstants.EMPTY_STRING;
901
+ }
902
+ /**
903
+ * Return true if value contains includeValue
904
+ * @param value String value to check
905
+ * @param includeValue Value to check if it include
906
+ * @returns True if value contains includeValue
907
+ */
908
+ function contains(value, includeValue) {
909
+ return !isNullOrEmptyString(value) && !isNullOrEmptyString(includeValue)
910
+ ? value.toLowerCase()
911
+ .includes(includeValue.toLowerCase())
912
+ : false;
913
+ }
914
+ /**
915
+ * Return trimed value
916
+ * @param value Value for trim modification
917
+ * @returns Trimed value
918
+ */
919
+ function trim(value) {
920
+ return isNullOrEmptyString(value) ? value : value.replace(/\s/g, '');
921
+ }
922
+
923
+ /**
924
+ * Return parsed file size as string
925
+ * @param bytes Bytes count
926
+ * @param decimals Value after dot
927
+ * @returns Parsed file size
928
+ */
929
+ function parseFileSize(bytes, decimals = 2) {
930
+ if (bytes === 0)
931
+ return '0';
932
+ const k = 1024;
933
+ const dm = decimals < 0 ? 0 : decimals;
934
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
935
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
936
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
937
+ }
938
+ /**
939
+ * Return file extension
940
+ * @param file File value
941
+ * @returns File extension
942
+ */
943
+ function getFileExtension(file) {
944
+ if (!isDefined(file))
945
+ return CommonConstants.EMPTY_STRING;
946
+ if (file.name.indexOf('.') === CommonConstants.NOT_FOUND_INDEX) {
947
+ return CommonConstants.EMPTY_STRING;
948
+ }
949
+ return file.name.split('.').pop();
950
+ }
951
+ /**
952
+ * Read file as data URL
953
+ * @param file File value
954
+ * @param onLoad On load action
955
+ */
956
+ function readAsDataURL(file, onLoad) {
957
+ if (isDefined(file)) {
958
+ const reader = new FileReader();
959
+ reader.onload = () => onLoad(reader.result);
960
+ reader.readAsDataURL(file);
961
+ }
962
+ else
963
+ throw new Error('File utils | Read as data URL function --> File is empty.');
964
+ }
965
+ /**
966
+ * Return true if file is image
967
+ * @param file File value
968
+ * @returns True if file is image
969
+ */
970
+ function isImage(file) {
971
+ return isDefined(file) && (/\.(gif|jpe?g|jpg|tiff|png|webp|bmp)$/i).test(file.name);
972
+ }
973
+
974
+ /**
975
+ * Return CSS like value
976
+ * @param value Value as number
977
+ * @returns Value as '1px'
978
+ */
979
+ function getCssLikeValue(value, type = UIConstants.CSS_PIXELS) {
980
+ return value + type;
981
+ }
982
+ /**
983
+ * Parse CSS like value to number
984
+ * @param value CSS like value
985
+ * @returns Number value
986
+ */
987
+ function getValueFromCssLikeValue(value, type = UIConstants.CSS_PIXELS) {
988
+ return +value.replace(type, CommonConstants.EMPTY_STRING);
989
+ }
990
+ /**
991
+ * Return CCS like calc value
992
+ * @param value All value (100% by default)
993
+ * @param part Part value
994
+ * @returns Calc value
995
+ */
996
+ function getCalcValue(part, value = 100) {
997
+ return `calc(${value}${UIConstants.CSS_PERCENTAGE} / ${part} )`;
998
+ }
999
+ /**
1000
+ * Return CCS like rotate value
1001
+ * @param value value as degrees
1002
+ * @returns Rotate value
1003
+ */
1004
+ function getRotateValue(value) {
1005
+ return `rotate(${value}deg)`;
1006
+ }
1007
+ /**
1008
+ * Add classes to HTML element
1009
+ * @param element HTML element
1010
+ * @param classNames Array of CSS classes
1011
+ */
1012
+ function addClasses(element, ...classNames) {
1013
+ if (isDefined(element)) {
1014
+ classNames.forEach((className) => element.classList.add(className));
1015
+ }
1016
+ }
1017
+ /**
1018
+ * Remove classes to HTML element
1019
+ * @param element HTML element
1020
+ * @param classNames Array of CSS classes
1021
+ */
1022
+ function removeClasses(element, ...classNames) {
1023
+ if (isDefined(element)) {
1024
+ classNames.forEach((className) => element.classList.remove(className));
1025
+ }
1026
+ }
1027
+ /**
1028
+ * Convert RGB color to HEX
1029
+ * @param r Red
1030
+ * @param g Green
1031
+ * @param b Blue
1032
+ * @returns HEX value
1033
+ */
1034
+ function rgbToHex(r, g, b) {
1035
+ return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
1036
+ }
1037
+ /**
1038
+ * Convert HEX to RGB value
1039
+ * @param hex HEX value
1040
+ * @returns RGB value
1041
+ */
1042
+ function hexToRgb(hex) {
1043
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1044
+ if (result) {
1045
+ var r = parseInt(result[1], 16);
1046
+ var g = parseInt(result[2], 16);
1047
+ var b = parseInt(result[3], 16);
1048
+ return `rgb(${r}, ${g}, ${b})`;
1049
+ }
1050
+ return null;
1051
+ }
1052
+ /**
1053
+ * Set opacity for RGB value
1054
+ * @param rgb Rgb value with {opacity} placeholder
1055
+ * @param opacity Opacity value
1056
+ * @returns RGB value with relevant opacity
1057
+ */
1058
+ function replaceRgbOpacity(rgb, opacity) {
1059
+ return rgb.replace(UIConstants.RGB_OPACITY_PLACEHOLDER, opacity.toString());
1060
+ }
1061
+
1062
+ /**
1063
+ * Return true if collection not empty
1064
+ * @param collection Array of items
1065
+ * @returns True if collection not empty
1066
+ */
1067
+ function any(collection) {
1068
+ return isDefined(collection) && collection.length > 0;
1069
+ }
1070
+ /**
1071
+ * Return true if collection has such value
1072
+ * @param collection Array of items
1073
+ * @param value Value to check
1074
+ * @returns True if found value in collection
1075
+ */
1076
+ function hasItem(collection, value) {
1077
+ return any(collection)
1078
+ && collection.findIndex(item => item === value) !== CommonConstants.NOT_FOUND_INDEX;
1079
+ }
1080
+ /**
1081
+ * Return true if collection has such value by predicate function
1082
+ * @param collection Array of items
1083
+ * @param predicate Function to define check logic
1084
+ * @returns True if found value in collection
1085
+ */
1086
+ function hasItemBy(collection, predicate) {
1087
+ return any(collection) && collection.findIndex(predicate) !== CommonConstants.NOT_FOUND_INDEX;
1088
+ }
1089
+ /**
1090
+ * Return true if collection of objects has such value as object
1091
+ * @param collection Array of objects
1092
+ * @param property Property name
1093
+ * @param value Value to check
1094
+ * @returns True if found value in collection
1095
+ */
1096
+ function hasObjectItem(collection, // TODO <-- Array<T>
1097
+ property, value) {
1098
+ return any(collection)
1099
+ && collection.findIndex(item => item.hasOwnProperty(property)
1100
+ && item[property] === value) !== CommonConstants.NOT_FOUND_INDEX;
1101
+ }
1102
+ /**
1103
+ * Return value from collection by predicate function
1104
+ * @param collection Array of items
1105
+ * @param predicate Function to define search logic
1106
+ * @returns Value from collection
1107
+ */
1108
+ function firstOrDefault(collection, predicate) {
1109
+ return any(collection) ? collection?.find(predicate) : undefined;
1110
+ }
1111
+ /**
1112
+ * Return first item from collection
1113
+ * @param collection Array of items
1114
+ * @returns First value from collection
1115
+ */
1116
+ function firstItem(collection) {
1117
+ return any(collection) ? collection[0] : null;
1118
+ }
1119
+ /**
1120
+ * Return last item from collection
1121
+ * @param collection Array of items
1122
+ * @returns Last value from collection
1123
+ */
1124
+ function lastItem(collection) {
1125
+ return any(collection) ? collection[collection.length - 1] : null;
1126
+ }
1127
+ /**
1128
+ * Return True if all values match predicate function
1129
+ * @param collection Array of objects
1130
+ * @param predicate Function to define check logic
1131
+ * @returns True if all values match predicate
1132
+ */
1133
+ function all(collection, predicate) {
1134
+ return any(collection) ? collection.filter(predicate).length == collection.length : false;
1135
+ }
1136
+ /**
1137
+ * Return count by predicate
1138
+ * @param collection Array of objects
1139
+ * @param predicate Function to define check logic
1140
+ * @returns Items count
1141
+ */
1142
+ function count(collection, predicate) {
1143
+ return collection.filter(predicate).length;
1144
+ }
1145
+ /**
1146
+ * Return items from collection by predicate function
1147
+ * @param collection Array of items
1148
+ * @param predicate Function to define search logic
1149
+ * @returns Values from collection
1150
+ */
1151
+ function where(collection, predicate) {
1152
+ return any(collection) ? collection.filter(predicate) : null;
1153
+ }
1154
+ /**
1155
+ * Return sliced collection by page number and page size
1156
+ * @param collection Array of items
1157
+ * @param page Page number
1158
+ * @param size Page size
1159
+ * @returns Sliced collection
1160
+ */
1161
+ function skip(collection, page, size) {
1162
+ if (any(collection)) {
1163
+ let start = (page - 1) * size;
1164
+ return collection.slice(start, start + size);
1165
+ }
1166
+ return collection;
1167
+ }
1168
+ function sort(collection, direction = SortingDirection.Ascending) {
1169
+ if (any(collection)) {
1170
+ return direction == SortingDirection.Ascending
1171
+ ? collection.sort((a, b) => a - b)
1172
+ : collection.sort((a, b) => b - a);
1173
+ }
1174
+ return collection;
1175
+ }
1176
+ /**
1177
+ * Return sorted collection of objects by property
1178
+ * @param collection Array of items
1179
+ * @param property Property name
1180
+ * @param direction Sorting direction
1181
+ * @returns Sorted collection
1182
+ */
1183
+ function sortBy(collection, property, direction) {
1184
+ if (any(collection)) {
1185
+ let _sortFunc = (a, b) => (t1, t2) => (a[property] > b[property] ? t1 : t2);
1186
+ return direction == SortingDirection.Ascending
1187
+ ? collection.sort((a, b) => _sortFunc(a, b)(1, -1))
1188
+ : collection.sort((a, b) => _sortFunc(a, b)(-1, 1));
1189
+ }
1190
+ return collection;
1191
+ }
1192
+ /**
1193
+ * Return sorted collection of objects by path
1194
+ * @param collection Array of items
1195
+ * @param path Path to property
1196
+ * @param direction Sorting direction
1197
+ * @returns Sorted collection
1198
+ */
1199
+ function sortByPath(collection, path, direction) {
1200
+ if (any(collection)) {
1201
+ if (isNullOrEmptyString(path))
1202
+ throw new Error('Collection utils | Sort By Path function --> Path is empty.');
1203
+ const pathParts = path.split('.');
1204
+ if (!any(pathParts))
1205
+ throw new Error('Collection utils | Sort By Path function --> Path is incorrect.');
1206
+ const partsLength = pathParts.length;
1207
+ collection.sort((a, b) => {
1208
+ var i = 0;
1209
+ while (i < partsLength) {
1210
+ a = a[pathParts[i]];
1211
+ b = b[pathParts[i]];
1212
+ i++;
1213
+ }
1214
+ return direction == SortingDirection.Ascending
1215
+ ? a >= b ? 1 : -1
1216
+ : a > b ? -1 : 1;
1217
+ });
1218
+ return collection;
1219
+ }
1220
+ return collection;
1221
+ }
1222
+ /**
1223
+ * Return collection without matches
1224
+ * @param collection Array of items
1225
+ * @returns Collection without matches
1226
+ */
1227
+ function distinct(collection) {
1228
+ return any(collection)
1229
+ ? collection.filter((value, index, self) => self.indexOf(value) === index)
1230
+ : collection;
1231
+ }
1232
+ /**
1233
+ * Return sum value from collection items by map function
1234
+ * @param collection Array of items
1235
+ * @param select Map function
1236
+ * @returns Sum value of colection items
1237
+ */
1238
+ function sum(collection, select) {
1239
+ return any(collection)
1240
+ ? collection
1241
+ .map(select)
1242
+ .reduce((a, b) => { return a + b; }, 0)
1243
+ : 0;
1244
+ }
1245
+ /**
1246
+ * Return max value from collection items by map function
1247
+ * @param collection Array of items
1248
+ * @param select Map function
1249
+ * @returns Max value of collection items
1250
+ */
1251
+ function max(collection, select) {
1252
+ if (any(collection))
1253
+ return Math.max(...collection.map(select));
1254
+ throw new Error('Collection utils | Max function --> Collection is empty.');
1255
+ }
1256
+ /**
1257
+ * Delete items from collection by predicate
1258
+ * @param collection Array of items
1259
+ * @param predicate Function to define remove logic
1260
+ */
1261
+ function remove(collection, predicate) {
1262
+ var i = collection.length;
1263
+ while (i--) {
1264
+ if (predicate(collection[i])) {
1265
+ collection.splice(i, 1);
1266
+ }
1267
+ }
1268
+ }
1269
+ /**
1270
+ * Add item to collection
1271
+ * @param collection Array of items
1272
+ * @param item New item
1273
+ * @param predicate Function to define if allowed to add new item
1274
+ * @returns True if successfully added
1275
+ */
1276
+ function addItem(collection, item, predicate) {
1277
+ if (!isDefined(collection))
1278
+ collection = new Array();
1279
+ if (isDefined(predicate) && predicate(item))
1280
+ return false;
1281
+ collection.push(item);
1282
+ return true;
1283
+ }
1284
+ /**
1285
+ * Delete item from collection
1286
+ * @param collection Array of items
1287
+ * @param item Item to delete
1288
+ * @returns True if successfully removed
1289
+ */
1290
+ function removeItem(collection, item) {
1291
+ if (isDefined(item) && hasItem(collection, item)) {
1292
+ collection.splice(collection.indexOf(item), 1);
1293
+ return true;
1294
+ }
1295
+ return false;
1296
+ }
1297
+ /**
1298
+ * Delete item from collection by predicate
1299
+ * @param collection Array of items
1300
+ * @param predicate Function to define remove logic
1301
+ * @returns True if successfully removed
1302
+ */
1303
+ function removeItemBy(collection, predicate) {
1304
+ const foundItem = firstOrDefault(collection, predicate);
1305
+ if (isDefined(foundItem)) {
1306
+ collection.splice(collection.indexOf(foundItem), 1);
1307
+ return true;
1308
+ }
1309
+ return false;
1310
+ }
1311
+ /**
1312
+ * Update item in collection by predicate
1313
+ * @param collection Array of items
1314
+ * @param predicate Function to define item for deleting
1315
+ * @returns True if successfully removed
1316
+ */
1317
+ function updateItemBy(collection, predicate, newItem) {
1318
+ const itemIndex = collection.findIndex(predicate);
1319
+ if (itemIndex !== CommonConstants.NOT_FOUND_INDEX) {
1320
+ const result = collection.slice(0);
1321
+ result[itemIndex] = {
1322
+ ...collection[itemIndex],
1323
+ ...newItem
1324
+ };
1325
+ return result;
1326
+ }
1327
+ return null;
1328
+ }
1329
+ /**
1330
+ * Return collection or empty if collection is not defined
1331
+ * @param collection Array of items
1332
+ * @returns Collection or empty
1333
+ */
1334
+ function getCollectionOrEmpty(collection) {
1335
+ return isDefined(collection) ? collection : [];
1336
+ }
1337
+
1338
+ class ThrowElementOnHoverDirective {
1339
+ constructor(el) {
1340
+ this.el = el;
1341
+ }
1342
+ onMouseEnter() {
1343
+ this.throw(this.throwValue);
1344
+ }
1345
+ onMouseLeave() {
1346
+ this.throw(null);
1347
+ }
1348
+ get style() {
1349
+ return this.el.nativeElement.style;
1350
+ }
1351
+ throw(value) {
1352
+ this.style.transform = value ? `translateY(${getCssLikeValue(value)})` : null;
1353
+ }
1354
+ }
1355
+ ThrowElementOnHoverDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ThrowElementOnHoverDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1356
+ ThrowElementOnHoverDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ThrowElementOnHoverDirective, selector: "[sfcThrowElementOnHover]", inputs: { throwValue: ["sfcThrowElementOnHover", "throwValue"] }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
1357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ThrowElementOnHoverDirective, decorators: [{
1358
+ type: Directive,
1359
+ args: [{
1360
+ selector: '[sfcThrowElementOnHover]'
1361
+ }]
1362
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { throwValue: [{
1363
+ type: Input,
1364
+ args: ['sfcThrowElementOnHover']
1365
+ }], onMouseEnter: [{
1366
+ type: HostListener,
1367
+ args: ['mouseenter']
1368
+ }], onMouseLeave: [{
1369
+ type: HostListener,
1370
+ args: ['mouseleave']
1371
+ }] } });
1372
+
1373
+ class TemplateReferenceDirective {
1374
+ constructor(template) {
1375
+ this.template = template;
1376
+ this.templateName = CommonConstants.EMPTY_STRING;
1377
+ }
1378
+ }
1379
+ TemplateReferenceDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TemplateReferenceDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
1380
+ TemplateReferenceDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TemplateReferenceDirective, selector: "[sfcTemplateReference]", inputs: { templateName: ["sfcTemplateReference", "templateName"], data: "data" }, ngImport: i0 });
1381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TemplateReferenceDirective, decorators: [{
1382
+ type: Directive,
1383
+ args: [{
1384
+ selector: '[sfcTemplateReference]'
1385
+ }]
1386
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { templateName: [{
1387
+ type: Input,
1388
+ args: ['sfcTemplateReference']
1389
+ }], data: [{
1390
+ type: Input
1391
+ }] } });
1392
+
1393
+ class MouseDownDirective {
1394
+ constructor() {
1395
+ /**
1396
+ * Allowed mouse button
1397
+ */
1398
+ this.button = CommonConstants.MOUSE_BUTTON_LEFT;
1399
+ this.action = new EventEmitter();
1400
+ }
1401
+ onMouseDown($event) {
1402
+ if ($event.button === this.button) {
1403
+ this.action.emit($event);
1404
+ }
1405
+ else {
1406
+ $event.preventDefault();
1407
+ }
1408
+ }
1409
+ }
1410
+ MouseDownDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MouseDownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1411
+ MouseDownDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: { button: "button" }, outputs: { action: "sfcMouseDown" }, host: { listeners: { "mousedown": "onMouseDown($event)" } }, ngImport: i0 });
1412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MouseDownDirective, decorators: [{
1413
+ type: Directive,
1414
+ args: [{
1415
+ selector: '[sfcMouseDown]'
1416
+ }]
1417
+ }], propDecorators: { button: [{
1418
+ type: Input
1419
+ }], action: [{
1420
+ type: Output,
1421
+ args: ['sfcMouseDown']
1422
+ }], onMouseDown: [{
1423
+ type: HostListener,
1424
+ args: ['mousedown', ['$event']]
1425
+ }] } });
1426
+
1427
+ class ComponentSizeDirective {
1428
+ constructor(el) {
1429
+ this.el = el;
1430
+ this._customSize = null;
1431
+ this.style.fontSize = getCssLikeValue(this.getSizeProportion(), UIConstants.CSS_EM);
1432
+ }
1433
+ set size(value) {
1434
+ this._size = value;
1435
+ this.style.fontSize = getCssLikeValue(this.getSizeProportion(), UIConstants.CSS_EM);
1436
+ }
1437
+ get size() {
1438
+ return this._size;
1439
+ }
1440
+ set customSize(value) {
1441
+ this._customSize = value;
1442
+ if (this._customSize)
1443
+ this.style.fontSize = getCssLikeValue(this._customSize, UIConstants.CSS_EM);
1444
+ }
1445
+ get customSize() {
1446
+ return this._customSize;
1447
+ }
1448
+ get proportion() {
1449
+ return this.customSize || this.getSizeProportion();
1450
+ }
1451
+ get style() {
1452
+ return this.el.nativeElement.style;
1453
+ }
1454
+ getSizeProportion() {
1455
+ switch (this.size) {
1456
+ case ComponentSize.Small:
1457
+ return 0.5;
1458
+ case ComponentSize.Medium:
1459
+ return 1;
1460
+ case ComponentSize.Large:
1461
+ return 2;
1462
+ default:
1463
+ return 1;
1464
+ }
1465
+ }
1466
+ }
1467
+ ComponentSizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ComponentSizeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1468
+ ComponentSizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ComponentSizeDirective, selector: "[sfcComponentSize]", inputs: { size: ["sfcComponentSize", "size"], customSize: "customSize" }, ngImport: i0 });
1469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ComponentSizeDirective, decorators: [{
1470
+ type: Directive,
1471
+ args: [{
1472
+ selector: '[sfcComponentSize]'
1473
+ }]
1474
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { size: [{
1475
+ type: Input,
1476
+ args: ['sfcComponentSize']
1477
+ }], customSize: [{
1478
+ type: Input
1479
+ }] } });
1480
+
1481
+ class DestroyParentDirective {
1482
+ constructor(el) {
1483
+ this.el = el;
1484
+ this.delay = 0;
1485
+ }
1486
+ set destroyParent(value) {
1487
+ if (value) {
1488
+ setTimeout(() => this.el.nativeElement.parentElement?.remove(), this.delay);
1489
+ }
1490
+ }
1491
+ }
1492
+ DestroyParentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DestroyParentDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1493
+ DestroyParentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: DestroyParentDirective, selector: "[sfcDestroyParent]", inputs: { destroyParent: ["sfcDestroyParent", "destroyParent"], delay: "delay" }, ngImport: i0 });
1494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DestroyParentDirective, decorators: [{
1495
+ type: Directive,
1496
+ args: [{
1497
+ selector: '[sfcDestroyParent]'
1498
+ }]
1499
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { destroyParent: [{
1500
+ type: Input,
1501
+ args: ['sfcDestroyParent']
1502
+ }], delay: [{
1503
+ type: Input
1504
+ }] } });
1505
+
1506
+ class DomChangesDirective {
1507
+ constructor(elementRef) {
1508
+ this.elementRef = elementRef;
1509
+ this.sfcDomChanges = new EventEmitter();
1510
+ this.options = {
1511
+ attributes: true,
1512
+ childList: true,
1513
+ characterData: true
1514
+ };
1515
+ const element = this.elementRef.nativeElement;
1516
+ this.changes = new MutationObserver((mutations) => mutations.forEach((mutation) => this.sfcDomChanges.emit(mutation)));
1517
+ this.changes.observe(element, this.options);
1518
+ }
1519
+ ngOnDestroy() {
1520
+ this.changes.disconnect();
1521
+ }
1522
+ }
1523
+ DomChangesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DomChangesDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1524
+ DomChangesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: DomChangesDirective, selector: "[sfcDomChanges]", inputs: { options: "options" }, outputs: { sfcDomChanges: "sfcDomChanges" }, ngImport: i0 });
1525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DomChangesDirective, decorators: [{
1526
+ type: Directive,
1527
+ args: [{
1528
+ selector: '[sfcDomChanges]'
1529
+ }]
1530
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { sfcDomChanges: [{
1531
+ type: Output
1532
+ }], options: [{
1533
+ type: Input
1534
+ }] } });
1535
+
1536
+ class ScrollTrackerDirective {
1537
+ constructor() {
1538
+ this.positions = [];
1539
+ this.sfcScrollTracker = new EventEmitter();
1540
+ }
1541
+ onScroll(event) {
1542
+ const position = this.getPosition(event);
1543
+ if (position && hasItem(this.positions, position))
1544
+ this.sfcScrollTracker.emit(position);
1545
+ }
1546
+ getPosition(event) {
1547
+ const tracker = event.target, limit = tracker.scrollHeight - tracker.clientHeight, scrollTopFixed = tracker.scrollTop.toFixed();
1548
+ if (scrollTopFixed >= limit)
1549
+ return Position.Bottom;
1550
+ else if (scrollTopFixed <= 0)
1551
+ return Position.Top;
1552
+ return null;
1553
+ }
1554
+ }
1555
+ ScrollTrackerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ScrollTrackerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1556
+ ScrollTrackerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ScrollTrackerDirective, selector: "[sfcScrollTracker]", inputs: { positions: "positions" }, outputs: { sfcScrollTracker: "sfcScrollTracker" }, host: { listeners: { "scroll": "onScroll($event)" } }, ngImport: i0 });
1557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ScrollTrackerDirective, decorators: [{
1558
+ type: Directive,
1559
+ args: [{
1560
+ selector: '[sfcScrollTracker]'
1561
+ }]
1562
+ }], propDecorators: { positions: [{
1563
+ type: Input
1564
+ }], sfcScrollTracker: [{
1565
+ type: Output
1566
+ }], onScroll: [{
1567
+ type: HostListener,
1568
+ args: ['scroll', ['$event']]
1569
+ }] } });
1570
+
1571
+ class ScrollIntoViewDirective {
1572
+ constructor() {
1573
+ /**
1574
+ * Scroll into middle of local container(not whole page)
1575
+ */
1576
+ this.local = false;
1577
+ this.options = { behavior: 'smooth', block: 'center', inline: 'start' };
1578
+ }
1579
+ set sfcScrollIntoView(target) {
1580
+ if (!isDefined(target))
1581
+ return;
1582
+ if (this.local)
1583
+ target.scrollTop = target.offsetHeight / 2;
1584
+ else {
1585
+ if (isChromeBrowser())
1586
+ target.scrollIntoViewIfNeeded();
1587
+ else
1588
+ target.scrollIntoView(this.options);
1589
+ }
1590
+ }
1591
+ }
1592
+ ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ScrollIntoViewDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1593
+ ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ScrollIntoViewDirective, selector: "[sfcScrollIntoView]", inputs: { sfcScrollIntoView: "sfcScrollIntoView", local: "local", options: "options" }, ngImport: i0 });
1594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
1595
+ type: Directive,
1596
+ args: [{
1597
+ selector: '[sfcScrollIntoView]'
1598
+ }]
1599
+ }], propDecorators: { sfcScrollIntoView: [{
1600
+ type: Input
1601
+ }], local: [{
1602
+ type: Input
1603
+ }], options: [{
1604
+ type: Input
1605
+ }] } });
1606
+
1607
+ class ImageLoadService {
1608
+ constructor() {
1609
+ this.loadSubject = new Subject();
1610
+ this.load$ = this.loadSubject.asObservable()
1611
+ .pipe(distinctUntilChanged());
1612
+ }
1613
+ load(value) {
1614
+ this.loadSubject.next(value);
1615
+ }
1616
+ }
1617
+ ImageLoadService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImageLoadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1618
+ ImageLoadService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImageLoadService, providedIn: 'root' });
1619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImageLoadService, decorators: [{
1620
+ type: Injectable,
1621
+ args: [{
1622
+ providedIn: 'root'
1623
+ }]
1624
+ }] });
1625
+
1626
+ class ImageLoadDirective {
1627
+ constructor(el, loadService) {
1628
+ this.el = el;
1629
+ this.loadService = loadService;
1630
+ this.action = new EventEmitter();
1631
+ }
1632
+ onLoad(event) {
1633
+ const loadEvent = {
1634
+ natural: {
1635
+ height: this.el.nativeElement.naturalHeight,
1636
+ width: this.el.nativeElement.naturalWidth
1637
+ },
1638
+ offset: {
1639
+ height: this.el.nativeElement.offsetHeight,
1640
+ width: this.el.nativeElement.offsetWidth
1641
+ }
1642
+ };
1643
+ this.loadService.load(loadEvent);
1644
+ if (isDefined(this.action))
1645
+ this.action.emit(event);
1646
+ }
1647
+ }
1648
+ ImageLoadDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImageLoadDirective, deps: [{ token: i0.ElementRef }, { token: ImageLoadService }], target: i0.ɵɵFactoryTarget.Directive });
1649
+ ImageLoadDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ImageLoadDirective, selector: "[sfcImageLoad]", outputs: { action: "sfcImageLoad" }, host: { listeners: { "load": "onLoad($event)" } }, ngImport: i0 });
1650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImageLoadDirective, decorators: [{
1651
+ type: Directive,
1652
+ args: [{
1653
+ selector: '[sfcImageLoad]'
1654
+ }]
1655
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ImageLoadService }]; }, propDecorators: { action: [{
1656
+ type: Output,
1657
+ args: ['sfcImageLoad']
1658
+ }], onLoad: [{
1659
+ type: HostListener,
1660
+ args: ['load', ['$event']]
1661
+ }] } });
1662
+
1663
+ class SwitchMultiCasePipe {
1664
+ transform(cases, switchOption) {
1665
+ return cases.includes(switchOption) ? switchOption : !switchOption;
1666
+ }
1667
+ }
1668
+ SwitchMultiCasePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SwitchMultiCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1669
+ SwitchMultiCasePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: SwitchMultiCasePipe, name: "sfcSwitchMultiCase" });
1670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SwitchMultiCasePipe, decorators: [{
1671
+ type: Pipe,
1672
+ args: [{
1673
+ name: 'sfcSwitchMultiCase'
1674
+ }]
1675
+ }] });
1676
+
1677
+ var ButtonType;
1678
+ (function (ButtonType) {
1679
+ ButtonType["Bordered"] = "bordered";
1680
+ ButtonType["Filled"] = "filled";
1681
+ ButtonType["Rounded"] = "rounded";
1682
+ ButtonType["Circled"] = "circled";
1683
+ ButtonType["Texted"] = "texted";
1684
+ })(ButtonType || (ButtonType = {}));
1685
+
1686
+ class ButtonComponent {
1687
+ constructor() {
1688
+ this.BUTTON_DEFAULT_TEXT = 'Button';
1689
+ this.disabled = false;
1690
+ this.types = [ButtonType.Bordered];
1691
+ }
1692
+ get label() {
1693
+ return isNullOrEmptyString(this.text) && !isDefined(this.iconBefore) && !isDefined(this.iconAfter)
1694
+ ? this.BUTTON_DEFAULT_TEXT
1695
+ : this.text;
1696
+ }
1697
+ get classes() {
1698
+ const classes = {};
1699
+ distinct(this.types).forEach(type => classes[type] = true);
1700
+ return classes;
1701
+ }
1702
+ }
1703
+ ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1704
+ ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ButtonComponent, selector: "sfc-button", inputs: { text: "text", iconBefore: "iconBefore", iconAfter: "iconAfter", disabled: "disabled", types: "types" }, host: { properties: { "class.disabled": "this.disabled" } }, ngImport: i0, template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{label}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [":host .button.bordered{border:solid 2px}:host .button.bordered,:host-context(.sfc-default-theme) :host .button.bordered{color:#545e61}:host-context(.sfc-dark-theme) :host .button.bordered{color:#fff}:host .button.bordered,:host-context(.sfc-default-theme) :host .button.bordered{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.bordered{border-color:#fff}:host .button.filled{color:#fff!important}:host .button.filled,:host-context(.sfc-default-theme) :host .button.filled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.filled{border-color:#545e61}:host .button.filled,:host-context(.sfc-default-theme) :host .button.filled{background:#545e61}:host-context(.sfc-dark-theme) :host .button.filled{background:#545e61}:host.disabled .button.filled{color:#fff!important}:host.disabled .button.filled,:host-context(.sfc-default-theme) :host.disabled .button.filled{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button.filled{border-color:#bdbdbd}:host.disabled .button.filled,:host-context(.sfc-default-theme) :host.disabled .button.filled{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button.filled{background:#bdbdbd}:host:hover .button.filled{color:#fff!important}:host:hover .button.filled,:host-context(.sfc-default-theme) :host:hover .button.filled{border-color:#ffce54}:host-context(.sfc-dark-theme) :host:hover .button.filled{border-color:#ffce54}:host:hover .button.filled,:host-context(.sfc-default-theme) :host:hover .button.filled{background:#ffce54}:host-context(.sfc-dark-theme) :host:hover .button.filled{background:#ffce54}:host .button.rounded{border:solid 2px;border-radius:1.25em;padding:.4em 1.2em}:host .button.rounded,:host-context(.sfc-default-theme) :host .button.rounded{color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded{color:#fff}:host .button.rounded,:host-context(.sfc-default-theme) :host .button.rounded{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded{border-color:#fff}:host .button.rounded.filled,:host-context(.sfc-default-theme) :host .button.rounded.filled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded.filled{border-color:#545e61}:host.disabled .button.rounded.filled{border-color:#bdbdbd}:host:not(.disabled):hover .button.rounded.filled{border-color:#ffce54}:host .button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}:host .button.circled,:host-context(.sfc-default-theme) :host .button.circled{color:#545e61}:host-context(.sfc-dark-theme) :host .button.circled{color:#fff}:host .button.circled,:host-context(.sfc-default-theme) :host .button.circled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.circled{border-color:#fff}:host .button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}:host .button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;width:inherit;transition:color .5s ease,border-color .5s ease,background .5s ease}:host .button,:host-context(.sfc-default-theme) :host .button{color:#545e61}:host-context(.sfc-dark-theme) :host .button{color:#fff}:host .button .icon{padding:3px}:host .button .text{padding:3px;white-space:initial;text-overflow:ellipsis;overflow:hidden}:host .button .text:empty{display:none}:host.disabled{pointer-events:none}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{color:#656d78}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{border-color:#656d78}:host:not(.disabled):hover .button{color:#ffce54;border-color:#ffce54}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
1705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ButtonComponent, decorators: [{
1706
+ type: Component,
1707
+ args: [{ selector: 'sfc-button', template: "<a class=\"button\" [ngClass]=\"classes\">\r\n <fa-icon *ngIf=\"iconBefore\" class=\"icon before\" [icon]=\"iconBefore\"></fa-icon>\r\n <span class=\"text\">{{label}}</span>\r\n <fa-icon *ngIf=\"iconAfter\" class=\"icon after\" [icon]=\"iconAfter\"></fa-icon>\r\n</a>", styles: [":host .button.bordered{border:solid 2px}:host .button.bordered,:host-context(.sfc-default-theme) :host .button.bordered{color:#545e61}:host-context(.sfc-dark-theme) :host .button.bordered{color:#fff}:host .button.bordered,:host-context(.sfc-default-theme) :host .button.bordered{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.bordered{border-color:#fff}:host .button.filled{color:#fff!important}:host .button.filled,:host-context(.sfc-default-theme) :host .button.filled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.filled{border-color:#545e61}:host .button.filled,:host-context(.sfc-default-theme) :host .button.filled{background:#545e61}:host-context(.sfc-dark-theme) :host .button.filled{background:#545e61}:host.disabled .button.filled{color:#fff!important}:host.disabled .button.filled,:host-context(.sfc-default-theme) :host.disabled .button.filled{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button.filled{border-color:#bdbdbd}:host.disabled .button.filled,:host-context(.sfc-default-theme) :host.disabled .button.filled{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button.filled{background:#bdbdbd}:host:hover .button.filled{color:#fff!important}:host:hover .button.filled,:host-context(.sfc-default-theme) :host:hover .button.filled{border-color:#ffce54}:host-context(.sfc-dark-theme) :host:hover .button.filled{border-color:#ffce54}:host:hover .button.filled,:host-context(.sfc-default-theme) :host:hover .button.filled{background:#ffce54}:host-context(.sfc-dark-theme) :host:hover .button.filled{background:#ffce54}:host .button.rounded{border:solid 2px;border-radius:1.25em;padding:.4em 1.2em}:host .button.rounded,:host-context(.sfc-default-theme) :host .button.rounded{color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded{color:#fff}:host .button.rounded,:host-context(.sfc-default-theme) :host .button.rounded{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded{border-color:#fff}:host .button.rounded.filled,:host-context(.sfc-default-theme) :host .button.rounded.filled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.rounded.filled{border-color:#545e61}:host.disabled .button.rounded.filled{border-color:#bdbdbd}:host:not(.disabled):hover .button.rounded.filled{border-color:#ffce54}:host .button.circled{border:solid 2px;width:5em;height:5em;border-radius:50%}:host .button.circled,:host-context(.sfc-default-theme) :host .button.circled{color:#545e61}:host-context(.sfc-dark-theme) :host .button.circled{color:#fff}:host .button.circled,:host-context(.sfc-default-theme) :host .button.circled{border-color:#545e61}:host-context(.sfc-dark-theme) :host .button.circled{border-color:#fff}:host .button.circled .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host{display:inline-block;font-size:1em}:host .button{box-sizing:border-box;display:inline-flex;justify-content:center;flex-wrap:wrap;align-items:center;overflow:hidden;text-align:center;text-decoration:none;white-space:nowrap;font-size:.9em;cursor:pointer;-webkit-user-select:none;user-select:none;width:inherit;transition:color .5s ease,border-color .5s ease,background .5s ease}:host .button,:host-context(.sfc-default-theme) :host .button{color:#545e61}:host-context(.sfc-dark-theme) :host .button{color:#fff}:host .button .icon{padding:3px}:host .button .text{padding:3px;white-space:initial;text-overflow:ellipsis;overflow:hidden}:host .button .text:empty{display:none}:host.disabled{pointer-events:none}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{color:#656d78}:host.disabled .button,:host-context(.sfc-default-theme) :host.disabled .button{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .button{border-color:#656d78}:host:not(.disabled):hover .button{color:#ffce54;border-color:#ffce54}\n"] }]
1708
+ }], propDecorators: { text: [{
1709
+ type: Input
1710
+ }], iconBefore: [{
1711
+ type: Input
1712
+ }], iconAfter: [{
1713
+ type: Input
1714
+ }], disabled: [{
1715
+ type: Input
1716
+ }, {
1717
+ type: HostBinding,
1718
+ args: [`class.${UIClass.Disabled}`]
1719
+ }], types: [{
1720
+ type: Input
1721
+ }] } });
1722
+
1723
+ var TooltipType;
1724
+ (function (TooltipType) {
1725
+ TooltipType["Hover"] = "hover";
1726
+ TooltipType["Click"] = "click";
1727
+ })(TooltipType || (TooltipType = {}));
1728
+
1729
+ class TooltipComponent {
1730
+ constructor(resizeService, window) {
1731
+ this.resizeService = resizeService;
1732
+ this.window = window;
1733
+ this.tooltipType = TooltipType.Hover;
1734
+ this.tooltipPosition = Position.Top;
1735
+ this.tooltipShow = false;
1736
+ // preserved position
1737
+ this._position = Position.Top;
1738
+ }
1739
+ click() {
1740
+ if (this.tooltipType == TooltipType.Click) {
1741
+ this.tooltipShow = !this.tooltipShow;
1742
+ }
1743
+ }
1744
+ ngOnInit() {
1745
+ this._position = this.tooltipPosition;
1746
+ }
1747
+ ngAfterContentInit() {
1748
+ this._resizeSubscription = this.resizeService.onResize$
1749
+ .pipe(startWith(this.window))
1750
+ .subscribe(window => this.tooltipPosition = window.innerWidth <= MediaLimits.Tablet
1751
+ ? Position.Bottom : this._position);
1752
+ }
1753
+ ngOnDestroy() {
1754
+ this._resizeSubscription?.unsubscribe();
1755
+ }
1756
+ }
1757
+ TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TooltipComponent, deps: [{ token: ResizeService }, { token: WINDOW }], target: i0.ɵɵFactoryTarget.Component });
1758
+ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TooltipComponent, selector: "[sfc-tooltip]", inputs: { value: ["sfc-tooltip", "value"], tooltipType: "tooltipType", tooltipPosition: "tooltipPosition", tooltipShow: "tooltipShow" }, host: { listeners: { "click": "click()" }, properties: { "attr.value": "this.value", "attr.type": "this.tooltipType", "attr.position": "this.tooltipPosition", "class.show": "this.tooltipShow" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{position:relative}:host:before,:host:after{position:absolute;left:50%;bottom:calc(100% + 5px);pointer-events:none;transition:.2s;will-change:transform}:host:hover:before,:host.show:before{content:attr(value);padding:.4em .7em;font-size:.8em;font-weight:initial;width:inherit;max-width:18.75em;border-radius:6px;background-color:#545e61;box-shadow:0 0 20.25em #aab2bd;color:#fff;text-align:center;white-space:pre-wrap;overflow:hidden;word-wrap:break-word;z-index:9999}:host:after{content:\"\";border-style:solid;transition-duration:0s;transform:translate(-50%) scaleY(0)}:host[type=hover]:before,:host[type=hover]:after,:host:not(.show):before,:host:not(.show):after{visibility:hidden;opacity:0}:host[type=hover]:hover:before,:host[type=hover]:hover:after,:host.show:before,:host.show:after{visibility:visible;opacity:1}:host[type=hover]:hover:before,:host.show:before{transition-delay:.1s}:host[type=hover]:hover:after,:host.show:after{transition-delay:.3s;transition-duration:.2s;transform:translate(-50%) scaleY(1)}:host[position=top]:before,:host[position=top]:after{left:50%;bottom:calc(100% + 5px)}:host[position=top]:before{transform:translate(-50%,-5px) scale(.5)}:host[position=top]:hover:before,:host[position=top].show:before{transform:translate(-50%,-.25em) scale(1)}:host[position=top]:after{border-width:.25em .25em 0;border-color:#545e61 transparent transparent transparent;transform-origin:top}:host[position=left]:before,:host[position=left]:after{left:auto;right:calc(100% + 5px);bottom:50%}:host[position=left]:before{transform:translate(-.25em,50%) scale(.5)}:host[position=left]:hover:before,:host[position=left].show:before{transform:translate(-.31em,50%) scale(1)}:host[position=left]:after{border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #545e61;transform-origin:left;transform:translateY(50%) scaleX(0)}:host[position=left]:hover:after,:host[position=left].show:after{transform:translateY(50%) scaleX(1)}:host[position=right]:before,:host[position=right]:after{left:calc(100% + 5px);bottom:50%}:host[position=right]:before{transform:translate(5px,50%) scale(.5)}:host[position=right]:hover:before,:host[position=right].show:before{transform:translate(.31em,50%) scale(1)}:host[position=right]:after{border-width:.25em .25em .25em 0;border-color:transparent #545e61 transparent transparent;transform-origin:right;transform:translateY(50%) scaleX(0)}:host[position=right]:hover:after,:host[position=right].show:after{transform:translateY(50%) scaleX(1)}:host[position=bottom]:before,:host[position=bottom]:after{top:calc(100% + 5px);bottom:auto}:host[position=bottom]:before{transform:translate(-50%,5px) scale(.5)}:host[position=bottom]:hover:before,:host[position=bottom].show:before{transform:translate(-50%,.31em) scale(1)}:host[position=bottom]:after{border-width:0 .25em .25em;border-color:transparent transparent #545e61 transparent;transform-origin:bottom}\n"] });
1759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TooltipComponent, decorators: [{
1760
+ type: Component,
1761
+ args: [{ selector: '[sfc-tooltip]', template: `<ng-content></ng-content>`, styles: [":host{position:relative}:host:before,:host:after{position:absolute;left:50%;bottom:calc(100% + 5px);pointer-events:none;transition:.2s;will-change:transform}:host:hover:before,:host.show:before{content:attr(value);padding:.4em .7em;font-size:.8em;font-weight:initial;width:inherit;max-width:18.75em;border-radius:6px;background-color:#545e61;box-shadow:0 0 20.25em #aab2bd;color:#fff;text-align:center;white-space:pre-wrap;overflow:hidden;word-wrap:break-word;z-index:9999}:host:after{content:\"\";border-style:solid;transition-duration:0s;transform:translate(-50%) scaleY(0)}:host[type=hover]:before,:host[type=hover]:after,:host:not(.show):before,:host:not(.show):after{visibility:hidden;opacity:0}:host[type=hover]:hover:before,:host[type=hover]:hover:after,:host.show:before,:host.show:after{visibility:visible;opacity:1}:host[type=hover]:hover:before,:host.show:before{transition-delay:.1s}:host[type=hover]:hover:after,:host.show:after{transition-delay:.3s;transition-duration:.2s;transform:translate(-50%) scaleY(1)}:host[position=top]:before,:host[position=top]:after{left:50%;bottom:calc(100% + 5px)}:host[position=top]:before{transform:translate(-50%,-5px) scale(.5)}:host[position=top]:hover:before,:host[position=top].show:before{transform:translate(-50%,-.25em) scale(1)}:host[position=top]:after{border-width:.25em .25em 0;border-color:#545e61 transparent transparent transparent;transform-origin:top}:host[position=left]:before,:host[position=left]:after{left:auto;right:calc(100% + 5px);bottom:50%}:host[position=left]:before{transform:translate(-.25em,50%) scale(.5)}:host[position=left]:hover:before,:host[position=left].show:before{transform:translate(-.31em,50%) scale(1)}:host[position=left]:after{border-width:.25em 0 .25em .25em;border-color:transparent transparent transparent #545e61;transform-origin:left;transform:translateY(50%) scaleX(0)}:host[position=left]:hover:after,:host[position=left].show:after{transform:translateY(50%) scaleX(1)}:host[position=right]:before,:host[position=right]:after{left:calc(100% + 5px);bottom:50%}:host[position=right]:before{transform:translate(5px,50%) scale(.5)}:host[position=right]:hover:before,:host[position=right].show:before{transform:translate(.31em,50%) scale(1)}:host[position=right]:after{border-width:.25em .25em .25em 0;border-color:transparent #545e61 transparent transparent;transform-origin:right;transform:translateY(50%) scaleX(0)}:host[position=right]:hover:after,:host[position=right].show:after{transform:translateY(50%) scaleX(1)}:host[position=bottom]:before,:host[position=bottom]:after{top:calc(100% + 5px);bottom:auto}:host[position=bottom]:before{transform:translate(-50%,5px) scale(.5)}:host[position=bottom]:hover:before,:host[position=bottom].show:before{transform:translate(-50%,.31em) scale(1)}:host[position=bottom]:after{border-width:0 .25em .25em;border-color:transparent transparent #545e61 transparent;transform-origin:bottom}\n"] }]
1762
+ }], ctorParameters: function () { return [{ type: ResizeService }, { type: Window, decorators: [{
1763
+ type: Inject,
1764
+ args: [WINDOW]
1765
+ }] }]; }, propDecorators: { value: [{
1766
+ type: Input,
1767
+ args: ['sfc-tooltip']
1768
+ }, {
1769
+ type: HostBinding,
1770
+ args: ['attr.value']
1771
+ }], tooltipType: [{
1772
+ type: Input
1773
+ }, {
1774
+ type: HostBinding,
1775
+ args: ['attr.type']
1776
+ }], tooltipPosition: [{
1777
+ type: Input
1778
+ }, {
1779
+ type: HostBinding,
1780
+ args: ['attr.position']
1781
+ }], tooltipShow: [{
1782
+ type: Input
1783
+ }, {
1784
+ type: HostBinding,
1785
+ args: ['class.show']
1786
+ }], click: [{
1787
+ type: HostListener,
1788
+ args: ['click']
1789
+ }] } });
1790
+
1791
+ class DelimeterComponent {
1792
+ constructor() {
1793
+ this.direction = Direction.Horizontal;
1794
+ }
1795
+ get _empty() { return isNullOrEmptyString(this.label); }
1796
+ ;
1797
+ }
1798
+ DelimeterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DelimeterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1799
+ DelimeterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DelimeterComponent, selector: "sfc-delimeter", inputs: { label: "label", direction: "direction" }, host: { properties: { "class": "this.direction", "class.empty": "this._empty" } }, ngImport: i0, template: `<span>{{label}}</span>`, isInline: true, styles: [":host{padding:.3em 0}:host span{font-size:.8em}:host span,:host-context(.sfc-default-theme) :host span{color:#545e61}:host-context(.sfc-dark-theme) :host span{color:#fff}:host.vertical{display:inline-table;text-align:center;height:100%;min-height:4em;padding:0 .3em}:host.vertical span{position:relative;display:table-cell;vertical-align:middle}:host.vertical span:before,:host.vertical span:after{position:absolute;content:\"\";left:50%;border-left:1px solid;transition:border-image .5s ease}:host.vertical span:before{bottom:50%;top:0;margin-bottom:.8em}:host.vertical span:before,:host-context(.sfc-default-theme) :host.vertical span:before{border-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 1 100%}:host-context(.sfc-dark-theme) :host.vertical span:before{border-image:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 1 100%}:host.vertical span:after{top:50%;bottom:0;margin-top:.8em}:host.vertical span:after,:host-context(.sfc-default-theme) :host.vertical span:after{border-image:linear-gradient(to top,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 1 100%}:host-context(.sfc-dark-theme) :host.vertical span:after{border-image:linear-gradient(to top,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 1 100%}:host.vertical.empty{min-height:2em}:host.vertical.empty span:before{margin-bottom:0}:host.vertical.empty span:after{margin-top:0}:host.horizontal{display:flex;align-items:center;text-align:center;-webkit-user-select:none;user-select:none}:host.horizontal:before,:host-context(.sfc-default-theme) :host.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host.horizontal:before{border-image:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 100% 1}:host.horizontal:after,:host-context(.sfc-default-theme) :host.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host.horizontal:after{border-image:linear-gradient(to left,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 100% 1}:host.horizontal:before,:host.horizontal:after{content:\"\";flex:1;border-bottom:1px solid}:host.horizontal.empty span{display:none}:host.horizontal:not(.empty):before{margin-right:.5em}:host.horizontal:not(.empty):after{margin-left:.5em}\n"] });
1800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DelimeterComponent, decorators: [{
1801
+ type: Component,
1802
+ args: [{ selector: 'sfc-delimeter', template: `<span>{{label}}</span>`, styles: [":host{padding:.3em 0}:host span{font-size:.8em}:host span,:host-context(.sfc-default-theme) :host span{color:#545e61}:host-context(.sfc-dark-theme) :host span{color:#fff}:host.vertical{display:inline-table;text-align:center;height:100%;min-height:4em;padding:0 .3em}:host.vertical span{position:relative;display:table-cell;vertical-align:middle}:host.vertical span:before,:host.vertical span:after{position:absolute;content:\"\";left:50%;border-left:1px solid;transition:border-image .5s ease}:host.vertical span:before{bottom:50%;top:0;margin-bottom:.8em}:host.vertical span:before,:host-context(.sfc-default-theme) :host.vertical span:before{border-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 1 100%}:host-context(.sfc-dark-theme) :host.vertical span:before{border-image:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 1 100%}:host.vertical span:after{top:50%;bottom:0;margin-top:.8em}:host.vertical span:after,:host-context(.sfc-default-theme) :host.vertical span:after{border-image:linear-gradient(to top,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 1 100%}:host-context(.sfc-dark-theme) :host.vertical span:after{border-image:linear-gradient(to top,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 1 100%}:host.vertical.empty{min-height:2em}:host.vertical.empty span:before{margin-bottom:0}:host.vertical.empty span:after{margin-top:0}:host.horizontal{display:flex;align-items:center;text-align:center;-webkit-user-select:none;user-select:none}:host.horizontal:before,:host-context(.sfc-default-theme) :host.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host.horizontal:before{border-image:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 100% 1}:host.horizontal:after,:host-context(.sfc-default-theme) :host.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host.horizontal:after{border-image:linear-gradient(to left,rgba(255,255,255,0) 0%,rgba(255,255,255,.4) 47%,rgba(255,255,255,.4) 53%,rgba(255,255,255,.4) 100%) 100% 1}:host.horizontal:before,:host.horizontal:after{content:\"\";flex:1;border-bottom:1px solid}:host.horizontal.empty span{display:none}:host.horizontal:not(.empty):before{margin-right:.5em}:host.horizontal:not(.empty):after{margin-left:.5em}\n"] }]
1803
+ }], propDecorators: { label: [{
1804
+ type: Input
1805
+ }], direction: [{
1806
+ type: Input
1807
+ }, {
1808
+ type: HostBinding,
1809
+ args: ['class']
1810
+ }], _empty: [{
1811
+ type: HostBinding,
1812
+ args: [`class.${UIClass.Empty}`]
1813
+ }] } });
1814
+
1815
+ class LoaderConstants {
1816
+ }
1817
+ LoaderConstants.GLOBAL_LOADER_ID = 'global';
1818
+ LoaderConstants.LOCAL_LOADER_ID = 'local';
1819
+ LoaderConstants.CSS_CLASS_BACKGROUND = 'background';
1820
+
1821
+ class LoaderService {
1822
+ constructor() {
1823
+ this.loaderSubject = new BehaviorSubject([]);
1824
+ this.loaders$ = this.loaderSubject
1825
+ .asObservable()
1826
+ .pipe(filter(loaders => any(loaders)), distinctUntilChanged());
1827
+ }
1828
+ /**
1829
+ * Show loader by Id
1830
+ * @param id Loader Id
1831
+ * @param register If true register loader and show it
1832
+ */
1833
+ show(id = LoaderConstants.GLOBAL_LOADER_ID, register = false) {
1834
+ return this.setLoaderStatus(id, true, register);
1835
+ }
1836
+ /**
1837
+ * Hide loader
1838
+ * @param id Loader Id
1839
+ */
1840
+ hide(id = LoaderConstants.GLOBAL_LOADER_ID) {
1841
+ this.setLoaderStatus(id, false);
1842
+ }
1843
+ /**
1844
+ * Register loader for next use
1845
+ * @param event Loader event
1846
+ * @returns Registred loade observable
1847
+ */
1848
+ register(event) {
1849
+ const loaders = this.loaderSubject.getValue();
1850
+ if (addItem(loaders, event, () => hasObjectItem(loaders, nameof('id'), event.id))) {
1851
+ this.loaderSubject.next(loaders);
1852
+ }
1853
+ return this.selectLoaderById(event.id);
1854
+ }
1855
+ /**
1856
+ * Remove loader
1857
+ * @param id Loader Id
1858
+ */
1859
+ remove(id = LoaderConstants.GLOBAL_LOADER_ID) {
1860
+ const loaders = this.loaderSubject.getValue();
1861
+ if (removeItemBy(loaders, loader => loader.id == id)) {
1862
+ this.loaderSubject.next(loaders);
1863
+ }
1864
+ }
1865
+ selectLoaderById(id) {
1866
+ return this.loaders$
1867
+ .pipe(map(loaders => loaders.find(loader => loader.id == id)), distinctUntilChanged());
1868
+ }
1869
+ setLoaderStatus(id, status, register = false) {
1870
+ const loaders = this.loaderSubject.getValue(), ILoaderEvent = { id, status }, loader = firstOrDefault(loaders, (loader) => loader.id == id);
1871
+ if (isDefined(loader) && loader?.status == status)
1872
+ return this.selectLoaderById(id);
1873
+ const updatedLoaders = updateItemBy(loaders, (loader) => loader.id == id, ILoaderEvent);
1874
+ if (isDefined(updatedLoaders)) {
1875
+ this.loaderSubject.next(updatedLoaders);
1876
+ }
1877
+ if (register) {
1878
+ return this.register(ILoaderEvent);
1879
+ }
1880
+ return null;
1881
+ }
1882
+ }
1883
+ LoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1884
+ LoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoaderService, providedIn: 'root' });
1885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoaderService, decorators: [{
1886
+ type: Injectable,
1887
+ args: [{
1888
+ providedIn: 'root'
1889
+ }]
1890
+ }] });
1891
+
1892
+ class LoaderBaseComponent {
1893
+ constructor(loaderService) {
1894
+ this.loaderService = loaderService;
1895
+ this.UIClass = UIClass;
1896
+ /**
1897
+ * Loader identificator (global by default)
1898
+ */
1899
+ this.id = LoaderConstants.GLOBAL_LOADER_ID;
1900
+ /**
1901
+ * Is start on init (loader register with show = True)
1902
+ */
1903
+ this.start = false;
1904
+ /**
1905
+ * Loader when active(show) has background(low opacity)
1906
+ */
1907
+ this.background = true;
1908
+ this.show$ = EMPTY;
1909
+ }
1910
+ ngOnInit() {
1911
+ // register new loader
1912
+ this.show$ = this.loaderService.register({ id: this.id, status: this.start })
1913
+ .pipe(map((event) => this.id === event.id && event.status));
1914
+ }
1915
+ get preLoaderClasses() {
1916
+ let classes = {};
1917
+ if (this.id === LoaderConstants.GLOBAL_LOADER_ID)
1918
+ classes[LoaderConstants.GLOBAL_LOADER_ID] = true;
1919
+ else
1920
+ classes[LoaderConstants.LOCAL_LOADER_ID] = true;
1921
+ classes[LoaderConstants.CSS_CLASS_BACKGROUND] = this.background;
1922
+ return classes;
1923
+ }
1924
+ }
1925
+ LoaderBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoaderBaseComponent, deps: [{ token: LoaderService }], target: i0.ɵɵFactoryTarget.Directive });
1926
+ LoaderBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: LoaderBaseComponent, inputs: { id: "id", start: "start", background: "background" }, ngImport: i0 });
1927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoaderBaseComponent, decorators: [{
1928
+ type: Directive
1929
+ }], ctorParameters: function () { return [{ type: LoaderService }]; }, propDecorators: { id: [{
1930
+ type: Input
1931
+ }], start: [{
1932
+ type: Input
1933
+ }], background: [{
1934
+ type: Input
1935
+ }] } });
1936
+
1937
+ class BounceLoaderComponent extends LoaderBaseComponent {
1938
+ }
1939
+ BounceLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BounceLoaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1940
+ BounceLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: BounceLoaderComponent, selector: "sfc-bounce-loader", usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"show$ | async\" class=\"preloader\" [ngClass]=\"preLoaderClasses\">\r\n <div class=\"spinner\">\r\n <div class=\"bounce\"></div>\r\n <div class=\"bounce\"></div>\r\n <div class=\"bounce\"></div>\r\n </div>\r\n</div>", styles: [".preloader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center}.preloader.background{opacity:.7}.preloader.background,:host-context(.sfc-default-theme) .preloader.background{background-color:#fff}:host-context(.sfc-dark-theme) .preloader.background{background-color:#656d78}.preloader.global{z-index:9999;position:fixed}.preloader.local{z-index:9998;position:absolute}\n", ".spinner{text-align:center}.spinner .bounce{border-radius:100%;display:inline-block;animation:bounce-delay 1.4s infinite ease-in-out both;width:1em;height:1em}.spinner .bounce,:host-context(.sfc-default-theme) .spinner .bounce{background-color:#545e61}:host-context(.sfc-dark-theme) .spinner .bounce{background-color:#fff}.spinner .bounce:nth-child(1){animation-delay:-.32s}.spinner .bounce:nth-child(2){animation-delay:-.16s}@keyframes bounce-delay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] });
1941
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: BounceLoaderComponent, decorators: [{
1942
+ type: Component,
1943
+ args: [{ selector: 'sfc-bounce-loader', template: "<div *ngIf=\"show$ | async\" class=\"preloader\" [ngClass]=\"preLoaderClasses\">\r\n <div class=\"spinner\">\r\n <div class=\"bounce\"></div>\r\n <div class=\"bounce\"></div>\r\n <div class=\"bounce\"></div>\r\n </div>\r\n</div>", styles: [".preloader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center}.preloader.background{opacity:.7}.preloader.background,:host-context(.sfc-default-theme) .preloader.background{background-color:#fff}:host-context(.sfc-dark-theme) .preloader.background{background-color:#656d78}.preloader.global{z-index:9999;position:fixed}.preloader.local{z-index:9998;position:absolute}\n", ".spinner{text-align:center}.spinner .bounce{border-radius:100%;display:inline-block;animation:bounce-delay 1.4s infinite ease-in-out both;width:1em;height:1em}.spinner .bounce,:host-context(.sfc-default-theme) .spinner .bounce{background-color:#545e61}:host-context(.sfc-dark-theme) .spinner .bounce{background-color:#fff}.spinner .bounce:nth-child(1){animation-delay:-.32s}.spinner .bounce:nth-child(2){animation-delay:-.16s}@keyframes bounce-delay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\n"] }]
1944
+ }] });
1945
+
1946
+ var CircleLoaderType;
1947
+ (function (CircleLoaderType) {
1948
+ CircleLoaderType["Default"] = "default";
1949
+ CircleLoaderType["Fading"] = "fading";
1950
+ })(CircleLoaderType || (CircleLoaderType = {}));
1951
+
1952
+ class CircleLoaderComponent extends LoaderBaseComponent {
1953
+ constructor() {
1954
+ super(...arguments);
1955
+ this.type = CircleLoaderType.Default;
1956
+ }
1957
+ }
1958
+ CircleLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CircleLoaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1959
+ CircleLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CircleLoaderComponent, selector: "sfc-circle-loader", inputs: { type: "type" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"show$ | async\" class=\"preloader\" [ngClass]=\"preLoaderClasses\">\r\n <div class=\"circles-container\" [ngClass]=\"type\">\r\n <div class=\"circle1\"></div>\r\n <div class=\"circle2\"></div>\r\n <div class=\"circle3\"></div>\r\n <div class=\"circle4\"></div>\r\n <div class=\"circle5\"></div>\r\n <div class=\"circle6\"></div>\r\n <div class=\"circle7\"></div>\r\n <div class=\"circle8\"></div>\r\n <div class=\"circle9\"></div>\r\n <div class=\"circle10\"></div>\r\n <div class=\"circle11\"></div>\r\n <div class=\"circle12\"></div>\r\n </div>\r\n</div>", styles: [".preloader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center}.preloader.background{opacity:.7}.preloader.background,:host-context(.sfc-default-theme) .preloader.background{background-color:#fff}:host-context(.sfc-dark-theme) .preloader.background{background-color:#656d78}.preloader.global{z-index:9999;position:fixed}.preloader.local{z-index:9998;position:absolute}\n", ".circles-container{position:relative;width:2.5em;height:2.5em}.circles-container div{width:100%;height:100%;position:absolute;left:0;top:0}.circles-container div:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;border-radius:100%;animation:bounce-delay 1.2s infinite ease-in-out both}.circles-container div:before,:host-context(.sfc-default-theme) .circles-container div:before{background-color:#545e61}:host-context(.sfc-dark-theme) .circles-container div:before{background-color:#fff}.circles-container.fading div:before{animation-name:circle-fade-delay}.circles-container .circle2{transform:rotate(30deg)}.circles-container .circle2:before{animation-delay:-1.1s}.circles-container .circle3{transform:rotate(60deg)}.circles-container .circle3:before{animation-delay:-1s}.circles-container .circle4{transform:rotate(90deg)}.circles-container .circle4:before{animation-delay:-.9s}.circles-container .circle5{transform:rotate(120deg)}.circles-container .circle5:before{animation-delay:-.8s}.circles-container .circle6{transform:rotate(150deg)}.circles-container .circle6:before{animation-delay:-.7s}.circles-container .circle7{transform:rotate(180deg)}.circles-container .circle7:before{animation-delay:-.6s}.circles-container .circle8{transform:rotate(210deg)}.circles-container .circle8:before{animation-delay:-.5s}.circles-container .circle9{transform:rotate(240deg)}.circles-container .circle9:before{animation-delay:-.4s}.circles-container .circle10{transform:rotate(270deg)}.circles-container .circle10:before{animation-delay:-.3s}.circles-container .circle11{transform:rotate(300deg)}.circles-container .circle11:before{animation-delay:-.2s}.circles-container .circle12{transform:rotate(330deg)}.circles-container .circle12:before{animation-delay:-.1s}@keyframes bounce-delay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}@keyframes circle-fade-delay{0%,39%,to{opacity:0}40%{opacity:1}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] });
1960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CircleLoaderComponent, decorators: [{
1961
+ type: Component,
1962
+ args: [{ selector: 'sfc-circle-loader', template: "<div *ngIf=\"show$ | async\" class=\"preloader\" [ngClass]=\"preLoaderClasses\">\r\n <div class=\"circles-container\" [ngClass]=\"type\">\r\n <div class=\"circle1\"></div>\r\n <div class=\"circle2\"></div>\r\n <div class=\"circle3\"></div>\r\n <div class=\"circle4\"></div>\r\n <div class=\"circle5\"></div>\r\n <div class=\"circle6\"></div>\r\n <div class=\"circle7\"></div>\r\n <div class=\"circle8\"></div>\r\n <div class=\"circle9\"></div>\r\n <div class=\"circle10\"></div>\r\n <div class=\"circle11\"></div>\r\n <div class=\"circle12\"></div>\r\n </div>\r\n</div>", styles: [".preloader{position:relative;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center}.preloader.background{opacity:.7}.preloader.background,:host-context(.sfc-default-theme) .preloader.background{background-color:#fff}:host-context(.sfc-dark-theme) .preloader.background{background-color:#656d78}.preloader.global{z-index:9999;position:fixed}.preloader.local{z-index:9998;position:absolute}\n", ".circles-container{position:relative;width:2.5em;height:2.5em}.circles-container div{width:100%;height:100%;position:absolute;left:0;top:0}.circles-container div:before{content:\"\";display:block;margin:0 auto;width:15%;height:15%;border-radius:100%;animation:bounce-delay 1.2s infinite ease-in-out both}.circles-container div:before,:host-context(.sfc-default-theme) .circles-container div:before{background-color:#545e61}:host-context(.sfc-dark-theme) .circles-container div:before{background-color:#fff}.circles-container.fading div:before{animation-name:circle-fade-delay}.circles-container .circle2{transform:rotate(30deg)}.circles-container .circle2:before{animation-delay:-1.1s}.circles-container .circle3{transform:rotate(60deg)}.circles-container .circle3:before{animation-delay:-1s}.circles-container .circle4{transform:rotate(90deg)}.circles-container .circle4:before{animation-delay:-.9s}.circles-container .circle5{transform:rotate(120deg)}.circles-container .circle5:before{animation-delay:-.8s}.circles-container .circle6{transform:rotate(150deg)}.circles-container .circle6:before{animation-delay:-.7s}.circles-container .circle7{transform:rotate(180deg)}.circles-container .circle7:before{animation-delay:-.6s}.circles-container .circle8{transform:rotate(210deg)}.circles-container .circle8:before{animation-delay:-.5s}.circles-container .circle9{transform:rotate(240deg)}.circles-container .circle9:before{animation-delay:-.4s}.circles-container .circle10{transform:rotate(270deg)}.circles-container .circle10:before{animation-delay:-.3s}.circles-container .circle11{transform:rotate(300deg)}.circles-container .circle11:before{animation-delay:-.2s}.circles-container .circle12{transform:rotate(330deg)}.circles-container .circle12:before{animation-delay:-.1s}@keyframes bounce-delay{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}@keyframes circle-fade-delay{0%,39%,to{opacity:0}40%{opacity:1}}\n"] }]
1963
+ }], propDecorators: { type: [{
1964
+ type: Input
1965
+ }] } });
1966
+
1967
+ var ModalTemplate;
1968
+ (function (ModalTemplate) {
1969
+ ModalTemplate["Body"] = "body";
1970
+ ModalTemplate["Header"] = "header";
1971
+ ModalTemplate["Footer"] = "footer";
1972
+ })(ModalTemplate || (ModalTemplate = {}));
1973
+
1974
+ class ModalService {
1975
+ constructor() {
1976
+ this.subject = new BehaviorSubject({ open: false });
1977
+ this.modal$ = this.subject.asObservable();
1978
+ }
1979
+ get isOpen() {
1980
+ return this.subject.value.open;
1981
+ }
1982
+ toggle() {
1983
+ this.subject.next({ open: !this.isOpen });
1984
+ }
1985
+ close() {
1986
+ this.subject.next({ open: false });
1987
+ }
1988
+ open(args) {
1989
+ this.args = args;
1990
+ this.subject.next({ open: true, args: args });
1991
+ }
1992
+ }
1993
+ ModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1994
+ ModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalService, providedIn: 'root' });
1995
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalService, decorators: [{
1996
+ type: Injectable,
1997
+ args: [{
1998
+ providedIn: 'root'
1999
+ }]
2000
+ }] });
2001
+
2002
+ class TemplateContentComponent {
2003
+ get showDefault() {
2004
+ return !isDefined(this.referenceContent)
2005
+ && !isDefined(this.templateContent);
2006
+ }
2007
+ get templateContent() {
2008
+ const templateRef = firstOrDefault(this.templatesContent?.toArray(), t => t.templateName == this.templateType);
2009
+ return templateRef?.template || null;
2010
+ }
2011
+ }
2012
+ TemplateContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TemplateContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2013
+ TemplateContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TemplateContentComponent, selector: "sfc-template-content", inputs: { contextData: "contextData", referenceContent: "referenceContent", templateType: "templateType", templatesContent: "templatesContent", defaultContent: "defaultContent" }, ngImport: i0, template: "<ng-container *ngIf=\"referenceContent;else template\">\r\n <ng-container *ngTemplateOutlet=\"referenceContent;context:{$implicit: contextData}\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #template>\r\n <ng-container *ngTemplateOutlet=\"templateContent;context:{$implicit: contextData}\">\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-container *ngIf=\"defaultContent && showDefault\">\r\n <ng-container *ngTemplateOutlet=\"defaultContent;context:{$implicit: contextData}\"></ng-container>\r\n</ng-container>", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
2014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TemplateContentComponent, decorators: [{
2015
+ type: Component,
2016
+ args: [{ selector: 'sfc-template-content', template: "<ng-container *ngIf=\"referenceContent;else template\">\r\n <ng-container *ngTemplateOutlet=\"referenceContent;context:{$implicit: contextData}\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #template>\r\n <ng-container *ngTemplateOutlet=\"templateContent;context:{$implicit: contextData}\">\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-container *ngIf=\"defaultContent && showDefault\">\r\n <ng-container *ngTemplateOutlet=\"defaultContent;context:{$implicit: contextData}\"></ng-container>\r\n</ng-container>", styles: [":host{display:contents}\n"] }]
2017
+ }], propDecorators: { contextData: [{
2018
+ type: Input
2019
+ }], referenceContent: [{
2020
+ type: Input
2021
+ }], templateType: [{
2022
+ type: Input
2023
+ }], templatesContent: [{
2024
+ type: Input
2025
+ }], defaultContent: [{
2026
+ type: Input
2027
+ }] } });
2028
+
2029
+ class CloseComponent {
2030
+ constructor() {
2031
+ this.faTimes = faTimes;
2032
+ }
2033
+ }
2034
+ CloseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CloseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2035
+ CloseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CloseComponent, selector: "sfc-close", ngImport: i0, template: "<div class=\"container\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n</div>", styles: [":host{color:#545e61;cursor:pointer}:host:hover{color:#ffce54}\n"], dependencies: [{ kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
2036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CloseComponent, decorators: [{
2037
+ type: Component,
2038
+ args: [{ selector: 'sfc-close', template: "<div class=\"container\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n</div>", styles: [":host{color:#545e61;cursor:pointer}:host:hover{color:#ffce54}\n"] }]
2039
+ }] });
2040
+
2041
+ class DefaultModalHeaderComponent {
2042
+ constructor(modalService) {
2043
+ this.modalService = modalService;
2044
+ this.DEFAULT_MODAL_HEADER_MODEL = {
2045
+ icon: faWindowRestore,
2046
+ showCloseIcon: true,
2047
+ text: 'Modal'
2048
+ };
2049
+ }
2050
+ get icon() {
2051
+ return this.model?.icon || faWindowRestore;
2052
+ }
2053
+ ngOnInit() {
2054
+ if (!isDefined(this.model))
2055
+ this.model = this.DEFAULT_MODAL_HEADER_MODEL;
2056
+ }
2057
+ onClose() {
2058
+ this.modalService.close();
2059
+ }
2060
+ }
2061
+ DefaultModalHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DefaultModalHeaderComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
2062
+ DefaultModalHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DefaultModalHeaderComponent, selector: "sfc-default-modal-header", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"content\">\r\n <fa-icon *ngIf=\"icon\" class=\"icon\" [icon]=\"icon\"></fa-icon>\r\n <span *ngIf=\"model.text\" class=\"label\">{{model.text}}</span>\r\n <sfc-close *ngIf=\"model.showCloseIcon\" (click)=\"onClose()\"></sfc-close>\r\n </div>\r\n\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{display:inline-flex;width:100%}:host .container{width:100%;padding-bottom:.5em}:host .container .content{display:flex;align-items:center;justify-content:center;padding:.5em 0}:host .container .content .icon{position:absolute;left:1.5em;font-size:1.3em}:host .container .content .label{font-size:1.2em;font-weight:700;-webkit-user-select:none;user-select:none;padding:0 .7em}:host .container .content sfc-close{position:absolute;right:1.5em}:host .container ::ng-deep sfc-delimeter.horizontal:before,:host-context(.sfc-default-theme) :host .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container ::ng-deep sfc-delimeter.horizontal:after,:host-context(.sfc-default-theme) :host .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }, { kind: "component", type: CloseComponent, selector: "sfc-close" }] });
2063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DefaultModalHeaderComponent, decorators: [{
2064
+ type: Component,
2065
+ args: [{ selector: 'sfc-default-modal-header', template: "<div class=\"container\">\r\n <div class=\"content\">\r\n <fa-icon *ngIf=\"icon\" class=\"icon\" [icon]=\"icon\"></fa-icon>\r\n <span *ngIf=\"model.text\" class=\"label\">{{model.text}}</span>\r\n <sfc-close *ngIf=\"model.showCloseIcon\" (click)=\"onClose()\"></sfc-close>\r\n </div>\r\n\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{display:inline-flex;width:100%}:host .container{width:100%;padding-bottom:.5em}:host .container .content{display:flex;align-items:center;justify-content:center;padding:.5em 0}:host .container .content .icon{position:absolute;left:1.5em;font-size:1.3em}:host .container .content .label{font-size:1.2em;font-weight:700;-webkit-user-select:none;user-select:none;padding:0 .7em}:host .container .content sfc-close{position:absolute;right:1.5em}:host .container ::ng-deep sfc-delimeter.horizontal:before,:host-context(.sfc-default-theme) :host .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container ::ng-deep sfc-delimeter.horizontal:after,:host-context(.sfc-default-theme) :host .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}\n"] }]
2066
+ }], ctorParameters: function () { return [{ type: ModalService }]; }, propDecorators: { model: [{
2067
+ type: Input
2068
+ }] } });
2069
+
2070
+ class DefaultModalFooterComponent {
2071
+ constructor(modalService) {
2072
+ this.modalService = modalService;
2073
+ this.DEFAULT_MODAL_FOOTER_MODEL = {
2074
+ cancelButton: true,
2075
+ applyButton: true,
2076
+ applyButtonText: 'Ok',
2077
+ cancelButtonText: 'Cancel'
2078
+ };
2079
+ this.BUTTON_CUSTOM_SIZE = 0.9;
2080
+ this.ComponentSize = ComponentSize;
2081
+ this.ButtonType = ButtonType;
2082
+ }
2083
+ ngOnInit() {
2084
+ if (!this.model) {
2085
+ this.model = Object.assign({}, this.DEFAULT_MODAL_FOOTER_MODEL);
2086
+ }
2087
+ else {
2088
+ if (isNullOrEmptyString(this.model.applyButtonText))
2089
+ this.model.applyButtonText = this.DEFAULT_MODAL_FOOTER_MODEL.applyButtonText;
2090
+ if (isNullOrEmptyString(this.model.cancelButtonText))
2091
+ this.model.cancelButtonText = this.DEFAULT_MODAL_FOOTER_MODEL.cancelButtonText;
2092
+ if (!isDefined(this.model.applyButton))
2093
+ this.model.applyButton = this.DEFAULT_MODAL_FOOTER_MODEL.applyButton;
2094
+ if (!isDefined(this.model.cancelButton))
2095
+ this.model.cancelButton = this.DEFAULT_MODAL_FOOTER_MODEL.cancelButton;
2096
+ }
2097
+ }
2098
+ onButtonClick(isCancelButton = false) {
2099
+ if (isCancelButton) {
2100
+ if (this.model.onCancel) {
2101
+ return this.model?.onCancel(this.modalService.args);
2102
+ }
2103
+ }
2104
+ else {
2105
+ if (this.model.onApply) {
2106
+ return this.model.onApply(this.modalService.args);
2107
+ }
2108
+ }
2109
+ this.modalService.toggle();
2110
+ }
2111
+ }
2112
+ DefaultModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DefaultModalFooterComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
2113
+ DefaultModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DefaultModalFooterComponent, selector: "sfc-default-modal-footer", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"container\">\r\n <sfc-button *ngIf=\"model.applyButton\" [sfcComponentSize] [customSize]=\"BUTTON_CUSTOM_SIZE\" [text]=\"model.applyButtonText\"\r\n [types]=\"[ButtonType.Rounded]\" (click)=\"onButtonClick()\">\r\n </sfc-button>\r\n <sfc-button *ngIf=\"model.cancelButton\" [sfcComponentSize] [customSize]=\"BUTTON_CUSTOM_SIZE\" [text]=\"model.cancelButtonText\"\r\n [types]=\"[ButtonType.Rounded]\" (click)=\"onButtonClick(true)\">\r\n </sfc-button>\r\n</div>", styles: [":host{display:inline-flex;width:100%}:host .container{display:flex;justify-content:center;align-items:center;width:100%}:host .container sfc-button:first-child{padding-right:.3em}:host .container sfc-button:nth-child(2){padding-left:.3em}:host .container ::ng-deep sfc-button .button.rounded{min-width:5em}:host .container ::ng-deep sfc-button .button:not(:hover){color:#545e61!important;border-color:#545e61!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ComponentSizeDirective, selector: "[sfcComponentSize]", inputs: ["sfcComponentSize", "customSize"] }, { kind: "component", type: ButtonComponent, selector: "sfc-button", inputs: ["text", "iconBefore", "iconAfter", "disabled", "types"] }] });
2114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DefaultModalFooterComponent, decorators: [{
2115
+ type: Component,
2116
+ args: [{ selector: 'sfc-default-modal-footer', template: "<div class=\"container\">\r\n <sfc-button *ngIf=\"model.applyButton\" [sfcComponentSize] [customSize]=\"BUTTON_CUSTOM_SIZE\" [text]=\"model.applyButtonText\"\r\n [types]=\"[ButtonType.Rounded]\" (click)=\"onButtonClick()\">\r\n </sfc-button>\r\n <sfc-button *ngIf=\"model.cancelButton\" [sfcComponentSize] [customSize]=\"BUTTON_CUSTOM_SIZE\" [text]=\"model.cancelButtonText\"\r\n [types]=\"[ButtonType.Rounded]\" (click)=\"onButtonClick(true)\">\r\n </sfc-button>\r\n</div>", styles: [":host{display:inline-flex;width:100%}:host .container{display:flex;justify-content:center;align-items:center;width:100%}:host .container sfc-button:first-child{padding-right:.3em}:host .container sfc-button:nth-child(2){padding-left:.3em}:host .container ::ng-deep sfc-button .button.rounded{min-width:5em}:host .container ::ng-deep sfc-button .button:not(:hover){color:#545e61!important;border-color:#545e61!important}\n"] }]
2117
+ }], ctorParameters: function () { return [{ type: ModalService }]; }, propDecorators: { model: [{
2118
+ type: Input
2119
+ }] } });
2120
+
2121
+ class ModalComponent {
2122
+ constructor(modalService) {
2123
+ this.modalService = modalService;
2124
+ this.ModalTemplate = ModalTemplate;
2125
+ // End Defaults
2126
+ this.hideOnEsc = true;
2127
+ this.hideOnClickOutside = true;
2128
+ // hide modal header (even default)
2129
+ this.showHeader = true;
2130
+ // hide modal footer (even default)
2131
+ this.showFooter = true;
2132
+ }
2133
+ onEscapeKeyDownHandler() {
2134
+ if (this.hideOnEsc)
2135
+ this.close();
2136
+ }
2137
+ close() {
2138
+ this.modalService.close();
2139
+ }
2140
+ }
2141
+ ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
2142
+ ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ModalComponent, selector: "sfc-modal", inputs: { body: "body", header: "header", footer: "footer", defaultHeaderModel: "defaultHeaderModel", defaultFooterModel: "defaultFooterModel", hideOnEsc: "hideOnEsc", hideOnClickOutside: "hideOnClickOutside", showHeader: "showHeader", showFooter: "showFooter" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyDownHandler()" } }, queries: [{ propertyName: "templates", predicate: TemplateReferenceDirective, read: TemplateReferenceDirective }], ngImport: i0, template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div *ngIf=\"showHeader\" class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"showFooter\" class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.9em 1.5em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;flex:0 0 auto;justify-content:center}.overlay .content>div.body{overflow-y:auto;flex:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TemplateContentComponent, selector: "sfc-template-content", inputs: ["contextData", "referenceContent", "templateType", "templatesContent", "defaultContent"] }, { kind: "component", type: DefaultModalHeaderComponent, selector: "sfc-default-modal-header", inputs: ["model"] }, { kind: "component", type: DefaultModalFooterComponent, selector: "sfc-default-modal-footer", inputs: ["model"] }], animations: [
2143
+ trigger('hideOverlay', [
2144
+ state('initial', style({ opacity: 1, visibility: 'visible' })),
2145
+ state('void', style({ opacity: 0, visibility: 'hidden' })),
2146
+ transition('* => void', [
2147
+ group([
2148
+ query(':self', [
2149
+ animate('400ms cubic-bezier(.55, 0, .1, 1)', style({
2150
+ opacity: 0,
2151
+ visibility: 'hidden'
2152
+ }))
2153
+ ]),
2154
+ query('@hideContent', [animateChild()])
2155
+ ])
2156
+ ])
2157
+ ]),
2158
+ trigger('hideContent', [
2159
+ state('initial', style({ opacity: 1, visibility: 'visible', transform: 'scale(1)' })),
2160
+ state('void', style({ opacity: 0, visibility: 'hidden', transform: 'scale(1.2)' })),
2161
+ transition('* => void', animate('400ms cubic-bezier(.55, 0, .1, 1)'))
2162
+ ])
2163
+ ] });
2164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalComponent, decorators: [{
2165
+ type: Component,
2166
+ args: [{ selector: 'sfc-modal', animations: [
2167
+ trigger('hideOverlay', [
2168
+ state('initial', style({ opacity: 1, visibility: 'visible' })),
2169
+ state('void', style({ opacity: 0, visibility: 'hidden' })),
2170
+ transition('* => void', [
2171
+ group([
2172
+ query(':self', [
2173
+ animate('400ms cubic-bezier(.55, 0, .1, 1)', style({
2174
+ opacity: 0,
2175
+ visibility: 'hidden'
2176
+ }))
2177
+ ]),
2178
+ query('@hideContent', [animateChild()])
2179
+ ])
2180
+ ])
2181
+ ]),
2182
+ trigger('hideContent', [
2183
+ state('initial', style({ opacity: 1, visibility: 'visible', transform: 'scale(1)' })),
2184
+ state('void', style({ opacity: 0, visibility: 'hidden', transform: 'scale(1.2)' })),
2185
+ transition('* => void', animate('400ms cubic-bezier(.55, 0, .1, 1)'))
2186
+ ])
2187
+ ], template: "<div class=\"overlay\" [@hideOverlay] (click)=\"hideOnClickOutside && close()\">\r\n <div class=\"content\" [@hideContent] (click)=\"$event.stopPropagation()\">\r\n\r\n <div *ngIf=\"showHeader\" class=\"header\">\r\n\r\n <sfc-template-content [referenceContent]=\"header\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Header\" [defaultContent]=\"defaultHeader\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultHeader>\r\n <sfc-default-modal-header [model]=\"defaultHeaderModel\"> </sfc-default-modal-header>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n\r\n <sfc-template-content [referenceContent]=\"body\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Body\">\r\n </sfc-template-content>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"showFooter\" class=\"footer\">\r\n\r\n <sfc-template-content [referenceContent]=\"footer\" [templatesContent]=\"templates\"\r\n [templateType]=\"ModalTemplate.Footer\" [defaultContent]=\"defaultFooter\">\r\n </sfc-template-content>\r\n\r\n <ng-template #defaultFooter>\r\n <sfc-default-modal-footer [model]=\"defaultFooterModel\"></sfc-default-modal-footer>\r\n </ng-template>\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".overlay{display:flex;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background-color:#0009;-webkit-backface-visibility:visible;backface-visibility:visible;animation:expand-overlay .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-overlay{0%{visibility:hidden;opacity:0}}.overlay .content{display:flex;align-items:center;position:relative;padding:.9em 1.5em;margin:auto;background-color:#f5f7fa;max-width:calc(100% - 3em);max-height:calc(100% - 3em);border-radius:3px;box-shadow:0 .125em .625em #656d78;transform:scale(1);flex-direction:column;animation:expand-modal .4s cubic-bezier(.55,0,.1,1)}@keyframes expand-modal{0%{visibility:hidden;opacity:0;transform:scale(1.2)}}.overlay .content>div{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#545e61;flex-direction:row;display:flex;flex:0 0 auto;justify-content:center}.overlay .content>div.body{overflow-y:auto;flex:0}\n"] }]
2188
+ }], ctorParameters: function () { return [{ type: ModalService }]; }, propDecorators: { body: [{
2189
+ type: Input
2190
+ }], header: [{
2191
+ type: Input
2192
+ }], footer: [{
2193
+ type: Input
2194
+ }], defaultHeaderModel: [{
2195
+ type: Input
2196
+ }], defaultFooterModel: [{
2197
+ type: Input
2198
+ }], hideOnEsc: [{
2199
+ type: Input
2200
+ }], hideOnClickOutside: [{
2201
+ type: Input
2202
+ }], showHeader: [{
2203
+ type: Input
2204
+ }], showFooter: [{
2205
+ type: Input
2206
+ }], onEscapeKeyDownHandler: [{
2207
+ type: HostListener,
2208
+ args: ['document:keydown.escape']
2209
+ }], templates: [{
2210
+ type: ContentChildren,
2211
+ args: [TemplateReferenceDirective, { read: TemplateReferenceDirective }]
2212
+ }] } });
2213
+
2214
+ class ModalOpenOnClickDirective {
2215
+ constructor(templateRef, viewContainer, modalService) {
2216
+ this.templateRef = templateRef;
2217
+ this.viewContainer = viewContainer;
2218
+ this.modalService = modalService;
2219
+ this.clickHandler = (() => {
2220
+ this.viewContainer.clear();
2221
+ this.viewContainer.createEmbeddedView(this.templateRef);
2222
+ this.modalService.toggle();
2223
+ }).bind(this);
2224
+ this.elements = [];
2225
+ }
2226
+ set modalOpenOnClick(elements) {
2227
+ if (!isDefined(elements))
2228
+ return;
2229
+ if (elements instanceof HTMLElement)
2230
+ this.elements = [elements];
2231
+ else
2232
+ this.elements = elements;
2233
+ this.elements.forEach(el => {
2234
+ el.addEventListener('click', this.clickHandler);
2235
+ });
2236
+ }
2237
+ ngOnInit() {
2238
+ this._closeSubscription = this.modalService.modal$
2239
+ .pipe(filter((event) => !event.open))
2240
+ .subscribe(() => this.viewContainer.clear());
2241
+ }
2242
+ ngOnDestroy() {
2243
+ this._closeSubscription?.unsubscribe();
2244
+ this.elements.forEach(el => el.removeEventListener('click', this.clickHandler));
2245
+ }
2246
+ }
2247
+ ModalOpenOnClickDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalOpenOnClickDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: ModalService }], target: i0.ɵɵFactoryTarget.Directive });
2248
+ ModalOpenOnClickDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ModalOpenOnClickDirective, selector: "[sfcModalOpenOnClick]", inputs: { modalOpenOnClick: ["sfcModalOpenOnClick", "modalOpenOnClick"] }, ngImport: i0 });
2249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalOpenOnClickDirective, decorators: [{
2250
+ type: Directive,
2251
+ args: [{
2252
+ selector: '[sfcModalOpenOnClick]'
2253
+ }]
2254
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ModalService }]; }, propDecorators: { modalOpenOnClick: [{
2255
+ type: Input,
2256
+ args: ['sfcModalOpenOnClick']
2257
+ }] } });
2258
+
2259
+ class ModalOpenDirective {
2260
+ constructor(templateRef, viewContainer, modalService) {
2261
+ this.templateRef = templateRef;
2262
+ this.viewContainer = viewContainer;
2263
+ this.modalService = modalService;
2264
+ this._openSubscription = this.modalService.modal$
2265
+ .subscribe((event) => {
2266
+ this.viewContainer.clear();
2267
+ if (event.open)
2268
+ this.viewContainer.createEmbeddedView(this.templateRef);
2269
+ });
2270
+ }
2271
+ ngOnDestroy() {
2272
+ this._openSubscription.unsubscribe();
2273
+ }
2274
+ }
2275
+ ModalOpenDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalOpenDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: ModalService }], target: i0.ɵɵFactoryTarget.Directive });
2276
+ ModalOpenDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: ModalOpenDirective, selector: "[sfcModalOpen]", ngImport: i0 });
2277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ModalOpenDirective, decorators: [{
2278
+ type: Directive,
2279
+ args: [{
2280
+ selector: '[sfcModalOpen]'
2281
+ }]
2282
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: ModalService }]; } });
2283
+
2284
+ class HamburgerBaseComponent {
2285
+ constructor() {
2286
+ this.open = false;
2287
+ this.onClick = () => this.open = !this.open;
2288
+ }
2289
+ }
2290
+ HamburgerBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2291
+ HamburgerBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: HamburgerBaseComponent, inputs: { open: "open" }, host: { listeners: { "click": "onClick()" }, properties: { "class.open": "this.open" } }, ngImport: i0 });
2292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerBaseComponent, decorators: [{
2293
+ type: Directive
2294
+ }], propDecorators: { open: [{
2295
+ type: Input
2296
+ }, {
2297
+ type: HostBinding,
2298
+ args: ['class.' + UIClass.Open]
2299
+ }], onClick: [{
2300
+ type: HostListener,
2301
+ args: ['click']
2302
+ }] } });
2303
+
2304
+ class HamburgerComponent extends HamburgerBaseComponent {
2305
+ }
2306
+ HamburgerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2307
+ HamburgerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: HamburgerComponent, selector: "sfc-hamburger", usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"line half start\"></div>\r\n <div class=\"line\"></div>\r\n <div class=\"line half end\"></div>\r\n</div>", styles: [".container{width:1em;height:1em;display:flex;flex-direction:column;justify-content:space-between;cursor:pointer;transition:transform .33s ease-out}:host(.open) .container{transform:rotate(-45deg)}.container .line{transition:background-color .5s ease;border-radius:.31em;width:100%;height:.25em}.container .line,:host-context(.sfc-default-theme) .container .line{background-color:#545e61}:host-context(.sfc-dark-theme) .container .line{background-color:#fff}.container .line.half{width:50%}.container .line.start{transition:transform .33s cubic-bezier(.54,-.81,.57,.57),background-color .5s ease;transform-origin:right}:host(.open) .container .line.start{transform:rotate(-90deg) translate(.1375em)}.container .line.end{align-self:flex-end;transition:transform .33s cubic-bezier(.54,-.81,.57,.57),background-color .5s ease;transform-origin:left}:host(.open) .container .line.end{transform:rotate(-90deg) translate(-.1875em)}.container:hover .line{background-color:#ffce54!important}\n"] });
2308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerComponent, decorators: [{
2309
+ type: Component,
2310
+ args: [{ selector: 'sfc-hamburger', template: "<div class=\"container\">\r\n <div class=\"line half start\"></div>\r\n <div class=\"line\"></div>\r\n <div class=\"line half end\"></div>\r\n</div>", styles: [".container{width:1em;height:1em;display:flex;flex-direction:column;justify-content:space-between;cursor:pointer;transition:transform .33s ease-out}:host(.open) .container{transform:rotate(-45deg)}.container .line{transition:background-color .5s ease;border-radius:.31em;width:100%;height:.25em}.container .line,:host-context(.sfc-default-theme) .container .line{background-color:#545e61}:host-context(.sfc-dark-theme) .container .line{background-color:#fff}.container .line.half{width:50%}.container .line.start{transition:transform .33s cubic-bezier(.54,-.81,.57,.57),background-color .5s ease;transform-origin:right}:host(.open) .container .line.start{transform:rotate(-90deg) translate(.1375em)}.container .line.end{align-self:flex-end;transition:transform .33s cubic-bezier(.54,-.81,.57,.57),background-color .5s ease;transform-origin:left}:host(.open) .container .line.end{transform:rotate(-90deg) translate(-.1875em)}.container:hover .line{background-color:#ffce54!important}\n"] }]
2311
+ }] });
2312
+
2313
+ class HamburgerMenuComponent extends HamburgerBaseComponent {
2314
+ constructor() {
2315
+ super(...arguments);
2316
+ this.label = 'Menu';
2317
+ }
2318
+ }
2319
+ HamburgerMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2320
+ HamburgerMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: HamburgerMenuComponent, selector: "sfc-hamburger-menu", inputs: { label: "label" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span class=\"text\">{{label}}</span>\r\n</div>", styles: [":host .container{display:inline-block;cursor:pointer}:host .container span{position:relative;transition:background .5s ease;display:block;height:.125em;margin-bottom:.1875em}:host .container span,:host-context(.sfc-default-theme) :host .container span{background:#545e61}:host-context(.sfc-dark-theme) :host .container span{background:#fff}:host .container span.text{font-size:.4375em;letter-spacing:.4px;transition:opacity 1s ease-in-out,color .5s ease;background:none!important;opacity:1;text-transform:uppercase}:host .container span.text,:host-context(.sfc-default-theme) :host .container span.text{color:#545e61}:host-context(.sfc-dark-theme) :host .container span.text{color:#fff}:host .container:hover span{background:#ffce54}:host .container:hover span.text{color:#ffce54}:host.open .container span:nth-child(1){transform:rotate(-45deg);top:.625em}:host.open .container span:nth-child(2),:host.open .container span:nth-child(3){width:0;opacity:0}:host.open .container span:nth-child(4){transform:rotate(45deg);top:-.3125em}:host.open .container span.text{opacity:0}\n"] });
2321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: HamburgerMenuComponent, decorators: [{
2322
+ type: Component,
2323
+ args: [{ selector: 'sfc-hamburger-menu', template: "<div class=\"container\">\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span> &nbsp;</span>\r\n <span class=\"text\">{{label}}</span>\r\n</div>", styles: [":host .container{display:inline-block;cursor:pointer}:host .container span{position:relative;transition:background .5s ease;display:block;height:.125em;margin-bottom:.1875em}:host .container span,:host-context(.sfc-default-theme) :host .container span{background:#545e61}:host-context(.sfc-dark-theme) :host .container span{background:#fff}:host .container span.text{font-size:.4375em;letter-spacing:.4px;transition:opacity 1s ease-in-out,color .5s ease;background:none!important;opacity:1;text-transform:uppercase}:host .container span.text,:host-context(.sfc-default-theme) :host .container span.text{color:#545e61}:host-context(.sfc-dark-theme) :host .container span.text{color:#fff}:host .container:hover span{background:#ffce54}:host .container:hover span.text{color:#ffce54}:host.open .container span:nth-child(1){transform:rotate(-45deg);top:.625em}:host.open .container span:nth-child(2),:host.open .container span:nth-child(3){width:0;opacity:0}:host.open .container span:nth-child(4){transform:rotate(45deg);top:-.3125em}:host.open .container span.text{opacity:0}\n"] }]
2324
+ }], propDecorators: { label: [{
2325
+ type: Input
2326
+ }] } });
2327
+
2328
+ class DotsComponent {
2329
+ constructor() {
2330
+ this.open = false;
2331
+ this.direction = Direction.Horizontal;
2332
+ this.onClick = () => this.open = !this.open;
2333
+ }
2334
+ }
2335
+ DotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DotsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2336
+ DotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DotsComponent, selector: "sfc-dots", inputs: { open: "open", direction: "direction" }, host: { listeners: { "click": "onClick()" }, properties: { "class.open": "this.open", "class": "this.direction" } }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"dots-container\">\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n </div>\r\n</div>", styles: [":host{display:inline-flex;transform:rotate(0);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}:host.open{transform:rotate(90deg)}:host.vertical{transform:rotate(90deg)}:host.vertical.open{transform:rotate(0)}:host .container{display:inline-flex;flex-direction:column;justify-content:center;align-items:center;flex:1;margin:.25em}:host .container .dots-container{display:flex;flex-flow:row wrap;justify-content:center;align-items:center;position:relative}:host .container .dots-container .dot{width:.3125em;height:.3125em;transition:background .3s ease;margin:.06em;border-radius:50%;display:block}:host .container .dots-container .dot,:host-context(.sfc-default-theme) :host .container .dots-container .dot{background:#545e61}:host-context(.sfc-dark-theme) :host .container .dots-container .dot{background:#fff}:host:hover .container,:host:focus .container{outline:none}:host:hover .container .dots-container .dot,:host-context(.sfc-default-theme) :host:hover .container .dots-container .dot,:host:focus .container .dots-container .dot,:host-context(.sfc-default-theme) :host:focus .container .dots-container .dot{background:#ffce54}:host-context(.sfc-dark-theme) :host:hover .container .dots-container .dot,:host-context(.sfc-dark-theme) :host:focus .container .dots-container .dot{background:#ffce54}\n"] });
2337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DotsComponent, decorators: [{
2338
+ type: Component,
2339
+ args: [{ selector: 'sfc-dots', template: "<div class=\"container\">\r\n <div class=\"dots-container\">\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n </div>\r\n</div>", styles: [":host{display:inline-flex;transform:rotate(0);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}:host.open{transform:rotate(90deg)}:host.vertical{transform:rotate(90deg)}:host.vertical.open{transform:rotate(0)}:host .container{display:inline-flex;flex-direction:column;justify-content:center;align-items:center;flex:1;margin:.25em}:host .container .dots-container{display:flex;flex-flow:row wrap;justify-content:center;align-items:center;position:relative}:host .container .dots-container .dot{width:.3125em;height:.3125em;transition:background .3s ease;margin:.06em;border-radius:50%;display:block}:host .container .dots-container .dot,:host-context(.sfc-default-theme) :host .container .dots-container .dot{background:#545e61}:host-context(.sfc-dark-theme) :host .container .dots-container .dot{background:#fff}:host:hover .container,:host:focus .container{outline:none}:host:hover .container .dots-container .dot,:host-context(.sfc-default-theme) :host:hover .container .dots-container .dot,:host:focus .container .dots-container .dot,:host-context(.sfc-default-theme) :host:focus .container .dots-container .dot{background:#ffce54}:host-context(.sfc-dark-theme) :host:hover .container .dots-container .dot,:host-context(.sfc-dark-theme) :host:focus .container .dots-container .dot{background:#ffce54}\n"] }]
2340
+ }], propDecorators: { open: [{
2341
+ type: Input
2342
+ }, {
2343
+ type: HostBinding,
2344
+ args: ['class.' + UIClass.Open]
2345
+ }], direction: [{
2346
+ type: Input
2347
+ }, {
2348
+ type: HostBinding,
2349
+ args: ['class']
2350
+ }], onClick: [{
2351
+ type: HostListener,
2352
+ args: ['click']
2353
+ }] } });
2354
+
2355
+ class ToggleSwitcherComponent {
2356
+ constructor() {
2357
+ this.active = false;
2358
+ this.disabled = false;
2359
+ this.onClick = () => this.active = !this.active;
2360
+ this.leftModel = { label: 'Left' };
2361
+ this.rightModel = { label: 'Right' };
2362
+ }
2363
+ }
2364
+ ToggleSwitcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ToggleSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2365
+ ToggleSwitcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ToggleSwitcherComponent, selector: "sfc-toggle-switcher", inputs: { active: "active", disabled: "disabled", leftModel: "leftModel", rightModel: "rightModel" }, host: { listeners: { "click": "onClick()" }, properties: { "class.active": "this.active", "class.disabled": "this.disabled" } }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}:host.disabled{pointer-events:none}:host.disabled .container,:host-context(.sfc-default-theme) :host.disabled .container{background-color:#f6f6f6}:host-context(.sfc-dark-theme) :host.disabled .container{background-color:#656d78}:host.disabled .container .toggle{box-shadow:none}:host.disabled .container .toggle,:host-context(.sfc-default-theme) :host.disabled .container .toggle{background-color:#e6e9ed}:host-context(.sfc-dark-theme) :host.disabled .container .toggle{background-color:#aab2bd}:host.disabled .container .names,:host-context(.sfc-default-theme) :host.disabled .container .names{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .container .names{color:#e9e9e9}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
2366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ToggleSwitcherComponent, decorators: [{
2367
+ type: Component,
2368
+ args: [{ selector: 'sfc-toggle-switcher', template: "<div class=\"container\">\r\n <div class=\"toggle\"></div>\r\n <div class=\"names\">\r\n <p class=\"left\">\r\n <fa-icon *ngIf=\"leftModel.icon\" [icon]=\"leftModel.icon\"></fa-icon>\r\n <span>{{leftModel.label}}</span>\r\n </p>\r\n <p class=\"right\">\r\n <fa-icon *ngIf=\"rightModel.icon\" [icon]=\"rightModel.icon\"></fa-icon>\r\n <span>{{rightModel.label}}</span>\r\n </p>\r\n </div>\r\n</div>", styles: [":host .container,:host .toggle{height:100%;border-radius:100px}:host .container{width:100%;background-color:#e6e9ed;color:#545e61;border-radius:100px;position:relative;cursor:pointer}:host .container .toggle{position:absolute;width:50%;background-color:#fff;box-shadow:0 .125em .5em #656d78;transition:transform .3s cubic-bezier(.25,.46,.45,.94)}:host .container .names{font-size:90%;font-weight:bolder;width:100%;height:100%;position:relative;display:flex;justify-content:space-around;align-items:center;-webkit-user-select:none;user-select:none;overflow:hidden}:host .container .names p{font-size:90%;text-align:center;margin:0;padding:.5em 1em}:host .container .names p.right{opacity:.5}:host.active .container{background-color:#e6e9ed}:host.active .container .toggle{transform:translate(100%);background-color:#fff}:host.active .container .names{color:#545e61}:host.active .container .names .left{opacity:.5}:host.active .container .names .right{opacity:1}:host.disabled{pointer-events:none}:host.disabled .container,:host-context(.sfc-default-theme) :host.disabled .container{background-color:#f6f6f6}:host-context(.sfc-dark-theme) :host.disabled .container{background-color:#656d78}:host.disabled .container .toggle{box-shadow:none}:host.disabled .container .toggle,:host-context(.sfc-default-theme) :host.disabled .container .toggle{background-color:#e6e9ed}:host-context(.sfc-dark-theme) :host.disabled .container .toggle{background-color:#aab2bd}:host.disabled .container .names,:host-context(.sfc-default-theme) :host.disabled .container .names{color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .container .names{color:#e9e9e9}\n"] }]
2369
+ }], ctorParameters: function () { return []; }, propDecorators: { active: [{
2370
+ type: Input
2371
+ }, {
2372
+ type: HostBinding,
2373
+ args: ['class.' + UIClass.Active]
2374
+ }], disabled: [{
2375
+ type: Input
2376
+ }, {
2377
+ type: HostBinding,
2378
+ args: ['class.' + UIClass.Disabled]
2379
+ }], leftModel: [{
2380
+ type: Input
2381
+ }], rightModel: [{
2382
+ type: Input
2383
+ }], onClick: [{
2384
+ type: HostListener,
2385
+ args: ['click']
2386
+ }] } });
2387
+
2388
+ var CheckmarkType;
2389
+ (function (CheckmarkType) {
2390
+ CheckmarkType["Square"] = "square";
2391
+ CheckmarkType["Rounded"] = "rounded";
2392
+ CheckmarkType["Circle"] = "circle";
2393
+ })(CheckmarkType || (CheckmarkType = {}));
2394
+
2395
+ class CheckmarkComponent {
2396
+ constructor() {
2397
+ this.active = false;
2398
+ this.disabled = false;
2399
+ this.icon = faCheck;
2400
+ this.type = CheckmarkType.Rounded;
2401
+ }
2402
+ }
2403
+ CheckmarkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CheckmarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2404
+ CheckmarkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CheckmarkComponent, selector: "sfc-checkmark", inputs: { active: "active", disabled: "disabled", icon: "icon", type: "type" }, host: { properties: { "class.active": "this.active", "class.disabled": "this.disabled", "class": "this.type" } }, ngImport: i0, template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon [sfcShowHideElement]=\"active\" [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#fff}:host .check{border:.125em solid;background:transparent;transition:border-color .5s ease,background .5s ease;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .check,:host-context(.sfc-default-theme) :host .check{border-color:#545e61}:host-context(.sfc-dark-theme) :host .check{border-color:#fff}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#ffce54}:host .check:hover fa-icon{color:#ffce54}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#ffce54;background:#ffce54}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}:host.circle .check{border-radius:50%}:host.rounded .check{border-radius:15%}:host.disabled{pointer-events:none}:host.disabled .check{color:#fff;border-style:dashed}:host.disabled .check,:host-context(.sfc-default-theme) :host.disabled .check{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .check{border-color:#656d78}:host.disabled.active .check,:host-context(.sfc-default-theme) :host.disabled.active .check{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled.active .check{background:#656d78}\n"], dependencies: [{ kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: ShowHideElementDirective, selector: "[sfcShowHideElement]", inputs: ["sfcShowHideElement", "delay"] }] });
2405
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CheckmarkComponent, decorators: [{
2406
+ type: Component,
2407
+ args: [{ selector: 'sfc-checkmark', template: "<div class=\"container\">\r\n <span class=\"check\">\r\n <fa-icon [sfcShowHideElement]=\"active\" [icon]=\"icon\"></fa-icon>\r\n </span>\r\n</div>", styles: [":host{display:inline-block}:host,:host-context(.sfc-default-theme) :host{color:#545e61}:host-context(.sfc-dark-theme) :host{color:#fff}:host .check{border:.125em solid;background:transparent;transition:border-color .5s ease,background .5s ease;width:1em;height:1em;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .check,:host-context(.sfc-default-theme) :host .check{border-color:#545e61}:host-context(.sfc-dark-theme) :host .check{border-color:#fff}:host .check fa-icon{font-size:.8em;transition:opacity .3s ease}:host .check fa-icon,:host-context(.sfc-default-theme) :host .check fa-icon{opacity:.5}:host-context(.sfc-dark-theme) :host .check fa-icon{opacity:.8}:host .check:hover{border-color:#ffce54}:host .check:hover fa-icon{color:#ffce54}:host .check:hover fa-icon,:host-context(.sfc-default-theme) :host .check:hover fa-icon{opacity:.8}:host-context(.sfc-dark-theme) :host .check:hover fa-icon{opacity:1}:host.active .check{border-color:#ffce54;background:#ffce54}:host.active .check fa-icon{opacity:1;transform:scale(0);color:#fff;-webkit-text-stroke:0;animation:icon .3s cubic-bezier(1,.008,.565,1.65) .1s 1 forwards}@keyframes icon{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}:host.circle .check{border-radius:50%}:host.rounded .check{border-radius:15%}:host.disabled{pointer-events:none}:host.disabled .check{color:#fff;border-style:dashed}:host.disabled .check,:host-context(.sfc-default-theme) :host.disabled .check{border-color:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled .check{border-color:#656d78}:host.disabled.active .check,:host-context(.sfc-default-theme) :host.disabled.active .check{background:#bdbdbd}:host-context(.sfc-dark-theme) :host.disabled.active .check{background:#656d78}\n"] }]
2408
+ }], propDecorators: { active: [{
2409
+ type: Input
2410
+ }, {
2411
+ type: HostBinding,
2412
+ args: ['class.' + UIClass.Active]
2413
+ }], disabled: [{
2414
+ type: Input
2415
+ }, {
2416
+ type: HostBinding,
2417
+ args: ['class.' + UIClass.Disabled]
2418
+ }], icon: [{
2419
+ type: Input
2420
+ }], type: [{
2421
+ type: Input
2422
+ }, {
2423
+ type: HostBinding,
2424
+ args: ['class']
2425
+ }] } });
2426
+
2427
+ class PaginationConstants {
2428
+ }
2429
+ PaginationConstants.DEFAULT_SIZE = 5;
2430
+ PaginationConstants.DEFAULT_PAGE = 1;
2431
+ PaginationConstants.DEFAULT_COUNT = 3;
2432
+
2433
+ class PaginationService {
2434
+ constructor() {
2435
+ /**
2436
+ * Handle page changing
2437
+ */
2438
+ this.pageSubject = new Subject();
2439
+ this.page$ = this.pageSubject.asObservable();
2440
+ }
2441
+ /** Need for init pagination observables */
2442
+ init(data$, page = PaginationConstants.DEFAULT_PAGE, pageSize = PaginationConstants.DEFAULT_SIZE) {
2443
+ if (isDefined(data$))
2444
+ this.initObservables(data$, page, pageSize);
2445
+ }
2446
+ /**
2447
+ * Move to page
2448
+ */
2449
+ page(page) {
2450
+ this.pageSubject.next(page);
2451
+ }
2452
+ initObservables(data$, page, pageSize) {
2453
+ this.total$ = data$.pipe(map((p) => p.length));
2454
+ this.totalPages$ = this.total$.pipe(map((total) => Math.ceil(total / pageSize)));
2455
+ this.pagination$ = combineLatest([this.totalPages$, this.page$.pipe(startWith(page))])
2456
+ .pipe(map(([total, page]) => {
2457
+ return {
2458
+ page: page > total ? PaginationConstants.DEFAULT_PAGE : page,
2459
+ next: Math.min(page + 1, total),
2460
+ previous: Math.max(1, page - 1),
2461
+ total: total
2462
+ };
2463
+ }));
2464
+ }
2465
+ }
2466
+ PaginationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2467
+ PaginationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationService, providedIn: 'root' });
2468
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationService, decorators: [{
2469
+ type: Injectable,
2470
+ args: [{
2471
+ providedIn: 'root'
2472
+ }]
2473
+ }] });
2474
+
2475
+ class PaginationComponent {
2476
+ constructor(service) {
2477
+ this.service = service;
2478
+ this.faChevronLeft = faChevronLeft;
2479
+ this.faChevronRight = faChevronRight;
2480
+ // max limit for pagination bts
2481
+ this.count = PaginationConstants.DEFAULT_COUNT;
2482
+ /**
2483
+ * show full range of data
2484
+ */
2485
+ this.full = false;
2486
+ /**
2487
+ * show first and last page's btn
2488
+ */
2489
+ this.limits = false;
2490
+ }
2491
+ ngOnInit() {
2492
+ if (!isDefined(this.service.pagination$))
2493
+ this.service.init(this.data$);
2494
+ if (isDefined(this.service.pagination$)) {
2495
+ this.vm$ = this.service.pagination$.pipe(map((event) => {
2496
+ const range = this.initRange(event);
2497
+ return {
2498
+ range: range,
2499
+ any: event.total > 0,
2500
+ firstPage: this.showStartLimit(range, event),
2501
+ lastPage: this.showEndLimit(range, event),
2502
+ previousPage: event.page != PaginationConstants.DEFAULT_PAGE,
2503
+ nextPage: event.total > event.page,
2504
+ page: event.page,
2505
+ previous: event.previous,
2506
+ next: event.next,
2507
+ total: event.total
2508
+ };
2509
+ }));
2510
+ }
2511
+ }
2512
+ onPageClick(page) {
2513
+ this.service.page(page);
2514
+ }
2515
+ get showLimitPages() {
2516
+ return this.limits && !this.full;
2517
+ }
2518
+ showStartLimit(range, event) {
2519
+ return this.showLimitPages && event.page !== PaginationConstants.DEFAULT_PAGE
2520
+ && !hasItem(range, PaginationConstants.DEFAULT_PAGE);
2521
+ }
2522
+ showEndLimit(range, event) {
2523
+ return this.showLimitPages && event.total !== event.page && !hasItem(range, event.total);
2524
+ }
2525
+ initRange(event) {
2526
+ let start = 1, end = event.total + 1;
2527
+ if (!this.full) {
2528
+ const fullRange = this.range(1, event.total + 1), pageIndex = fullRange.indexOf(event.page), pageCount = Math.min(event.total, this.count);
2529
+ let rangeStart = 0, rangeEnd = 0;
2530
+ if (pageCount == PaginationConstants.DEFAULT_PAGE) {
2531
+ rangeStart = rangeEnd = pageIndex;
2532
+ }
2533
+ else {
2534
+ let allowedCount = pageCount - 1, partValue = Math.ceil(allowedCount / 2), leftValue = pageIndex - partValue < 0 ? pageIndex : partValue, rightToExtend = allowedCount - leftValue, rightValue = rightToExtend < 0 ? 0 : rightToExtend;
2535
+ if (pageIndex + rightValue >= event.total)
2536
+ leftValue += pageIndex + rightValue - event.total + 1;
2537
+ rangeStart = pageIndex - leftValue;
2538
+ rangeEnd = pageIndex + rightValue;
2539
+ }
2540
+ start = rangeStart + 1;
2541
+ end = Math.min(event.total + 1, rangeEnd + 2);
2542
+ }
2543
+ return this.range(start, end);
2544
+ }
2545
+ range(start, stop, step = 1) {
2546
+ if (!stop) {
2547
+ start = 0;
2548
+ stop = start;
2549
+ }
2550
+ return Array.from(new Array(Number((stop - start) / step)), (_, i) => start + i * step);
2551
+ }
2552
+ }
2553
+ PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }], target: i0.ɵɵFactoryTarget.Component });
2554
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PaginationComponent, selector: "sfc-pagination", inputs: { count: "count", full: "full", limits: "limits", data$: "data$" }, ngImport: i0, template: "<div class=\"container\" *ngIf=\"vm$ | async as vm\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"vm.any\">\r\n <li [sfcShowHideElement]=\"vm.previousPage\" (click)=\"onPageClick(vm.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"vm.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"vm.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of vm.range\" (click)=\"onPageClick(page)\">\r\n <button [class.active]=\"vm.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"vm.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"vm.lastPage\" (click)=\"onPageClick(vm.total)\">\r\n <button>{{vm.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"vm.nextPage\" (click)=\"onPageClick(vm.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;justify-content:center;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: ShowHideElementDirective, selector: "[sfcShowHideElement]", inputs: ["sfcShowHideElement", "delay"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] });
2555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PaginationComponent, decorators: [{
2556
+ type: Component,
2557
+ args: [{ selector: 'sfc-pagination', template: "<div class=\"container\" *ngIf=\"vm$ | async as vm\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <ul *ngIf=\"vm.any\">\r\n <li [sfcShowHideElement]=\"vm.previousPage\" (click)=\"onPageClick(vm.previous)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronLeft\"></fa-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"vm.firstPage\" (click)=\"onPageClick(1)\">\r\n <button>1</button>\r\n </li>\r\n <li *ngIf=\"vm.firstPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngFor=\"let page of vm.range\" (click)=\"onPageClick(page)\">\r\n <button [class.active]=\"vm.page === page\">{{page}}</button>\r\n </li>\r\n <li *ngIf=\"vm.lastPage\">\r\n <span>...</span>\r\n </li>\r\n <li *ngIf=\"vm.lastPage\" (click)=\"onPageClick(vm.total)\">\r\n <button>{{vm.total}}</button>\r\n </li>\r\n <li [sfcShowHideElement]=\"vm.nextPage\" (click)=\"onPageClick(vm.next)\">\r\n <button class=\"limit\">\r\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\r\n </button>\r\n </li>\r\n </ul>\r\n <sfc-delimeter></sfc-delimeter>\r\n</div>", styles: [":host{width:100%;display:inline-block}:host .container{position:relative;text-align:center}:host .container ul{list-style:none;margin:0;padding:0;display:flex;justify-content:center;-webkit-user-select:none;user-select:none}:host .container ul li{display:block;float:left;padding:.31em}:host .container ul li:first-child{border:none}:host .container ul li button,:host .container ul li span{background:none;border:none;border-radius:50%;box-sizing:border-box;display:block;font-size:1em;height:2.5em;min-width:2.5em;line-height:2.5em;padding:0}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button,:host .container ul li span,:host-context(.sfc-default-theme) :host .container ul li span{color:#0009}:host-context(.sfc-dark-theme) :host .container ul li button,:host-context(.sfc-dark-theme) :host .container ul li span{color:#fff}:host .container ul li button{outline:none;position:relative;transition:all .17s linear}:host .container ul li button,:host-context(.sfc-default-theme) :host .container ul li button{color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button{color:#fff}:host .container ul li button:before{border-radius:50%;content:\"\";cursor:pointer;height:0;left:50%;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .17s linear;top:50%;width:0}:host .container ul li button:before,:host-context(.sfc-default-theme) :host .container ul li button:before{background:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:before{background:#f5f7fa}:host .container ul li button:hover:not(.active),:host-context(.sfc-default-theme) :host .container ul li button:hover:not(.active){color:#545e61}:host-context(.sfc-dark-theme) :host .container ul li button:hover:not(.active){color:#fff}:host .container ul li button:hover:not(.active):before{animation:hover-animation .51s linear forwards;width:2.5em;height:2.5em}:host .container ul li button.active{color:#545e61!important}:host .container ul li button.active,:host-context(.sfc-default-theme) :host .container ul li button.active{background:rgba(0,0,0,.1019607843)}:host-context(.sfc-dark-theme) :host .container ul li button.active{background:#f5f7fa}@keyframes hover-animation{0%{opacity:1}to{opacity:0}}\n"] }]
2558
+ }], ctorParameters: function () { return [{ type: PaginationService }]; }, propDecorators: { count: [{
2559
+ type: Input
2560
+ }], full: [{
2561
+ type: Input
2562
+ }], limits: [{
2563
+ type: Input
2564
+ }], data$: [{
2565
+ type: Input
2566
+ }] } });
2567
+
2568
+ class SortingConstants {
2569
+ }
2570
+ SortingConstants.DEFAULT_ASCENDING_ICON = faChevronUp;
2571
+ SortingConstants.DEFAULT_DESCENDING_ICON = faChevronDown;
2572
+
2573
+ class SortingService {
2574
+ constructor() {
2575
+ this.sortingSubject = new Subject();
2576
+ this.sorting$ = this.sortingSubject.asObservable();
2577
+ }
2578
+ sort(event) {
2579
+ this.sortingSubject.next(event);
2580
+ }
2581
+ }
2582
+ SortingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SortingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2583
+ SortingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SortingService, providedIn: 'root' });
2584
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SortingService, decorators: [{
2585
+ type: Injectable,
2586
+ args: [{
2587
+ providedIn: 'root'
2588
+ }]
2589
+ }] });
2590
+
2591
+ class SortingComponent {
2592
+ constructor(service) {
2593
+ this.service = service;
2594
+ this.SortingDirection = SortingDirection;
2595
+ this.id = CommonConstants.EMPTY_STRING;
2596
+ this.model = { active: false, enabled: false, direction: SortingDirection.Ascending };
2597
+ }
2598
+ get enabled() {
2599
+ return this.model.enabled;
2600
+ }
2601
+ get active() {
2602
+ return this.model.active || false;
2603
+ }
2604
+ sort() {
2605
+ if (this.enabled) {
2606
+ if (this.active) {
2607
+ this.model.direction = this.model.direction === SortingDirection.Ascending
2608
+ ? SortingDirection.Descending
2609
+ : SortingDirection.Ascending;
2610
+ }
2611
+ this.service.sort({ id: this.id, direction: this.model.direction });
2612
+ }
2613
+ }
2614
+ get icon() {
2615
+ const modelIcon = firstOrDefault(this.model.icons, i => i.direction == this.model.direction);
2616
+ return modelIcon ? modelIcon.icon : this.model.direction === SortingDirection.Ascending
2617
+ ? SortingConstants.DEFAULT_ASCENDING_ICON : SortingConstants.DEFAULT_DESCENDING_ICON;
2618
+ }
2619
+ ngOnInit() {
2620
+ if (!isDefined(this.model))
2621
+ this.model = { active: false, enabled: false, direction: SortingDirection.Ascending };
2622
+ // subscribe to sort changes so we can react when other columns are sorted
2623
+ this._subscription = this.service.sorting$.subscribe(event => {
2624
+ // reset this column's sort direction to hide the sort icons
2625
+ if (this.id != event.id)
2626
+ this.model.direction = SortingDirection.Ascending;
2627
+ });
2628
+ }
2629
+ ngOnDestroy() {
2630
+ this._subscription.unsubscribe();
2631
+ }
2632
+ }
2633
+ SortingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SortingComponent, deps: [{ token: SortingService }], target: i0.ɵɵFactoryTarget.Component });
2634
+ SortingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SortingComponent, selector: "sfc-sorting", inputs: { id: "id", model: "model" }, host: { listeners: { "click": "sort()" }, properties: { "class.enabled": "this.enabled", "class.active": "this.active" } }, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div *ngIf=\"enabled\" class=\"icons\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n </div>\r\n</div>", styles: [":host{cursor:default;text-overflow:ellipsis;overflow:hidden}:host.enabled{cursor:pointer}:host .container{display:flex;min-width:0}:host .container,:host-context(.sfc-default-theme) :host .container{color:#545e61}:host-context(.sfc-dark-theme) :host .container{color:#fff}:host .container:hover{color:#ffce54}:host .container .content{display:flex;-webkit-user-select:none;user-select:none}:host .container .icons{margin:0 .31em;font-size:.7em;display:flex;align-items:center;transition:all .3s}:host.active .container{color:#ffce54}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
2635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SortingComponent, decorators: [{
2636
+ type: Component,
2637
+ args: [{ selector: 'sfc-sorting', template: "<div class=\"container\">\r\n <div class=\"content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div *ngIf=\"enabled\" class=\"icons\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n </div>\r\n</div>", styles: [":host{cursor:default;text-overflow:ellipsis;overflow:hidden}:host.enabled{cursor:pointer}:host .container{display:flex;min-width:0}:host .container,:host-context(.sfc-default-theme) :host .container{color:#545e61}:host-context(.sfc-dark-theme) :host .container{color:#fff}:host .container:hover{color:#ffce54}:host .container .content{display:flex;-webkit-user-select:none;user-select:none}:host .container .icons{margin:0 .31em;font-size:.7em;display:flex;align-items:center;transition:all .3s}:host.active .container{color:#ffce54}\n"] }]
2638
+ }], ctorParameters: function () { return [{ type: SortingService }]; }, propDecorators: { id: [{
2639
+ type: Input
2640
+ }], model: [{
2641
+ type: Input
2642
+ }], enabled: [{
2643
+ type: HostBinding,
2644
+ args: [`class.${UIClass.Enabled}`]
2645
+ }], active: [{
2646
+ type: HostBinding,
2647
+ args: [`class.${UIClass.Active}`]
2648
+ }], sort: [{
2649
+ type: HostListener,
2650
+ args: ['click']
2651
+ }] } });
2652
+
2653
+ class LoadMoreService {
2654
+ constructor() {
2655
+ this._page = LoadMoreService.START_PAGE;
2656
+ this.moreSubject = new Subject();
2657
+ this.more$ = this.moreSubject.asObservable();
2658
+ }
2659
+ more() {
2660
+ this._page++;
2661
+ this.moreSubject.next(this._page);
2662
+ }
2663
+ reset() {
2664
+ this._page = LoadMoreService.START_PAGE;
2665
+ }
2666
+ }
2667
+ LoadMoreService.START_PAGE = 1;
2668
+ LoadMoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2669
+ LoadMoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreService, providedIn: 'root' });
2670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreService, decorators: [{
2671
+ type: Injectable,
2672
+ args: [{
2673
+ providedIn: 'root'
2674
+ }]
2675
+ }] });
2676
+
2677
+ var LoadContainerType;
2678
+ (function (LoadContainerType) {
2679
+ LoadContainerType["Dropdown"] = "dropdown";
2680
+ LoadContainerType["Table"] = "table";
2681
+ })(LoadContainerType || (LoadContainerType = {}));
2682
+ var LoadChangesSource;
2683
+ (function (LoadChangesSource) {
2684
+ LoadChangesSource["Parameters"] = "parameters";
2685
+ LoadChangesSource["Data"] = "data";
2686
+ })(LoadChangesSource || (LoadChangesSource = {}));
2687
+
2688
+ class LoadContainerConstants {
2689
+ }
2690
+ LoadContainerConstants.DEFAULT_PAGE_SIZE = 5;
2691
+ LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL = 'Not found';
2692
+
2693
+ class LoadMoreButtonComponent {
2694
+ constructor() {
2695
+ this.DEFAULT_LABEL = 'Show more';
2696
+ this.icon = faChevronCircleDown;
2697
+ this.more = new EventEmitter();
2698
+ }
2699
+ ngOnInit() {
2700
+ if (isNullOrEmptyString(this.label))
2701
+ this.label = this.DEFAULT_LABEL;
2702
+ }
2703
+ }
2704
+ LoadMoreButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2705
+ LoadMoreButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: LoadMoreButtonComponent, selector: "sfc-load-more-button", inputs: { label: "label", icon: "icon" }, outputs: { more: "more" }, ngImport: i0, template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <div class=\"button\" (sfcMouseDown)=\"more.emit($event)\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n <span>{{label}}</span>\r\n </div>\r\n</div>", styles: [":host{cursor:default}:host .container{text-align:center;background-color:#fff}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700;text-transform:uppercase}:host .container .button:hover{color:#ffce54}\n"], dependencies: [{ kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }, { kind: "component", type: DelimeterComponent, selector: "sfc-delimeter", inputs: ["label", "direction"] }] });
2706
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadMoreButtonComponent, decorators: [{
2707
+ type: Component,
2708
+ args: [{ selector: 'sfc-load-more-button', template: "<div class=\"container\">\r\n <sfc-delimeter></sfc-delimeter>\r\n <div class=\"button\" (sfcMouseDown)=\"more.emit($event)\">\r\n <fa-icon [icon]=\"icon\"></fa-icon>\r\n <span>{{label}}</span>\r\n </div>\r\n</div>", styles: [":host{cursor:default}:host .container{text-align:center;background-color:#fff}:host .container .button{display:inline-flex;align-items:center;justify-content:center;flex-wrap:wrap;cursor:pointer;transition:color .5s;padding:.5em 0 1em}:host .container .button,:host-context(.sfc-default-theme) :host .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .button{color:#fff}:host .container .button fa-icon{font-size:.7em;margin-right:.31em}:host .container .button span{font-size:.6em;font-weight:700;text-transform:uppercase}:host .container .button:hover{color:#ffce54}\n"] }]
2709
+ }], propDecorators: { label: [{
2710
+ type: Input
2711
+ }], icon: [{
2712
+ type: Input
2713
+ }], more: [{
2714
+ type: Output
2715
+ }] } });
2716
+
2717
+ class LoadContainerComponent {
2718
+ constructor(loaderService, loadMoreService) {
2719
+ this.loaderService = loaderService;
2720
+ this.loadMoreService = loadMoreService;
2721
+ this.ComponentSize = ComponentSize;
2722
+ this.Position = Position;
2723
+ this.type = LoadContainerType.Dropdown;
2724
+ this.open = false;
2725
+ this.loadMore = true;
2726
+ this.showEmpty = true;
2727
+ this.showLoadMoreButton = true;
2728
+ this.notFoundLabel = LoadContainerConstants.DEFAULT_NOT_FOUND_LABEL;
2729
+ this.handleError = new EventEmitter();
2730
+ this.handleSuccess = new EventEmitter();
2731
+ this.handleLoading = new EventEmitter();
2732
+ this.next = false;
2733
+ this.empty = false;
2734
+ this._loading = false;
2735
+ // define what source emit changes for data (1. data changes, 2. predicate conditions)
2736
+ this.source = LoadChangesSource.Data;
2737
+ }
2738
+ set model(model) {
2739
+ if (isDefined(model)) {
2740
+ const parameters$ = this.buildParameters(model.predicate$), data$ = isDefined(model.loader) ?
2741
+ this.buildDynamic(parameters$, model.loader) : this.buildStatic(parameters$, model);
2742
+ if (isDefined(this._subscription))
2743
+ this._subscription.unsubscribe();
2744
+ this._subscription = data$.subscribe({
2745
+ next: (result) => this.success(result),
2746
+ error: (error) => this.error(error)
2747
+ });
2748
+ }
2749
+ }
2750
+ get scrollPosition() {
2751
+ return !this.allowLoadMore || this.showLoadMoreButton ? [] : [Position.Bottom];
2752
+ }
2753
+ get allowLoadMore() { return this.next && this.loadMore; }
2754
+ get hideLoadMoreButton() { return !(this.allowLoadMore && this.showLoadMoreButton); }
2755
+ get isEmpty() { return this.empty && this.showEmpty; }
2756
+ set loading(value) {
2757
+ this._loading = value;
2758
+ if (value)
2759
+ this.loaderService.show(this.id, true);
2760
+ else
2761
+ this.loaderService.hide(this.id);
2762
+ this.handleLoading.emit(value);
2763
+ }
2764
+ ngOnDestroy() {
2765
+ if (this._subscription)
2766
+ this._subscription.unsubscribe();
2767
+ }
2768
+ more(event) {
2769
+ event.preventDefault();
2770
+ this.loadMoreService.more();
2771
+ }
2772
+ onScroll() {
2773
+ if (this.allowLoadMore)
2774
+ this.loadMoreService.more();
2775
+ }
2776
+ success(result) {
2777
+ this.next = result.next;
2778
+ this.loading = false;
2779
+ this.empty = !any(result.items);
2780
+ this.handleSuccess.emit(result);
2781
+ }
2782
+ error(error) {
2783
+ this.loading = false;
2784
+ this.empty = false;
2785
+ this.handleError.emit(error);
2786
+ }
2787
+ buildParameters(predicate$) {
2788
+ const parameters$ = (predicate$ || EMPTY.pipe(startWith(null))).pipe(tap((predicateParameters) => {
2789
+ if (predicateParameters)
2790
+ this.resetParameters();
2791
+ }), switchMap((value) => {
2792
+ return this.loadMoreService.more$.pipe(startWith(LoadMoreService.START_PAGE), tap(() => {
2793
+ this.source = LoadChangesSource.Parameters;
2794
+ this.loading = true;
2795
+ }), map((page) => {
2796
+ return { params: value, page: page };
2797
+ }));
2798
+ }));
2799
+ return parameters$;
2800
+ }
2801
+ buildDynamic(parameters$, loader) {
2802
+ return parameters$.pipe(switchMap((parameters) => loader(parameters, this.source).pipe(tap((model) => {
2803
+ if (model.reset) {
2804
+ this.source = LoadChangesSource.Data;
2805
+ this.resetParameters();
2806
+ }
2807
+ }))));
2808
+ }
2809
+ buildStatic(parameters$, model) {
2810
+ const data$ = (model.data$ || of([])).pipe(tap(_ => this.source = LoadChangesSource.Data));
2811
+ return combineLatest([parameters$, data$]).pipe(map(([parameters, items]) => {
2812
+ const reset = this.source == LoadChangesSource.Data;
2813
+ if (reset && parameters.page != LoadMoreService.START_PAGE) {
2814
+ // if data changed need to start from start
2815
+ this.resetParameters();
2816
+ parameters = { params: parameters.params, page: 1 };
2817
+ }
2818
+ const filtered = model.filter ? model.filter(items, parameters) : items, size = model.size || LoadContainerConstants.DEFAULT_PAGE_SIZE, data = filtered ? {
2819
+ items: skip(filtered, parameters.page, size),
2820
+ next: parameters.page < Math.ceil(filtered.length / size),
2821
+ reset
2822
+ } : { items: [], next: false, reset };
2823
+ return data;
2824
+ }));
2825
+ }
2826
+ resetParameters() {
2827
+ if (isDefined(this.contentEl))
2828
+ this.contentEl.nativeElement.scrollTop = 0;
2829
+ this.loadMoreService.reset();
2830
+ }
2831
+ }
2832
+ LoadContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadContainerComponent, deps: [{ token: LoaderService }, { token: LoadMoreService }], target: i0.ɵɵFactoryTarget.Component });
2833
+ LoadContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: LoadContainerComponent, selector: "sfc-load-container", inputs: { id: "id", type: "type", open: "open", loadMore: "loadMore", showEmpty: "showEmpty", showLoadMoreButton: "showLoadMoreButton", loadMoreLabel: "loadMoreLabel", notFoundLabel: "notFoundLabel", model: "model", scrollTarget: "scrollTarget" }, outputs: { handleError: "handleError", handleSuccess: "handleSuccess", handleLoading: "handleLoading" }, host: { properties: { "class": "this.type", "class.open": "this.open", "class.empty": "this.isEmpty", "class.loading": "this._loading" } }, providers: [LoadMoreService], viewQueries: [{ propertyName: "contentEl", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\r\n <sfc-bounce-loader [id]=\"id\" [sfcComponentSize]=\"ComponentSize.Small\"></sfc-bounce-loader>\r\n <div #content class=\"content\" [sfcScrollIntoView]=\"scrollTarget\" (sfcScrollTracker)=\"onScroll()\" [positions]=\"scrollPosition\">\r\n <ng-content></ng-content>\r\n <div (sfcMouseDown)=\"$event.preventDefault()\">\r\n <sfc-load-more-button [hidden]=\"hideLoadMoreButton\" (more)=\"more($event)\" [label]=\"loadMoreLabel\">\r\n </sfc-load-more-button>\r\n <div *ngIf=\"isEmpty\" class=\"empty\">{{notFoundLabel}}</div>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{width:100%;height:inherit;position:relative}:host .container{height:inherit}:host .container .content{cursor:initial;overflow-y:auto;height:inherit}:host .container .content,:host-context(.sfc-default-theme) :host .container .content{background:#fff}:host-context(.sfc-dark-theme) :host .container .content{background:#fff}:host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container .content sfc-load-more-button ::ng-deep .container .button,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container .button{color:#545e61}:host .container .content sfc-load-more-button ::ng-deep .container .button:hover{color:#ffce54}:host .container .content .empty{display:flex;align-items:center;justify-content:center;color:#545e61;cursor:default;height:100%;font-size:.8em;-webkit-user-select:none;user-select:none;padding:.7em}:host.dropdown .container .content{display:none;opacity:0;max-height:12.5em;box-shadow:0 .125em .125em #00000024,0 .18em .06em -.125em #0000001f,0 .06em .31em #0003}:host.dropdown.open .container .content{display:block;opacity:1}:host ::ng-deep ::-webkit-scrollbar{width:.375em;height:.375em}:host ::ng-deep ::-webkit-scrollbar-track{border-radius:.625em;background:#e9e9e9}:host ::ng-deep ::-webkit-scrollbar-thumb{border-radius:.625em;background:rgba(0,0,0,.2)}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}:host ::ng-deep ::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,.6)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MouseDownDirective, selector: "[sfcMouseDown]", inputs: ["button"], outputs: ["sfcMouseDown"] }, { kind: "directive", type: ComponentSizeDirective, selector: "[sfcComponentSize]", inputs: ["sfcComponentSize", "customSize"] }, { kind: "directive", type: ScrollTrackerDirective, selector: "[sfcScrollTracker]", inputs: ["positions"], outputs: ["sfcScrollTracker"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[sfcScrollIntoView]", inputs: ["sfcScrollIntoView", "local", "options"] }, { kind: "component", type: LoadMoreButtonComponent, selector: "sfc-load-more-button", inputs: ["label", "icon"], outputs: ["more"] }, { kind: "component", type: BounceLoaderComponent, selector: "sfc-bounce-loader" }] });
2834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoadContainerComponent, decorators: [{
2835
+ type: Component,
2836
+ args: [{ selector: 'sfc-load-container', providers: [LoadMoreService], template: "<div class=\"container\">\r\n <sfc-bounce-loader [id]=\"id\" [sfcComponentSize]=\"ComponentSize.Small\"></sfc-bounce-loader>\r\n <div #content class=\"content\" [sfcScrollIntoView]=\"scrollTarget\" (sfcScrollTracker)=\"onScroll()\" [positions]=\"scrollPosition\">\r\n <ng-content></ng-content>\r\n <div (sfcMouseDown)=\"$event.preventDefault()\">\r\n <sfc-load-more-button [hidden]=\"hideLoadMoreButton\" (more)=\"more($event)\" [label]=\"loadMoreLabel\">\r\n </sfc-load-more-button>\r\n <div *ngIf=\"isEmpty\" class=\"empty\">{{notFoundLabel}}</div>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{width:100%;height:inherit;position:relative}:host .container{height:inherit}:host .container .content{cursor:initial;overflow-y:auto;height:inherit}:host .container .content,:host-context(.sfc-default-theme) :host .container .content{background:#fff}:host-context(.sfc-dark-theme) :host .container .content{background:#fff}:host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:before{border-image:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container ::ng-deep sfc-delimeter.horizontal:after{border-image:linear-gradient(to left,rgba(0,0,0,0) 0%,rgba(0,0,0,.3) 47%,rgba(0,0,0,.3) 53%,rgba(0,0,0,.3) 100%) 100% 1}:host .container .content sfc-load-more-button ::ng-deep .container .button,:host-context(.sfc-default-theme) :host .container .content sfc-load-more-button ::ng-deep .container .button{color:#545e61}:host-context(.sfc-dark-theme) :host .container .content sfc-load-more-button ::ng-deep .container .button{color:#545e61}:host .container .content sfc-load-more-button ::ng-deep .container .button:hover{color:#ffce54}:host .container .content .empty{display:flex;align-items:center;justify-content:center;color:#545e61;cursor:default;height:100%;font-size:.8em;-webkit-user-select:none;user-select:none;padding:.7em}:host.dropdown .container .content{display:none;opacity:0;max-height:12.5em;box-shadow:0 .125em .125em #00000024,0 .18em .06em -.125em #0000001f,0 .06em .31em #0003}:host.dropdown.open .container .content{display:block;opacity:1}:host ::ng-deep ::-webkit-scrollbar{width:.375em;height:.375em}:host ::ng-deep ::-webkit-scrollbar-track{border-radius:.625em;background:#e9e9e9}:host ::ng-deep ::-webkit-scrollbar-thumb{border-radius:.625em;background:rgba(0,0,0,.2)}:host ::ng-deep ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.4)}:host ::ng-deep ::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,.6)}\n"] }]
2837
+ }], ctorParameters: function () { return [{ type: LoaderService }, { type: LoadMoreService }]; }, propDecorators: { id: [{
2838
+ type: Input
2839
+ }], type: [{
2840
+ type: Input
2841
+ }, {
2842
+ type: HostBinding,
2843
+ args: ['class']
2844
+ }], open: [{
2845
+ type: Input
2846
+ }, {
2847
+ type: HostBinding,
2848
+ args: [`class.${UIClass.Open}`]
2849
+ }], loadMore: [{
2850
+ type: Input
2851
+ }], showEmpty: [{
2852
+ type: Input
2853
+ }], showLoadMoreButton: [{
2854
+ type: Input
2855
+ }], loadMoreLabel: [{
2856
+ type: Input
2857
+ }], notFoundLabel: [{
2858
+ type: Input
2859
+ }], model: [{
2860
+ type: Input
2861
+ }], scrollTarget: [{
2862
+ type: Input
2863
+ }], handleError: [{
2864
+ type: Output
2865
+ }], handleSuccess: [{
2866
+ type: Output
2867
+ }], handleLoading: [{
2868
+ type: Output
2869
+ }], contentEl: [{
2870
+ type: ViewChild,
2871
+ args: ['content']
2872
+ }], isEmpty: [{
2873
+ type: HostBinding,
2874
+ args: [`class.${UIClass.Empty}`]
2875
+ }], _loading: [{
2876
+ type: HostBinding,
2877
+ args: [`class.${UIClass.Loading}`]
2878
+ }] } });
2879
+
2880
+ class IconComponent {
2881
+ get showImage() {
2882
+ return !isNullOrEmptyString(this.imageSrc) && !isDefined(this.icon);
2883
+ }
2884
+ }
2885
+ IconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2886
+ IconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: IconComponent, selector: "sfc-icon", inputs: { icon: "icon", imageSrc: "imageSrc" }, ngImport: i0, template: "<div class=\"container\">\r\n <fa-icon *ngIf=\"icon\" [icon]=\"icon\"></fa-icon>\r\n <img *ngIf=\"showImage\" [src]=\"imageSrc\">\r\n</div>", styles: [":host{display:inline-block}:host .container{display:flex;align-items:center;justify-content:center}:host .container img{max-width:1.3em}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] });
2887
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconComponent, decorators: [{
2888
+ type: Component,
2889
+ args: [{ selector: 'sfc-icon', template: "<div class=\"container\">\r\n <fa-icon *ngIf=\"icon\" [icon]=\"icon\"></fa-icon>\r\n <img *ngIf=\"showImage\" [src]=\"imageSrc\">\r\n</div>", styles: [":host{display:inline-block}:host .container{display:flex;align-items:center;justify-content:center}:host .container img{max-width:1.3em}\n"] }]
2890
+ }], propDecorators: { icon: [{
2891
+ type: Input
2892
+ }], imageSrc: [{
2893
+ type: Input
2894
+ }] } });
2895
+
2896
+ class NgxSfcCommonModule {
2897
+ }
2898
+ NgxSfcCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: NgxSfcCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2899
+ NgxSfcCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: NgxSfcCommonModule, declarations: [
2900
+ // directives
2901
+ ClickOutsideDirective,
2902
+ ShowHideElementDirective,
2903
+ IfDirective,
2904
+ ThrowElementOnHoverDirective,
2905
+ TemplateReferenceDirective,
2906
+ MouseDownDirective,
2907
+ ComponentSizeDirective,
2908
+ DestroyParentDirective,
2909
+ DomChangesDirective,
2910
+ ScrollTrackerDirective,
2911
+ ScrollIntoViewDirective,
2912
+ ImageLoadDirective,
2913
+ // components
2914
+ ButtonComponent,
2915
+ TooltipComponent,
2916
+ DelimeterComponent,
2917
+ ToggleSwitcherComponent,
2918
+ CheckmarkComponent,
2919
+ TemplateContentComponent,
2920
+ CloseComponent,
2921
+ HamburgerComponent,
2922
+ HamburgerMenuComponent,
2923
+ DotsComponent,
2924
+ PaginationComponent,
2925
+ SortingComponent,
2926
+ LoadMoreButtonComponent,
2927
+ LoadContainerComponent,
2928
+ IconComponent,
2929
+ // loaders
2930
+ BounceLoaderComponent,
2931
+ CircleLoaderComponent,
2932
+ // modal
2933
+ ModalComponent,
2934
+ ModalOpenDirective,
2935
+ ModalOpenOnClickDirective,
2936
+ DefaultModalHeaderComponent,
2937
+ DefaultModalFooterComponent,
2938
+ // pipes
2939
+ SwitchMultiCasePipe], imports: [CommonModule,
2940
+ FontAwesomeModule], exports: [
2941
+ // directives
2942
+ ClickOutsideDirective,
2943
+ ShowHideElementDirective,
2944
+ IfDirective,
2945
+ ThrowElementOnHoverDirective,
2946
+ TemplateReferenceDirective,
2947
+ MouseDownDirective,
2948
+ ComponentSizeDirective,
2949
+ DestroyParentDirective,
2950
+ DomChangesDirective,
2951
+ ScrollTrackerDirective,
2952
+ ScrollIntoViewDirective,
2953
+ ImageLoadDirective,
2954
+ // components
2955
+ ButtonComponent,
2956
+ TooltipComponent,
2957
+ DelimeterComponent,
2958
+ CloseComponent,
2959
+ CheckmarkComponent,
2960
+ TemplateContentComponent,
2961
+ ToggleSwitcherComponent,
2962
+ DotsComponent,
2963
+ HamburgerComponent,
2964
+ HamburgerMenuComponent,
2965
+ PaginationComponent,
2966
+ SortingComponent,
2967
+ LoadMoreButtonComponent,
2968
+ LoadContainerComponent,
2969
+ IconComponent,
2970
+ // loaders
2971
+ BounceLoaderComponent,
2972
+ CircleLoaderComponent,
2973
+ // modal
2974
+ ModalComponent,
2975
+ ModalOpenDirective,
2976
+ ModalOpenOnClickDirective,
2977
+ DefaultModalHeaderComponent,
2978
+ DefaultModalFooterComponent,
2979
+ // pipes
2980
+ SwitchMultiCasePipe] });
2981
+ NgxSfcCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: NgxSfcCommonModule, providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS], imports: [CommonModule,
2982
+ FontAwesomeModule] });
2983
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: NgxSfcCommonModule, decorators: [{
2984
+ type: NgModule,
2985
+ args: [{
2986
+ declarations: [
2987
+ // directives
2988
+ ClickOutsideDirective,
2989
+ ShowHideElementDirective,
2990
+ IfDirective,
2991
+ ThrowElementOnHoverDirective,
2992
+ TemplateReferenceDirective,
2993
+ MouseDownDirective,
2994
+ ComponentSizeDirective,
2995
+ DestroyParentDirective,
2996
+ DomChangesDirective,
2997
+ ScrollTrackerDirective,
2998
+ ScrollIntoViewDirective,
2999
+ ImageLoadDirective,
3000
+ // components
3001
+ ButtonComponent,
3002
+ TooltipComponent,
3003
+ DelimeterComponent,
3004
+ ToggleSwitcherComponent,
3005
+ CheckmarkComponent,
3006
+ TemplateContentComponent,
3007
+ CloseComponent,
3008
+ HamburgerComponent,
3009
+ HamburgerMenuComponent,
3010
+ DotsComponent,
3011
+ PaginationComponent,
3012
+ SortingComponent,
3013
+ LoadMoreButtonComponent,
3014
+ LoadContainerComponent,
3015
+ IconComponent,
3016
+ // loaders
3017
+ BounceLoaderComponent,
3018
+ CircleLoaderComponent,
3019
+ // modal
3020
+ ModalComponent,
3021
+ ModalOpenDirective,
3022
+ ModalOpenOnClickDirective,
3023
+ DefaultModalHeaderComponent,
3024
+ DefaultModalFooterComponent,
3025
+ // pipes
3026
+ SwitchMultiCasePipe
3027
+ ],
3028
+ imports: [
3029
+ CommonModule,
3030
+ FontAwesomeModule
3031
+ ],
3032
+ exports: [
3033
+ // directives
3034
+ ClickOutsideDirective,
3035
+ ShowHideElementDirective,
3036
+ IfDirective,
3037
+ ThrowElementOnHoverDirective,
3038
+ TemplateReferenceDirective,
3039
+ MouseDownDirective,
3040
+ ComponentSizeDirective,
3041
+ DestroyParentDirective,
3042
+ DomChangesDirective,
3043
+ ScrollTrackerDirective,
3044
+ ScrollIntoViewDirective,
3045
+ ImageLoadDirective,
3046
+ // components
3047
+ ButtonComponent,
3048
+ TooltipComponent,
3049
+ DelimeterComponent,
3050
+ CloseComponent,
3051
+ CheckmarkComponent,
3052
+ TemplateContentComponent,
3053
+ ToggleSwitcherComponent,
3054
+ DotsComponent,
3055
+ HamburgerComponent,
3056
+ HamburgerMenuComponent,
3057
+ PaginationComponent,
3058
+ SortingComponent,
3059
+ LoadMoreButtonComponent,
3060
+ LoadContainerComponent,
3061
+ IconComponent,
3062
+ // loaders
3063
+ BounceLoaderComponent,
3064
+ CircleLoaderComponent,
3065
+ // modal
3066
+ ModalComponent,
3067
+ ModalOpenDirective,
3068
+ ModalOpenOnClickDirective,
3069
+ DefaultModalHeaderComponent,
3070
+ DefaultModalFooterComponent,
3071
+ // pipes
3072
+ SwitchMultiCasePipe
3073
+ ],
3074
+ providers: [DOCUMENT_PROVIDERS, WINDOW_PROVIDERS]
3075
+ }]
3076
+ }] });
3077
+
3078
+ /*
3079
+ * Public API Surface of ngx-sfc-common
3080
+ */
3081
+
3082
+ /**
3083
+ * Generated bundle index. Do not edit.
3084
+ */
3085
+
3086
+ export { BounceLoaderComponent, BrowserDocumentRef, BrowserWindowRef, ButtonComponent, ButtonType, CheckmarkComponent, CheckmarkType, CircleLoaderComponent, CircleLoaderType, ClickOutsideDirective, CloseComponent, CommonConstants, ComponentSize, ComponentSizeDirective, DOCUMENT, DOCUMENT_PROVIDERS, DateTimeConstants, DefaultModalFooterComponent, DefaultModalHeaderComponent, DelimeterComponent, DestroyParentDirective, Direction, DocumentRef, DomChangesDirective, DotsComponent, HamburgerComponent, HamburgerMenuComponent, IconComponent, IfDirective, ImageLoadDirective, ImageLoadService, LoadChangesSource, LoadContainerComponent, LoadContainerType, LoadMoreButtonComponent, LoaderService, MediaLimits, ModalComponent, ModalOpenDirective, ModalOpenOnClickDirective, ModalService, ModalTemplate, MouseDownDirective, NgxSfcCommonModule, PaginationComponent, PaginationService, Position, ResizeService, ScrollIntoViewDirective, ScrollTrackerDirective, Sequence, ShowHideElementDirective, SortingComponent, SortingDirection, SortingService, SwitchMultiCasePipe, TemplateContentComponent, TemplateReferenceDirective, Theme, ThrowElementOnHoverDirective, ToggleSwitcherComponent, TooltipComponent, TooltipType, UIClass, UIConstants, WINDOW, WINDOW_PROVIDERS, WindowRef, addClasses, addItem, addPropertyToObject, all, any, browserDocumentProvider, browserWindowProvider, contains, count, distinct, documentFactory, documentProvider, firstItem, firstOrDefault, getCalcValue, getCollectionOrEmpty, getCssLikeValue, getFileExtension, getFirstDayOfMonth, getFirstDayOfMonthByYearAndMonth, getFirstDayOfYear, getLastDayOfMonth, getLastDayOfMonthByYearAndMonth, getLastDayOfYear, getNextDate, getNextMonth, getNextYear, getPreviousMonth, getPreviousYear, getRotateValue, getValueFromCssLikeValue, getWeeksNumberInMonth, hasItem, hasItemBy, hasObjectItem, hexToRgb, isAsyncData, isChromeBrowser, isDateGreat, isDateGreatOrEqual, isDateTimeGreat, isDateTimeGreatOrEqual, isDefined, isEmail, isEqual, isEqualDateTimes, isEqualDates, isImage, isNullOrEmptyString, isNumeric, isObject, lastItem, max, mergeDeep, nameof, parseBoolean, parseFileSize, readAsDataURL, remove, removeClasses, removeItem, removeItemBy, removePropertyFromObject, replaceRgbOpacity, rgbToHex, setDay, setDefaultSecondsAndMiliseconds, setHours, setMilliseconds, setMinutes, setSeconds, setYear, skip, sort, sortBy, sortByPath, sum, trim, updateItemBy, where, windowFactory, windowProvider };
3087
+ //# sourceMappingURL=ngx-sfc-common.mjs.map
3088
+ //# sourceMappingURL=ngx-sfc-common.mjs.map