herum-shared 0.1.25

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 (236) hide show
  1. package/README.md +63 -0
  2. package/animations/index.d.ts +5 -0
  3. package/assets/feed/exercise/exerciseAchivment.svg +11 -0
  4. package/assets/feed/icons/active/audio.svg +5 -0
  5. package/assets/feed/icons/active/collection.svg +15 -0
  6. package/assets/feed/icons/active/exercise.svg +13 -0
  7. package/assets/feed/icons/active/generic-file.svg +8 -0
  8. package/assets/feed/icons/active/image.svg +11 -0
  9. package/assets/feed/icons/active/link.svg +6 -0
  10. package/assets/feed/icons/active/pdf.svg +14 -0
  11. package/assets/feed/icons/active/presentation.svg +11 -0
  12. package/assets/feed/icons/active/quiz.svg +17 -0
  13. package/assets/feed/icons/active/story.svg +7 -0
  14. package/assets/feed/icons/active/video.svg +11 -0
  15. package/assets/feed/icons/comment.svg +12 -0
  16. package/assets/feed/icons/error/audio.svg +5 -0
  17. package/assets/feed/icons/error/collection.svg +15 -0
  18. package/assets/feed/icons/error/exercise.svg +13 -0
  19. package/assets/feed/icons/error/generic-file.svg +8 -0
  20. package/assets/feed/icons/error/image.svg +11 -0
  21. package/assets/feed/icons/error/pdf.svg +14 -0
  22. package/assets/feed/icons/error/presentation.svg +11 -0
  23. package/assets/feed/icons/error/quiz.svg +17 -0
  24. package/assets/feed/icons/error/story.svg +7 -0
  25. package/assets/feed/icons/error/video.svg +11 -0
  26. package/assets/feed/icons/eye.svg +13 -0
  27. package/assets/feed/icons/garbage-secondary.svg +14 -0
  28. package/assets/feed/icons/garbage.svg +14 -0
  29. package/assets/feed/icons/green-x.svg +165 -0
  30. package/assets/feed/icons/hamburger.svg +2 -0
  31. package/assets/feed/icons/inactive/audio.svg +5 -0
  32. package/assets/feed/icons/inactive/exercise.svg +17 -0
  33. package/assets/feed/icons/inactive/link.svg +6 -0
  34. package/assets/feed/icons/inactive/pdf.svg +19 -0
  35. package/assets/feed/icons/inactive/presentation.svg +13 -0
  36. package/assets/feed/icons/inactive/quiz.svg +25 -0
  37. package/assets/feed/icons/inactive/story.svg +7 -0
  38. package/assets/feed/icons/inactive/video.svg +13 -0
  39. package/assets/feed/icons/status/Group 856.svg +11 -0
  40. package/assets/feed/icons/status/almostDone.svg +11 -0
  41. package/assets/feed/icons/status/done.svg +11 -0
  42. package/assets/feed/icons/status/inProgress.svg +13 -0
  43. package/assets/feed/icons/white-chevron.svg +3 -0
  44. package/assets/feed/icons/wide-mode.png +0 -0
  45. package/assets/feed/icons/wide-mode.svg +7 -0
  46. package/assets/feed/icons/wide-mode2.svg +8 -0
  47. package/assets/files-icons/.image.svg +11 -0
  48. package/assets/files-icons/.mp4.png +0 -0
  49. package/assets/files-icons/.mp4.svg +12 -0
  50. package/assets/files-icons/.pdf.png +0 -0
  51. package/assets/files-icons/.pdf.svg +16 -0
  52. package/assets/files-icons/.pptx.png +0 -0
  53. package/assets/files-icons/.pptx.svg +12 -0
  54. package/assets/files-icons/.video.svg +12 -0
  55. package/assets/files-icons/default-file.png +0 -0
  56. package/assets/files-icons/generic-file.svg +8 -0
  57. package/assets/files-icons/story.png +0 -0
  58. package/assets/files-icons/story.svg +3 -0
  59. package/assets/files-icons/upload-file.svg +4 -0
  60. package/assets/general/calendar.svg +12 -0
  61. package/assets/general/chevron.svg +3 -0
  62. package/assets/general/clock.svg +4 -0
  63. package/assets/general/closed-chevron.png +0 -0
  64. package/assets/general/college-calendar.svg +12 -0
  65. package/assets/general/comment-icon.svg +12 -0
  66. package/assets/general/dialogX.png +0 -0
  67. package/assets/general/errorOwl.png +0 -0
  68. package/assets/general/green-x.svg +4 -0
  69. package/assets/general/grey-chevron.svg +3 -0
  70. package/assets/general/keyboardLink.svg +15 -0
  71. package/assets/general/logo.png +0 -0
  72. package/assets/general/noCollectionsMessage.svg +59 -0
  73. package/assets/general/open-chevron.png +0 -0
  74. package/assets/general/owl-logo.svg +98 -0
  75. package/assets/general/secondary-x.svg +3 -0
  76. package/assets/general/user.svg +15 -0
  77. package/assets/general/white-chevron.svg +3 -0
  78. package/assets/quiz/greenHeaderArrow.svg +12 -0
  79. package/assets/quiz/greyHeaderArrow.svg +12 -0
  80. package/assets/quiz/happyOwl.svg +126 -0
  81. package/assets/quiz/sadOwl.svg +94 -0
  82. package/assets/quiz/skip.svg +5 -0
  83. package/assets/shared/atoms/inputs/herum-inputs.component.scss +56 -0
  84. package/assets/shared/atoms/selects/herum-selects.component.scss +141 -0
  85. package/assets/shared/atoms/uploadingStatuses/error.svg +8 -0
  86. package/assets/shared/atoms/uploadingStatuses/information.svg +6 -0
  87. package/assets/shared/atoms/uploadingStatuses/success.svg +9 -0
  88. package/assets/shared/audio-images/gray-pause.svg +4 -0
  89. package/assets/shared/audio-images/gray-play.svg +3 -0
  90. package/assets/shared/audio-images/next15.svg +7 -0
  91. package/assets/shared/audio-images/pause.svg +4 -0
  92. package/assets/shared/audio-images/play.svg +3 -0
  93. package/assets/shared/audio-images/previous15.svg +7 -0
  94. package/assets/shared/background/cubes.png +0 -0
  95. package/assets/shared/background/cubes.svg +1900 -0
  96. package/assets/shared/icons/V.svg +3 -0
  97. package/assets/shared/icons/X.svg +3 -0
  98. package/assets/shared/icons/active-clipboard.svg +7 -0
  99. package/assets/shared/icons/active-drag.svg +44 -0
  100. package/assets/shared/icons/active-upload.svg +3 -0
  101. package/assets/shared/icons/add.svg +3 -0
  102. package/assets/shared/icons/attachUsers.png +0 -0
  103. package/assets/shared/icons/big-no-result-owl.png +0 -0
  104. package/assets/shared/icons/bigV.svg +3 -0
  105. package/assets/shared/icons/celeb-owl.png +0 -0
  106. package/assets/shared/icons/clock.svg +3 -0
  107. package/assets/shared/icons/drag.svg +44 -0
  108. package/assets/shared/icons/edit.svg +3 -0
  109. package/assets/shared/icons/editCollection.png +0 -0
  110. package/assets/shared/icons/femaleAvatar.svg +80 -0
  111. package/assets/shared/icons/inactive-clipboard.svg +7 -0
  112. package/assets/shared/icons/input/X.png +0 -0
  113. package/assets/shared/icons/input/X.svg +3 -0
  114. package/assets/shared/icons/input/drag.svg +6 -0
  115. package/assets/shared/icons/input/green-search.png +0 -0
  116. package/assets/shared/icons/input/grey-search.png +0 -0
  117. package/assets/shared/icons/input/search.svg +4 -0
  118. package/assets/shared/icons/maleAvatar.svg +55 -0
  119. package/assets/shared/icons/no-result-owl.png +0 -0
  120. package/assets/shared/icons/resources.svg +6 -0
  121. package/assets/shared/icons/secondary-x.svg +3 -0
  122. package/assets/shared/icons/settings.png +0 -0
  123. package/assets/shared/icons/stepper/white-v.svg +3 -0
  124. package/assets/shared/icons/table/edit.svg +3 -0
  125. package/assets/shared/icons/target.png +0 -0
  126. package/assets/shared/icons/upload.png +0 -0
  127. package/assets/shared/icons/upload.svg +7 -0
  128. package/assets/shared/icons/user.svg +8 -0
  129. package/assets/shared/icons/video/Play.PNG +0 -0
  130. package/assets/shared/icons/video/back10.PNG +0 -0
  131. package/assets/shared/icons/video/back10.svg +7 -0
  132. package/assets/shared/icons/video/download.PNG +0 -0
  133. package/assets/shared/icons/video/download.svg +4 -0
  134. package/assets/shared/icons/video/fullScreen.PNG +0 -0
  135. package/assets/shared/icons/video/fullScreen.svg +7 -0
  136. package/assets/shared/icons/video/minimize.png +0 -0
  137. package/assets/shared/icons/video/mute.png +0 -0
  138. package/assets/shared/icons/video/mute.svg +7 -0
  139. package/assets/shared/icons/video/next10.PNG +0 -0
  140. package/assets/shared/icons/video/next10.svg +7 -0
  141. package/assets/shared/icons/video/pause.PNG +0 -0
  142. package/assets/shared/icons/video/pause.svg +5 -0
  143. package/assets/shared/icons/video/pictureInPicture.png +0 -0
  144. package/assets/shared/icons/video/pictureInPicture.svg +5 -0
  145. package/assets/shared/icons/video/pictureInPictureOff.svg +7 -0
  146. package/assets/shared/icons/video/play.svg +4 -0
  147. package/assets/shared/icons/video/primary-play.png +0 -0
  148. package/assets/shared/icons/video/primaryPlay.svg +22 -0
  149. package/assets/shared/icons/video/sound.svg +8 -0
  150. package/assets/shared/icons/video/speaker.PNG +0 -0
  151. package/assets/shared/trackChanges/edit.svg +11 -0
  152. package/assets/shared/trackChanges/message-plus.svg +14 -0
  153. package/assets/shared/trackChanges/show-comments.svg +5 -0
  154. package/assets/shared/trackChanges/text-reference.svg +3 -0
  155. package/assets/shared/trackChanges/trash.svg +9 -0
  156. package/atoms/index.d.ts +836 -0
  157. package/constants/index.d.ts +795 -0
  158. package/decorators/index.d.ts +3 -0
  159. package/dialogs/index.d.ts +41 -0
  160. package/directives/index.d.ts +55 -0
  161. package/environment/index.d.ts +129 -0
  162. package/errors/index.d.ts +26 -0
  163. package/fesm2022/herum-shared-animations.mjs +41 -0
  164. package/fesm2022/herum-shared-animations.mjs.map +1 -0
  165. package/fesm2022/herum-shared-atoms.mjs +2919 -0
  166. package/fesm2022/herum-shared-atoms.mjs.map +1 -0
  167. package/fesm2022/herum-shared-constants.mjs +711 -0
  168. package/fesm2022/herum-shared-constants.mjs.map +1 -0
  169. package/fesm2022/herum-shared-decorators.mjs +12 -0
  170. package/fesm2022/herum-shared-decorators.mjs.map +1 -0
  171. package/fesm2022/herum-shared-dialogs.mjs +113 -0
  172. package/fesm2022/herum-shared-dialogs.mjs.map +1 -0
  173. package/fesm2022/herum-shared-directives.mjs +226 -0
  174. package/fesm2022/herum-shared-directives.mjs.map +1 -0
  175. package/fesm2022/herum-shared-environment.mjs +10 -0
  176. package/fesm2022/herum-shared-environment.mjs.map +1 -0
  177. package/fesm2022/herum-shared-errors.mjs +71 -0
  178. package/fesm2022/herum-shared-errors.mjs.map +1 -0
  179. package/fesm2022/herum-shared-fetched-message.mjs +118 -0
  180. package/fesm2022/herum-shared-fetched-message.mjs.map +1 -0
  181. package/fesm2022/herum-shared-herum-types.mjs +106 -0
  182. package/fesm2022/herum-shared-herum-types.mjs.map +1 -0
  183. package/fesm2022/herum-shared-molecules.mjs +1530 -0
  184. package/fesm2022/herum-shared-molecules.mjs.map +1 -0
  185. package/fesm2022/herum-shared-mongo-molecules.mjs +269 -0
  186. package/fesm2022/herum-shared-mongo-molecules.mjs.map +1 -0
  187. package/fesm2022/herum-shared-mongo-services.mjs +441 -0
  188. package/fesm2022/herum-shared-mongo-services.mjs.map +1 -0
  189. package/fesm2022/herum-shared-mongo.mjs +729 -0
  190. package/fesm2022/herum-shared-mongo.mjs.map +1 -0
  191. package/fesm2022/herum-shared-objectsExample.mjs +190 -0
  192. package/fesm2022/herum-shared-objectsExample.mjs.map +1 -0
  193. package/fesm2022/herum-shared-pipes.mjs +406 -0
  194. package/fesm2022/herum-shared-pipes.mjs.map +1 -0
  195. package/fesm2022/herum-shared-services.mjs +1107 -0
  196. package/fesm2022/herum-shared-services.mjs.map +1 -0
  197. package/fesm2022/herum-shared-static-services.mjs +140 -0
  198. package/fesm2022/herum-shared-static-services.mjs.map +1 -0
  199. package/fesm2022/herum-shared-table.mjs +837 -0
  200. package/fesm2022/herum-shared-table.mjs.map +1 -0
  201. package/fesm2022/herum-shared-testsObjects.mjs +5722 -0
  202. package/fesm2022/herum-shared-testsObjects.mjs.map +1 -0
  203. package/fesm2022/herum-shared-tokens.mjs +13 -0
  204. package/fesm2022/herum-shared-tokens.mjs.map +1 -0
  205. package/fesm2022/herum-shared-utils.mjs +380 -0
  206. package/fesm2022/herum-shared-utils.mjs.map +1 -0
  207. package/fesm2022/herum-shared-validators.mjs +76 -0
  208. package/fesm2022/herum-shared-validators.mjs.map +1 -0
  209. package/fesm2022/herum-shared.mjs +11709 -0
  210. package/fesm2022/herum-shared.mjs.map +1 -0
  211. package/fetched-message/index.d.ts +49 -0
  212. package/herum-types/index.d.ts +198 -0
  213. package/index.d.ts +2946 -0
  214. package/molecules/index.d.ts +458 -0
  215. package/mongo/index.d.ts +175 -0
  216. package/mongo/molecules/index.d.ts +76 -0
  217. package/mongo/services/index.d.ts +98 -0
  218. package/objectsExample/index.d.ts +11 -0
  219. package/package.json +128 -0
  220. package/pipes/index.d.ts +93 -0
  221. package/services/index.d.ts +266 -0
  222. package/static-services/index.d.ts +25 -0
  223. package/styles/_mixin.scss +86 -0
  224. package/styles/collection-wizard-layout.component.scss +70 -0
  225. package/styles/dialogs.scss +49 -0
  226. package/styles/forms.scss +18 -0
  227. package/styles/overView.scss +115 -0
  228. package/styles/variables/_colors.college.scss +65 -0
  229. package/styles/variables/_colors.scss +161 -0
  230. package/styles/variables/_sizes.scss +73 -0
  231. package/styles/wizard-steps-layout.scss +21 -0
  232. package/table/index.d.ts +233 -0
  233. package/testsObjects/index.d.ts +91 -0
  234. package/tokens/index.d.ts +8 -0
  235. package/utils/index.d.ts +92 -0
  236. package/validators/index.d.ts +20 -0
@@ -0,0 +1,1530 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, EventEmitter, HostListener, ViewChildren, ViewChild, Output, Input, Optional, Self, forwardRef, Inject, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@angular/material/tooltip';
6
+ import { MatTooltipModule } from '@angular/material/tooltip';
7
+ import * as i5 from 'herum-shared/pipes';
8
+ import { PipesModule } from 'herum-shared/pipes';
9
+ import { openClose } from 'herum-shared/animations';
10
+ import * as i1$1 from '@angular/forms';
11
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
12
+ import * as i3 from '@angular/cdk/bidi';
13
+ import * as i2$1 from 'herum-shared/atoms';
14
+ import { AtomsModule } from 'herum-shared/atoms';
15
+ import * as i1$2 from 'herum-shared/services';
16
+ import { DateRange, MatDatepickerModule } from '@angular/material/datepicker';
17
+ import { regexExpressions, startEndDateError, minDateError, formatError, timestampError, svgsStrings, resourcesFilesSuffixes, filesSuffixes, anySubFileTypeWildCard, system } from 'herum-shared/constants';
18
+ import { HERUM_SHARED_CONFIG_TOKEN } from 'herum-shared/environment';
19
+ import { isTruncatedTitleElement, getAssignmentStateDisplayName } from 'herum-shared/utils';
20
+ import * as i2$2 from '@angular/material/menu';
21
+ import { MatMenuModule } from '@angular/material/menu';
22
+ import { StepStatus } from 'herum-shared/herum-types';
23
+ import { MatNativeDateModule, MAT_DATE_LOCALE } from '@angular/material/core';
24
+ import { ClipboardModule } from '@angular/cdk/clipboard';
25
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
26
+ import { MatChipsModule } from '@angular/material/chips';
27
+ import { MatFormFieldModule } from '@angular/material/form-field';
28
+ import { MatInputModule } from '@angular/material/input';
29
+ import { MatSelectModule } from '@angular/material/select';
30
+ import { MatIconModule } from '@angular/material/icon';
31
+ import { MatCheckboxModule } from '@angular/material/checkbox';
32
+ import { MatSliderModule } from '@angular/material/slider';
33
+ import { DragDropModule } from '@angular/cdk/drag-drop';
34
+
35
+ class HerumActiveLinkComponent {
36
+ constructor() { }
37
+ ngOnInit() {
38
+ }
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumActiveLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumActiveLinkComponent, isStandalone: false, selector: "app-herum-active-link", ngImport: i0, template: "<p>herum-active-link works!</p>\r\n", styles: [""] });
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumActiveLinkComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ standalone: false, selector: 'app-herum-active-link', template: "<p>herum-active-link works!</p>\r\n" }]
45
+ }], ctorParameters: () => [] });
46
+
47
+ class HerumActiveMenuComponent {
48
+ elementRef;
49
+ changeDetectorRef;
50
+ useIcons = true;
51
+ view = "wide";
52
+ activeColor = "";
53
+ activeTextColor = "";
54
+ secondaryTextColor = "";
55
+ menuItems = [];
56
+ selectedItem;
57
+ selectById = false;
58
+ isBlock = false;
59
+ dragEvent;
60
+ selectionIndex = new EventEmitter();
61
+ tabsContainer;
62
+ tabsElement;
63
+ onResize() {
64
+ this.setTabElementWidth();
65
+ }
66
+ currentItemIndex = 0;
67
+ hostElement;
68
+ constructor(elementRef, changeDetectorRef) {
69
+ this.elementRef = elementRef;
70
+ this.changeDetectorRef = changeDetectorRef;
71
+ this.hostElement = this.elementRef.nativeElement;
72
+ }
73
+ ngOnChanges(changes) {
74
+ if (changes['activeColor']?.currentValue)
75
+ this.setCSSVariable('--active-menu-background', this.activeColor);
76
+ if (changes['activeTextColor']?.currentValue)
77
+ this.setCSSVariable('--active-menu-text-color', this.activeTextColor);
78
+ if (changes['secondaryTextColor']?.currentValue)
79
+ this.setCSSVariable('--active-menu-secondary-text-color', this.secondaryTextColor);
80
+ if (changes['menuItems']?.currentValue.length) {
81
+ this.changeDetectorRef.detectChanges();
82
+ this.setTabElementWidth();
83
+ }
84
+ if (changes['dragEvent']?.currentValue)
85
+ this.setTabElementWidth();
86
+ }
87
+ setCSSVariable(variable, value) {
88
+ this.hostElement.style.setProperty(variable, value);
89
+ }
90
+ ngAfterViewInit() {
91
+ this.setTabElementWidth();
92
+ }
93
+ _onSelectTab(selection) {
94
+ this.currentItemIndex = selection;
95
+ if (!this.isBlock)
96
+ this.selectionIndex.emit(selection);
97
+ }
98
+ setTabElementWidth() {
99
+ if (!this.tabsElement?.length || !this.menuItems.length)
100
+ return;
101
+ const tabsContainerWidth = this.tabsContainer.nativeElement.clientWidth;
102
+ this.tabsElement.forEach(tab => {
103
+ const width = (tabsContainerWidth / this.menuItems.length) > 150 ? '150px' : `${tabsContainerWidth / this.menuItems.length}px`;
104
+ tab.nativeElement.style.width = width;
105
+ });
106
+ }
107
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumActiveMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
108
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumActiveMenuComponent, isStandalone: false, selector: "herum-active-menu", inputs: { useIcons: "useIcons", view: "view", activeColor: "activeColor", activeTextColor: "activeTextColor", secondaryTextColor: "secondaryTextColor", menuItems: "menuItems", selectedItem: "selectedItem", selectById: "selectById", isBlock: "isBlock", dragEvent: "dragEvent" }, outputs: { selectionIndex: "selectionIndex" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true }, { propertyName: "tabsElement", predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul #tabsContainer class=\"tabs group\" [ngClass]=\"view\" [class.isBlock]=\"isBlock\">\r\n <li #tabs *ngFor=\"let menuItem of menuItems; let i = index\"\r\n [class.active]=\"selectById ? menuItem?.id === selectedItem?.id : (currentItemIndex === i || menuItem === selectedItem)\">\r\n <a (click)=\"_onSelectTab(i)\" [userAction]=\"menuItem.label\">\r\n <span *ngIf=\"useIcons\" [innerHTML]=\"menuItem.icon | safeHtml\"\r\n [ngClass]=\"i == currentItemIndex ? 'active-icon' : 'non-active-icon'\">\r\n </span>\r\n\r\n <p class=\"m-0 truncate\" [matTooltip]=\"menuItem.label\">\r\n {{ menuItem.label }}\r\n </p>\r\n </a>\r\n </li>\r\n</ul>", styles: ["a{cursor:pointer;display:flex;width:100%;gap:8px;align-items:center;justify-content:center;z-index:3}a .active-icon{stroke:var(--active-menu-background, var(--icons-color))}a .active-icon,a .non-active-icon{z-index:3;width:24px}a .non-active-icon{stroke:var(--active-menu-secondary-text-color, #ffffff)}.narrow a{flex-direction:column}.narrow a span{height:18px}.narrow a p{font-size:14px;margin-right:0}#content{background-color:#fff;position:relative;overflow:hidden;min-height:400px}.tabs{list-style:none;width:100%}.tabs li{float:left;height:40px;position:relative}.tabs a{float:left;padding-inline:10px;background-color:var(--active-menu-background);height:100%}.tabs a p{text-decoration:none;font-size:16px;font-weight:500;color:var(--active-menu-secondary-text-color, #ffffff);z-index:3}.isBlock a p{color:gray}.active a{border-top-left-radius:12px;border-top-right-radius:12px}.active a p{color:var(--active-menu-text-color, var(--icons-color))}.tabs .active{z-index:3}.tabs .active a{background-color:#fff;color:var(--icons-color)}.tabs li:before,.tabs li:after,.tabs li a:before,.tabs li a:after{position:absolute;bottom:0}.tabs li:last-child:after,.tabs li:last-child a:after,.tabs li:first-child:before,.tabs li:first-child a:before,.tabs .active:after,.tabs .active:before,.tabs .active a:after,.tabs .active a:before{content:\"\"}.tabs .active:before,.tabs .active:after{background-color:#fff;z-index:1}.tabs li:before,.tabs li:after{background-color:var(--active-menu-background, var(--icons-color));width:12px;height:12px}.tabs li:before{left:-12px}.tabs li:after{right:-12px}.tabs li a:after,.tabs li a:before{width:20px;height:20px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;background-color:var(--active-menu-background, var(--icons-color));z-index:2}.tabs .active a:after,.tabs .active a:before{background-color:var(--active-menu-background, var(--icons-color))}.tabs li:first-child.active a:before,.tabs li:last-child.active a:after{background-color:var(--active-menu-background, var(--icons-color))}.tabs li a:before{left:-20px}.tabs li a:after{right:-20px}ul{background-color:var(--active-menu-background, var(--icons-color));height:52px;margin:0;padding-top:12px;justify-content:flex-start;display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "safeHtml" }] });
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumActiveMenuComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ standalone: false, selector: 'herum-active-menu', template: "<ul #tabsContainer class=\"tabs group\" [ngClass]=\"view\" [class.isBlock]=\"isBlock\">\r\n <li #tabs *ngFor=\"let menuItem of menuItems; let i = index\"\r\n [class.active]=\"selectById ? menuItem?.id === selectedItem?.id : (currentItemIndex === i || menuItem === selectedItem)\">\r\n <a (click)=\"_onSelectTab(i)\" [userAction]=\"menuItem.label\">\r\n <span *ngIf=\"useIcons\" [innerHTML]=\"menuItem.icon | safeHtml\"\r\n [ngClass]=\"i == currentItemIndex ? 'active-icon' : 'non-active-icon'\">\r\n </span>\r\n\r\n <p class=\"m-0 truncate\" [matTooltip]=\"menuItem.label\">\r\n {{ menuItem.label }}\r\n </p>\r\n </a>\r\n </li>\r\n</ul>", styles: ["a{cursor:pointer;display:flex;width:100%;gap:8px;align-items:center;justify-content:center;z-index:3}a .active-icon{stroke:var(--active-menu-background, var(--icons-color))}a .active-icon,a .non-active-icon{z-index:3;width:24px}a .non-active-icon{stroke:var(--active-menu-secondary-text-color, #ffffff)}.narrow a{flex-direction:column}.narrow a span{height:18px}.narrow a p{font-size:14px;margin-right:0}#content{background-color:#fff;position:relative;overflow:hidden;min-height:400px}.tabs{list-style:none;width:100%}.tabs li{float:left;height:40px;position:relative}.tabs a{float:left;padding-inline:10px;background-color:var(--active-menu-background);height:100%}.tabs a p{text-decoration:none;font-size:16px;font-weight:500;color:var(--active-menu-secondary-text-color, #ffffff);z-index:3}.isBlock a p{color:gray}.active a{border-top-left-radius:12px;border-top-right-radius:12px}.active a p{color:var(--active-menu-text-color, var(--icons-color))}.tabs .active{z-index:3}.tabs .active a{background-color:#fff;color:var(--icons-color)}.tabs li:before,.tabs li:after,.tabs li a:before,.tabs li a:after{position:absolute;bottom:0}.tabs li:last-child:after,.tabs li:last-child a:after,.tabs li:first-child:before,.tabs li:first-child a:before,.tabs .active:after,.tabs .active:before,.tabs .active a:after,.tabs .active a:before{content:\"\"}.tabs .active:before,.tabs .active:after{background-color:#fff;z-index:1}.tabs li:before,.tabs li:after{background-color:var(--active-menu-background, var(--icons-color));width:12px;height:12px}.tabs li:before{left:-12px}.tabs li:after{right:-12px}.tabs li a:after,.tabs li a:before{width:20px;height:20px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;background-color:var(--active-menu-background, var(--icons-color));z-index:2}.tabs .active a:after,.tabs .active a:before{background-color:var(--active-menu-background, var(--icons-color))}.tabs li:first-child.active a:before,.tabs li:last-child.active a:after{background-color:var(--active-menu-background, var(--icons-color))}.tabs li a:before{left:-20px}.tabs li a:after{right:-20px}ul{background-color:var(--active-menu-background, var(--icons-color));height:52px;margin:0;padding-top:12px;justify-content:flex-start;display:flex}\n"] }]
113
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { useIcons: [{
114
+ type: Input
115
+ }], view: [{
116
+ type: Input
117
+ }], activeColor: [{
118
+ type: Input
119
+ }], activeTextColor: [{
120
+ type: Input
121
+ }], secondaryTextColor: [{
122
+ type: Input
123
+ }], menuItems: [{
124
+ type: Input
125
+ }], selectedItem: [{
126
+ type: Input
127
+ }], selectById: [{
128
+ type: Input
129
+ }], isBlock: [{
130
+ type: Input
131
+ }], dragEvent: [{
132
+ type: Input
133
+ }], selectionIndex: [{
134
+ type: Output
135
+ }], tabsContainer: [{
136
+ type: ViewChild,
137
+ args: ['tabsContainer']
138
+ }], tabsElement: [{
139
+ type: ViewChildren,
140
+ args: ['tabs']
141
+ }], onResize: [{
142
+ type: HostListener,
143
+ args: ['window:resize']
144
+ }] } });
145
+
146
+ class HerumAutocompleteComponent {
147
+ ngControl;
148
+ options = [];
149
+ displayBy = 'name';
150
+ subTitleBy;
151
+ placeholder = 'הקלד/י לחיפוש...';
152
+ noResultsText = 'אויש, נראה שאין תוצאות מתאימות...';
153
+ disabled = false;
154
+ isLoadingInput = false;
155
+ debounceTime = 0;
156
+ selectedOption = null;
157
+ isBlurred = false;
158
+ filterTextEmitter = new EventEmitter();
159
+ selectedOptionEmitter = new EventEmitter();
160
+ filterInput;
161
+ containerRef;
162
+ onWindowClick(event) {
163
+ if (!this.isDropdownOpen)
164
+ return;
165
+ const target = event.target;
166
+ const host = this.containerRef?.nativeElement;
167
+ if (host && !host.contains(target))
168
+ this.isDropdownOpen = false;
169
+ }
170
+ currentSearchedItem = '';
171
+ filteredOptions = [];
172
+ isDropdownOpen = false;
173
+ isWaitingForResults = false;
174
+ skeletonRows = [1, 2, 3, 4, 5];
175
+ skeletonWidths = [200, 180, 160, 180, 170];
176
+ constructor(ngControl) {
177
+ this.ngControl = ngControl;
178
+ if (this.ngControl)
179
+ this.ngControl.valueAccessor = this;
180
+ }
181
+ ngOnChanges(changes) {
182
+ if (changes['options']) {
183
+ this.filterOptions(this.currentSearchedItem);
184
+ this.isWaitingForResults = false;
185
+ }
186
+ if (changes['selectedOption'] && this.selectedOption) {
187
+ const displayText = this.selectedOption?.[this.displayBy]?.toString() ?? '';
188
+ this.currentSearchedItem = displayText;
189
+ this.onChange(displayText);
190
+ if (this.filterInput)
191
+ this.filterInput.inputValue = displayText;
192
+ }
193
+ }
194
+ _onInputClick(event) {
195
+ event.stopPropagation();
196
+ if (!this.disabled)
197
+ this.isDropdownOpen = true;
198
+ }
199
+ _inputChange(rawText) {
200
+ if (!this.disabled)
201
+ this.isDropdownOpen = true;
202
+ const text = !!rawText ? rawText.toString().trim() : '';
203
+ this.currentSearchedItem = text;
204
+ this.isWaitingForResults = true;
205
+ this.onChange(this.currentSearchedItem);
206
+ this.filterTextEmitter.emit(text);
207
+ this.filterOptions(text);
208
+ }
209
+ _onSelectOption(option) {
210
+ const selectedDisplayText = (option?.[this.displayBy] ?? '').toString();
211
+ this.currentSearchedItem = '';
212
+ this.onChange(this.currentSearchedItem);
213
+ this.onTouched();
214
+ this.selectedOptionEmitter.emit(option);
215
+ this.isDropdownOpen = false;
216
+ if (this.filterInput)
217
+ this.filterInput.inputValue = selectedDisplayText;
218
+ }
219
+ _getSkeletonWidth(index) {
220
+ return this.skeletonWidths[index % this.skeletonWidths.length];
221
+ }
222
+ onChange = () => { };
223
+ onTouched = () => { };
224
+ writeValue(value) {
225
+ this.currentSearchedItem = value || '';
226
+ this.filterOptions(this.currentSearchedItem);
227
+ }
228
+ registerOnChange(fn) {
229
+ this.onChange = fn;
230
+ }
231
+ registerOnTouched(fn) {
232
+ this.onTouched = fn;
233
+ }
234
+ setDisabledState(isDisabled) {
235
+ this.disabled = isDisabled;
236
+ }
237
+ filterOptions(text) {
238
+ const options = Array.isArray(this.options) ? this.options : [];
239
+ if (!options?.length) {
240
+ this.filteredOptions = [];
241
+ return;
242
+ }
243
+ if (!text) {
244
+ this.filteredOptions = [...options];
245
+ return;
246
+ }
247
+ const normalizedSearchText = (text || '').toString().toLocaleLowerCase();
248
+ this.filteredOptions = options.filter(option => {
249
+ const optionDisplayValue = option[this.displayBy];
250
+ if (!optionDisplayValue)
251
+ return false;
252
+ const normalizedOptionText = optionDisplayValue.toString().toLowerCase();
253
+ return normalizedOptionText.includes(normalizedSearchText);
254
+ });
255
+ }
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumAutocompleteComponent, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumAutocompleteComponent, isStandalone: false, selector: "herum-autocomplete", inputs: { options: "options", displayBy: "displayBy", subTitleBy: "subTitleBy", placeholder: "placeholder", noResultsText: "noResultsText", disabled: "disabled", isLoadingInput: "isLoadingInput", debounceTime: "debounceTime", selectedOption: "selectedOption", isBlurred: "isBlurred" }, outputs: { filterTextEmitter: "filterTextEmitter", selectedOptionEmitter: "selectedOptionEmitter" }, host: { listeners: { "window:click": "onWindowClick($event)" } }, viewQueries: [{ propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"autocomplete-container\" dir=\"rtl\" [class.disabled]=\"disabled\">\r\n <herum-input-field #filterInput class=\"autocomplete-input internal\" \r\n [type]=\"isBlurred ? 'search-blur' : 'search'\" [placeholder]=\"placeholder\"\r\n [debounceTime]=\"debounceTime\" [disabled]=\"disabled\" [inputValue]=\"currentSearchedItem\"\r\n (click)=\"_onInputClick($event)\" (inputValueEmitter)=\"_inputChange($event)\">\r\n </herum-input-field>\r\n\r\n <div class=\"autocomplete-dropdown\" [@openClose]=\"isDropdownOpen ? 'openDown' : 'closeUp'\" \r\n [class.hidden]=\"!isDropdownOpen\" [class.glass]=\"isBlurred\">\r\n <ng-container *ngIf=\"isLoadingInput || isWaitingForResults; else optionsList\">\r\n <div *ngFor=\"let _ of skeletonRows; let i = index\" class=\"autocomplete-option loading-state\">\r\n <span class=\"skeleton-text skeleton\" [ngStyle]=\"{width: _getSkeletonWidth(i) + 'px'}\">&nbsp;</span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #optionsList>\r\n <ng-container *ngIf=\"filteredOptions?.length; else noResults\">\r\n <a class=\"autocomplete-option\" *ngFor=\"let option of filteredOptions\" (click)=\"_onSelectOption(option)\">\r\n <div class=\"option-main\">\r\n <ng-container *ngIf=\"option.iconUrl; else defaultLeadingIcon\">\r\n <img [src]=\"option.iconUrl\" class=\"option-icon-img\" />\r\n </ng-container>\r\n \r\n <ng-template #defaultLeadingIcon>\r\n <img src=\"assets/hadracha/general/plus.svg\" class=\"option-icon\">\r\n </ng-template>\r\n\r\n <span [highlightText]=\"option[displayBy]\" [herumHighlight]=\"currentSearchedItem\"></span>\r\n </div>\r\n\r\n <span class=\"option-subtitle\" *ngIf=\"subTitleBy && option[subTitleBy]\">\r\n {{ option[subTitleBy] }}\r\n </span>\r\n </a>\r\n </ng-container>\r\n\r\n <ng-template #noResults>\r\n <a *ngIf=\"!(isLoadingInput || isWaitingForResults)\"\r\n class=\"autocomplete-option text-center no-results-blurred\">\r\n {{ noResultsText }}\r\n </a>\r\n </ng-template>\r\n </ng-template>\r\n </div>\r\n</div>", styles: [":host{--option-icon-size: 14px;--option-item-size: 28px;--autocomplete-visible-options: 5;--autocomplete-option-padding-vertical: 8px;--autocomplete-option-height: calc(var(--option-item-size) + 2 * var(--autocomplete-option-padding-vertical));--dropdown-height: calc(var(--autocomplete-option-height) * var(--autocomplete-visible-options));--loading-state-padding-vertical: calc((var(--option-item-size) + var(--autocomplete-option-padding-vertical)) / 2)}.autocomplete-container{position:relative;width:100%;direction:rtl}.autocomplete-container.disabled{opacity:.6;pointer-events:none}.autocomplete-container .autocomplete-input{width:100%;display:block}.autocomplete-container .autocomplete-dropdown{position:absolute;top:100%;left:0;right:0;z-index:10;max-height:var(--dropdown-height);overflow-y:auto;overflow-x:hidden;line-height:var(--option-item-size)}.autocomplete-container .autocomplete-dropdown.hidden{pointer-events:none}.autocomplete-container .autocomplete-dropdown:not(.glass){background-color:var(--light-background-color);border-radius:var(--border-radius);box-shadow:0 2px 4px #00000029}.autocomplete-container .autocomplete-dropdown.glass .no-results-blurred{color:var(--text-color)!important}.autocomplete-container .autocomplete-dropdown .autocomplete-option{display:flex;align-items:center;justify-content:flex-start;padding:var(--autocomplete-option-padding-vertical) 16px;cursor:pointer;font-size:14px;color:var(--text-color);text-decoration:none}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-main{display:flex;align-items:center;gap:8px;min-width:0}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-subtitle{margin-inline-start:auto;white-space:nowrap;opacity:.75;font-size:12px}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-icon{width:var(--option-icon-size);height:var(--option-icon-size);margin-left:4px}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-icon-img{width:var(--option-item-size);height:var(--option-item-size);margin-left:8px;border-radius:16px}.autocomplete-container .autocomplete-dropdown .autocomplete-option.autocomplete-option{border-top:1px solid var(--divider-color)}.autocomplete-container .autocomplete-dropdown .autocomplete-option:hover{background-color:var(--hover-background)}.autocomplete-container .autocomplete-dropdown .autocomplete-option.text-center{cursor:default;color:var(--homepage-separator)}.autocomplete-container .autocomplete-dropdown .autocomplete-option.loading-state{padding-top:var(--loading-state-padding-vertical);padding-bottom:var(--loading-state-padding-vertical)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i2$1.HerumInputFieldComponent, selector: "herum-input-field", inputs: ["type", "placeholder", "disabled", "isBlocked", "isValid", "errorMsg", "showErrorMsgGap", "inputValue", "isLoading", "id", "debounceTime", "minValue", "maxValue", "isBlurred", "touched", "ltrMode", "preventMacroKeysPressEvent"], outputs: ["inputValueEmitter"] }], animations: [openClose] });
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumAutocompleteComponent, decorators: [{
260
+ type: Component,
261
+ args: [{ standalone: false, selector: 'herum-autocomplete', animations: [openClose], template: "<div #container class=\"autocomplete-container\" dir=\"rtl\" [class.disabled]=\"disabled\">\r\n <herum-input-field #filterInput class=\"autocomplete-input internal\" \r\n [type]=\"isBlurred ? 'search-blur' : 'search'\" [placeholder]=\"placeholder\"\r\n [debounceTime]=\"debounceTime\" [disabled]=\"disabled\" [inputValue]=\"currentSearchedItem\"\r\n (click)=\"_onInputClick($event)\" (inputValueEmitter)=\"_inputChange($event)\">\r\n </herum-input-field>\r\n\r\n <div class=\"autocomplete-dropdown\" [@openClose]=\"isDropdownOpen ? 'openDown' : 'closeUp'\" \r\n [class.hidden]=\"!isDropdownOpen\" [class.glass]=\"isBlurred\">\r\n <ng-container *ngIf=\"isLoadingInput || isWaitingForResults; else optionsList\">\r\n <div *ngFor=\"let _ of skeletonRows; let i = index\" class=\"autocomplete-option loading-state\">\r\n <span class=\"skeleton-text skeleton\" [ngStyle]=\"{width: _getSkeletonWidth(i) + 'px'}\">&nbsp;</span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #optionsList>\r\n <ng-container *ngIf=\"filteredOptions?.length; else noResults\">\r\n <a class=\"autocomplete-option\" *ngFor=\"let option of filteredOptions\" (click)=\"_onSelectOption(option)\">\r\n <div class=\"option-main\">\r\n <ng-container *ngIf=\"option.iconUrl; else defaultLeadingIcon\">\r\n <img [src]=\"option.iconUrl\" class=\"option-icon-img\" />\r\n </ng-container>\r\n \r\n <ng-template #defaultLeadingIcon>\r\n <img src=\"assets/hadracha/general/plus.svg\" class=\"option-icon\">\r\n </ng-template>\r\n\r\n <span [highlightText]=\"option[displayBy]\" [herumHighlight]=\"currentSearchedItem\"></span>\r\n </div>\r\n\r\n <span class=\"option-subtitle\" *ngIf=\"subTitleBy && option[subTitleBy]\">\r\n {{ option[subTitleBy] }}\r\n </span>\r\n </a>\r\n </ng-container>\r\n\r\n <ng-template #noResults>\r\n <a *ngIf=\"!(isLoadingInput || isWaitingForResults)\"\r\n class=\"autocomplete-option text-center no-results-blurred\">\r\n {{ noResultsText }}\r\n </a>\r\n </ng-template>\r\n </ng-template>\r\n </div>\r\n</div>", styles: [":host{--option-icon-size: 14px;--option-item-size: 28px;--autocomplete-visible-options: 5;--autocomplete-option-padding-vertical: 8px;--autocomplete-option-height: calc(var(--option-item-size) + 2 * var(--autocomplete-option-padding-vertical));--dropdown-height: calc(var(--autocomplete-option-height) * var(--autocomplete-visible-options));--loading-state-padding-vertical: calc((var(--option-item-size) + var(--autocomplete-option-padding-vertical)) / 2)}.autocomplete-container{position:relative;width:100%;direction:rtl}.autocomplete-container.disabled{opacity:.6;pointer-events:none}.autocomplete-container .autocomplete-input{width:100%;display:block}.autocomplete-container .autocomplete-dropdown{position:absolute;top:100%;left:0;right:0;z-index:10;max-height:var(--dropdown-height);overflow-y:auto;overflow-x:hidden;line-height:var(--option-item-size)}.autocomplete-container .autocomplete-dropdown.hidden{pointer-events:none}.autocomplete-container .autocomplete-dropdown:not(.glass){background-color:var(--light-background-color);border-radius:var(--border-radius);box-shadow:0 2px 4px #00000029}.autocomplete-container .autocomplete-dropdown.glass .no-results-blurred{color:var(--text-color)!important}.autocomplete-container .autocomplete-dropdown .autocomplete-option{display:flex;align-items:center;justify-content:flex-start;padding:var(--autocomplete-option-padding-vertical) 16px;cursor:pointer;font-size:14px;color:var(--text-color);text-decoration:none}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-main{display:flex;align-items:center;gap:8px;min-width:0}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-subtitle{margin-inline-start:auto;white-space:nowrap;opacity:.75;font-size:12px}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-icon{width:var(--option-icon-size);height:var(--option-icon-size);margin-left:4px}.autocomplete-container .autocomplete-dropdown .autocomplete-option .option-icon-img{width:var(--option-item-size);height:var(--option-item-size);margin-left:8px;border-radius:16px}.autocomplete-container .autocomplete-dropdown .autocomplete-option.autocomplete-option{border-top:1px solid var(--divider-color)}.autocomplete-container .autocomplete-dropdown .autocomplete-option:hover{background-color:var(--hover-background)}.autocomplete-container .autocomplete-dropdown .autocomplete-option.text-center{cursor:default;color:var(--homepage-separator)}.autocomplete-container .autocomplete-dropdown .autocomplete-option.loading-state{padding-top:var(--loading-state-padding-vertical);padding-bottom:var(--loading-state-padding-vertical)}\n"] }]
262
+ }], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
263
+ type: Optional
264
+ }, {
265
+ type: Self
266
+ }] }], propDecorators: { options: [{
267
+ type: Input
268
+ }], displayBy: [{
269
+ type: Input
270
+ }], subTitleBy: [{
271
+ type: Input
272
+ }], placeholder: [{
273
+ type: Input
274
+ }], noResultsText: [{
275
+ type: Input
276
+ }], disabled: [{
277
+ type: Input
278
+ }], isLoadingInput: [{
279
+ type: Input
280
+ }], debounceTime: [{
281
+ type: Input
282
+ }], selectedOption: [{
283
+ type: Input
284
+ }], isBlurred: [{
285
+ type: Input
286
+ }], filterTextEmitter: [{
287
+ type: Output
288
+ }], selectedOptionEmitter: [{
289
+ type: Output
290
+ }], filterInput: [{
291
+ type: ViewChild,
292
+ args: ['filterInput']
293
+ }], containerRef: [{
294
+ type: ViewChild,
295
+ args: ['container']
296
+ }], onWindowClick: [{
297
+ type: HostListener,
298
+ args: ['window:click', ['$event']]
299
+ }] } });
300
+
301
+ const CUSTOM_CLOSED_LIST_MULTI_SELECT_CONTROL_VALUE_ACCESSOR = {
302
+ provide: NG_VALUE_ACCESSOR,
303
+ useExisting: forwardRef(() => HerumClosedListMultiSelectComponent),
304
+ multi: true,
305
+ };
306
+ class HerumClosedListMultiSelectComponent {
307
+ commonGraphqlRequestsService;
308
+ closedListName;
309
+ placeholder = 'בחר/י...';
310
+ disabled = false;
311
+ isDropDownInPositionFixed = false;
312
+ size = 'default';
313
+ dropDownDirection = 'downwards';
314
+ selectedClosedListOptionalValues;
315
+ selectedClosedListValueEmitter = new EventEmitter();
316
+ closedListValues = [];
317
+ constructor(commonGraphqlRequestsService) {
318
+ this.commonGraphqlRequestsService = commonGraphqlRequestsService;
319
+ }
320
+ ngOnChanges(changes) {
321
+ if (changes['closedListName']?.currentValue)
322
+ this.setClosedListValues();
323
+ }
324
+ setClosedListValues() {
325
+ this.commonGraphqlRequestsService.getClosedLists([this.closedListName])
326
+ .subscribe((closedList) => {
327
+ this.closedListValues = closedList[0].optionalValues?.map(optionalValue => ({ name: optionalValue.displayName, id: optionalValue.id }));
328
+ this.syncIdsBetweenSelectedValuesToValues();
329
+ });
330
+ }
331
+ _selectedOptionsEmitter(selectedClosedListValue) {
332
+ this.selectedClosedListValueEmitter.emit(selectedClosedListValue);
333
+ this.onChange(selectedClosedListValue);
334
+ }
335
+ onChange = () => { };
336
+ onTouched = () => { };
337
+ writeValue(selectedClosedListOptionalValues) {
338
+ if (!selectedClosedListOptionalValues)
339
+ return;
340
+ this.selectedClosedListOptionalValues = selectedClosedListOptionalValues;
341
+ this.syncIdsBetweenSelectedValuesToValues();
342
+ }
343
+ syncIdsBetweenSelectedValuesToValues() {
344
+ if (!this.closedListValues?.length || !this.selectedClosedListOptionalValues)
345
+ return;
346
+ this.closedListValues.forEach(closedListValue => {
347
+ const selectedClosedListOptionalValue = this.selectedClosedListOptionalValues.find(section => section.name === closedListValue.name);
348
+ if (selectedClosedListOptionalValue)
349
+ closedListValue.id = selectedClosedListOptionalValue.id;
350
+ });
351
+ }
352
+ registerOnChange(fn) {
353
+ this.onChange = fn;
354
+ }
355
+ registerOnTouched(fn) {
356
+ this.onTouched = fn;
357
+ }
358
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumClosedListMultiSelectComponent, deps: [{ token: i1$2.CommonGraphqlRequestsService }], target: i0.ɵɵFactoryTarget.Component });
359
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumClosedListMultiSelectComponent, isStandalone: false, selector: "herum-closed-list-multi-select", inputs: { closedListName: "closedListName", placeholder: "placeholder", disabled: "disabled", isDropDownInPositionFixed: "isDropDownInPositionFixed", size: "size", dropDownDirection: "dropDownDirection", selectedClosedListOptionalValues: "selectedClosedListOptionalValues" }, outputs: { selectedClosedListValueEmitter: "selectedClosedListValueEmitter" }, providers: [CUSTOM_CLOSED_LIST_MULTI_SELECT_CONTROL_VALUE_ACCESSOR], usesOnChanges: true, ngImport: i0, template: "<herum-multi-select [placeholder]=\"placeholder\" [options]=\"closedListValues\"\r\n [selectedOptionsInput]=\"selectedClosedListOptionalValues\" [disabled]=\"disabled\"\r\n [isDropDownInPositionFixed]=\"isDropDownInPositionFixed\" [size]=\"size\" [dropDownDirection]=\"dropDownDirection\"\r\n (selectedOptions)=\"_selectedOptionsEmitter($event)\">\r\n</herum-multi-select>", styles: [""], dependencies: [{ kind: "component", type: i2$1.HerumMultiSelectComponent, selector: "herum-multi-select", inputs: ["placeholder", "options", "titledOptionsList", "recursiveTitledOption", "selectedOptionsInput", "maxChips", "disabled", "size", "isDropDownInPositionFixed", "dropDownDirection", "isMultiHeads"], outputs: ["selectedOptions", "selectedRecursiveOptions"] }] });
360
+ }
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumClosedListMultiSelectComponent, decorators: [{
362
+ type: Component,
363
+ args: [{ standalone: false, selector: 'herum-closed-list-multi-select', providers: [CUSTOM_CLOSED_LIST_MULTI_SELECT_CONTROL_VALUE_ACCESSOR], template: "<herum-multi-select [placeholder]=\"placeholder\" [options]=\"closedListValues\"\r\n [selectedOptionsInput]=\"selectedClosedListOptionalValues\" [disabled]=\"disabled\"\r\n [isDropDownInPositionFixed]=\"isDropDownInPositionFixed\" [size]=\"size\" [dropDownDirection]=\"dropDownDirection\"\r\n (selectedOptions)=\"_selectedOptionsEmitter($event)\">\r\n</herum-multi-select>" }]
364
+ }], ctorParameters: () => [{ type: i1$2.CommonGraphqlRequestsService }], propDecorators: { closedListName: [{
365
+ type: Input
366
+ }], placeholder: [{
367
+ type: Input
368
+ }], disabled: [{
369
+ type: Input
370
+ }], isDropDownInPositionFixed: [{
371
+ type: Input
372
+ }], size: [{
373
+ type: Input
374
+ }], dropDownDirection: [{
375
+ type: Input
376
+ }], selectedClosedListOptionalValues: [{
377
+ type: Input
378
+ }], selectedClosedListValueEmitter: [{
379
+ type: Output
380
+ }] } });
381
+
382
+ const CUSTOM_CLOSED_LIST_SELECT_CONTROL_VALUE_ACCESSOR = {
383
+ provide: NG_VALUE_ACCESSOR,
384
+ useExisting: forwardRef(() => HerumClosedListSelectComponent),
385
+ multi: true,
386
+ };
387
+ class HerumClosedListSelectComponent {
388
+ commonGraphqlRequestsService;
389
+ closedListName;
390
+ placeholder = 'בחר/י...';
391
+ closedListOptionalValueName;
392
+ disabled = false;
393
+ isDropDownInPositionFixed = false;
394
+ iconPath = '';
395
+ isAutoComplete = false;
396
+ title = '';
397
+ size = 'default';
398
+ displayLoadingMode = false;
399
+ isLoadingInput = false;
400
+ dropDownDirection = 'downwards';
401
+ filterPlaceholder = "חפש/י...";
402
+ selectedClosedListValueEmitter = new EventEmitter();
403
+ filterTextEmitter = new EventEmitter();
404
+ closedListValues = [];
405
+ selectedClosedListOptionalValue;
406
+ constructor(commonGraphqlRequestsService) {
407
+ this.commonGraphqlRequestsService = commonGraphqlRequestsService;
408
+ }
409
+ ngOnChanges(changes) {
410
+ if (changes['closedListName']?.currentValue)
411
+ this.setClosedListValues();
412
+ if (changes['closedListOptionalValueName']?.currentValue)
413
+ this.handleClosedListValueId();
414
+ }
415
+ setClosedListValues() {
416
+ this.commonGraphqlRequestsService.getClosedLists([this.closedListName])
417
+ .subscribe((closedList) => {
418
+ this.closedListValues = closedList[0].optionalValues?.map(optionalValue => ({ name: optionalValue.displayName, id: optionalValue.id }));
419
+ this.handleClosedListValueId();
420
+ });
421
+ }
422
+ handleClosedListValueId() {
423
+ if (!this.closedListOptionalValueName) {
424
+ this.selectedClosedListOptionalValue = undefined;
425
+ return;
426
+ }
427
+ this.selectedClosedListOptionalValue = { name: this.closedListOptionalValueName, id: this.closedListValues?.find(closedListValue => closedListValue.name === this.closedListOptionalValueName)?.id };
428
+ }
429
+ _selectedOptionEmitter(selectedClosedListValue) {
430
+ this.selectedClosedListValueEmitter.emit(selectedClosedListValue);
431
+ this.onChange(selectedClosedListValue);
432
+ }
433
+ _filterTextEmitter(text) {
434
+ this.filterTextEmitter.emit(text);
435
+ }
436
+ onChange = () => { };
437
+ onTouched = () => { };
438
+ writeValue(closedListOptionalValueName) {
439
+ if (!closedListOptionalValueName)
440
+ return;
441
+ this.closedListOptionalValueName = closedListOptionalValueName;
442
+ this.handleClosedListValueId();
443
+ }
444
+ registerOnChange(fn) {
445
+ this.onChange = fn;
446
+ }
447
+ registerOnTouched(fn) {
448
+ this.onTouched = fn;
449
+ }
450
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumClosedListSelectComponent, deps: [{ token: i1$2.CommonGraphqlRequestsService }], target: i0.ɵɵFactoryTarget.Component });
451
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumClosedListSelectComponent, isStandalone: false, selector: "herum-closed-list-select", inputs: { closedListName: ["formControlName", "closedListName"], placeholder: "placeholder", closedListOptionalValueName: "closedListOptionalValueName", disabled: "disabled", isDropDownInPositionFixed: "isDropDownInPositionFixed", iconPath: "iconPath", isAutoComplete: "isAutoComplete", title: "title", size: "size", displayLoadingMode: "displayLoadingMode", isLoadingInput: "isLoadingInput", dropDownDirection: "dropDownDirection", filterPlaceholder: "filterPlaceholder" }, outputs: { selectedClosedListValueEmitter: "selectedClosedListValueEmitter", filterTextEmitter: "filterTextEmitter" }, providers: [CUSTOM_CLOSED_LIST_SELECT_CONTROL_VALUE_ACCESSOR], usesOnChanges: true, ngImport: i0, template: "<herum-select\r\n[options]=\"closedListValues\"\r\n[placeholder]=\"placeholder\"\r\n[selectedOption]=\"selectedClosedListOptionalValue\"\r\n[disabled]=\"disabled\"\r\n[isDropDownInPositionFixed]=\"isDropDownInPositionFixed\"\r\n[iconPath]=\"iconPath\"\r\n[isAutoComplete]=\"isAutoComplete\"\r\n[title]=\"title\"\r\n[size]=\"size\"\r\n[displayLoadingMode]=\"displayLoadingMode\"\r\n[isLoadingInput]=\"isLoadingInput\"\r\n[dropDownDirection]=\"dropDownDirection\"\r\n[filterPlaceholder]=\"filterPlaceholder\"\r\n(selectedOptionEmitter)=\"_selectedOptionEmitter($event)\"\r\n(filterTextEmitter)=\"_filterTextEmitter($event)\"\r\n>\r\n</herum-select>", dependencies: [{ kind: "component", type: i2$1.HerumSelectComponent, selector: "herum-select", inputs: ["options", "displayBy", "placeholder", "selectedOption", "disabled", "isDropDownInPositionFixed", "iconPath", "isAutoComplete", "title", "size", "displayLoadingMode", "isLoadingInput", "dropDownDirection", "filterPlaceholder", "debounceTime"], outputs: ["selectedOptionEmitter", "filterTextEmitter"] }] });
452
+ }
453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumClosedListSelectComponent, decorators: [{
454
+ type: Component,
455
+ args: [{ standalone: false, selector: 'herum-closed-list-select', providers: [CUSTOM_CLOSED_LIST_SELECT_CONTROL_VALUE_ACCESSOR], template: "<herum-select\r\n[options]=\"closedListValues\"\r\n[placeholder]=\"placeholder\"\r\n[selectedOption]=\"selectedClosedListOptionalValue\"\r\n[disabled]=\"disabled\"\r\n[isDropDownInPositionFixed]=\"isDropDownInPositionFixed\"\r\n[iconPath]=\"iconPath\"\r\n[isAutoComplete]=\"isAutoComplete\"\r\n[title]=\"title\"\r\n[size]=\"size\"\r\n[displayLoadingMode]=\"displayLoadingMode\"\r\n[isLoadingInput]=\"isLoadingInput\"\r\n[dropDownDirection]=\"dropDownDirection\"\r\n[filterPlaceholder]=\"filterPlaceholder\"\r\n(selectedOptionEmitter)=\"_selectedOptionEmitter($event)\"\r\n(filterTextEmitter)=\"_filterTextEmitter($event)\"\r\n>\r\n</herum-select>" }]
456
+ }], ctorParameters: () => [{ type: i1$2.CommonGraphqlRequestsService }], propDecorators: { closedListName: [{
457
+ type: Input,
458
+ args: ['formControlName']
459
+ }], placeholder: [{
460
+ type: Input
461
+ }], closedListOptionalValueName: [{
462
+ type: Input
463
+ }], disabled: [{
464
+ type: Input
465
+ }], isDropDownInPositionFixed: [{
466
+ type: Input
467
+ }], iconPath: [{
468
+ type: Input
469
+ }], isAutoComplete: [{
470
+ type: Input
471
+ }], title: [{
472
+ type: Input
473
+ }], size: [{
474
+ type: Input
475
+ }], displayLoadingMode: [{
476
+ type: Input
477
+ }], isLoadingInput: [{
478
+ type: Input
479
+ }], dropDownDirection: [{
480
+ type: Input
481
+ }], filterPlaceholder: [{
482
+ type: Input
483
+ }], selectedClosedListValueEmitter: [{
484
+ type: Output
485
+ }], filterTextEmitter: [{
486
+ type: Output
487
+ }] } });
488
+
489
+ class HerumDateTimeInputComponent {
490
+ placeholder = '';
491
+ inputValue = '';
492
+ minDate;
493
+ showSeconds;
494
+ rangeMode;
495
+ dateChange = new EventEmitter();
496
+ timeChange = new EventEmitter();
497
+ disableChange = new EventEmitter();
498
+ errorMessage = '';
499
+ isValid = true;
500
+ debounceTime = 300;
501
+ ltrMode = true;
502
+ ngOnChanges(changes) {
503
+ if (changes['inputValue']?.currentValue)
504
+ this._valueChange(this.inputValue);
505
+ }
506
+ _valueChange(dateString) {
507
+ this.isValid = true;
508
+ if (this.rangeMode) {
509
+ this.handleDateRangeTimeRangeMode(dateString);
510
+ return;
511
+ }
512
+ this.handleDateTimeMode(dateString);
513
+ }
514
+ handleDateRangeTimeRangeMode(dateString) {
515
+ const pattern = this.showSeconds ? regexExpressions.fullRangeDateTime : regexExpressions.rangeDateTimeWithoutSeconds;
516
+ this.isValid = this.patternValidation(dateString, pattern);
517
+ if (!this.isValid) {
518
+ this.disableChange.emit(true);
519
+ return;
520
+ }
521
+ const splittedDate = dateString.split('-');
522
+ const startDateString = splittedDate[0];
523
+ const endDateString = splittedDate[1];
524
+ this.handleDateRangeTimeRangeValidations(startDateString, endDateString);
525
+ if (!this.isValid) {
526
+ this.disableChange.emit(true);
527
+ return;
528
+ }
529
+ const startDate = this.createDateTime(startDateString).date;
530
+ const endDate = this.createDateTime(endDateString).date;
531
+ const dateRange = new DateRange(startDate, endDate);
532
+ this.dateChange.emit(dateRange);
533
+ this.disableChange.emit(false);
534
+ }
535
+ handleDateRangeTimeRangeValidations(startDateString, endDateString) {
536
+ this.isValid = this.timestampValidation(startDateString) && this.timestampValidation(endDateString) &&
537
+ this.minDateValidation(startDateString) && this.startEndDateValidation(startDateString, endDateString);
538
+ }
539
+ ;
540
+ startEndDateValidation(startDateString, endDateString) {
541
+ const startDate = this.createDateTime(startDateString).date;
542
+ const endDate = this.createDateTime(endDateString).date;
543
+ const isStartEndDateValid = endDate.getTime() >= startDate.getTime();
544
+ if (!isStartEndDateValid)
545
+ this.errorMessage = startEndDateError;
546
+ return isStartEndDateValid;
547
+ }
548
+ handleDateTimeMode(dateString) {
549
+ this.handleDateTimeValidations(dateString);
550
+ if (!this.isValid) {
551
+ this.disableChange.emit(true);
552
+ return;
553
+ }
554
+ const { date, time } = this.createDateTime(dateString);
555
+ this.dateChange.emit(date);
556
+ this.timeChange.emit(time);
557
+ this.disableChange.emit(false);
558
+ }
559
+ createDateTime(dateString) {
560
+ const dateParts = dateString.split(' ');
561
+ const year = dateParts[0].split('/').reverse().join('-');
562
+ const time = dateParts[1];
563
+ const dateTime = `${year}T${time}`;
564
+ const date = new Date(dateTime);
565
+ return { date, time };
566
+ }
567
+ handleDateTimeValidations(value) {
568
+ const pattern = this.showSeconds ? regexExpressions.fullDateTime : regexExpressions.dateTimeWithoutSeconds;
569
+ this.isValid = this.patternValidation(value, pattern) && this.timestampValidation(value) && this.minDateValidation(value);
570
+ }
571
+ minDateValidation(value) {
572
+ if (!this.minDate)
573
+ return true;
574
+ const parts = value.split(' ');
575
+ const year = parts[0].split('/').reverse().join('-');
576
+ const isDateValid = new Date(year).getTime() >= this.minDate.getTime();
577
+ if (!isDateValid)
578
+ this.errorMessage = minDateError;
579
+ return isDateValid;
580
+ }
581
+ patternValidation(value, pattern) {
582
+ const isPatternValid = pattern.test(value);
583
+ if (!isPatternValid)
584
+ this.errorMessage = formatError + ' ' + this.placeholder;
585
+ return isPatternValid;
586
+ }
587
+ timestampValidation(date) {
588
+ const dateTimeParts = date.split(' ');
589
+ const timeParts = dateTimeParts[1].split(':');
590
+ const dateParts = dateTimeParts[0].split('/');
591
+ const year = parseInt(dateParts[2]);
592
+ const month = parseInt(dateParts[1]);
593
+ const day = parseInt(dateParts[0]);
594
+ const hours = parseInt(timeParts[0]);
595
+ const minutes = parseInt(timeParts[1]);
596
+ const seconds = timeParts[2] !== undefined ? parseInt(timeParts[2]) : 0;
597
+ const lastDayInMonth = new Date(year, month, 0).getDate();
598
+ const isValidDate = month >= 1 && month <= 12 && day >= 1 && day <= lastDayInMonth;
599
+ const isValidTime = hours >= 0 && hours <= 24 && minutes >= 0 && minutes <= 60 && seconds >= 0 && seconds <= 60;
600
+ if (!isValidDate || !isValidTime)
601
+ this.errorMessage = timestampError;
602
+ return isValidDate && isValidTime;
603
+ }
604
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDateTimeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
605
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumDateTimeInputComponent, isStandalone: false, selector: "herum-date-time-input", inputs: { placeholder: "placeholder", inputValue: "inputValue", minDate: "minDate", showSeconds: "showSeconds", rangeMode: "rangeMode" }, outputs: { dateChange: "dateChange", timeChange: "timeChange", disableChange: "disableChange" }, usesOnChanges: true, ngImport: i0, template: "<herum-input-field [placeholder]=\"placeholder\" [errorMsg]=\"errorMessage\" [isValid]=\"isValid\" [isBlurred]=\"true\"\r\n [inputValue]=\"inputValue\" [debounceTime]=\"debounceTime\" [ltrMode]=\"ltrMode\"\r\n (inputValueEmitter)=\"_valueChange($event)\">\r\n</herum-input-field>", dependencies: [{ kind: "component", type: i2$1.HerumInputFieldComponent, selector: "herum-input-field", inputs: ["type", "placeholder", "disabled", "isBlocked", "isValid", "errorMsg", "showErrorMsgGap", "inputValue", "isLoading", "id", "debounceTime", "minValue", "maxValue", "isBlurred", "touched", "ltrMode", "preventMacroKeysPressEvent"], outputs: ["inputValueEmitter"] }] });
606
+ }
607
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDateTimeInputComponent, decorators: [{
608
+ type: Component,
609
+ args: [{ standalone: false, selector: 'herum-date-time-input', template: "<herum-input-field [placeholder]=\"placeholder\" [errorMsg]=\"errorMessage\" [isValid]=\"isValid\" [isBlurred]=\"true\"\r\n [inputValue]=\"inputValue\" [debounceTime]=\"debounceTime\" [ltrMode]=\"ltrMode\"\r\n (inputValueEmitter)=\"_valueChange($event)\">\r\n</herum-input-field>" }]
610
+ }], propDecorators: { placeholder: [{
611
+ type: Input
612
+ }], inputValue: [{
613
+ type: Input
614
+ }], minDate: [{
615
+ type: Input
616
+ }], showSeconds: [{
617
+ type: Input
618
+ }], rangeMode: [{
619
+ type: Input
620
+ }], dateChange: [{
621
+ type: Output
622
+ }], timeChange: [{
623
+ type: Output
624
+ }], disableChange: [{
625
+ type: Output
626
+ }] } });
627
+
628
+ class HerumDateTimePickerComponent {
629
+ elementRef;
630
+ showDatePicker = true;
631
+ showTimePicker = true;
632
+ showTimeSelect = false;
633
+ selectedTime;
634
+ selectedDate;
635
+ rangeMode = false;
636
+ minDate;
637
+ timePickerHoverColor = '';
638
+ timePickerActiveColor = '';
639
+ widthDatePicker = '';
640
+ heightTimePicker = '';
641
+ datePickerHoverColor = '';
642
+ datePickerActiveColor = '';
643
+ showSeconds = true;
644
+ timePickerItemSize = '39px';
645
+ timeChange = new EventEmitter();
646
+ dateChange = new EventEmitter();
647
+ hostElement;
648
+ constructor(elementRef) {
649
+ this.elementRef = elementRef;
650
+ this.hostElement = this.elementRef.nativeElement;
651
+ }
652
+ ngOnChanges(changes) {
653
+ if (this.hostElement) {
654
+ if (changes['widthDatePicker']?.currentValue)
655
+ this.hostElement.style.setProperty('--width-date-picker', this.widthDatePicker);
656
+ if (changes['heightTimePicker']?.currentValue)
657
+ this.hostElement.style.setProperty('--height-time-picker', this.heightTimePicker);
658
+ }
659
+ }
660
+ _timeChange(time) {
661
+ this.timeChange.emit(time);
662
+ }
663
+ _dateChange(date) {
664
+ this.dateChange.emit(date);
665
+ }
666
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDateTimePickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
667
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumDateTimePickerComponent, isStandalone: false, selector: "herum-date-time-picker", inputs: { showDatePicker: "showDatePicker", showTimePicker: "showTimePicker", showTimeSelect: "showTimeSelect", selectedTime: "selectedTime", selectedDate: "selectedDate", rangeMode: "rangeMode", minDate: "minDate", timePickerHoverColor: "timePickerHoverColor", timePickerActiveColor: "timePickerActiveColor", widthDatePicker: "widthDatePicker", heightTimePicker: "heightTimePicker", datePickerHoverColor: "datePickerHoverColor", datePickerActiveColor: "datePickerActiveColor", showSeconds: "showSeconds", timePickerItemSize: "timePickerItemSize" }, outputs: { timeChange: "timeChange", dateChange: "dateChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"date-time-picker\" [ngClass]=\"{'flex-column':showTimeSelect && rangeMode}\">\r\n <herum-date-picker *ngIf=\"showDatePicker\" [rangeMode]=\"rangeMode\" [minDate]=\"minDate\"\r\n [hoverColor]=\"datePickerHoverColor\" [activeColor]=\"datePickerActiveColor\" [selectedDate]=\"selectedDate\"\r\n (dateChange)=\"_dateChange($event)\"></herum-date-picker>\r\n\r\n <herum-time-picker *ngIf=\"showTimePicker\" [ngClass]=\"{'me-5':showDatePicker}\" [selectedTime]=\"selectedTime\"\r\n [showSeconds]=\"showSeconds\" [itemSize]=\"timePickerItemSize\" [hoverColor]=\"timePickerHoverColor\"\r\n [activeColor]=\"timePickerActiveColor\" (timeChange)=\"_timeChange($event)\"></herum-time-picker>\r\n</div>", styles: [":host{--width-date-picker: 320px;--height-time-picker: 325px}.date-time-picker{display:flex;justify-content:center}herum-date-picker{width:var(--width-date-picker)}herum-time-picker{height:var(--height-time-picker)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.HerumDatePickerComponent, selector: "herum-date-picker", inputs: ["activeColor", "hoverColor", "minDate", "rangeMode", "selectedDate"], outputs: ["dateChange"] }, { kind: "component", type: i2$1.HerumTimePickerComponent, selector: "herum-time-picker", inputs: ["activeColor", "hoverColor", "itemSize", "selectedTime", "showSeconds"], outputs: ["timeChange"] }] });
668
+ }
669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDateTimePickerComponent, decorators: [{
670
+ type: Component,
671
+ args: [{ standalone: false, selector: 'herum-date-time-picker', template: "<div class=\"date-time-picker\" [ngClass]=\"{'flex-column':showTimeSelect && rangeMode}\">\r\n <herum-date-picker *ngIf=\"showDatePicker\" [rangeMode]=\"rangeMode\" [minDate]=\"minDate\"\r\n [hoverColor]=\"datePickerHoverColor\" [activeColor]=\"datePickerActiveColor\" [selectedDate]=\"selectedDate\"\r\n (dateChange)=\"_dateChange($event)\"></herum-date-picker>\r\n\r\n <herum-time-picker *ngIf=\"showTimePicker\" [ngClass]=\"{'me-5':showDatePicker}\" [selectedTime]=\"selectedTime\"\r\n [showSeconds]=\"showSeconds\" [itemSize]=\"timePickerItemSize\" [hoverColor]=\"timePickerHoverColor\"\r\n [activeColor]=\"timePickerActiveColor\" (timeChange)=\"_timeChange($event)\"></herum-time-picker>\r\n</div>", styles: [":host{--width-date-picker: 320px;--height-time-picker: 325px}.date-time-picker{display:flex;justify-content:center}herum-date-picker{width:var(--width-date-picker)}herum-time-picker{height:var(--height-time-picker)}\n"] }]
672
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { showDatePicker: [{
673
+ type: Input
674
+ }], showTimePicker: [{
675
+ type: Input
676
+ }], showTimeSelect: [{
677
+ type: Input
678
+ }], selectedTime: [{
679
+ type: Input
680
+ }], selectedDate: [{
681
+ type: Input
682
+ }], rangeMode: [{
683
+ type: Input
684
+ }], minDate: [{
685
+ type: Input
686
+ }], timePickerHoverColor: [{
687
+ type: Input
688
+ }], timePickerActiveColor: [{
689
+ type: Input
690
+ }], widthDatePicker: [{
691
+ type: Input
692
+ }], heightTimePicker: [{
693
+ type: Input
694
+ }], datePickerHoverColor: [{
695
+ type: Input
696
+ }], datePickerActiveColor: [{
697
+ type: Input
698
+ }], showSeconds: [{
699
+ type: Input
700
+ }], timePickerItemSize: [{
701
+ type: Input
702
+ }], timeChange: [{
703
+ type: Output
704
+ }], dateChange: [{
705
+ type: Output
706
+ }] } });
707
+
708
+ const iconsFolderPath = 'assets/files-icons/';
709
+ const defaultFileIconPath = iconsFolderPath + 'generic-file.svg';
710
+ const requiredFieldMessage = 'חובה לעלות קובץ';
711
+ class HerumDropZoneComponent {
712
+ environmentConfig;
713
+ selectedFiles = [];
714
+ placeholder = 'העלה או גרור לכאן קובץ';
715
+ numberOfAllowedFiles = 1;
716
+ allowedFileTypes = [];
717
+ supportedFilesMimes = [];
718
+ supportedFilesTypes = [];
719
+ requiredField = false;
720
+ directionPreview = 'column';
721
+ type = 'column';
722
+ grow = false;
723
+ fillContainer = false;
724
+ uploadFileSvg = svgsStrings.greyUploadFile;
725
+ previewImageUrl;
726
+ allowToDeleteImage = true;
727
+ filesDataEvent = new EventEmitter();
728
+ fileInput;
729
+ filesList = [];
730
+ isLoading = false;
731
+ isDownloadInProgress = false;
732
+ hasExceededNumberOfAllowedFiles = false;
733
+ filesSuffixes = resourcesFilesSuffixes;
734
+ isValidUpload = true;
735
+ isSupportedFileType = true;
736
+ parsedAllowedFileTypes = '';
737
+ errorMessages = [
738
+ { condition: () => !this.isSupportedFileType && this.isValidUpload, message: 'סוג הקובץ אינו נתמך' },
739
+ { condition: () => !this.isValidUpload, message: 'סוג הקובץ אינו תקין' },
740
+ {
741
+ condition: () => this.hasExceededNumberOfAllowedFiles && this.numberOfAllowedFiles > 1,
742
+ message: `ניתן להעלות עד ${this.numberOfAllowedFiles} קבצים`
743
+ },
744
+ ];
745
+ constructor(environmentConfig) {
746
+ this.environmentConfig = environmentConfig;
747
+ }
748
+ ngOnChanges(changes) {
749
+ if (changes['selectedFiles'] && Array.isArray(this.selectedFiles))
750
+ this.filesList = this.selectedFiles;
751
+ if (changes['requiredField'])
752
+ this.addOrRemoveRequiredFieldError();
753
+ if (changes['allowedFileTypes'])
754
+ this.parsedAllowedFileTypes = this.parseAllowedFileTypes(this.allowedFileTypes);
755
+ }
756
+ _onRemoveFile(index, event) {
757
+ event.stopPropagation();
758
+ this.filesList.splice(index, 1);
759
+ if (this.filesList.length <= this.numberOfAllowedFiles)
760
+ this.hasExceededNumberOfAllowedFiles = false;
761
+ this.filesDataEvent.emit(this.filesList);
762
+ }
763
+ _onRemoveImage() {
764
+ if (this.allowToDeleteImage) {
765
+ this.filesDataEvent.emit([]);
766
+ return;
767
+ }
768
+ this.fileInput.nativeElement.click();
769
+ }
770
+ _onUploadDroppedFiles(event) {
771
+ event.stopPropagation();
772
+ event.preventDefault();
773
+ const files = Array.from(event.dataTransfer.files);
774
+ this.uploadFiles(files);
775
+ }
776
+ _onPreventDefault(event) {
777
+ event.preventDefault();
778
+ }
779
+ _onDownloadMediaConvertor(event) {
780
+ event.stopPropagation();
781
+ }
782
+ _onUploadFiles(event) {
783
+ event.preventDefault();
784
+ const files = event.target.files;
785
+ if (!files.length)
786
+ return;
787
+ this.uploadFiles(Array.from(files));
788
+ }
789
+ _onClickFileInput() {
790
+ this.fileInput.nativeElement.click();
791
+ }
792
+ uploadFiles(files) {
793
+ if (this.allowedFileTypes?.length)
794
+ this.isValidUpload = this.filesTypeValidation(files);
795
+ if (this.supportedFilesMimes?.length)
796
+ this.isSupportedFileType = this.supportedFilesValidation(files);
797
+ if (!this.isValidUpload || !this.isSupportedFileType)
798
+ return;
799
+ this.isExceededFilesLength(files);
800
+ if (this.filesList.length === this.numberOfAllowedFiles && files.length < this.numberOfAllowedFiles)
801
+ this.filesList = [...files, ...this.filesList.slice(files.length)];
802
+ else if (files.length === this.numberOfAllowedFiles)
803
+ this.filesList = files;
804
+ else if (files.length > this.numberOfAllowedFiles) {
805
+ this.filesList = [];
806
+ this.filesList.push(...files.slice(0, this.numberOfAllowedFiles));
807
+ }
808
+ else
809
+ files.forEach((file) => this.filesList.push(file));
810
+ this.filesDataEvent.emit(this.filesList);
811
+ }
812
+ supportedFilesValidation(files) {
813
+ return files.some((file) => this.supportedFilesMimes.some(supportedFileType => file.type.includes(supportedFileType)));
814
+ }
815
+ filesTypeValidation(files) {
816
+ if (files.some((file) => file.type === '' || file.type === undefined))
817
+ return false;
818
+ return files.some((file) => this.allowedFileTypes.some((splitFileType) => file.type.includes(splitFileType)));
819
+ }
820
+ isExceededFilesLength(files) {
821
+ if (files.length + this.filesList.length > this.numberOfAllowedFiles)
822
+ this.hasExceededNumberOfAllowedFiles = true;
823
+ else
824
+ this.hasExceededNumberOfAllowedFiles = false;
825
+ }
826
+ getIconPath(file) {
827
+ let filePath = '';
828
+ const uploadedFileSuffix = '.' + file?.name.split('.').pop();
829
+ Object.values(resourcesFilesSuffixes).forEach(fileSuffix => {
830
+ if (fileSuffix === uploadedFileSuffix)
831
+ filePath = iconsFolderPath + fileSuffix + '.svg';
832
+ });
833
+ for (const [fileSuffixKey, fileSuffixValue] of Object.entries(filesSuffixes))
834
+ if (fileSuffixValue.includes(uploadedFileSuffix.slice(1)))
835
+ filePath = iconsFolderPath + '.' + fileSuffixKey + '.svg';
836
+ return filePath ? filePath : defaultFileIconPath;
837
+ }
838
+ get convertorMediaPath() {
839
+ return `${this.environmentConfig?.environment?.s3ServerPath}${this.environmentConfig?.buckets?.GeneralFiles}XMediaRecode.exe`;
840
+ }
841
+ parseAllowedFileTypes(allowedFileTypes) {
842
+ if (!allowedFileTypes || !allowedFileTypes?.length)
843
+ return '';
844
+ return allowedFileTypes.map(allowedFileType => allowedFileType + anySubFileTypeWildCard).join(', ');
845
+ }
846
+ addOrRemoveRequiredFieldError() {
847
+ if (this.requiredField) {
848
+ this.errorMessages.push({
849
+ condition: () => !this.filesList.length,
850
+ message: requiredFieldMessage
851
+ });
852
+ return;
853
+ }
854
+ this.errorMessages = this.errorMessages.filter(errorMessage => errorMessage.message !== requiredFieldMessage);
855
+ }
856
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDropZoneComponent, deps: [{ token: HERUM_SHARED_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
857
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumDropZoneComponent, isStandalone: false, selector: "herum-drop-zone", inputs: { selectedFiles: "selectedFiles", placeholder: "placeholder", numberOfAllowedFiles: "numberOfAllowedFiles", allowedFileTypes: "allowedFileTypes", supportedFilesMimes: "supportedFilesMimes", supportedFilesTypes: "supportedFilesTypes", requiredField: "requiredField", directionPreview: "directionPreview", type: "type", grow: "grow", fillContainer: "fillContainer", uploadFileSvg: "uploadFileSvg", previewImageUrl: "previewImageUrl", allowToDeleteImage: "allowToDeleteImage" }, outputs: { filesDataEvent: "filesDataEvent" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<button class=\"dropzone\" [class.not-displayed]=\"previewImageUrl\" [class.fill-container]=\"fillContainer\"\r\n [style.height]=\"grow ? '100%' : ''\" (drop)=\"_onUploadDroppedFiles($event)\" (click)=\"_onClickFileInput()\"\r\n (dragover)=\"_onPreventDefault($event)\">\r\n <div svgOnHover class=\"dropzone-content upload-file-border\" [style.height]=\"grow ? '100%' : '130px'\"\r\n [ngClass]=\"{'row-dropzone':type=='row'}\"\r\n [ngStyle]=\"{'justify-content': (filesList?.length || type == 'row') ? 'start' : 'center'}\">\r\n <div class=\"center-icon\" [ngClass]=\"{'upload-file-row-preview':directionPreview==='row' }\"\r\n *ngIf=\"!filesList?.length\">\r\n <span class=\"upload-file-image mb-2\" [style.height]=\"grow ? '60px' : ''\" [style.width]=\"grow ? '60px' : ''\"\r\n [innerHTML]=\"uploadFileSvg | safeHtml\">\r\n </span>\r\n\r\n <div class=\"dropzone-text\" [style.fontSize]=\"grow ? 'large' : ''\"> {{ placeholder }} </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"filesList?.length > 0\">\r\n <div class=\"files-container\" *ngFor=\"let file of filesList; index as i\">\r\n <img [src]=\"getIconPath(file)\" alt=\"#{{i+1}} picture\" />\r\n\r\n <span class=\"file-name truncate\"> {{ file?.name }}</span>\r\n\r\n <div class=\"delete-container\" (click)=\"_onRemoveFile(i, $event)\">\r\n <img class=\"delete-button\" src=\"assets/general/secondary-x.svg\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngFor=\"let error of errorMessages\">\r\n <span *ngIf=\"error.condition()\" class=\"error-msg\"\r\n [matTooltip]=\"!isSupportedFileType ? '\u05E1\u05D5\u05D2\u05D9 \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD \u05D4\u05E0\u05EA\u05DE\u05DB\u05D9\u05DD: ' + supportedFilesTypes : ''\">\r\n {{ error.message }}\r\n </span>\r\n </div>\r\n\r\n <span (click)=\"$event.stopPropagation()\">\r\n <herum-download-file *ngIf=\"!isSupportedFileType\" [filePath]=\"convertorMediaPath\"\r\n linkText=\"\u05DC\u05D4\u05D5\u05E8\u05D3\u05D4 \u05EA\u05D5\u05DB\u05E0\u05EA \u05D4\u05DE\u05E8\u05EA \u05DE\u05D3\u05D9\u05D4\">\r\n </herum-download-file>\r\n </span>\r\n </div>\r\n</button>\r\n\r\n<div *ngIf=\"previewImageUrl\" class=\"preview-wrapper\">\r\n <div class=\"image-container\">\r\n <img [src]=\"previewImageUrl\" alt=\"Preview\" class=\"preview-image\">\r\n\r\n <button type=\"button\" class=\"remove-btn\" aria-label=\"Remove image\" (click)=\"_onRemoveImage()\">\r\n <img class=\"remove-icon\" src=\"assets/general/secondary-x.svg\" alt=Remove />\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<input #fileInput class=\"d-none\" type=\"file\" [accept]=\"parsedAllowedFileTypes\" (change)=\"_onUploadFiles($event)\"\r\n multiple>", styles: [":host{--close-button-size: 12px;display:flex}.dropzone{display:flex;align-items:center;flex-direction:column;overflow-y:auto;flex:1;border:none;background-color:transparent}.dropzone .dropzone-content{width:100%;display:flex;height:100%;justify-content:center;flex-direction:column;align-items:center}.row-dropzone{display:flex;align-items:center;flex-direction:row!important;gap:8px!important;height:unset!important;padding:8px!important}.upload-file-row-preview{display:flex;gap:8px}.center-icon{align-items:center;display:flex;justify-content:center;flex-direction:column}.dropzone-content:hover{background:var(--item-hover-color);border-color:var(--secondary-color)}.dropzone-content:active{transform:scale(.96)}.dropzone-text{text-align:center}.files-container{display:flex;padding-block-start:10px;gap:10px;width:95%;height:50px;padding:5px;align-items:center}.file-name{width:90%;line-height:1}.delete-container{display:flex;align-items:center;height:100%;width:24px;z-index:3}.delete-button{height:12px;width:12px;position:relative}.upload-file-image{display:flex;align-items:center;justify-content:center;cursor:pointer}.fill-container,.fill-container .dropzone-content{height:100%!important}.not-displayed{display:none}.preview-wrapper{display:inline-block;height:100%;width:100%}.preview-wrapper .image-container{position:relative;display:inline-block;height:100%;width:100%}.preview-wrapper .image-container .preview-image{width:100%;height:100%;border-radius:var(--upload-file-border-radius);object-fit:cover;display:block;position:relative;transition:filter .4s ease}.preview-wrapper .image-container .remove-btn{position:absolute;top:8px;left:8px;background:var(--dark-overlay);border:none;width:var(--close-button-size);height:var(--close-button-size);cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease}.preview-wrapper .image-container .remove-btn:hover{opacity:1}.preview-wrapper .image-container .remove-btn .remove-icon{height:var(--close-button-size);width:var(--close-button-size);filter:brightness(0) invert(1)}.preview-wrapper .image-container:hover .preview-image{filter:brightness(50%)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i2$1.HerumDownloadFileComponent, selector: "herum-download-file", inputs: ["fileId", "filePath", "linkText"], outputs: ["downloadFile"] }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "safeHtml" }] });
858
+ }
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumDropZoneComponent, decorators: [{
860
+ type: Component,
861
+ args: [{ standalone: false, selector: 'herum-drop-zone', template: "<button class=\"dropzone\" [class.not-displayed]=\"previewImageUrl\" [class.fill-container]=\"fillContainer\"\r\n [style.height]=\"grow ? '100%' : ''\" (drop)=\"_onUploadDroppedFiles($event)\" (click)=\"_onClickFileInput()\"\r\n (dragover)=\"_onPreventDefault($event)\">\r\n <div svgOnHover class=\"dropzone-content upload-file-border\" [style.height]=\"grow ? '100%' : '130px'\"\r\n [ngClass]=\"{'row-dropzone':type=='row'}\"\r\n [ngStyle]=\"{'justify-content': (filesList?.length || type == 'row') ? 'start' : 'center'}\">\r\n <div class=\"center-icon\" [ngClass]=\"{'upload-file-row-preview':directionPreview==='row' }\"\r\n *ngIf=\"!filesList?.length\">\r\n <span class=\"upload-file-image mb-2\" [style.height]=\"grow ? '60px' : ''\" [style.width]=\"grow ? '60px' : ''\"\r\n [innerHTML]=\"uploadFileSvg | safeHtml\">\r\n </span>\r\n\r\n <div class=\"dropzone-text\" [style.fontSize]=\"grow ? 'large' : ''\"> {{ placeholder }} </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"filesList?.length > 0\">\r\n <div class=\"files-container\" *ngFor=\"let file of filesList; index as i\">\r\n <img [src]=\"getIconPath(file)\" alt=\"#{{i+1}} picture\" />\r\n\r\n <span class=\"file-name truncate\"> {{ file?.name }}</span>\r\n\r\n <div class=\"delete-container\" (click)=\"_onRemoveFile(i, $event)\">\r\n <img class=\"delete-button\" src=\"assets/general/secondary-x.svg\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngFor=\"let error of errorMessages\">\r\n <span *ngIf=\"error.condition()\" class=\"error-msg\"\r\n [matTooltip]=\"!isSupportedFileType ? '\u05E1\u05D5\u05D2\u05D9 \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD \u05D4\u05E0\u05EA\u05DE\u05DB\u05D9\u05DD: ' + supportedFilesTypes : ''\">\r\n {{ error.message }}\r\n </span>\r\n </div>\r\n\r\n <span (click)=\"$event.stopPropagation()\">\r\n <herum-download-file *ngIf=\"!isSupportedFileType\" [filePath]=\"convertorMediaPath\"\r\n linkText=\"\u05DC\u05D4\u05D5\u05E8\u05D3\u05D4 \u05EA\u05D5\u05DB\u05E0\u05EA \u05D4\u05DE\u05E8\u05EA \u05DE\u05D3\u05D9\u05D4\">\r\n </herum-download-file>\r\n </span>\r\n </div>\r\n</button>\r\n\r\n<div *ngIf=\"previewImageUrl\" class=\"preview-wrapper\">\r\n <div class=\"image-container\">\r\n <img [src]=\"previewImageUrl\" alt=\"Preview\" class=\"preview-image\">\r\n\r\n <button type=\"button\" class=\"remove-btn\" aria-label=\"Remove image\" (click)=\"_onRemoveImage()\">\r\n <img class=\"remove-icon\" src=\"assets/general/secondary-x.svg\" alt=Remove />\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<input #fileInput class=\"d-none\" type=\"file\" [accept]=\"parsedAllowedFileTypes\" (change)=\"_onUploadFiles($event)\"\r\n multiple>", styles: [":host{--close-button-size: 12px;display:flex}.dropzone{display:flex;align-items:center;flex-direction:column;overflow-y:auto;flex:1;border:none;background-color:transparent}.dropzone .dropzone-content{width:100%;display:flex;height:100%;justify-content:center;flex-direction:column;align-items:center}.row-dropzone{display:flex;align-items:center;flex-direction:row!important;gap:8px!important;height:unset!important;padding:8px!important}.upload-file-row-preview{display:flex;gap:8px}.center-icon{align-items:center;display:flex;justify-content:center;flex-direction:column}.dropzone-content:hover{background:var(--item-hover-color);border-color:var(--secondary-color)}.dropzone-content:active{transform:scale(.96)}.dropzone-text{text-align:center}.files-container{display:flex;padding-block-start:10px;gap:10px;width:95%;height:50px;padding:5px;align-items:center}.file-name{width:90%;line-height:1}.delete-container{display:flex;align-items:center;height:100%;width:24px;z-index:3}.delete-button{height:12px;width:12px;position:relative}.upload-file-image{display:flex;align-items:center;justify-content:center;cursor:pointer}.fill-container,.fill-container .dropzone-content{height:100%!important}.not-displayed{display:none}.preview-wrapper{display:inline-block;height:100%;width:100%}.preview-wrapper .image-container{position:relative;display:inline-block;height:100%;width:100%}.preview-wrapper .image-container .preview-image{width:100%;height:100%;border-radius:var(--upload-file-border-radius);object-fit:cover;display:block;position:relative;transition:filter .4s ease}.preview-wrapper .image-container .remove-btn{position:absolute;top:8px;left:8px;background:var(--dark-overlay);border:none;width:var(--close-button-size);height:var(--close-button-size);cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease}.preview-wrapper .image-container .remove-btn:hover{opacity:1}.preview-wrapper .image-container .remove-btn .remove-icon{height:var(--close-button-size);width:var(--close-button-size);filter:brightness(0) invert(1)}.preview-wrapper .image-container:hover .preview-image{filter:brightness(50%)}\n"] }]
862
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
863
+ type: Inject,
864
+ args: [HERUM_SHARED_CONFIG_TOKEN]
865
+ }] }], propDecorators: { selectedFiles: [{
866
+ type: Input
867
+ }], placeholder: [{
868
+ type: Input
869
+ }], numberOfAllowedFiles: [{
870
+ type: Input
871
+ }], allowedFileTypes: [{
872
+ type: Input
873
+ }], supportedFilesMimes: [{
874
+ type: Input
875
+ }], supportedFilesTypes: [{
876
+ type: Input
877
+ }], requiredField: [{
878
+ type: Input
879
+ }], directionPreview: [{
880
+ type: Input
881
+ }], type: [{
882
+ type: Input
883
+ }], grow: [{
884
+ type: Input
885
+ }], fillContainer: [{
886
+ type: Input
887
+ }], uploadFileSvg: [{
888
+ type: Input
889
+ }], previewImageUrl: [{
890
+ type: Input
891
+ }], allowToDeleteImage: [{
892
+ type: Input
893
+ }], filesDataEvent: [{
894
+ type: Output
895
+ }], fileInput: [{
896
+ type: ViewChild,
897
+ args: ['fileInput']
898
+ }] } });
899
+
900
+ class HerumExpendablePanelComponent {
901
+ title;
902
+ isBoldTitle = false;
903
+ isContentDisplayed = true;
904
+ _onToggleContentDisplay(event) {
905
+ event.stopPropagation();
906
+ this.isContentDisplayed = !this.isContentDisplayed;
907
+ }
908
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumExpendablePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
909
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumExpendablePanelComponent, isStandalone: false, selector: "herum-expendable-panel", inputs: { title: "title", isBoldTitle: "isBoldTitle" }, ngImport: i0, template: "<div class=\"collection-priority-expendable-panel-container\">\r\n <p class=\"expendable-panel-title m-0\"\r\n [ngClass]=\"{'displayed': isContentDisplayed, 'not-displayed': !isContentDisplayed,'bold': isBoldTitle}\"\r\n (click)=\"_onToggleContentDisplay($event)\">\r\n {{title}}\r\n </p>\r\n\r\n <ng-content *ngIf=\"isContentDisplayed\"></ng-content>\r\n</div>", styles: [".collection-priority-expendable-panel-container{position:relative;display:flex;flex-direction:column;gap:4px;margin-block:12px}.expendable-panel-title{padding-right:30px;color:#000;font-size:var(--standard-font-size);cursor:pointer}.collection-priority-expendable-panel-container .expendable-panel-title:before{position:absolute;display:inline-block;width:8px;height:8px;right:12px;border-top:2px solid var(--icons-color);border-right:2px solid var(--icons-color);transform-origin:center;transition:transform .3s ease}.not-displayed:before{content:\"\";top:5px;transform:rotate(225deg)}.displayed:before{content:\"\";top:3px;transform:rotate(135deg)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
910
+ }
911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumExpendablePanelComponent, decorators: [{
912
+ type: Component,
913
+ args: [{ standalone: false, selector: 'herum-expendable-panel', template: "<div class=\"collection-priority-expendable-panel-container\">\r\n <p class=\"expendable-panel-title m-0\"\r\n [ngClass]=\"{'displayed': isContentDisplayed, 'not-displayed': !isContentDisplayed,'bold': isBoldTitle}\"\r\n (click)=\"_onToggleContentDisplay($event)\">\r\n {{title}}\r\n </p>\r\n\r\n <ng-content *ngIf=\"isContentDisplayed\"></ng-content>\r\n</div>", styles: [".collection-priority-expendable-panel-container{position:relative;display:flex;flex-direction:column;gap:4px;margin-block:12px}.expendable-panel-title{padding-right:30px;color:#000;font-size:var(--standard-font-size);cursor:pointer}.collection-priority-expendable-panel-container .expendable-panel-title:before{position:absolute;display:inline-block;width:8px;height:8px;right:12px;border-top:2px solid var(--icons-color);border-right:2px solid var(--icons-color);transform-origin:center;transition:transform .3s ease}.not-displayed:before{content:\"\";top:5px;transform:rotate(225deg)}.displayed:before{content:\"\";top:3px;transform:rotate(135deg)}\n"] }]
914
+ }], propDecorators: { title: [{
915
+ type: Input
916
+ }], isBoldTitle: [{
917
+ type: Input
918
+ }] } });
919
+
920
+ class HerumFilesViewerComponent {
921
+ environmentConfig;
922
+ fileData;
923
+ showDeleteFileButton = false;
924
+ downloadFile = new EventEmitter();
925
+ deleteFile = new EventEmitter();
926
+ srcPath;
927
+ fileType;
928
+ constructor(environmentConfig) {
929
+ this.environmentConfig = environmentConfig;
930
+ }
931
+ ngOnChanges(changes) {
932
+ if (changes['fileData']?.currentValue) {
933
+ const fileToDisplay = this.fileData.file?.size === 0;
934
+ if (this.fileData.file && !fileToDisplay) {
935
+ const type = this.fileData.file.type;
936
+ const typeIndex = type.includes('pdf') ? 1 : 0;
937
+ this.fileType = type.split("/")[typeIndex];
938
+ this.srcPath = URL.createObjectURL(this.fileData.file);
939
+ return;
940
+ }
941
+ const type = this.fileData.type;
942
+ const typeIndex = type?.includes('pdf') ? 1 : 0;
943
+ this.fileType = type?.split("/")[typeIndex];
944
+ this.srcPath = this.environmentConfig?.environment?.s3ServerPath + this.fileData.bucket + "/" + this.fileData.key;
945
+ }
946
+ }
947
+ _onDeleteFile() {
948
+ this.deleteFile.emit(this.fileData);
949
+ }
950
+ _downloadFile() {
951
+ this.downloadFile.emit(this.fileData);
952
+ }
953
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumFilesViewerComponent, deps: [{ token: HERUM_SHARED_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
954
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumFilesViewerComponent, isStandalone: false, selector: "herum-files-viewer", inputs: { fileData: "fileData", showDeleteFileButton: "showDeleteFileButton" }, outputs: { downloadFile: "downloadFile", deleteFile: "deleteFile" }, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"fileType\">\r\n <div class=\"image-container\" *ngSwitchCase=\"'image'\">\r\n <img [style.background-image]=\"'url(' + srcPath + ')'\" [class.image-hover]=\"showDeleteFileButton\">\r\n </div>\r\n\r\n <herum-video-player *ngSwitchCase=\"'video'\" [srcPath]=\"srcPath\" [isResourceInWideMode]=\"true\"></herum-video-player>\r\n\r\n <herum-pdf-viewer *ngSwitchCase=\"'pdf'\" [srcPath]=\"srcPath\" [isResourceInWideMode]=\"true\"></herum-pdf-viewer>\r\n\r\n <herum-audio-player *ngSwitchCase=\"'audio'\" [id]=\"fileData.key\" [bucketName]=\"fileData.bucket\"\r\n [audioFile]=\"fileData.file\">\r\n </herum-audio-player>\r\n\r\n <herum-download-file *ngSwitchDefault linkText=\"\u05D4\u05E7\u05D5\u05D1\u05E5 \u05D0\u05D9\u05E0\u05D5 \u05E0\u05EA\u05DE\u05DA, \u05E0\u05D9\u05EA\u05DF \u05DC\u05D4\u05D5\u05E8\u05D3\u05D5\" (downloadFile)=\"_downloadFile()\">\r\n </herum-download-file>\r\n</ng-container>\r\n\r\n<button *ngIf=\"showDeleteFileButton\" class=\"delete-file-button\" (click)=\"_onDeleteFile()\">\r\n <img src=\"assets/general/secondary-x.svg\" />\r\n</button>", styles: [":host{flex:1;display:flex;position:relative}herum-video-player,herum-pdf-viewer,herum-audio-player,herum-download-file{flex:1}herum-video-player{display:flex}herum-download-file{display:flex;align-items:center;justify-content:center;background-color:var(--icons-color-light-2);border-radius:var(--border-radius);padding:var(--standard-padding)}.image-container{display:flex;flex:1;justify-content:center}.image-container img{background-repeat:no-repeat;background-size:cover;background-position:center;width:100%;height:100%;border-radius:var(--border-radius);filter:brightness(100%);transition:filter .5s ease}.image-container .image-hover:hover{filter:brightness(50%)}.delete-file-button{background-color:transparent;border:none;position:absolute;top:var(--standard-padding);left:var(--standard-padding)}.delete-file-button img{height:14px;filter:brightness(0) invert(1)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2$1.HerumDownloadFileComponent, selector: "herum-download-file", inputs: ["fileId", "filePath", "linkText"], outputs: ["downloadFile"] }] });
955
+ }
956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumFilesViewerComponent, decorators: [{
957
+ type: Component,
958
+ args: [{ standalone: false, selector: 'herum-files-viewer', template: "<ng-container [ngSwitch]=\"fileType\">\r\n <div class=\"image-container\" *ngSwitchCase=\"'image'\">\r\n <img [style.background-image]=\"'url(' + srcPath + ')'\" [class.image-hover]=\"showDeleteFileButton\">\r\n </div>\r\n\r\n <herum-video-player *ngSwitchCase=\"'video'\" [srcPath]=\"srcPath\" [isResourceInWideMode]=\"true\"></herum-video-player>\r\n\r\n <herum-pdf-viewer *ngSwitchCase=\"'pdf'\" [srcPath]=\"srcPath\" [isResourceInWideMode]=\"true\"></herum-pdf-viewer>\r\n\r\n <herum-audio-player *ngSwitchCase=\"'audio'\" [id]=\"fileData.key\" [bucketName]=\"fileData.bucket\"\r\n [audioFile]=\"fileData.file\">\r\n </herum-audio-player>\r\n\r\n <herum-download-file *ngSwitchDefault linkText=\"\u05D4\u05E7\u05D5\u05D1\u05E5 \u05D0\u05D9\u05E0\u05D5 \u05E0\u05EA\u05DE\u05DA, \u05E0\u05D9\u05EA\u05DF \u05DC\u05D4\u05D5\u05E8\u05D3\u05D5\" (downloadFile)=\"_downloadFile()\">\r\n </herum-download-file>\r\n</ng-container>\r\n\r\n<button *ngIf=\"showDeleteFileButton\" class=\"delete-file-button\" (click)=\"_onDeleteFile()\">\r\n <img src=\"assets/general/secondary-x.svg\" />\r\n</button>", styles: [":host{flex:1;display:flex;position:relative}herum-video-player,herum-pdf-viewer,herum-audio-player,herum-download-file{flex:1}herum-video-player{display:flex}herum-download-file{display:flex;align-items:center;justify-content:center;background-color:var(--icons-color-light-2);border-radius:var(--border-radius);padding:var(--standard-padding)}.image-container{display:flex;flex:1;justify-content:center}.image-container img{background-repeat:no-repeat;background-size:cover;background-position:center;width:100%;height:100%;border-radius:var(--border-radius);filter:brightness(100%);transition:filter .5s ease}.image-container .image-hover:hover{filter:brightness(50%)}.delete-file-button{background-color:transparent;border:none;position:absolute;top:var(--standard-padding);left:var(--standard-padding)}.delete-file-button img{height:14px;filter:brightness(0) invert(1)}\n"] }]
959
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
960
+ type: Inject,
961
+ args: [HERUM_SHARED_CONFIG_TOKEN]
962
+ }] }], propDecorators: { fileData: [{
963
+ type: Input
964
+ }], showDeleteFileButton: [{
965
+ type: Input
966
+ }], downloadFile: [{
967
+ type: Output
968
+ }], deleteFile: [{
969
+ type: Output
970
+ }] } });
971
+
972
+ class HerumHierarchyTreeNodeComponent {
973
+ changeDetectorRef;
974
+ environmentConfig;
975
+ treeNodeData;
976
+ size = 'regular';
977
+ expandedMode = 'none';
978
+ showArrow = true;
979
+ showAssignmentsDetails = true;
980
+ nodeMenuItems = [];
981
+ onNodeSelected = new EventEmitter();
982
+ onMenuItemSelected = new EventEmitter();
983
+ onExpand = new EventEmitter();
984
+ isExpand = true;
985
+ constructor(changeDetectorRef, environmentConfig) {
986
+ this.changeDetectorRef = changeDetectorRef;
987
+ this.environmentConfig = environmentConfig;
988
+ }
989
+ ngOnChanges(changes) {
990
+ if (changes['treeNodeData']?.currentValue)
991
+ this.changeDetectorRef.detectChanges();
992
+ }
993
+ _isTruncatedTitleElement(element) {
994
+ return isTruncatedTitleElement(element);
995
+ }
996
+ _onExpand() {
997
+ this.isExpand = !this.isExpand;
998
+ this.onExpand.emit(this.isExpand);
999
+ }
1000
+ _onNodeSelected() {
1001
+ this.onNodeSelected.emit(true);
1002
+ }
1003
+ _onMenuItemSelected(item) {
1004
+ item.additionalData = this.treeNodeData;
1005
+ this.onMenuItemSelected.emit(item);
1006
+ }
1007
+ get toRPActualAssignmentsDisplayText() {
1008
+ return 'תקנים בפועל';
1009
+ }
1010
+ get expectedAssignmentsDisplayText() {
1011
+ return 'פוטנציאל אג"תי';
1012
+ }
1013
+ get invalidAssignmentsDisplayText() {
1014
+ return 'תקנים אכ"אים';
1015
+ }
1016
+ get negativePercentage() {
1017
+ if (!this.showAssignmentsDetails)
1018
+ return 0;
1019
+ return (this.treeNodeData.totals?.invalidAssignments / this.treeNodeData.totals?.toRPExpectedAssignments) * 100;
1020
+ }
1021
+ get smallChevronSvg() {
1022
+ return svgsStrings.smallChevron;
1023
+ }
1024
+ get systemIdentifier() {
1025
+ return this.environmentConfig?.environment?.systemIdentifier;
1026
+ }
1027
+ get isHerum() {
1028
+ return this.environmentConfig?.environment?.systemIdentifier == system.herum;
1029
+ }
1030
+ get isHadracha() {
1031
+ return this.environmentConfig?.environment?.systemIdentifier == system.hadracha;
1032
+ }
1033
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumHierarchyTreeNodeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: HERUM_SHARED_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
1034
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumHierarchyTreeNodeComponent, isStandalone: false, selector: "herum-hierarchy-tree-node", inputs: { treeNodeData: "treeNodeData", size: "size", expandedMode: "expandedMode", showArrow: "showArrow", showAssignmentsDetails: "showAssignmentsDetails", nodeMenuItems: "nodeMenuItems" }, outputs: { onNodeSelected: "onNodeSelected", onMenuItemSelected: "onMenuItemSelected", onExpand: "onExpand" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"node-container\" [class]=\"systemIdentifier\" [id]=\"'tree-node-container-' + treeNodeData.id\"\r\n *ngIf=\"treeNodeData\" [ngClass]=\"treeNodeData.status + ' ' + size + ' ' + expandedMode\" #nodeTitle appHerumToolTip>\r\n <div class=\"decorative-line\"></div>\r\n\r\n <div class=\"menu-icon-container\" *ngIf=\"nodeMenuItems?.length > 0\">\r\n <img src=\"/assets/hadracha/general/menu-button.svg\" [matMenuTriggerFor]=\"menu\">\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item *ngFor=\"let nodeMenuItem of nodeMenuItems\"\r\n (click)=\"_onMenuItemSelected(nodeMenuItem)\">\r\n <img src=\"/assets/hadracha/structs/{{nodeMenuItem.iconName}}.svg\">\r\n {{ nodeMenuItem.displayText }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n <p #treeNodeDataTitle [id]=\"'tree-node-title-' + treeNodeData.id\"\r\n [matTooltip]=\"_isTruncatedTitleElement(nodeTitle) ? treeNodeData.title : ''\" (click)=\"_onNodeSelected()\">\r\n {{treeNodeData.title | ellipsis:treeNodeDataTitle }}\r\n </p>\r\n\r\n <p class=\"totals\" *ngIf=\"showAssignmentsDetails\">\r\n <ng-container *ngIf=\"isHerum\">\r\n <span [matTooltip]='toRPActualAssignmentsDisplayText'> {{this.treeNodeData.totals?.toRPActualAssignments}}\r\n </span> /\r\n <span [matTooltip]='expectedAssignmentsDisplayText'> {{this.treeNodeData.totals?.toRPExpectedAssignments}}\r\n </span>\r\n <span class=\"invalid-assignments\" [ngClass]=\"{'green':this.treeNodeData.totals?.invalidAssignments == 0}\"\r\n [matTooltip]='invalidAssignmentsDisplayText'>\r\n +{{this.treeNodeData.totals?.invalidAssignments}}\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isHadracha\">\r\n <div class=\"total-value\">\r\n {{this.treeNodeData.totals.total}}\r\n </div>\r\n <p class=\"total-text\">\u05D7\u05E0\u05D9\u05DB\u05D9\u05DD</p>\r\n </ng-container>\r\n </p>\r\n\r\n <br *ngIf=\"!showAssignmentsDetails\">\r\n\r\n <div class=\"row\">\r\n <herum-progress-bar *ngIf=\"!isHadracha\" [percentage]=\"treeNodeData.percentage ? treeNodeData.percentage:0 \"\r\n [negativePercentage]=\"negativePercentage\" [type]=\"'solid'\" [size]=\"'tight'\">\r\n </herum-progress-bar>\r\n\r\n <span class=\"chevron\" *ngIf=\"showArrow\" [ngStyle]=\"{transform: isExpand ? 'rotate(180deg)' : 'none'}\"\r\n [innerHTML]=\"smallChevronSvg | safeHtml\" (click)=\"_onExpand()\">\r\n </span>\r\n </div>\r\n</div>", styles: [":host{border-radius:0 0 var(--border-radius) var(--border-radius)}.node-container{box-shadow:0 0 var(--box-shadow-blur) #00000029!important;display:flex;flex-direction:column;width:170px;gap:4px;padding:4px;border-radius:var(--border-radius);background-color:#fff}.node-container p{margin:0;font-weight:700;font-size:14px}.node-container .row{justify-content:center;align-items:center;position:relative}.node-container .row .chevron{position:absolute;bottom:-20px;background-color:#fff;border-radius:50%;box-shadow:0 0 var(--box-shadow-blur) #00000029!important;width:20px;cursor:pointer;height:20px;z-index:99;padding:1px;stroke:var(--icons-color)}.node-container .totals{font-size:12px;direction:ltr;margin-bottom:8px}.node-container .totals .invalid-assignments{color:var(--error-color);margin-left:8px}.competency-cluster-container{width:100%;display:flex;justify-content:center;align-items:center;padding-bottom:8px}.regular{width:170px}.small{width:140px!important}.close .row .chevron,.open .row .chevron{display:block}.d-flex{justify-content:space-between}.none .row .chevron{display:none}.high{border-top:4px solid var(--icons-color)}.medium{border-top:4px solid orange}.low{border-top:4px solid var(--error-color)}.green{color:var(--icons-color)!important}.decorative-line,.menu-icon-container{display:none}.mat-menu-item{font-family:heebo;font-size:14px;font-weight:400;color:var(--icons-color)}.mat-menu-item:not(:last-child){border-bottom:1px solid var(--divider-color)}::ng-deep .mat-menu-panel{border-radius:var(--border-radius)!important}::ng-deep .mat-menu-content{padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-menu-content button{display:flex;align-items:center;gap:8px;height:36px}.hadracha:hover .menu-icon-container{display:block;height:10px;position:absolute;top:4px;left:12px;z-index:1}.hadracha:hover .menu-icon-container img{height:14px}.hadracha{border-top:none!important;border-radius:0 0 var(--border-radius) var(--border-radius);position:relative}.hadracha .decorative-line{display:block;width:100%;height:4px;background-color:var(--icons-color);border-radius:10px;position:absolute;top:-6px;left:0;z-index:1}.hadracha .totals{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:0}.hadracha .totals .total-value{padding:4px;width:33px;height:33px;background-color:var(--icons-color-light-2);border-radius:var(--border-radius);display:flex;align-items:center;justify-content:center}.hadracha .totals p.total-text{font-size:12px;font-weight:400;text-align:center;margin:0}.hadracha .node-container:hover .totals .total-value{background-color:var(--divider-color)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i2$1.HerumProgressBarComponent, selector: "herum-progress-bar", inputs: ["percentage", "invalidPercentage", "showPercentage", "percentagePosition", "type", "size", "color", "borderRadius", "total", "showBorder", "thickness"] }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "safeHtml" }, { kind: "pipe", type: i5.EllipsisPipe, name: "ellipsis" }] });
1035
+ }
1036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumHierarchyTreeNodeComponent, decorators: [{
1037
+ type: Component,
1038
+ args: [{ standalone: false, selector: 'herum-hierarchy-tree-node', template: "<div class=\"node-container\" [class]=\"systemIdentifier\" [id]=\"'tree-node-container-' + treeNodeData.id\"\r\n *ngIf=\"treeNodeData\" [ngClass]=\"treeNodeData.status + ' ' + size + ' ' + expandedMode\" #nodeTitle appHerumToolTip>\r\n <div class=\"decorative-line\"></div>\r\n\r\n <div class=\"menu-icon-container\" *ngIf=\"nodeMenuItems?.length > 0\">\r\n <img src=\"/assets/hadracha/general/menu-button.svg\" [matMenuTriggerFor]=\"menu\">\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item *ngFor=\"let nodeMenuItem of nodeMenuItems\"\r\n (click)=\"_onMenuItemSelected(nodeMenuItem)\">\r\n <img src=\"/assets/hadracha/structs/{{nodeMenuItem.iconName}}.svg\">\r\n {{ nodeMenuItem.displayText }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n <p #treeNodeDataTitle [id]=\"'tree-node-title-' + treeNodeData.id\"\r\n [matTooltip]=\"_isTruncatedTitleElement(nodeTitle) ? treeNodeData.title : ''\" (click)=\"_onNodeSelected()\">\r\n {{treeNodeData.title | ellipsis:treeNodeDataTitle }}\r\n </p>\r\n\r\n <p class=\"totals\" *ngIf=\"showAssignmentsDetails\">\r\n <ng-container *ngIf=\"isHerum\">\r\n <span [matTooltip]='toRPActualAssignmentsDisplayText'> {{this.treeNodeData.totals?.toRPActualAssignments}}\r\n </span> /\r\n <span [matTooltip]='expectedAssignmentsDisplayText'> {{this.treeNodeData.totals?.toRPExpectedAssignments}}\r\n </span>\r\n <span class=\"invalid-assignments\" [ngClass]=\"{'green':this.treeNodeData.totals?.invalidAssignments == 0}\"\r\n [matTooltip]='invalidAssignmentsDisplayText'>\r\n +{{this.treeNodeData.totals?.invalidAssignments}}\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isHadracha\">\r\n <div class=\"total-value\">\r\n {{this.treeNodeData.totals.total}}\r\n </div>\r\n <p class=\"total-text\">\u05D7\u05E0\u05D9\u05DB\u05D9\u05DD</p>\r\n </ng-container>\r\n </p>\r\n\r\n <br *ngIf=\"!showAssignmentsDetails\">\r\n\r\n <div class=\"row\">\r\n <herum-progress-bar *ngIf=\"!isHadracha\" [percentage]=\"treeNodeData.percentage ? treeNodeData.percentage:0 \"\r\n [negativePercentage]=\"negativePercentage\" [type]=\"'solid'\" [size]=\"'tight'\">\r\n </herum-progress-bar>\r\n\r\n <span class=\"chevron\" *ngIf=\"showArrow\" [ngStyle]=\"{transform: isExpand ? 'rotate(180deg)' : 'none'}\"\r\n [innerHTML]=\"smallChevronSvg | safeHtml\" (click)=\"_onExpand()\">\r\n </span>\r\n </div>\r\n</div>", styles: [":host{border-radius:0 0 var(--border-radius) var(--border-radius)}.node-container{box-shadow:0 0 var(--box-shadow-blur) #00000029!important;display:flex;flex-direction:column;width:170px;gap:4px;padding:4px;border-radius:var(--border-radius);background-color:#fff}.node-container p{margin:0;font-weight:700;font-size:14px}.node-container .row{justify-content:center;align-items:center;position:relative}.node-container .row .chevron{position:absolute;bottom:-20px;background-color:#fff;border-radius:50%;box-shadow:0 0 var(--box-shadow-blur) #00000029!important;width:20px;cursor:pointer;height:20px;z-index:99;padding:1px;stroke:var(--icons-color)}.node-container .totals{font-size:12px;direction:ltr;margin-bottom:8px}.node-container .totals .invalid-assignments{color:var(--error-color);margin-left:8px}.competency-cluster-container{width:100%;display:flex;justify-content:center;align-items:center;padding-bottom:8px}.regular{width:170px}.small{width:140px!important}.close .row .chevron,.open .row .chevron{display:block}.d-flex{justify-content:space-between}.none .row .chevron{display:none}.high{border-top:4px solid var(--icons-color)}.medium{border-top:4px solid orange}.low{border-top:4px solid var(--error-color)}.green{color:var(--icons-color)!important}.decorative-line,.menu-icon-container{display:none}.mat-menu-item{font-family:heebo;font-size:14px;font-weight:400;color:var(--icons-color)}.mat-menu-item:not(:last-child){border-bottom:1px solid var(--divider-color)}::ng-deep .mat-menu-panel{border-radius:var(--border-radius)!important}::ng-deep .mat-menu-content{padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-menu-content button{display:flex;align-items:center;gap:8px;height:36px}.hadracha:hover .menu-icon-container{display:block;height:10px;position:absolute;top:4px;left:12px;z-index:1}.hadracha:hover .menu-icon-container img{height:14px}.hadracha{border-top:none!important;border-radius:0 0 var(--border-radius) var(--border-radius);position:relative}.hadracha .decorative-line{display:block;width:100%;height:4px;background-color:var(--icons-color);border-radius:10px;position:absolute;top:-6px;left:0;z-index:1}.hadracha .totals{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:0}.hadracha .totals .total-value{padding:4px;width:33px;height:33px;background-color:var(--icons-color-light-2);border-radius:var(--border-radius);display:flex;align-items:center;justify-content:center}.hadracha .totals p.total-text{font-size:12px;font-weight:400;text-align:center;margin:0}.hadracha .node-container:hover .totals .total-value{background-color:var(--divider-color)!important}\n"] }]
1039
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
1040
+ type: Inject,
1041
+ args: [HERUM_SHARED_CONFIG_TOKEN]
1042
+ }] }], propDecorators: { treeNodeData: [{
1043
+ type: Input
1044
+ }], size: [{
1045
+ type: Input
1046
+ }], expandedMode: [{
1047
+ type: Input
1048
+ }], showArrow: [{
1049
+ type: Input
1050
+ }], showAssignmentsDetails: [{
1051
+ type: Input
1052
+ }], nodeMenuItems: [{
1053
+ type: Input
1054
+ }], onNodeSelected: [{
1055
+ type: Output
1056
+ }], onMenuItemSelected: [{
1057
+ type: Output
1058
+ }], onExpand: [{
1059
+ type: Output
1060
+ }] } });
1061
+
1062
+ class HerumMultiProgressBarComponent {
1063
+ progressBarsSections;
1064
+ constructor() { }
1065
+ ngOnInit() {
1066
+ }
1067
+ getBorderRadius(sectionIndex, progressBarIndex) {
1068
+ if (this.progressBarsSections.length == 1 && this.progressBarsSections[0].progressBars.length == 1)
1069
+ return 'both';
1070
+ switch (sectionIndex) {
1071
+ case 0:
1072
+ return progressBarIndex == 0 ? 'left' : 'none';
1073
+ case this.progressBarsSections.length - 1:
1074
+ return progressBarIndex == this.progressBarsSections[sectionIndex].progressBars.length - 1 ? 'right' : 'none';
1075
+ default:
1076
+ return 'none';
1077
+ }
1078
+ }
1079
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumMultiProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1080
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumMultiProgressBarComponent, isStandalone: false, selector: "herum-multi-progress-bar", inputs: { progressBarsSections: "progressBarsSections" }, ngImport: i0, template: "<div class=\"sections-bars-container\">\r\n <div class=\"progress-bars-container\" *ngFor=\"let section of progressBarsSections; let sectionIndex = index\"\r\n [ngStyle]=\"{'width':(section.percentage + '%')}\">\r\n <herum-progress-bar *ngFor=\"let progressBar of section.progressBars; let progressBarIndex = index\"\r\n [color]=\"progressBar.color\" [percentage]=\"progressBar.value\" [borderRadius]=\"getBorderRadius(sectionIndex,progressBarIndex)\"\r\n [ngStyle]=\"{'width':(progressBar.percentage + '%')}\"></herum-progress-bar>\r\n </div>\r\n</div>", styles: [".sections-bars-container,.sections-bars-container .progress-bars-container{display:flex;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2$1.HerumProgressBarComponent, selector: "herum-progress-bar", inputs: ["percentage", "invalidPercentage", "showPercentage", "percentagePosition", "type", "size", "color", "borderRadius", "total", "showBorder", "thickness"] }] });
1081
+ }
1082
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumMultiProgressBarComponent, decorators: [{
1083
+ type: Component,
1084
+ args: [{ standalone: false, selector: 'herum-multi-progress-bar', template: "<div class=\"sections-bars-container\">\r\n <div class=\"progress-bars-container\" *ngFor=\"let section of progressBarsSections; let sectionIndex = index\"\r\n [ngStyle]=\"{'width':(section.percentage + '%')}\">\r\n <herum-progress-bar *ngFor=\"let progressBar of section.progressBars; let progressBarIndex = index\"\r\n [color]=\"progressBar.color\" [percentage]=\"progressBar.value\" [borderRadius]=\"getBorderRadius(sectionIndex,progressBarIndex)\"\r\n [ngStyle]=\"{'width':(progressBar.percentage + '%')}\"></herum-progress-bar>\r\n </div>\r\n</div>", styles: [".sections-bars-container,.sections-bars-container .progress-bars-container{display:flex;flex-direction:row-reverse}\n"] }]
1085
+ }], ctorParameters: () => [], propDecorators: { progressBarsSections: [{
1086
+ type: Input
1087
+ }] } });
1088
+
1089
+ class HerumNavigatorComponent {
1090
+ isFirstItem = false;
1091
+ isLastItem = false;
1092
+ nextButtonText = 'לשיעור הבא';
1093
+ previousButtonText = 'לשיעור הקודם';
1094
+ isNextButtonDisable = false;
1095
+ isBackButtonDisable = false;
1096
+ currentItemIndex;
1097
+ updatedItemIndex = new EventEmitter();
1098
+ _onPreviousItem(currentItemIndex) {
1099
+ this.updatedItemIndex.emit(--currentItemIndex);
1100
+ }
1101
+ _onNextItem(currentItemIndex) {
1102
+ this.updatedItemIndex.emit(++currentItemIndex);
1103
+ }
1104
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumNavigatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1105
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumNavigatorComponent, isStandalone: false, selector: "herum-navigator", inputs: { isFirstItem: "isFirstItem", isLastItem: "isLastItem", nextButtonText: "nextButtonText", previousButtonText: "previousButtonText", isNextButtonDisable: "isNextButtonDisable", isBackButtonDisable: "isBackButtonDisable", currentItemIndex: "currentItemIndex" }, outputs: { updatedItemIndex: "updatedItemIndex" }, ngImport: i0, template: "<div class=\"buttons-container\">\r\n <herum-button *ngIf=\"!isFirstItem\" [size]=\"'medium'\" [type]=\"'ghost'\" [disabled]=\"isBackButtonDisable\" id=\"prev\"\r\n (click)=\"_onPreviousItem(currentItemIndex)\">\r\n {{previousButtonText}}\r\n </herum-button>\r\n\r\n <herum-button *ngIf=\"!isLastItem\" [size]=\"'medium'\" [disabled]=\"isNextButtonDisable\" id=\"next\"\r\n (click)=\"_onNextItem(currentItemIndex)\">\r\n {{nextButtonText}}\r\n </herum-button>\r\n</div>", styles: [".buttons-container{display:flex;gap:10px;justify-content:flex-end}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.HerumButtonComponent, selector: "herum-button", inputs: ["type", "color", "size", "roundedCorners", "disabled", "isLoading", "name"] }] });
1106
+ }
1107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumNavigatorComponent, decorators: [{
1108
+ type: Component,
1109
+ args: [{ standalone: false, selector: 'herum-navigator', template: "<div class=\"buttons-container\">\r\n <herum-button *ngIf=\"!isFirstItem\" [size]=\"'medium'\" [type]=\"'ghost'\" [disabled]=\"isBackButtonDisable\" id=\"prev\"\r\n (click)=\"_onPreviousItem(currentItemIndex)\">\r\n {{previousButtonText}}\r\n </herum-button>\r\n\r\n <herum-button *ngIf=\"!isLastItem\" [size]=\"'medium'\" [disabled]=\"isNextButtonDisable\" id=\"next\"\r\n (click)=\"_onNextItem(currentItemIndex)\">\r\n {{nextButtonText}}\r\n </herum-button>\r\n</div>", styles: [".buttons-container{display:flex;gap:10px;justify-content:flex-end}\n"] }]
1110
+ }], propDecorators: { isFirstItem: [{
1111
+ type: Input
1112
+ }], isLastItem: [{
1113
+ type: Input
1114
+ }], nextButtonText: [{
1115
+ type: Input
1116
+ }], previousButtonText: [{
1117
+ type: Input
1118
+ }], isNextButtonDisable: [{
1119
+ type: Input
1120
+ }], isBackButtonDisable: [{
1121
+ type: Input
1122
+ }], currentItemIndex: [{
1123
+ type: Input
1124
+ }], updatedItemIndex: [{
1125
+ type: Output
1126
+ }] } });
1127
+
1128
+ class HerumStepNavigatorComponent {
1129
+ steps;
1130
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumStepNavigatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1131
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumStepNavigatorComponent, isStandalone: false, selector: "herum-step-navigator", inputs: { steps: "steps" }, ngImport: i0, template: "<div class=\"steps\">\r\n <div *ngFor=\"let step of steps\" class=\"stepper-item\"\r\n [ngClass]=\"{'completed-step': step.status === 0, 'active-step': step.status === 1}\">\r\n <herum-radio-button [options]=\"[{id:step.index, name:step.label}]\" [selectedOption]=\"step.index\"\r\n [isBlocked]=\"true\" [type]=\"step.status === 0 ? 'completed' : step.status === 2 ? 'disabled' :'checked'\">\r\n </herum-radio-button>\r\n </div>\r\n</div>", styles: [".steps{display:flex;gap:8px;position:relative}.steps .stepper-item{margin-block-end:8px;width:168px}.steps .stepper-item ::ng-deep herum-radio-button .option-name{font-size:14px}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=disabled]{color:var(--disabled-border-color)}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=completed]{color:var(--icons-color)}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=checked]{color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .checked-border{border-color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .checked-background{background-color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .completed-background{background-color:var(--icons-color)}.steps .stepper-item ::ng-deep herum-radio-button .disabled-background{background:var(--disabled-border-color)}.steps .stepper-item ::ng-deep herum-radio-button .disabled-border{border-color:var(--disabled-border-color)}.steps .stepper-item:before{content:\"\";display:block;border:4px solid var(--disabled-border-color);border-radius:var(--border-radius);width:100%}.steps .stepper-item.completed-step:before{border-color:var(--icons-color)}.steps .stepper-item.active-step:before{border-color:var(--secondary-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.HerumRadioButtonComponent, selector: "herum-radio-button", inputs: ["options", "isValid", "errorMsg", "isVertical", "isBlocked", "type", "selectedOption", "additionalOptionsText", "showAdditionalOptionsText", "secondarySelectedOption"], outputs: ["selectOptionEmitter"] }] });
1132
+ }
1133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumStepNavigatorComponent, decorators: [{
1134
+ type: Component,
1135
+ args: [{ standalone: false, selector: 'herum-step-navigator', template: "<div class=\"steps\">\r\n <div *ngFor=\"let step of steps\" class=\"stepper-item\"\r\n [ngClass]=\"{'completed-step': step.status === 0, 'active-step': step.status === 1}\">\r\n <herum-radio-button [options]=\"[{id:step.index, name:step.label}]\" [selectedOption]=\"step.index\"\r\n [isBlocked]=\"true\" [type]=\"step.status === 0 ? 'completed' : step.status === 2 ? 'disabled' :'checked'\">\r\n </herum-radio-button>\r\n </div>\r\n</div>", styles: [".steps{display:flex;gap:8px;position:relative}.steps .stepper-item{margin-block-end:8px;width:168px}.steps .stepper-item ::ng-deep herum-radio-button .option-name{font-size:14px}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=disabled]{color:var(--disabled-border-color)}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=completed]{color:var(--icons-color)}.steps .stepper-item ::ng-deep herum-radio-button .option-name[type=checked]{color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .checked-border{border-color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .checked-background{background-color:var(--secondary-color)}.steps .stepper-item ::ng-deep herum-radio-button .completed-background{background-color:var(--icons-color)}.steps .stepper-item ::ng-deep herum-radio-button .disabled-background{background:var(--disabled-border-color)}.steps .stepper-item ::ng-deep herum-radio-button .disabled-border{border-color:var(--disabled-border-color)}.steps .stepper-item:before{content:\"\";display:block;border:4px solid var(--disabled-border-color);border-radius:var(--border-radius);width:100%}.steps .stepper-item.completed-step:before{border-color:var(--icons-color)}.steps .stepper-item.active-step:before{border-color:var(--secondary-color)}\n"] }]
1136
+ }], propDecorators: { steps: [{
1137
+ type: Input
1138
+ }] } });
1139
+
1140
+ class HerumStepperComponent {
1141
+ color = 'primary';
1142
+ useDymanicSize = false;
1143
+ steps = [
1144
+ {
1145
+ index: 1,
1146
+ label: "פרטים",
1147
+ status: StepStatus.Complete,
1148
+ },
1149
+ {
1150
+ index: 2,
1151
+ label: "שיוך מארזים",
1152
+ status: StepStatus.Complete,
1153
+ },
1154
+ {
1155
+ index: 1,
1156
+ label: "הנוכחי",
1157
+ status: StepStatus.Current,
1158
+ },
1159
+ {
1160
+ index: 1,
1161
+ label: "סיכום",
1162
+ status: StepStatus.Incomplete,
1163
+ }
1164
+ ];
1165
+ current = this.steps.length;
1166
+ getStepItemStyle(index) {
1167
+ if (!this.useDymanicSize)
1168
+ return null;
1169
+ if (index > this.current)
1170
+ return { 'opacity': Math.max((1 - (index - this.current) / index) + 0.1, 1 - (index / this.steps.length)) };
1171
+ if (index < this.current)
1172
+ return { 'opacity': Math.max((index / this.current) + 0.1, (index / this.steps.length)) };
1173
+ }
1174
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1175
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumStepperComponent, isStandalone: false, selector: "herum-stepper", inputs: { color: "color", useDymanicSize: "useDymanicSize", steps: "steps", current: "current" }, ngImport: i0, template: "<div class=\"stepper-wrapper\" [ngStyle]=\"{'gap': color=='white' ? '24px' : '0', 'margin-bottom': color=='white' ? '0' : '20px'}\">\r\n <ng-container *ngFor=\"let step of steps; let i = index\">\r\n <ng-container *ngIf=\"!step.iconPath\">\r\n <ng-container [ngSwitch]=\"step.status\">\r\n <div *ngSwitchCase=\"0\" class=\"stepper-item completed\">\r\n <div class=\"step-counter\">\r\n <img src=\"assets/shared/icons/stepper/white-v.svg\" width=\"15px\" alt=\"checked\" />\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"1\" class=\"stepper-item active\">\r\n <div class=\"step-counter\">\r\n <div class=\"current-inner-circle\"></div>\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"2\" class=\"stepper-item\">\r\n <div class=\"step-counter\">\r\n <div class=\"current-inner-circle\"></div>\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"step.iconPath\">\r\n <div class=\"stepper-item white\" [ngStyle]=\"getStepItemStyle(i)\">\r\n <div class=\"step-counter\" [ngStyle]=\"{ 'transform': i == current ? 'scale(1.5)' : '' }\">\r\n <img [src]=\"step.iconPath\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</div>", styles: [".stepper-wrapper{margin-top:auto;display:flex;justify-content:space-between;margin-bottom:20px}.stepper-item{position:relative;display:flex;flex-direction:column;align-items:center;flex:1}@media (max-width: 768px){.stepper-item{font-size:12px}}.stepper-item:before{position:absolute;content:\"\";border-bottom:2px solid var(--inactive-border-color);width:100%;top:14px;left:-50%;z-index:2}.stepper-item:after{position:absolute;content:\"\";border-bottom:2px solid var(--inactive-border-color);width:100%;top:14px;left:50%;z-index:2}.stepper-item.white:before{left:-75%}.stepper-item.white:after{left:75%}.stepper-item .step-counter{position:relative;z-index:5;display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:50%;background:#ccc;margin-bottom:6px}.stepper-item:not(.completed) .step-counter{border:3px solid var(--inactive-border-color);background-color:#fff}.stepper-item:not(.completed) .step-counter .current-inner-circle{background-color:var(--inactive-border-color);width:12px;height:12px;border-radius:50%}.stepper-item.active{font-weight:700}.stepper-item.active .step-counter{border:3px solid var(--icons-color);background-color:#fff}.stepper-item.active .step-counter .current-inner-circle{background-color:var(--icons-color);width:12px;height:12px;border-radius:50%}.stepper-item.white{font-weight:700}.stepper-item.white .step-counter{border:3px solid white;background-color:#fff}.stepper-item.white .step-counter .current-inner-circle{background-color:#fff;width:12px;height:12px;border-radius:50%}.stepper-item.white:before{border-bottom-color:#fff}.stepper-item.white:after{border-bottom-color:#fff}.stepper-item.active:after{position:absolute;content:\"\";border-bottom:2px solid var(--icons-color);width:100%;top:14px;left:50%;z-index:3}.stepper-item.completed .step-counter{background:var(--primary-color);color:var(--light-text-color)}.stepper-item.completed:after{position:absolute;content:\"\";border-bottom:2px solid var(--icons-color);width:100%;top:14px;left:50%;z-index:3}.stepper-item:first-child:after{content:none}.stepper-item:last-child:before{content:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
1176
+ }
1177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumStepperComponent, decorators: [{
1178
+ type: Component,
1179
+ args: [{ standalone: false, selector: 'herum-stepper', template: "<div class=\"stepper-wrapper\" [ngStyle]=\"{'gap': color=='white' ? '24px' : '0', 'margin-bottom': color=='white' ? '0' : '20px'}\">\r\n <ng-container *ngFor=\"let step of steps; let i = index\">\r\n <ng-container *ngIf=\"!step.iconPath\">\r\n <ng-container [ngSwitch]=\"step.status\">\r\n <div *ngSwitchCase=\"0\" class=\"stepper-item completed\">\r\n <div class=\"step-counter\">\r\n <img src=\"assets/shared/icons/stepper/white-v.svg\" width=\"15px\" alt=\"checked\" />\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"1\" class=\"stepper-item active\">\r\n <div class=\"step-counter\">\r\n <div class=\"current-inner-circle\"></div>\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n\r\n <div *ngSwitchCase=\"2\" class=\"stepper-item\">\r\n <div class=\"step-counter\">\r\n <div class=\"current-inner-circle\"></div>\r\n </div>\r\n <div class=\"step-name\">{{step.label}}</div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"step.iconPath\">\r\n <div class=\"stepper-item white\" [ngStyle]=\"getStepItemStyle(i)\">\r\n <div class=\"step-counter\" [ngStyle]=\"{ 'transform': i == current ? 'scale(1.5)' : '' }\">\r\n <img [src]=\"step.iconPath\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</div>", styles: [".stepper-wrapper{margin-top:auto;display:flex;justify-content:space-between;margin-bottom:20px}.stepper-item{position:relative;display:flex;flex-direction:column;align-items:center;flex:1}@media (max-width: 768px){.stepper-item{font-size:12px}}.stepper-item:before{position:absolute;content:\"\";border-bottom:2px solid var(--inactive-border-color);width:100%;top:14px;left:-50%;z-index:2}.stepper-item:after{position:absolute;content:\"\";border-bottom:2px solid var(--inactive-border-color);width:100%;top:14px;left:50%;z-index:2}.stepper-item.white:before{left:-75%}.stepper-item.white:after{left:75%}.stepper-item .step-counter{position:relative;z-index:5;display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:50%;background:#ccc;margin-bottom:6px}.stepper-item:not(.completed) .step-counter{border:3px solid var(--inactive-border-color);background-color:#fff}.stepper-item:not(.completed) .step-counter .current-inner-circle{background-color:var(--inactive-border-color);width:12px;height:12px;border-radius:50%}.stepper-item.active{font-weight:700}.stepper-item.active .step-counter{border:3px solid var(--icons-color);background-color:#fff}.stepper-item.active .step-counter .current-inner-circle{background-color:var(--icons-color);width:12px;height:12px;border-radius:50%}.stepper-item.white{font-weight:700}.stepper-item.white .step-counter{border:3px solid white;background-color:#fff}.stepper-item.white .step-counter .current-inner-circle{background-color:#fff;width:12px;height:12px;border-radius:50%}.stepper-item.white:before{border-bottom-color:#fff}.stepper-item.white:after{border-bottom-color:#fff}.stepper-item.active:after{position:absolute;content:\"\";border-bottom:2px solid var(--icons-color);width:100%;top:14px;left:50%;z-index:3}.stepper-item.completed .step-counter{background:var(--primary-color);color:var(--light-text-color)}.stepper-item.completed:after{position:absolute;content:\"\";border-bottom:2px solid var(--icons-color);width:100%;top:14px;left:50%;z-index:3}.stepper-item:first-child:after{content:none}.stepper-item:last-child:before{content:none}\n"] }]
1180
+ }], propDecorators: { color: [{
1181
+ type: Input
1182
+ }], useDymanicSize: [{
1183
+ type: Input
1184
+ }], steps: [{
1185
+ type: Input
1186
+ }], current: [{
1187
+ type: Input
1188
+ }] } });
1189
+
1190
+ class HerumTimeSelectComponent {
1191
+ showSeconds = true;
1192
+ minutesPlaceholder = 'דקות';
1193
+ secondsPlaceholder = 'שניות';
1194
+ hoursPlaceholder = 'שעות';
1195
+ selectedTime = '00:00:00';
1196
+ label = '';
1197
+ timeChange = new EventEmitter();
1198
+ selectedHour;
1199
+ selectedMinute;
1200
+ selectedSecond;
1201
+ hours = this.generateIdentifiedEntityTimeArray(24);
1202
+ minutes = this.generateIdentifiedEntityTimeArray(60);
1203
+ seconds = this.generateIdentifiedEntityTimeArray(60);
1204
+ ngOnChanges(changes) {
1205
+ if (changes['selectedTime'].currentValue)
1206
+ this.selectedTimeToSelectedIdentifiedEntities(this.selectedTime);
1207
+ }
1208
+ _selectedSecondOptionChange(updatedSecond) {
1209
+ this.selectedSecond = updatedSecond;
1210
+ this.emitSelectedTime();
1211
+ }
1212
+ _selectedMinuteOptionChange(updatedMinute) {
1213
+ this.selectedMinute = updatedMinute;
1214
+ this.emitSelectedTime();
1215
+ }
1216
+ _selectedHourOptionChange(updatedHour) {
1217
+ this.selectedHour = updatedHour;
1218
+ this.emitSelectedTime();
1219
+ }
1220
+ emitSelectedTime() {
1221
+ const formattedTime = this.formatTime(this.selectedHour.name, this.selectedMinute.name, this.selectedSecond?.name);
1222
+ this.selectedTime = formattedTime;
1223
+ this.timeChange.emit(formattedTime);
1224
+ }
1225
+ formatTime(hours, minutes, seconds) {
1226
+ const hoursAndMinutes = `${hours.padStart(2, '0')}:${minutes.padStart(2, '0')}`;
1227
+ return !this.showSeconds ? hoursAndMinutes : hoursAndMinutes + `:${seconds?.padStart(2, '0')}`;
1228
+ }
1229
+ selectedTimeToSelectedIdentifiedEntities(selectedTime) {
1230
+ [this.selectedHour, this.selectedMinute, this.selectedSecond] = selectedTime.split(':').map((value) => ({ id: value, name: value }));
1231
+ }
1232
+ generateIdentifiedEntityTimeArray(length) {
1233
+ return Array.from({ length }, (_, index) => ({
1234
+ id: String(index).padStart(2, '0'),
1235
+ name: String(index).padStart(2, '0')
1236
+ }));
1237
+ }
1238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumTimeSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1239
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumTimeSelectComponent, isStandalone: false, selector: "herum-time-select", inputs: { showSeconds: "showSeconds", minutesPlaceholder: "minutesPlaceholder", secondsPlaceholder: "secondsPlaceholder", hoursPlaceholder: "hoursPlaceholder", selectedTime: "selectedTime", label: "label" }, outputs: { timeChange: "timeChange" }, usesOnChanges: true, ngImport: i0, template: "<div>\r\n <label class=\"input-title\">{{label}}</label>\r\n\r\n <div class=\"time-container\">\r\n <ng-container *ngIf=\"showSeconds\">\r\n <herum-select [options]=\"seconds\" [selectedOption]=\"selectedSecond\" size='min'\r\n [placeholder]=\"secondsPlaceholder\" [label]=\"start\"\r\n (selectedOptionEmitter)=\"_selectedSecondOptionChange($event)\"></herum-select>\r\n\r\n <span class=\"seperator\">:</span>\r\n </ng-container>\r\n\r\n <herum-select [options]=\"minutes\" size='min' [selectedOption]=\"selectedMinute\"\r\n [placeholder]=\"minutesPlaceholder\"\r\n (selectedOptionEmitter)=\"_selectedMinuteOptionChange($event)\"></herum-select>\r\n\r\n <span class=\"seperator\">:</span>\r\n\r\n <herum-select [options]=\"hours\" size='min' [selectedOption]=\"selectedHour\" [placeholder]=\"hoursPlaceholder\"\r\n (selectedOptionEmitter)=\"_selectedHourOptionChange($event)\"></herum-select>\r\n </div>\r\n</div>", styles: [".time-container{display:flex;align-items:center;justify-content:center;gap:8px}label{font-size:var(--standard-font-size)}.seperator{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.HerumSelectComponent, selector: "herum-select", inputs: ["options", "displayBy", "placeholder", "selectedOption", "disabled", "isDropDownInPositionFixed", "iconPath", "isAutoComplete", "title", "size", "displayLoadingMode", "isLoadingInput", "dropDownDirection", "filterPlaceholder", "debounceTime"], outputs: ["selectedOptionEmitter", "filterTextEmitter"] }] });
1240
+ }
1241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumTimeSelectComponent, decorators: [{
1242
+ type: Component,
1243
+ args: [{ standalone: false, selector: 'herum-time-select', template: "<div>\r\n <label class=\"input-title\">{{label}}</label>\r\n\r\n <div class=\"time-container\">\r\n <ng-container *ngIf=\"showSeconds\">\r\n <herum-select [options]=\"seconds\" [selectedOption]=\"selectedSecond\" size='min'\r\n [placeholder]=\"secondsPlaceholder\" [label]=\"start\"\r\n (selectedOptionEmitter)=\"_selectedSecondOptionChange($event)\"></herum-select>\r\n\r\n <span class=\"seperator\">:</span>\r\n </ng-container>\r\n\r\n <herum-select [options]=\"minutes\" size='min' [selectedOption]=\"selectedMinute\"\r\n [placeholder]=\"minutesPlaceholder\"\r\n (selectedOptionEmitter)=\"_selectedMinuteOptionChange($event)\"></herum-select>\r\n\r\n <span class=\"seperator\">:</span>\r\n\r\n <herum-select [options]=\"hours\" size='min' [selectedOption]=\"selectedHour\" [placeholder]=\"hoursPlaceholder\"\r\n (selectedOptionEmitter)=\"_selectedHourOptionChange($event)\"></herum-select>\r\n </div>\r\n</div>", styles: [".time-container{display:flex;align-items:center;justify-content:center;gap:8px}label{font-size:var(--standard-font-size)}.seperator{font-weight:700}\n"] }]
1244
+ }], propDecorators: { showSeconds: [{
1245
+ type: Input
1246
+ }], minutesPlaceholder: [{
1247
+ type: Input
1248
+ }], secondsPlaceholder: [{
1249
+ type: Input
1250
+ }], hoursPlaceholder: [{
1251
+ type: Input
1252
+ }], selectedTime: [{
1253
+ type: Input
1254
+ }], label: [{
1255
+ type: Input
1256
+ }], timeChange: [{
1257
+ type: Output
1258
+ }] } });
1259
+
1260
+ class HerumUserProfileComponent {
1261
+ userData;
1262
+ mode = 'vertical';
1263
+ titleSize = 'big';
1264
+ imageSize = 'image-default-size';
1265
+ get userFullName() {
1266
+ return this.userData?.firstName + ' ' + this.userData?.lastName;
1267
+ }
1268
+ get fullHierarchyName() {
1269
+ if (!this.userData.assignments || !this.userData.assignments.length)
1270
+ return this.userData.profession;
1271
+ return this.userData.assignments[0].structPreview.fullHierarchyName;
1272
+ }
1273
+ get assignmentStateDisplayName() {
1274
+ if (!this.userData.assignments || this.userData.assignments.length == 0)
1275
+ return '';
1276
+ return getAssignmentStateDisplayName(this.userData.assignments[0].assignmentMetadata.state);
1277
+ }
1278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUserProfileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumUserProfileComponent, isStandalone: false, selector: "herum-user-profile", inputs: { userData: "userData", mode: "mode", titleSize: "titleSize", imageSize: "imageSize" }, ngImport: i0, template: "<div class=\"profile-top-conatiner\" [ngClass]=\"mode\" *ngIf=\"userData\">\r\n <user-profile-image [user]=\"userData\" [imageSize]=\"imageSize\" [mode]=\"mode\"></user-profile-image>\r\n\r\n <div class=\"profile-name-container\">\r\n <p\r\n [ngClass]=\"{'section-header-title': titleSize === 'medium','profile-title': titleSize === 'big','section-title': titleSize === 'small'}\">\r\n {{userFullName}}\r\n\r\n <herum-chip *ngIf=\"userData.assignments?.length > 0\"\r\n [type]=\"userData.assignments[0].assignmentMetadata?.state == 2 ? 'negative':'positive'\"\r\n [title]=\"assignmentStateDisplayName\" [isDeleteButtonNeeded]=\"false\"></herum-chip>\r\n </p>\r\n <p class=\"profile-subtitle\">{{fullHierarchyName}}</p>\r\n <p class=\"profile-description\" *ngIf=\"mode=='horizontal'\">{{userData.profession}}</p>\r\n </div>\r\n</div>", styles: [".profile-top-conatiner{display:flex;gap:24px;align-items:center;flex-direction:column;text-align:center}.profile-top-conatiner .profile-title{font-size:22px;font-weight:700;margin:0;width:fit-content}.profile-top-conatiner .profile-subtitle{font-size:14px;margin:0;width:fit-content}.vertical{flex-direction:column}.vertical .profile-title{width:unset;display:flex;justify-content:center;align-items:center;gap:12px}.vertical .profile-subtitle{width:unset}.horizontal{flex-direction:row;padding-bottom:8px}.horizontal .profile-subtitle{width:fit-content}.horizontal .profile-description{width:fit-content;color:gray}.profile-image-for-fallback{display:none;width:0px;height:0px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.HerumChipComponent, selector: "herum-chip", inputs: ["title", "isDeleteButtonNeeded", "isActive", "isMenuMode", "type"], outputs: ["remove", "chipsActivation"] }, { kind: "component", type: i2$1.UserProfileImageComponent, selector: "user-profile-image", inputs: ["imageSize", "mode", "user", "isLoadingUser", "isUserClickAble"], outputs: ["userClicked"] }] });
1280
+ }
1281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUserProfileComponent, decorators: [{
1282
+ type: Component,
1283
+ args: [{ standalone: false, selector: 'herum-user-profile', template: "<div class=\"profile-top-conatiner\" [ngClass]=\"mode\" *ngIf=\"userData\">\r\n <user-profile-image [user]=\"userData\" [imageSize]=\"imageSize\" [mode]=\"mode\"></user-profile-image>\r\n\r\n <div class=\"profile-name-container\">\r\n <p\r\n [ngClass]=\"{'section-header-title': titleSize === 'medium','profile-title': titleSize === 'big','section-title': titleSize === 'small'}\">\r\n {{userFullName}}\r\n\r\n <herum-chip *ngIf=\"userData.assignments?.length > 0\"\r\n [type]=\"userData.assignments[0].assignmentMetadata?.state == 2 ? 'negative':'positive'\"\r\n [title]=\"assignmentStateDisplayName\" [isDeleteButtonNeeded]=\"false\"></herum-chip>\r\n </p>\r\n <p class=\"profile-subtitle\">{{fullHierarchyName}}</p>\r\n <p class=\"profile-description\" *ngIf=\"mode=='horizontal'\">{{userData.profession}}</p>\r\n </div>\r\n</div>", styles: [".profile-top-conatiner{display:flex;gap:24px;align-items:center;flex-direction:column;text-align:center}.profile-top-conatiner .profile-title{font-size:22px;font-weight:700;margin:0;width:fit-content}.profile-top-conatiner .profile-subtitle{font-size:14px;margin:0;width:fit-content}.vertical{flex-direction:column}.vertical .profile-title{width:unset;display:flex;justify-content:center;align-items:center;gap:12px}.vertical .profile-subtitle{width:unset}.horizontal{flex-direction:row;padding-bottom:8px}.horizontal .profile-subtitle{width:fit-content}.horizontal .profile-description{width:fit-content;color:gray}.profile-image-for-fallback{display:none;width:0px;height:0px}\n"] }]
1284
+ }], propDecorators: { userData: [{
1285
+ type: Input
1286
+ }], mode: [{
1287
+ type: Input
1288
+ }], titleSize: [{
1289
+ type: Input
1290
+ }], imageSize: [{
1291
+ type: Input
1292
+ }] } });
1293
+
1294
+ class HerumUserProgressComponent {
1295
+ title = 'מדד כשירות כללי';
1296
+ percentage = 65;
1297
+ type = 'gradient';
1298
+ get percentageLabel() {
1299
+ return this.percentage < 40 ?
1300
+ 'כשירות נמוכה' : this.percentage < 80 ?
1301
+ 'כשירות בינונית' : this.percentage < 99 ?
1302
+ 'כשירות טובה מאוד' : 'כשירות מושלמת! כל הכבוד!';
1303
+ }
1304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUserProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumUserProgressComponent, isStandalone: false, selector: "app-herum-user-progress", inputs: { title: "title", percentage: "percentage", type: "type" }, ngImport: i0, template: "<div class=\"user-progress-container\" [ngClass]=\"{'p-0':type == 'solid'}\">\r\n <div class=\"mb-2 row\">\r\n <div class=\"col-7 section-title\">{{ title }}</div>\r\n <div class=\"col-5 section-title left\">{{ percentageLabel }}</div>\r\n </div>\r\n\r\n <herum-progress-bar [percentage]=\"percentage\" [type]=\"'solid'\"></herum-progress-bar>\r\n</div>", styles: [".user-progress-container{padding:10px;gap:10px;display:flex;flex-direction:column}.left{text-align:left}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2$1.HerumProgressBarComponent, selector: "herum-progress-bar", inputs: ["percentage", "invalidPercentage", "showPercentage", "percentagePosition", "type", "size", "color", "borderRadius", "total", "showBorder", "thickness"] }] });
1306
+ }
1307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUserProgressComponent, decorators: [{
1308
+ type: Component,
1309
+ args: [{ standalone: false, selector: 'app-herum-user-progress', template: "<div class=\"user-progress-container\" [ngClass]=\"{'p-0':type == 'solid'}\">\r\n <div class=\"mb-2 row\">\r\n <div class=\"col-7 section-title\">{{ title }}</div>\r\n <div class=\"col-5 section-title left\">{{ percentageLabel }}</div>\r\n </div>\r\n\r\n <herum-progress-bar [percentage]=\"percentage\" [type]=\"'solid'\"></herum-progress-bar>\r\n</div>", styles: [".user-progress-container{padding:10px;gap:10px;display:flex;flex-direction:column}.left{text-align:left}\n"] }]
1310
+ }], propDecorators: { title: [{
1311
+ type: Input
1312
+ }], percentage: [{
1313
+ type: Input
1314
+ }], type: [{
1315
+ type: Input
1316
+ }] } });
1317
+
1318
+ class KeyValueListComponent {
1319
+ items = [];
1320
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: KeyValueListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1321
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: KeyValueListComponent, isStandalone: false, selector: "key-value-list", inputs: { items: "items" }, ngImport: i0, template: "\r\n<div class=\"item-contianer mb-1\" *ngFor=\"let item of items\">\r\n <div *ngIf=\"item.iconPath\" class=\"col-1\">\r\n <img *ngIf=\"item.iconPath\" [src]=\"item.iconPath\">\r\n </div>\r\n <div class=\"key col-4 bold\">{{item.key}}</div>\r\n <div class=\"value col-7 truncate\" [matTooltip]=\"item.value\">{{item.value}}</div>\r\n</div>", styles: [".item-contianer{display:flex;gap:8px}.bold{font-weight:700}img{width:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
1322
+ }
1323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: KeyValueListComponent, decorators: [{
1324
+ type: Component,
1325
+ args: [{ standalone: false, selector: 'key-value-list', template: "\r\n<div class=\"item-contianer mb-1\" *ngFor=\"let item of items\">\r\n <div *ngIf=\"item.iconPath\" class=\"col-1\">\r\n <img *ngIf=\"item.iconPath\" [src]=\"item.iconPath\">\r\n </div>\r\n <div class=\"key col-4 bold\">{{item.key}}</div>\r\n <div class=\"value col-7 truncate\" [matTooltip]=\"item.value\">{{item.value}}</div>\r\n</div>", styles: [".item-contianer{display:flex;gap:8px}.bold{font-weight:700}img{width:16px}\n"] }]
1326
+ }], propDecorators: { items: [{
1327
+ type: Input
1328
+ }] } });
1329
+
1330
+ class LabelsWithIconsListComponent {
1331
+ items = [];
1332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: LabelsWithIconsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1333
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: LabelsWithIconsListComponent, isStandalone: false, selector: "labels-with-icons-list", inputs: { items: "items" }, ngImport: i0, template: "<div class=\"label-item\" *ngFor=\"let item of items\">\r\n <img [src]=\"item.iconPath\" alt=\" \" />\r\n <p>{{ item.label }}</p>\r\n</div>", styles: [".label-item{display:flex;gap:8px;align-items:center;padding:12px 8px;font-size:14px;border-bottom:1px solid var(--chips-divider-color)}.label-item:last-child{border-bottom:none}p{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1334
+ }
1335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: LabelsWithIconsListComponent, decorators: [{
1336
+ type: Component,
1337
+ args: [{ standalone: false, selector: 'labels-with-icons-list', template: "<div class=\"label-item\" *ngFor=\"let item of items\">\r\n <img [src]=\"item.iconPath\" alt=\" \" />\r\n <p>{{ item.label }}</p>\r\n</div>", styles: [".label-item{display:flex;gap:8px;align-items:center;padding:12px 8px;font-size:14px;border-bottom:1px solid var(--chips-divider-color)}.label-item:last-child{border-bottom:none}p{margin:0}\n"] }]
1338
+ }], propDecorators: { items: [{
1339
+ type: Input
1340
+ }] } });
1341
+
1342
+ class ProgressesOverViewComponent {
1343
+ titleSize = 'section-header-title';
1344
+ circularProgressSize = 'big-size';
1345
+ progressesOverView = [];
1346
+ progressOverViewDirection = 'row';
1347
+ containerProgressesOverViewDirection = 'column';
1348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ProgressesOverViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1349
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: ProgressesOverViewComponent, isStandalone: false, selector: "progresses-over-view", inputs: { titleSize: "titleSize", circularProgressSize: "circularProgressSize", progressesOverView: "progressesOverView", progressOverViewDirection: "progressOverViewDirection", containerProgressesOverViewDirection: "containerProgressesOverViewDirection" }, ngImport: i0, template: "<div class=\"layout\">\r\n <div class=\"progresses-container\"\r\n [ngClass]=\"{'row-progresses-container':containerProgressesOverViewDirection === 'row'}\">\r\n <div class=\"progress-over-view\" [ngClass]=\"{'flex-direction-column':progressOverViewDirection === 'column'}\"\r\n *ngFor=\"let progressOverView of progressesOverView\">\r\n <herum-circular-progress-bar [fill]=\"false\" [showPercentage]=\"progressOverView.showPercentage\"\r\n [percentage]=\"progressOverView.progress\" [displayedContent]=\"progressOverView.displayedContent\"\r\n [displayedContentColorMatchesGradientColor]=\"progressOverView.displayedContentColorMatchesGradientColor\"\r\n [firstGradient]=\"progressOverView.firstGradient\" [size]=\"circularProgressSize\">\r\n </herum-circular-progress-bar>\r\n\r\n <div class=\"progress-labels\" [ngClass]=\"{'align-items-center':progressOverViewDirection === 'column'}\">\r\n <h2 class=\"section-header-title m-0 p-0\" [ngClass]=\"[titleSize]\">\r\n {{ progressOverView.title }}\r\n </h2>\r\n\r\n <span *ngIf=\"progressOverView.description\" class=\"w-100 text-align-right\">\r\n {{ progressOverView.description }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".progresses-container.row-progresses-container{flex-direction:row;justify-content:space-between}.progresses-container{display:flex;flex-direction:column}.progresses-container .progress-over-view{display:flex;align-items:center;gap:var(--standard-medium-padding)}.progresses-container .progress-over-view .progress-labels{display:flex;flex-direction:column;gap:4px}.flex-direction-column{flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.HerumCircularProgressBarComponent, selector: "herum-circular-progress-bar", inputs: ["percentage", "fill", "size", "firstGradient", "fillColor", "showPercentage", "displayedContent", "displayedContentColorMatchesGradientColor"] }] });
1350
+ }
1351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ProgressesOverViewComponent, decorators: [{
1352
+ type: Component,
1353
+ args: [{ standalone: false, selector: 'progresses-over-view', template: "<div class=\"layout\">\r\n <div class=\"progresses-container\"\r\n [ngClass]=\"{'row-progresses-container':containerProgressesOverViewDirection === 'row'}\">\r\n <div class=\"progress-over-view\" [ngClass]=\"{'flex-direction-column':progressOverViewDirection === 'column'}\"\r\n *ngFor=\"let progressOverView of progressesOverView\">\r\n <herum-circular-progress-bar [fill]=\"false\" [showPercentage]=\"progressOverView.showPercentage\"\r\n [percentage]=\"progressOverView.progress\" [displayedContent]=\"progressOverView.displayedContent\"\r\n [displayedContentColorMatchesGradientColor]=\"progressOverView.displayedContentColorMatchesGradientColor\"\r\n [firstGradient]=\"progressOverView.firstGradient\" [size]=\"circularProgressSize\">\r\n </herum-circular-progress-bar>\r\n\r\n <div class=\"progress-labels\" [ngClass]=\"{'align-items-center':progressOverViewDirection === 'column'}\">\r\n <h2 class=\"section-header-title m-0 p-0\" [ngClass]=\"[titleSize]\">\r\n {{ progressOverView.title }}\r\n </h2>\r\n\r\n <span *ngIf=\"progressOverView.description\" class=\"w-100 text-align-right\">\r\n {{ progressOverView.description }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".progresses-container.row-progresses-container{flex-direction:row;justify-content:space-between}.progresses-container{display:flex;flex-direction:column}.progresses-container .progress-over-view{display:flex;align-items:center;gap:var(--standard-medium-padding)}.progresses-container .progress-over-view .progress-labels{display:flex;flex-direction:column;gap:4px}.flex-direction-column{flex-direction:column}\n"] }]
1354
+ }], propDecorators: { titleSize: [{
1355
+ type: Input
1356
+ }], circularProgressSize: [{
1357
+ type: Input
1358
+ }], progressesOverView: [{
1359
+ type: Input
1360
+ }], progressOverViewDirection: [{
1361
+ type: Input
1362
+ }], containerProgressesOverViewDirection: [{
1363
+ type: Input
1364
+ }] } });
1365
+
1366
+ class MoleculesModule {
1367
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MoleculesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1368
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: MoleculesModule, declarations: [HerumActiveLinkComponent,
1369
+ HerumActiveMenuComponent,
1370
+ HerumAutocompleteComponent,
1371
+ HerumClosedListMultiSelectComponent,
1372
+ HerumClosedListSelectComponent,
1373
+ HerumDateTimeInputComponent,
1374
+ HerumDateTimePickerComponent,
1375
+ HerumDropZoneComponent,
1376
+ HerumExpendablePanelComponent,
1377
+ HerumFilesViewerComponent,
1378
+ HerumHierarchyTreeNodeComponent,
1379
+ HerumMultiProgressBarComponent,
1380
+ HerumNavigatorComponent,
1381
+ HerumStepNavigatorComponent,
1382
+ HerumStepperComponent,
1383
+ HerumTimeSelectComponent,
1384
+ HerumUserProfileComponent,
1385
+ HerumUserProgressComponent,
1386
+ KeyValueListComponent,
1387
+ LabelsWithIconsListComponent,
1388
+ ProgressesOverViewComponent], imports: [CommonModule,
1389
+ ReactiveFormsModule,
1390
+ FormsModule,
1391
+ MatMenuModule,
1392
+ ClipboardModule,
1393
+ MatAutocompleteModule,
1394
+ MatChipsModule,
1395
+ MatFormFieldModule,
1396
+ MatTooltipModule,
1397
+ MatInputModule,
1398
+ MatSelectModule,
1399
+ MatIconModule,
1400
+ MatCheckboxModule,
1401
+ MatSliderModule,
1402
+ DragDropModule,
1403
+ MatDatepickerModule,
1404
+ MatNativeDateModule,
1405
+ PipesModule,
1406
+ AtomsModule], exports: [HerumActiveLinkComponent,
1407
+ HerumActiveMenuComponent,
1408
+ HerumAutocompleteComponent,
1409
+ HerumClosedListMultiSelectComponent,
1410
+ HerumClosedListSelectComponent,
1411
+ HerumDateTimeInputComponent,
1412
+ HerumDateTimePickerComponent,
1413
+ HerumDropZoneComponent,
1414
+ HerumExpendablePanelComponent,
1415
+ HerumFilesViewerComponent,
1416
+ HerumHierarchyTreeNodeComponent,
1417
+ HerumMultiProgressBarComponent,
1418
+ HerumNavigatorComponent,
1419
+ HerumStepNavigatorComponent,
1420
+ HerumStepperComponent,
1421
+ HerumTimeSelectComponent,
1422
+ HerumUserProfileComponent,
1423
+ HerumUserProgressComponent,
1424
+ KeyValueListComponent,
1425
+ LabelsWithIconsListComponent,
1426
+ ProgressesOverViewComponent] });
1427
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MoleculesModule, providers: [
1428
+ { provide: MAT_DATE_LOCALE, useValue: 'he-IL' },
1429
+ ], imports: [CommonModule,
1430
+ ReactiveFormsModule,
1431
+ FormsModule,
1432
+ MatMenuModule,
1433
+ ClipboardModule,
1434
+ MatAutocompleteModule,
1435
+ MatChipsModule,
1436
+ MatFormFieldModule,
1437
+ MatTooltipModule,
1438
+ MatInputModule,
1439
+ MatSelectModule,
1440
+ MatIconModule,
1441
+ MatCheckboxModule,
1442
+ MatSliderModule,
1443
+ DragDropModule,
1444
+ MatDatepickerModule,
1445
+ MatNativeDateModule,
1446
+ PipesModule,
1447
+ AtomsModule] });
1448
+ }
1449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MoleculesModule, decorators: [{
1450
+ type: NgModule,
1451
+ args: [{
1452
+ declarations: [
1453
+ HerumActiveLinkComponent,
1454
+ HerumActiveMenuComponent,
1455
+ HerumAutocompleteComponent,
1456
+ HerumClosedListMultiSelectComponent,
1457
+ HerumClosedListSelectComponent,
1458
+ HerumDateTimeInputComponent,
1459
+ HerumDateTimePickerComponent,
1460
+ HerumDropZoneComponent,
1461
+ HerumExpendablePanelComponent,
1462
+ HerumFilesViewerComponent,
1463
+ HerumHierarchyTreeNodeComponent,
1464
+ HerumMultiProgressBarComponent,
1465
+ HerumNavigatorComponent,
1466
+ HerumStepNavigatorComponent,
1467
+ HerumStepperComponent,
1468
+ HerumTimeSelectComponent,
1469
+ HerumUserProfileComponent,
1470
+ HerumUserProgressComponent,
1471
+ KeyValueListComponent,
1472
+ LabelsWithIconsListComponent,
1473
+ ProgressesOverViewComponent
1474
+ ],
1475
+ exports: [
1476
+ HerumActiveLinkComponent,
1477
+ HerumActiveMenuComponent,
1478
+ HerumAutocompleteComponent,
1479
+ HerumClosedListMultiSelectComponent,
1480
+ HerumClosedListSelectComponent,
1481
+ HerumDateTimeInputComponent,
1482
+ HerumDateTimePickerComponent,
1483
+ HerumDropZoneComponent,
1484
+ HerumExpendablePanelComponent,
1485
+ HerumFilesViewerComponent,
1486
+ HerumHierarchyTreeNodeComponent,
1487
+ HerumMultiProgressBarComponent,
1488
+ HerumNavigatorComponent,
1489
+ HerumStepNavigatorComponent,
1490
+ HerumStepperComponent,
1491
+ HerumTimeSelectComponent,
1492
+ HerumUserProfileComponent,
1493
+ HerumUserProgressComponent,
1494
+ KeyValueListComponent,
1495
+ LabelsWithIconsListComponent,
1496
+ ProgressesOverViewComponent
1497
+ ],
1498
+ imports: [
1499
+ CommonModule,
1500
+ ReactiveFormsModule,
1501
+ FormsModule,
1502
+ MatMenuModule,
1503
+ ClipboardModule,
1504
+ MatAutocompleteModule,
1505
+ MatChipsModule,
1506
+ MatFormFieldModule,
1507
+ MatTooltipModule,
1508
+ MatInputModule,
1509
+ MatSelectModule,
1510
+ MatIconModule,
1511
+ MatCheckboxModule,
1512
+ MatSliderModule,
1513
+ DragDropModule,
1514
+ MatDatepickerModule,
1515
+ MatNativeDateModule,
1516
+ PipesModule,
1517
+ AtomsModule
1518
+ ],
1519
+ providers: [
1520
+ { provide: MAT_DATE_LOCALE, useValue: 'he-IL' },
1521
+ ]
1522
+ }]
1523
+ }] });
1524
+
1525
+ /**
1526
+ * Generated bundle index. Do not edit.
1527
+ */
1528
+
1529
+ export { HerumActiveLinkComponent, HerumActiveMenuComponent, HerumAutocompleteComponent, HerumClosedListMultiSelectComponent, HerumClosedListSelectComponent, HerumDateTimeInputComponent, HerumDateTimePickerComponent, HerumDropZoneComponent, HerumExpendablePanelComponent, HerumFilesViewerComponent, HerumHierarchyTreeNodeComponent, HerumMultiProgressBarComponent, HerumNavigatorComponent, HerumStepNavigatorComponent, HerumStepperComponent, HerumTimeSelectComponent, HerumUserProfileComponent, HerumUserProgressComponent, KeyValueListComponent, LabelsWithIconsListComponent, MoleculesModule, ProgressesOverViewComponent };
1530
+ //# sourceMappingURL=herum-shared-molecules.mjs.map