@allsorter/ui-components 0.0.367 → 0.0.370

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 (124) hide show
  1. package/fesm2022/allsorter-ui-components.mjs +2996 -1391
  2. package/fesm2022/allsorter-ui-components.mjs.map +1 -1
  3. package/images/Column left.svg +5 -0
  4. package/images/Move.svg +8 -0
  5. package/images/Success.svg +5 -0
  6. package/images/Table.svg +3 -0
  7. package/images/Vector-1.svg +3 -0
  8. package/images/Vector.svg +3 -0
  9. package/images/add-teble.svg +6 -0
  10. package/images/arrow_downward.svg +3 -0
  11. package/images/calendar_year.svg +4 -0
  12. package/images/column right.svg +5 -0
  13. package/images/delete -table.svg +6 -0
  14. package/images/delete row.svg +10 -0
  15. package/images/delete-column.svg +10 -0
  16. package/images/delete.svg +3 -0
  17. package/images/drag-drop-icon.svg +8 -0
  18. package/images/edit.svg +3 -0
  19. package/images/error.svg +5 -0
  20. package/images/row bottom.svg +5 -0
  21. package/images/row top.svg +5 -0
  22. package/images/search.svg +3 -0
  23. package/images/subrole.svg +3 -0
  24. package/images/visibility_off.svg +3 -0
  25. package/images/warning.svg +5 -0
  26. package/lib/app-toolbar/app-toolbar.component.d.ts +5 -8
  27. package/lib/app-toolbar/app-toolbar.module.d.ts +4 -4
  28. package/lib/app-toolbar-right/app-toolbar-right.component.d.ts +3 -5
  29. package/lib/button/button.component.d.ts +30 -1
  30. package/lib/candidate-section/candidate-section.component.d.ts +8 -0
  31. package/lib/custom-editor/custom-editor.component.d.ts +110 -14
  32. package/lib/custom-editor/table/table.component.d.ts +5 -0
  33. package/lib/editable-form-wrapper/editable-form-wrapper.component.d.ts +48 -0
  34. package/lib/experience-section/experience-section.component.d.ts +4 -2
  35. package/lib/general-container/general-container.component.d.ts +5 -1
  36. package/lib/icon-button/icon-button.component.d.ts +16 -7
  37. package/lib/input/input.component.d.ts +41 -10
  38. package/lib/newresumeheader/newresumeheader.component.d.ts +43 -4
  39. package/lib/resume-entries/resume-entries.component.d.ts +7 -1
  40. package/lib/resume-header/resume-header.model.d.ts +11 -20
  41. package/lib/shared-popup-modal/shared-popup-modal.component.d.ts +17 -0
  42. package/lib/side-action-bar-wrapper/side-action-bar-wrapper.component.d.ts +34 -0
  43. package/lib/side-action-bar-wrapper/side-action-bar-wrapper.module.d.ts +12 -0
  44. package/lib/styles/border-radius.scss +11 -0
  45. package/lib/styles/button-mixins.scss +41 -0
  46. package/lib/styles/button.scss +117 -0
  47. package/lib/styles/colors.scss +221 -0
  48. package/lib/styles/elevation.scss +46 -0
  49. package/lib/styles/new-typography.scss +202 -0
  50. package/lib/styles/spacing.scss +39 -0
  51. package/lib/styles/typography-classes.scss +203 -0
  52. package/lib/utils/icon-utils.d.ts +51 -0
  53. package/lib/utils/image-utils.d.ts +54 -0
  54. package/package.json +15 -3
  55. package/public-api.d.ts +3 -3
  56. package/src/lib/ai-apply-bar/ai-apply-bar.component.html +43 -0
  57. package/src/lib/ai-apply-bar/ai-apply-bar.component.scss +182 -0
  58. package/src/lib/app-toolbar/app-toolbar.component.html +13 -0
  59. package/src/lib/app-toolbar/app-toolbar.component.scss +141 -0
  60. package/src/lib/app-toolbar-right/app-toolbar-right.component.html +15 -0
  61. package/src/lib/app-toolbar-right/app-toolbar-right.component.scss +294 -0
  62. package/src/lib/button/button.component.html +127 -0
  63. package/src/lib/button/button.component.scss +1238 -0
  64. package/src/lib/candidate-section/candidate-section.component.html +91 -0
  65. package/src/lib/candidate-section/candidate-section.component.scss +154 -0
  66. package/src/lib/checkbox/checkbox.component.html +24 -0
  67. package/src/lib/checkbox/checkbox.component.scss +280 -0
  68. package/src/lib/custom-editor/custom-editor.component.html +129 -0
  69. package/src/lib/custom-editor/custom-editor.component.scss +441 -0
  70. package/src/lib/custom-editor/table/table.component.html +21 -0
  71. package/src/lib/date-range/date-range.component.html +33 -0
  72. package/src/lib/date-range/date-range.component.scss +284 -0
  73. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.html +12 -0
  74. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.scss +227 -0
  75. package/src/lib/experience-section/experience-section.component.html +20 -0
  76. package/src/lib/experience-section/experience-section.component.scss +0 -0
  77. package/src/lib/field-placeholder/field-placeholder.component.html +17 -0
  78. package/src/lib/field-placeholder/field-placeholder.component.scss +119 -0
  79. package/src/lib/general-container/general-container.component.html +3 -0
  80. package/src/lib/general-container/general-container.component.scss +10 -0
  81. package/src/lib/icon-button/icon-button.component.html +12 -0
  82. package/src/lib/icon-button/icon-button.component.scss +77 -0
  83. package/src/lib/input/input.component.html +86 -0
  84. package/src/lib/input/input.component.scss +1337 -0
  85. package/src/lib/loader/loader.component.html +15 -0
  86. package/src/lib/loader/loader.component.scss +493 -0
  87. package/src/lib/new-typography/new-typography.component.html +10 -0
  88. package/src/lib/new-typography/new-typography.component.scss +200 -0
  89. package/src/lib/newresumeheader/newresumeheader.component.html +178 -0
  90. package/src/lib/newresumeheader/newresumeheader.component.scss +530 -0
  91. package/src/lib/radio/radio.component.html +23 -0
  92. package/src/lib/radio/radio.component.scss +253 -0
  93. package/src/lib/responsive-columns/responsive-columns.component.html +6 -0
  94. package/src/lib/responsive-columns/responsive-columns.component.scss +68 -0
  95. package/src/lib/responsive-layout/responsive-layout.component.html +1 -0
  96. package/src/lib/responsive-layout/responsive-layout.component.scss +47 -0
  97. package/src/lib/resume-entries/resume-entries.component.html +97 -0
  98. package/src/lib/resume-entries/resume-entries.component.scss +341 -0
  99. package/src/lib/resume-header/resume-header.component.html +167 -0
  100. package/src/lib/shared-popup-modal/shared-popup-modal.component.html +99 -0
  101. package/src/lib/shared-popup-modal/shared-popup-modal.component.scss +223 -0
  102. package/src/lib/side-action-bar-wrapper/side-action-bar-wrapper.component.html +17 -0
  103. package/src/lib/side-action-bar-wrapper/side-action-bar-wrapper.component.scss +58 -0
  104. package/src/lib/slide-toggle/slide-toggle.component.html +17 -0
  105. package/src/lib/slide-toggle/slide-toggle.component.scss +439 -0
  106. package/src/lib/storybook/testing-strip/testing-strip.component.html +12 -0
  107. package/src/lib/storybook/testing-strip/testing-strip.component.scss +1 -0
  108. package/src/lib/styles/border-radius.scss +11 -0
  109. package/src/lib/styles/button-mixins.scss +41 -0
  110. package/src/lib/styles/button.scss +117 -0
  111. package/src/lib/styles/colors.scss +221 -0
  112. package/src/lib/styles/elevation.scss +46 -0
  113. package/src/lib/styles/new-typography.scss +202 -0
  114. package/src/lib/styles/spacing.scss +39 -0
  115. package/src/lib/styles/typography-classes.scss +203 -0
  116. package/src/lib/tabs/tabs.component.html +9 -0
  117. package/src/lib/tabs/tabs.component.scss +151 -0
  118. package/src/lib/toggle-buttons/toggle-buttons.component.html +17 -0
  119. package/src/lib/toggle-buttons/toggle-buttons.component.scss +284 -0
  120. package/src/lib/tooltip/tooltip.component.html +6 -0
  121. package/src/lib/tooltip/tooltip.component.scss +8 -0
  122. package/lib/action-bar-wrapper/action-bar-wrapper.component.d.ts +0 -36
  123. package/lib/resume-header/resume-header.component.d.ts +0 -69
  124. package/lib/resume-header/resume-header.module.d.ts +0 -8
@@ -0,0 +1,23 @@
1
+ <mat-radio-button [value]="value" [name]="name" [checked]="checked" [disabled]="disabled" [color]="color"
2
+ [labelPosition]="labelPosition" [required]="required" [attr.data-testid]="dataTestId" [ngClass]="getColorClass()"
3
+ [matTooltip]="tooltip" [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!tooltip"
4
+ (change)="handleChange($event)" (focus)="handleFocus($event)" (blur)="handleBlur($event)">
5
+ <div class="radio-label-wrapper" *ngIf="showLabels">
6
+ <div class="radio-label-main-row" *ngIf="labelText">
7
+ <div class="radio-label-main">
8
+ {{ labelText }}
9
+ </div>
10
+ <button *ngIf="showHelperIcon" type="button" class="radio-helper-icon"
11
+ [matTooltip]="helperIconTooltip || helperText" [matTooltipPosition]="tooltipPosition" [disabled]="disabled"
12
+ (click)="onHelperIconClick($event)">
13
+ ?
14
+ </button>
15
+ </div>
16
+
17
+ <div *ngIf="helperText" class="radio-label-helper">
18
+ {{ helperText }}
19
+ </div>
20
+ </div>
21
+
22
+ <ng-content></ng-content>
23
+ </mat-radio-button>
@@ -0,0 +1,253 @@
1
+ @import '../styles/colors.scss';
2
+ @import '../styles/typography-classes.scss';
3
+ /* ============================================
4
+ RADIO BUTTON COMPONENT STYLES
5
+ ============================================ */
6
+
7
+ /* ============================================
8
+ CUSTOM COLOR THEMES
9
+ ============================================ */
10
+
11
+ /* Default/Primary Color (Blue) */
12
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__outer-circle {
13
+ border-color: $color-blue-500 !important;
14
+ }
15
+
16
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__inner-circle {
17
+ border-color: $color-blue-500 !important;
18
+ }
19
+
20
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__ripple {
21
+ background-color: $color-blue-500 !important;
22
+ }
23
+
24
+ /* Primary Theme (Blue) */
25
+ ::ng-deep .mat-mdc-radio-button.mat-primary.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__outer-circle {
26
+ border-color: $color-blue-500 !important;
27
+ }
28
+
29
+ ::ng-deep .mat-mdc-radio-button.mat-primary.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__inner-circle {
30
+ border-color: $color-blue-500 !important;
31
+ }
32
+
33
+ /* Green Theme */
34
+ ::ng-deep .mat-mdc-radio-button.mat-green.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__outer-circle {
35
+ border-color: $color-green-500 !important;
36
+ }
37
+
38
+ ::ng-deep .mat-mdc-radio-button.mat-green.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__inner-circle {
39
+ border-color: $color-green-500 !important;
40
+ }
41
+
42
+ /* Green Theme Ripple Effect */
43
+ ::ng-deep .mat-mdc-radio-button.mat-green .mdc-radio__ripple {
44
+ background-color: rgba($color-green-500, 0.8) !important;
45
+ }
46
+
47
+ /* Green Theme Ripple Effect - Checked and Hover */
48
+ ::ng-deep .mat-mdc-radio-button.mat-green .mdc-radio__ripple,
49
+ ::ng-deep .mat-mdc-radio-button.mat-green:hover .mdc-radio__ripple {
50
+ background-color: rgba($color-green-500, 0.24) !important;
51
+ }
52
+
53
+ /* Error Theme (Red) */
54
+ ::ng-deep .mat-mdc-radio-button.mat-error.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__outer-circle {
55
+ border-color: $color-error-500 !important;
56
+ }
57
+
58
+ ::ng-deep .mat-mdc-radio-button.mat-error.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__inner-circle {
59
+ border-color: $color-error-500 !important;
60
+ }
61
+
62
+ /* Error Theme Ripple Effect */
63
+ ::ng-deep .mat-mdc-radio-button.mat-error .mdc-radio__ripple {
64
+ background-color: rgba($color-error-500, 0.12) !important;
65
+ }
66
+
67
+ /* Error Theme Ripple Effect - Checked and Hover */
68
+ ::ng-deep .mat-mdc-radio-button.mat-error .mdc-radio__ripple,
69
+ ::ng-deep .mat-mdc-radio-button.mat-error:hover .mdc-radio__ripple {
70
+ background-color: rgba($color-error-500, 0.24) !important;
71
+ }
72
+
73
+ /* ============================================
74
+ DISABLED STATE STYLING
75
+ ============================================ */
76
+
77
+ /* Disabled - Unchecked State */
78
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled .mdc-radio__background .mdc-radio__outer-circle {
79
+ border-color: #C3C5D1 !important;
80
+ }
81
+
82
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled .mdc-radio__background .mdc-radio__inner-circle {
83
+ border-color: #DEE0E6 !important;
84
+ }
85
+
86
+ /* Disabled - Checked State */
87
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__outer-circle {
88
+ border-color: #DEE0E6 !important;
89
+ }
90
+
91
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled.mat-mdc-radio-checked .mdc-radio__background .mdc-radio__inner-circle {
92
+ border-color: #DEE0E6 !important;
93
+ }
94
+
95
+ /* ============================================
96
+ INTERACTIVE STATES (FOCUS & HOVER)
97
+ ============================================ */
98
+
99
+ /* Default Focus State */
100
+ ::ng-deep .mat-mdc-radio-button .mdc-radio__ripple {
101
+ background-color: rgba($color-blue-500, 0.12) !important;
102
+ }
103
+
104
+ /* Hover State */
105
+ ::ng-deep .mat-mdc-radio-button:hover .mdc-radio__ripple {
106
+ background-color: rgba($color-blue-500, 0.24) !important;
107
+ }
108
+
109
+
110
+
111
+
112
+ /* ============================================
113
+ TYPOGRAPHY STYLING
114
+ ============================================ */
115
+
116
+ /* Material Design Label Styling */
117
+ ::ng-deep .mat-mdc-radio-button .mdc-form-field>label {
118
+ @extend .font-label-large;
119
+ color: $color-grey-700 !important;
120
+ }
121
+
122
+ /* ============================================
123
+ CUSTOM LABEL COMPONENTS
124
+ ============================================ */
125
+
126
+ /* Wrapper for label + helper text */
127
+ .radio-label-wrapper {
128
+ display: flex;
129
+ flex-direction: column;
130
+ margin-top: 12px;
131
+ }
132
+
133
+ /* Row to keep label and helper icon on the same line */
134
+ .radio-label-main-row {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 4px;
138
+ }
139
+
140
+ /* Main Label Styling */
141
+ .radio-label-main {
142
+ @extend .font-label-large;
143
+ color: $color-grey-700 !important;
144
+ }
145
+
146
+ /* Helper Text Styling */
147
+ .radio-label-helper {
148
+ @extend .font-label-medium;
149
+ color: $color-grey-500 !important;
150
+ margin-top: 0px !important;
151
+ }
152
+
153
+ /* Disabled Labels & Helper Text */
154
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled .radio-label-main,
155
+ ::ng-deep .mat-mdc-radio-button.mat-mdc-radio-disabled .radio-label-helper {
156
+ color: $color-grey-400 !important;
157
+ cursor: not-allowed;
158
+ }
159
+
160
+ /* Helper icon next to label */
161
+ .radio-helper-icon {
162
+ width: 20px;
163
+ height: 20px;
164
+ border-radius: 50%;
165
+ border: 1px solid #C3C5D1;
166
+ background-color: #FFFFFF;
167
+ color: #717793;
168
+ font-size: 12px;
169
+ display: inline-flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ padding: 0;
173
+ margin-left: 4px;
174
+ cursor: pointer;
175
+ }
176
+
177
+ .radio-helper-icon:disabled {
178
+ border-color: #DEE0E6;
179
+ color: #DEE0E6;
180
+ cursor: not-allowed;
181
+ }
182
+
183
+ /* ============================================
184
+ RADIO BUTTON RIPPLE STYLES (DARK)
185
+ ============================================ */
186
+
187
+ /* Primary (Blue) Ripple */
188
+ ::ng-deep .mat-mdc-radio-button.mat-primary .mat-ripple-element {
189
+ background-color: rgba($color-blue-500, 1) !important;
190
+ /* full opacity */
191
+ }
192
+
193
+ /* Green Ripple */
194
+ ::ng-deep .mat-mdc-radio-button.mat-green .mat-ripple-element {
195
+ background-color: rgba($color-green-500, 1) !important;
196
+ }
197
+
198
+ /* Green Ripple Hover / Checked */
199
+ ::ng-deep .mat-mdc-radio-button.mat-green:hover .mat-ripple-element,
200
+ ::ng-deep .mat-mdc-radio-button.mat-green.mat-mdc-radio-checked .mat-ripple-element {
201
+ background-color: rgba($color-green-500, 0.7) !important;
202
+ }
203
+
204
+ /* Error Ripple */
205
+ ::ng-deep .mat-mdc-radio-button.mat-error .mat-ripple-element {
206
+ background-color: rgba($color-error-500, 1) !important;
207
+ }
208
+
209
+ /* Error Ripple Hover / Checked */
210
+ ::ng-deep .mat-mdc-radio-button.mat-error:hover .mat-ripple-element,
211
+ ::ng-deep .mat-mdc-radio-button.mat-error.mat-mdc-radio-checked .mat-ripple-element {
212
+ background-color: rgba($color-error-500, 0.7) !important;
213
+ }
214
+
215
+ /* ============================================
216
+ RADIO BUTTON RIPPLE STYLES (DARK)
217
+ ============================================ */
218
+
219
+ /* Primary (Blue) */
220
+ ::ng-deep .mat-mdc-radio-button.mat-primary .mat-ripple-element::after {
221
+ background-color: rgba($color-blue-500, 1) !important;
222
+ /* full opacity */
223
+ }
224
+
225
+ /* Green */
226
+ ::ng-deep .mat-mdc-radio-button.mat-green .mat-ripple-element::after {
227
+ background-color: rgba($color-green-500, 1) !important;
228
+ }
229
+
230
+ /* Green Hover */
231
+ ::ng-deep .mat-mdc-radio-button.mat-green:hover .mat-ripple-element::after {
232
+ background-color: rgba($color-green-500, 0.7) !important;
233
+ }
234
+
235
+ /* Green Checked */
236
+ ::ng-deep .mat-mdc-radio-button.mat-green.mat-mdc-radio-checked .mat-ripple-element::after {
237
+ background-color: rgba($color-green-500, 0.7) !important;
238
+ }
239
+
240
+ /* Error */
241
+ ::ng-deep .mat-mdc-radio-button.mat-error .mat-ripple-element::after {
242
+ background-color: rgba($color-error-500, 1) !important;
243
+ }
244
+
245
+ /* Error Hover */
246
+ ::ng-deep .mat-mdc-radio-button.mat-error:hover .mat-ripple-element::after {
247
+ background-color: rgba($color-error-500, 0.7) !important;
248
+ }
249
+
250
+ /* Error Checked */
251
+ ::ng-deep .mat-mdc-radio-button.mat-error.mat-mdc-radio-checked .mat-ripple-element::after {
252
+ background-color: rgba($color-error-500, 0.7) !important;
253
+ }
@@ -0,0 +1,6 @@
1
+ <div class="container">
2
+ <div class="column left"><ng-content select="[left],[slot=left],[data-slot=left]"></ng-content></div>
3
+ <div class="column center"><ng-content></ng-content><ng-content
4
+ select="[center],[slot=center],[data-slot=center]"></ng-content></div>
5
+ <div class="column right"><ng-content select="[right],[slot=right],[data-slot=right]"></ng-content></div>
6
+ </div>
@@ -0,0 +1,68 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .container {
6
+ display: grid;
7
+ grid-template-columns: var(--template-columns, var(--left-width, auto) 1fr var(--right-width, auto));
8
+ gap: var(--gap, 12px);
9
+ padding: var(--padding, 0);
10
+ }
11
+
12
+ :host(.stack) .container {
13
+ grid-template-columns: 1fr;
14
+ }
15
+
16
+ :host(.stack) .container .left,
17
+ :host(.stack) .container .right {
18
+ order: -1;
19
+ }
20
+
21
+ .column {
22
+ min-width: 0;
23
+ }
24
+
25
+ .center {
26
+ background: var(--center-bg, transparent);
27
+ }
28
+
29
+ // Show hidden elements in left and right columns when hovering over the parent container
30
+ .container:hover {
31
+ ::ng-deep .toolbar-icons {
32
+ opacity: 1;
33
+ visibility: visible;
34
+ pointer-events: auto;
35
+ transform: translateY(0);
36
+ transition: opacity 150ms ease, transform 150ms ease, visibility 0s;
37
+ }
38
+
39
+ ::ng-deep .toolbar-container {
40
+ background-color: #e5e9fc;
41
+ }
42
+
43
+ ::ng-deep .toolbar-right-container {
44
+ background-color: #e5e9fc;
45
+ }
46
+ }
47
+
48
+ // Show right toolbar icons when hovering over the center column
49
+ .center:hover {
50
+ ::ng-deep .toolbar-right-icons {
51
+ visibility: visible !important;
52
+ opacity: 1 !important;
53
+ display: flex !important;
54
+ }
55
+
56
+ ::ng-deep .toolbar-right-container {
57
+ background-color: #e5e9fc;
58
+ }
59
+ }
60
+
61
+ // Also show when hovering over the container (for consistency)
62
+ .container:hover {
63
+ ::ng-deep .toolbar-right-icons {
64
+ visibility: visible !important;
65
+ opacity: 1 !important;
66
+ display: flex !important;
67
+ }
68
+ }
@@ -0,0 +1 @@
1
+ <ng-content></ng-content>
@@ -0,0 +1,47 @@
1
+ /* Responsive layout using CSS Grid and CSS variables for per-breakpoint counts.
2
+ Breakpoints (px):
3
+ - mobile: 0 - 500
4
+ - mobile-sm: 500 - 767
5
+ - tablet: 767 - 1024
6
+ - desktop: 1024+
7
+ Note: We use fractional max-widths to avoid overlap.
8
+ */
9
+ :host {
10
+ display: grid;
11
+ gap: var(--gap, 8px);
12
+ width: 100%;
13
+ /* Default to desktop counts */
14
+ --current-count: var(--count-desktop, 4);
15
+ }
16
+
17
+ /* Row mode: define columns per breakpoint */
18
+ :host(.row) {
19
+ grid-auto-flow: row;
20
+ grid-template-columns: repeat(var(--current-count), minmax(0, 1fr));
21
+ margin-bottom: var(--mb, 16px);
22
+ }
23
+
24
+ /* Column mode: also uses count variables to create responsive columns */
25
+ :host(.col) {
26
+ grid-auto-flow: row;
27
+ grid-template-columns: repeat(var(--current-count), minmax(0, 1fr));
28
+ }
29
+
30
+ /* Breakpoint overrides */
31
+ @media (max-width: 767.98px) {
32
+ :host {
33
+ --current-count: var(--count-mobile, 1);
34
+ }
35
+ }
36
+
37
+ @media (min-width: 768px) and (max-width: 1023.98px) {
38
+ :host {
39
+ --current-count: var(--count-tablet, 2);
40
+ }
41
+ }
42
+
43
+ @media (min-width: 1024px) {
44
+ :host {
45
+ --current-count: var(--count-desktop, 3);
46
+ }
47
+ }
@@ -0,0 +1,97 @@
1
+ <div class="resume-entries-container">
2
+ <div *ngFor="let entry of entries; let i = index" class="resume-entry" [class.with-timeline]="showTimeline"
3
+ [class.is-hidden]="isSectionHidden">
4
+ <div *ngIf="showLoader && loaderForAllEntries" class="entry-loader-container"><al-loader [status]="loaderStatus"
5
+ [size]="loaderSize" [showText]="true" [dataTestId]="'entry-' + i + '-loader'"></al-loader></div><ng-container
6
+ *ngIf="!showLoader || !loaderForAllEntries">
7
+ <div *ngIf="showTimeline" class="timeline-indicator">
8
+ <div class="timeline-dot"></div>
9
+ <div class="timeline-line"></div>
10
+ </div>
11
+ <div class="resume-entry-content">
12
+ <div *ngIf="showHeader" class="entry-header">
13
+ <div class="header-left">
14
+ <!-- Company / Institution: always on top, shows placeholder when no value -->
15
+ <div *ngIf="showCompany" class="mobile-order-2" [matTooltip]="companyTooltip"
16
+ [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!companyTooltip">
17
+ <lib-field-placeholder
18
+ [value]="entry.companyName?.trim() ? entry.companyName : (entry.institution?.trim() ? entry.institution : undefined)"
19
+ [placeholder]="'Company Name / Institution'" valueClass="font-text-lg-bold"
20
+ [testId]="'entry-' + i + '-company'" [compact]="true">
21
+ </lib-field-placeholder>
22
+ </div>
23
+
24
+ <!-- Job title / Course name: always below company line -->
25
+ <div *ngIf="showJobTitle" class="mobile-order-3" [matTooltip]="jobTitleTooltip"
26
+ [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!jobTitleTooltip">
27
+ <lib-field-placeholder [value]="entry.jobTitle || entry.courseName"
28
+ [placeholder]="'Job title / Course name'" valueClass="font-title-text"
29
+ [testId]="'entry-' + i + '-title'" [compact]="true">
30
+ </lib-field-placeholder>
31
+ </div>
32
+ </div>
33
+ <div class="header-right">
34
+ <div class="date-range mobile-order-1" *ngIf="showDates" [matTooltip]="dateTooltip"
35
+ [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!dateTooltip">
36
+ <!-- Start Date: always render; show placeholder when no value -->
37
+ <lib-field-placeholder [value]="entry.startDate?.trim() ? entry.startDate : undefined"
38
+ [placeholder]="'Start Date'" valueClass="font-text-lg-bold" [testId]="'entry-' + i + '-start-date'"
39
+ [compact]="true">
40
+ </lib-field-placeholder>
41
+
42
+ <span class="date-separator">-</span>
43
+
44
+ <!-- End Date / Present: always render; show placeholder when no end date -->
45
+ <lib-field-placeholder [value]="entry.isPresent
46
+ ? 'Present'
47
+ : (entry.endDate?.trim() ? entry.endDate : undefined)" [placeholder]="'End Date'"
48
+ valueClass="font-text-lg-bold" [testId]="'entry-' + i + '-end-date'" [compact]="true">
49
+ </lib-field-placeholder>
50
+ </div>
51
+ <div class="location-row mobile-order-4" *ngIf="showLocation" [matTooltip]="locationTooltip"
52
+ [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!locationTooltip"><lib-field-placeholder
53
+ [value]="entry.city" [placeholder]="'City'" valueClass="font-location-text"
54
+ [testId]="'entry-' + i + '-city'" [compact]="true"></lib-field-placeholder><lib-field-placeholder
55
+ [value]="entry.region" [placeholder]="'Region'" valueClass="font-location-text"
56
+ [testId]="'entry-' + i + '-region'" [compact]="true"></lib-field-placeholder><lib-field-placeholder
57
+ [value]="entry.country" [placeholder]="'Country'" valueClass="font-location-text"
58
+ [testId]="'entry-' + i + '-country'" [compact]="true"></lib-field-placeholder></div>
59
+ </div>
60
+ </div>
61
+ <div class="descriptions-container">
62
+ <div *ngIf="showLoader && !loaderForAllEntries" class="loader-container">
63
+ <al-loader [status]="loaderStatus" [size]="loaderSize" [showText]="true"
64
+ [dataTestId]="'entry-' + i + '-loader'">
65
+ </al-loader>
66
+ </div>
67
+
68
+ <div *ngIf="!showLoader || loaderForAllEntries">
69
+ <div *ngFor="let desc of entry.descriptions; let descIndex = index" class="description-item"
70
+ [matTooltip]="descriptionTooltip" [matTooltipPosition]="tooltipPosition"
71
+ [matTooltipDisabled]="!descriptionTooltip">
72
+ <label *ngIf="showDescriptionLabel" class="description-label">Description</label>
73
+ <lib-field-placeholder [value]="desc" [placeholder]="'Missing item'" [padded]="true"
74
+ valueClass="font-text-base" [testId]="'entry-' + i + '-desc-' + descIndex">
75
+ </lib-field-placeholder>
76
+ </div>
77
+ </div>
78
+ <div class="reapply-button-container" *ngIf="showReapplyButton"><al-button *ngIf="!isReapplied(i)"
79
+ [label]="'Re-apply'" [buttonType]="'icon-label'" [leftIcon]="'refresh'" [category]="'gradient'"
80
+ [size]="'xs'" [dataTestId]="'entry-' + i + '-reapply'"
81
+ (onClick)="onReapplyClick(entry, i)"></al-button><al-button *ngIf="isReapplied(i)" [label]="'Undo'"
82
+ [buttonType]="'icon-label'" [leftIcon]="'undo'" [category]="'grey'" [size]="'xs'"
83
+ [dataTestId]="'entry-' + i + '-undo'" (onClick)="onUndoClick(entry, i)"></al-button></div>
84
+ <hr *ngIf="i < entries.length - 1" class="entry-separator" [class.with-timeline-separator]="showTimeline" />
85
+ </div>
86
+ </div>
87
+ </ng-container>
88
+ </div>
89
+ <div class="resume-entry-projection"><ng-content></ng-content></div>
90
+ <div *ngIf="skills && skills.length > 0" class="skill-section-common">
91
+ <div class="skill-list-items">
92
+ <ul>
93
+ <li *ngFor="let skill of skills" class="list-items">{{ skill }}</li>
94
+ </ul>
95
+ </div>
96
+ </div>
97
+ </div>