@allsorter/ui-components 0.0.370 → 0.0.374

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 (39) hide show
  1. package/fesm2022/allsorter-ui-components.mjs +475 -288
  2. package/fesm2022/allsorter-ui-components.mjs.map +1 -1
  3. package/lib/ai-apply-bar/ai-apply-bar.component.d.ts +7 -1
  4. package/lib/ai-wrapper/ai-wrapper.component.d.ts +92 -0
  5. package/lib/ai-wrapper/ai-wrapper.module.d.ts +12 -0
  6. package/lib/custom-editor/custom-editor.component.d.ts +3 -14
  7. package/lib/editable-form-wrapper/editable-form-wrapper.component.d.ts +33 -2
  8. package/lib/experience-section/experience-section.component.d.ts +2 -2
  9. package/lib/newresumeheader/newresumeheader.component.d.ts +3 -0
  10. package/lib/styles/typography-classes.scss +1 -1
  11. package/lib/{app-toolbar/app-toolbar.component.d.ts → toolbar-left/toolbar-left.component.d.ts} +1 -1
  12. package/lib/{app-toolbar/app-toolbar.module.d.ts → toolbar-left/toolbar-left.module.d.ts} +1 -1
  13. package/lib/{app-toolbar-right/app-toolbar-right.component.d.ts → toolbar-right/toolbar-right.component.d.ts} +1 -1
  14. package/lib/{app-toolbar-right/app-toolbar-right.module.d.ts → toolbar-right/toolbar-right.module.d.ts} +1 -1
  15. package/package.json +1 -1
  16. package/public-api.d.ts +6 -4
  17. package/src/lib/ai-apply-bar/ai-apply-bar.component.html +39 -37
  18. package/src/lib/ai-apply-bar/ai-apply-bar.component.scss +56 -22
  19. package/src/lib/ai-wrapper/ai-wrapper.component.html +38 -0
  20. package/src/lib/ai-wrapper/ai-wrapper.component.scss +371 -0
  21. package/src/lib/candidate-section/candidate-section.component.scss +25 -0
  22. package/src/lib/custom-editor/custom-editor.component.scss +2 -1
  23. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.html +19 -7
  24. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.scss +12 -1
  25. package/src/lib/experience-section/experience-section.component.html +4 -4
  26. package/src/lib/field-placeholder/field-placeholder.component.html +3 -3
  27. package/src/lib/field-placeholder/field-placeholder.component.scss +20 -61
  28. package/src/lib/input/input.component.html +1 -1
  29. package/src/lib/input/input.component.scss +4 -4
  30. package/src/lib/newresumeheader/newresumeheader.component.html +70 -127
  31. package/src/lib/responsive-layout/responsive-layout.component.scss +23 -0
  32. package/src/lib/resume-entries/resume-entries.component.scss +141 -2
  33. package/src/lib/styles/typography-classes.scss +1 -1
  34. package/src/lib/test-styling/test-styling.component.html +86 -0
  35. package/src/lib/test-styling/test-styling.component.scss +35 -0
  36. package/src/lib/{app-toolbar-right/app-toolbar-right.component.html → toolbar-right/toolbar-right.component.html} +3 -3
  37. /package/src/lib/{app-toolbar/app-toolbar.component.html → toolbar-left/toolbar-left.component.html} +0 -0
  38. /package/src/lib/{app-toolbar/app-toolbar.component.scss → toolbar-left/toolbar-left.component.scss} +0 -0
  39. /package/src/lib/{app-toolbar-right/app-toolbar-right.component.scss → toolbar-right/toolbar-right.component.scss} +0 -0
@@ -1,178 +1,121 @@
1
- <al-general-container [borderRadius]="'0'" [borderPosition]="'none'" [boxShadow]="false" [padding]="'0'"
2
- [width]="'100%'">
3
- <cdk-accordion class="example-accordion">
4
- <cdk-accordion-item #accordionItem="cdkAccordionItem" [expanded]="true" class="example-accordion-item">
5
- <div class="example-accordion-item-header" [ngClass]="{'header-hidden': isSectionHidden}">
6
- <!-- Normal header layout (shows when section is NOT hidden) -->
7
- <ng-container *ngIf="!isSectionHidden; else hiddenHeaderLayout">
8
- <al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'8px 12px'">
9
- <div left>
10
- <button (click)="toggleAccordion(accordionItem)" tabindex="0" class="toggle-button align-center"
1
+ <al-general-container #generalContainer [borderRadius]="'0'" [borderPosition]="'none'" [boxShadow]="false"
2
+ [padding]="'0'" [width]="'100%'"><cdk-accordion class="example-accordion"><cdk-accordion-item
3
+ #accordionItem="cdkAccordionItem" [expanded]="true" class="example-accordion-item">
4
+ <div class="example-accordion-item-header" #accordionHeader [ngClass]="{'header-hidden': isSectionHidden}">
5
+ <!-- Normal header layout (shows when section is NOT hidden) --><ng-container
6
+ *ngIf="!isSectionHidden; else hiddenHeaderLayout"><al-responsive-columns [stackAt]="0" [gap]="'12px'"
7
+ [padding]="'8px 12px'">
8
+ <div left><button (click)="toggleAccordion(accordionItem)" tabindex="0" class="toggle-button align-center"
11
9
  [attr.aria-expanded]="accordionItem.expanded"
12
- [matTooltip]="accordionItem.expanded ? 'Collapse' : 'Expand'" matTooltipPosition="above">
13
- <span class="material-icons-outlined" *ngIf="!accordionItem.expanded">
14
- expand_less
15
- </span>
16
- <span class="material-icons-outlined" *ngIf="accordionItem.expanded">
17
- expand_more
18
- </span>
19
- </button>
20
- <ng-content select="[header-left]"></ng-content>
21
- </div>
22
- <div center>
23
- <al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'0'" [leftWidth]="'auto'"
10
+ [matTooltip]="accordionItem.expanded ? 'Collapse' : 'Expand'" matTooltipPosition="above"><span
11
+ class="material-icons-outlined" *ngIf="!accordionItem.expanded">expand_less </span><span
12
+ class="material-icons-outlined" *ngIf="accordionItem.expanded">expand_more
13
+ </span></button><ng-content select="[header-left]"></ng-content></div>
14
+ <div center><al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'0'" [leftWidth]="'auto'"
24
15
  [rightWidth]="'32px'" [ngClass]="{'input-focused': isInputFocused}">
25
16
  <div left>
26
17
  <div class="edit-input-group" [ngClass]="{'input-focused': isInputFocused}">
27
- <div class="content_width">
28
- <span *ngIf="!isTitleEditing" class="title-text" (click)="onTitleClick()">
18
+ <div class="content_width"><span *ngIf="!isTitleEditing" class="title-text"
19
+ (click)="onTitleClick()">
29
20
  {{ title || 'Click to edit' }}
30
- </span>
31
- <input *ngIf="isTitleEditing" #titleInput type="text" [(ngModel)]="editedTitle"
21
+ </span><input *ngIf="isTitleEditing" #titleInput type="text" [(ngModel)]="editedTitle"
32
22
  (focus)="onTitleFocus()" (blur)="onTitleBlur()" (keydown)="onTitleKeyPress($event)"
33
- class="title-input onfocus-input-text" />
34
- <ng-content select="[header-center-left]"></ng-content>
35
- </div>
36
- <mat-icon class="edit-icon" svgIcon="edit_icon" matTooltip="Edit title" matTooltipPosition="above"
37
- (click)="onTitleClick()">
38
- </mat-icon>
23
+ class="title-input onfocus-input-text" /><ng-content select="[header-center-left]"></ng-content>
24
+ </div><mat-icon class="edit-icon" svgIcon="edit_icon" matTooltip="Edit title"
25
+ matTooltipPosition="above" (click)="onTitleClick()"></mat-icon>
39
26
  </div>
40
27
  </div>
41
- <div center>
42
- <ng-content select="[header-center-center]"></ng-content>
43
- <!-- Header buttons for large screens (including Deep Extraction via buttonConfig) -->
44
- <ng-container *ngIf="isLargeScreen">
45
- <ng-container *ngTemplateOutlet="headerButtonsTemplate; context: { buttons: buttonConfig }">
46
- </ng-container>
47
- </ng-container>
28
+ <div center><ng-content select="[header-center-center]"></ng-content>
29
+ <!-- Header buttons for large screens (including Deep Extraction via buttonConfig) --><ng-container
30
+ *ngIf="isLargeScreen"><ng-container
31
+ *ngTemplateOutlet="headerButtonsTemplate; context: { buttons: buttonConfig }"></ng-container></ng-container>
48
32
  <!-- Menu trigger and slide-out panel for small screens only -->
49
33
  <div class="hover-menu-container" *ngIf="!isLargeScreen">
50
- <div class="menu-trigger" (click)="toggleMenu()">
51
- <al-button buttonType="icon-label" iconOnly size="header" category="grey" leftIcon="more_vert"
52
- aria-label="More options" [dataTestId]="'resume-header-more-menu'">
53
- </al-button>
54
- </div>
34
+ <div class="menu-trigger" (click)="toggleMenu()"><al-button buttonType="icon-label" iconOnly
35
+ size="header" category="grey" leftIcon="more_vert" aria-label="More options"
36
+ [dataTestId]="'resume-header-more-menu'"></al-button></div>
55
37
  <div class="slide-out-panel" [class.visible]="isMenuVisible">
56
- <div class="fit-panel">
57
- <ng-container *ngTemplateOutlet="headerButtonsTemplate; context: { buttons: buttonConfig }">
58
- </ng-container>
38
+ <div class="fit-panel"><ng-container
39
+ *ngTemplateOutlet="headerButtonsTemplate; context: { buttons: buttonConfig }"></ng-container>
59
40
  </div>
60
41
  </div>
61
42
  </div>
62
43
  </div>
63
- <div right>
64
- <ng-content select="[header-center-right]"></ng-content>
65
- <!-- Eye icon - uses actual isHidden value from config, always visible -->
66
- <ng-container *ngIf="configEyeToggle && configEyeToggle.length > 0">
67
- <ng-container *ngFor="let eyeConfig of configEyeToggle">
68
- <ng-container *ngIf="eyeConfig">
69
- <ng-container
70
- *ngTemplateOutlet="eyeIconTemplate; context: { isHidden: eyeConfig.isHidden === true, accordionItem: accordionItem, configEyeToggle: eyeConfig }">
71
- </ng-container>
72
- </ng-container>
73
- </ng-container>
74
- </ng-container>
44
+ <div right><ng-content select="[header-center-right]"></ng-content>
45
+ <!-- Eye icon - uses actual isHidden value from config, always visible --><ng-container
46
+ *ngIf="configEyeToggle && configEyeToggle.length > 0"><ng-container
47
+ *ngFor="let eyeConfig of configEyeToggle"><ng-container *ngIf="eyeConfig"><ng-container
48
+ *ngTemplateOutlet="eyeIconTemplate; context: { isHidden: eyeConfig.isHidden === true, accordionItem: accordionItem, configEyeToggle: eyeConfig }"></ng-container></ng-container></ng-container></ng-container>
75
49
  </div>
76
- </al-responsive-columns>
77
- </div>
78
- <div right>
79
- <al-checkbox *ngIf="showHeaderCheckbox" [checked]="headerCheckboxChecked" [showLabels]="false"
80
- (change)="onHeaderCheckboxChange($event)">
81
- </al-checkbox>
82
- <ng-content select="[header-right]"></ng-content>
83
- </div>
84
- </al-responsive-columns>
85
- </ng-container>
86
-
87
- <!-- Hidden header layout (shows when section IS hidden) -->
88
- <ng-template #hiddenHeaderLayout>
89
- <al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'8px 12px'">
50
+ </al-responsive-columns></div>
51
+ <div right><al-checkbox *ngIf="showHeaderCheckbox" [checked]="headerCheckboxChecked" [showLabels]="false"
52
+ (change)="onHeaderCheckboxChange($event)"></al-checkbox><ng-content
53
+ select="[header-right]"></ng-content></div>
54
+ </al-responsive-columns></ng-container>
55
+ <!-- Hidden header layout (shows when section IS hidden) --><ng-template
56
+ #hiddenHeaderLayout><al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'8px 12px'">
90
57
  <div left>
91
- <!-- Toggle button hidden when section is hidden -->
92
- <ng-content select="[header-left]"></ng-content>
58
+ <!-- Toggle button hidden when section is hidden --><ng-content select="[header-left]"></ng-content>
93
59
  </div>
94
- <div center>
95
- <al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'0'" [leftWidth]="'auto'"
60
+ <div center><al-responsive-columns [stackAt]="0" [gap]="'12px'" [padding]="'0'" [leftWidth]="'auto'"
96
61
  [rightWidth]="'32px'">
97
62
  <div left>
98
63
  <div class="edit-input-group hide-header-title">
99
- <div class="content_width">
100
- <span class="title-text header-text-turncate">{{ title }}</span>
101
- </div>
64
+ <div class="content_width"><span class="title-text header-text-turncate">
65
+ {{ title }}
66
+ </span></div>
102
67
  </div>
103
68
  </div>
104
69
  <div center>
105
70
  <div class="hidden-write">Section hidden</div>
106
71
  </div>
107
- <div right>
108
- <ng-content select="[header-center-right]"></ng-content>
109
- <!-- Eye icon - uses actual isHidden value from config, always visible -->
110
- <ng-container *ngIf="configEyeToggle && configEyeToggle.length > 0">
111
- <ng-container *ngFor="let eyeConfig of configEyeToggle">
112
- <ng-container *ngIf="eyeConfig">
113
- <ng-container
114
- *ngTemplateOutlet="eyeIconTemplate; context: { isHidden: eyeConfig.isHidden === true, accordionItem: accordionItem, configEyeToggle: eyeConfig }">
115
- </ng-container>
116
- </ng-container>
117
- </ng-container>
118
- </ng-container>
72
+ <div right><ng-content select="[header-center-right]"></ng-content>
73
+ <!-- Eye icon - uses actual isHidden value from config, always visible --><ng-container
74
+ *ngIf="configEyeToggle && configEyeToggle.length > 0"><ng-container
75
+ *ngFor="let eyeConfig of configEyeToggle"><ng-container *ngIf="eyeConfig"><ng-container
76
+ *ngTemplateOutlet="eyeIconTemplate; context: { isHidden: eyeConfig.isHidden === true, accordionItem: accordionItem, configEyeToggle: eyeConfig }"></ng-container></ng-container></ng-container></ng-container>
119
77
  </div>
120
- </al-responsive-columns>
121
- </div>
78
+ </al-responsive-columns></div>
122
79
  <div right>
123
- <!-- Checkbox hidden when section is hidden -->
124
- <ng-content select="[header-right]"></ng-content>
80
+ <!-- Checkbox hidden when section is hidden --><ng-content select="[header-right]"></ng-content>
125
81
  </div>
126
- </al-responsive-columns>
127
- </ng-template>
82
+ </al-responsive-columns></ng-template>
128
83
  </div>
129
84
  <!-- Accordion body (only shows when expanded AND not hidden) -->
130
85
  <div class="example-accordion-item-body" *ngIf="accordionItem.expanded && !isSectionHidden">
131
86
  <!-- Pop-out Panel -->
132
87
  <div *ngIf="shouldShowPopOut" class="pop-out-panel">
133
- <div class="pop-out-content">
134
- <al-button [labelText]="popOutButtonLabel" [rightIcon]="popOutButtonIcon" [buttonType]="'icon-label'"
135
- [category]="'gradient'" [size]="'xs'" [iconOnly]="false" (onClick)="popOutButtonClick.emit()"
136
- [dataTestId]="'pop-out-run-deep-extraction'" [title]="popOutButtonLabel">
137
- </al-button>
138
- <p class="pop-out-message" [innerHTML]="sanitizedMessage"></p>
139
- <button type="button" class="pop-out-close" (click)="dismissPopOut()" aria-label="Close pop-out panel">
140
- <span class="material-icons-outlined">close</span>
141
- </button>
88
+ <div class="pop-out-content"><al-button [labelText]="popOutButtonLabel" [rightIcon]="popOutButtonIcon"
89
+ [buttonType]="'icon-label'" [category]="'gradient'" [size]="'xs'" [iconOnly]="false"
90
+ (onClick)="popOutButtonClick.emit()" [dataTestId]="'pop-out-run-deep-extraction'"
91
+ [title]="popOutButtonLabel"></al-button>
92
+ <p class="pop-out-message" [innerHTML]="sanitizedMessage"></p><button type="button" class="pop-out-close"
93
+ (click)="dismissPopOut()" aria-label="Close pop-out panel"><span
94
+ class="material-icons-outlined">close</span></button>
142
95
  </div>
143
96
  </div>
144
97
  <!-- Single body content slot - child component will handle 3-column layout internally -->
145
98
  <ng-content></ng-content>
146
99
  </div>
147
- </cdk-accordion-item>
148
- </cdk-accordion>
149
- </al-general-container>
150
-
151
- <ng-template #headerButtonsTemplate let-buttons="buttons" let-handleClick="handleClick">
152
- <ng-container *ngFor="let btn of buttonConfig">
153
- <al-button *ngIf="!btn.displayCondition || btn.displayCondition()" [color]="btn.color" [outline]="btn.outline"
100
+ </cdk-accordion-item></cdk-accordion></al-general-container><ng-template #headerButtonsTemplate
101
+ let-buttons="buttons" let-handleClick="handleClick"><ng-container *ngFor="let btn of buttonConfig"><al-button
102
+ *ngIf="!btn.displayCondition || btn.displayCondition()" [color]="btn.color" [outline]="btn.outline"
154
103
  [size]="btn.size" [iconOutlined]="btn.iconOutlined" [labelText]="btn.labelText"
155
104
  [leftIcon]="getButtonIcons(btn).leftIcon" [rightIcon]="getButtonIcons(btn).rightIcon"
156
105
  [dataTestId]="btn.dataTestId" [hasDropDown]="btn.hasDropDown" [dropdownItems]="btn.dropdownItems"
157
106
  [buttonType]="'icon-label'" [iconOnly]="!btn.labelText" [tooltip]="getButtonTooltip(btn)"
158
- [tooltipPosition]="'above'" (onClick)="onButtonClick(btn, $event)" (optionSelect)="onDropdownSelect(btn, $event)">
159
- </al-button>
160
- </ng-container>
161
- </ng-template>
162
-
163
- <ng-template #eyeIconTemplate let-isHidden="isHidden" let-accordionItem="accordionItem"
164
- let-configEyeToggle="configEyeToggle">
107
+ [tooltipPosition]="'above'" (onClick)="onButtonClick(btn, $event)"
108
+ (optionSelect)="onDropdownSelect(btn, $event)"></al-button></ng-container></ng-template><ng-template
109
+ #eyeIconTemplate let-isHidden="isHidden" let-accordionItem="accordionItem" let-configEyeToggle="configEyeToggle">
165
110
  <div class="mat-checkbox-margin align-center"
166
111
  [attr.data-test-id]="isHidden ? 'section-show-eye-div' : 'section-hide-eye-div'"
167
- style="display: flex; align-items: center; justify-content: center;">
168
- <mat-icon class="delete-multiple mat-fab.mat-accent eye-icon" [svgIcon]="isHidden ? 'visibility' : 'visibility_off'"
112
+ style="display: flex; align-items: center; justify-content: center;"><mat-icon
113
+ class="delete-multiple mat-fab.mat-accent eye-icon" [svgIcon]="isHidden ? 'visibility' : 'visibility_off'"
169
114
  [matTooltip]="configEyeToggle?.tooltips?.[isHidden ? 'collapse' : 'expand'] || (isHidden ? 'Show Section' : 'Hide Section')"
170
115
  [matTooltipPosition]="configEyeToggle?.tooltips?.position || 'above'"
171
116
  [attr.aria-label]="configEyeToggle?.ariaLabels?.[isHidden ? 'collapsed' : 'expanded'] || (isHidden ? 'Show section' : 'Hide section')"
172
117
  (click)="onEyeIconClick(isHidden, accordionItem, configEyeToggle)"
173
118
  [attr.data-test-id]="isHidden ? 'section-show-eye-icon' : 'section-hide-eye-icon'"
174
119
  style="cursor: pointer; display: inline-block; width: 24px; height: 24px; font-size: 24px; color: #717793;"
175
- [style.opacity]="1" [style.visibility]="'visible'">
176
- </mat-icon>
177
- </div>
178
- </ng-template>
120
+ [style.opacity]="1" [style.visibility]="'visible'"></mat-icon></div>
121
+ </ng-template>
@@ -12,6 +12,9 @@
12
12
  width: 100%;
13
13
  /* Default to desktop counts */
14
14
  --current-count: var(--count-desktop, 4);
15
+ /* Enable container queries - will respond to parent container size */
16
+ container-type: inline-size;
17
+ container-name: flex-grid;
15
18
  }
16
19
 
17
20
  /* Row mode: define columns per breakpoint */
@@ -45,3 +48,23 @@
45
48
  --current-count: var(--count-desktop, 3);
46
49
  }
47
50
  }
51
+
52
+ /* Container query: Switch row/column layout to single column when container width is small (<= 600px) */
53
+ @container flex-grid (max-width: 600px) {
54
+
55
+ :host(.row),
56
+ :host(.col) {
57
+ --current-count: 1 !important;
58
+ grid-template-columns: 1fr !important;
59
+ }
60
+ }
61
+
62
+ /* Also check parent container (form-wrapper) for container queries */
63
+ @container form-wrapper (max-width: 600px) {
64
+
65
+ :host(.row),
66
+ :host(.col) {
67
+ --current-count: 1 !important;
68
+ grid-template-columns: 1fr !important;
69
+ }
70
+ }
@@ -5,9 +5,11 @@
5
5
  .resume-entries-container {
6
6
  display: flex;
7
7
  flex-direction: column;
8
-
9
8
  width: 100%;
10
9
  background-color: white;
10
+ /* Enable container queries for responsive layout based on container size */
11
+ container-type: inline-size;
12
+ container-name: resume-entries;
11
13
  }
12
14
 
13
15
  .resume-entry {
@@ -101,7 +103,6 @@
101
103
  justify-content: space-between;
102
104
  align-items: flex-start;
103
105
  gap: 24px;
104
-
105
106
  }
106
107
 
107
108
  .header-left {
@@ -119,6 +120,144 @@
119
120
  max-width: 30%;
120
121
  }
121
122
 
123
+ /* Container query: Apply text ellipsis when container width is very small (<= 400px) */
124
+ @container resume-entries (max-width: 400px) {
125
+
126
+ /* Company Name and Job Title */
127
+ .mobile-order-2,
128
+ .mobile-order-3 {
129
+ overflow: hidden;
130
+ text-overflow: ellipsis;
131
+ white-space: nowrap;
132
+ min-width: 0;
133
+
134
+ ::ng-deep lib-field-placeholder {
135
+ overflow: hidden;
136
+ text-overflow: ellipsis;
137
+ white-space: nowrap;
138
+ display: block;
139
+ width: 100%;
140
+
141
+ .value-text {
142
+ overflow: hidden;
143
+ text-overflow: ellipsis;
144
+ white-space: nowrap;
145
+ display: block;
146
+ max-width: 100%;
147
+ }
148
+ }
149
+ }
150
+
151
+ /* Date Range */
152
+ .mobile-order-1 {
153
+ overflow: hidden;
154
+ text-overflow: ellipsis;
155
+ white-space: nowrap;
156
+ min-width: 0;
157
+
158
+ &.date-range {
159
+ ::ng-deep lib-field-placeholder {
160
+ overflow: hidden;
161
+ text-overflow: ellipsis;
162
+ white-space: nowrap;
163
+ display: inline-block;
164
+ max-width: 100%;
165
+
166
+ .value-text {
167
+ overflow: hidden;
168
+ text-overflow: ellipsis;
169
+ white-space: nowrap;
170
+ display: inline-block;
171
+ max-width: 100%;
172
+ }
173
+ }
174
+ }
175
+ }
176
+
177
+ /* Location Row */
178
+ .mobile-order-4 {
179
+ overflow: hidden;
180
+ text-overflow: ellipsis;
181
+ white-space: nowrap;
182
+ min-width: 0;
183
+
184
+ &.location-row {
185
+ ::ng-deep lib-field-placeholder {
186
+ overflow: hidden;
187
+ text-overflow: ellipsis;
188
+ white-space: nowrap;
189
+ display: inline-block;
190
+ max-width: 100%;
191
+
192
+ .value-text {
193
+ overflow: hidden;
194
+ text-overflow: ellipsis;
195
+ white-space: nowrap;
196
+ display: inline-block;
197
+ max-width: 100%;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+
204
+ /* Container query: Switch to column when container width is small (<= 600px) */
205
+ @container resume-entries (max-width: 500px) {
206
+ .entry-header {
207
+ flex-direction: column;
208
+ gap: 12px;
209
+ display: flex;
210
+ }
211
+
212
+ // Use display: contents to make children of header-left and header-right
213
+ // participate directly in entry-header flex container for reordering
214
+ .header-left,
215
+ .header-right {
216
+ display: contents;
217
+ }
218
+
219
+ // Reorder elements for small container: Date (1) -> Company (2) -> Job Title (3) -> Location (4)
220
+ .entry-header {
221
+
222
+ // Date comes first
223
+ .mobile-order-1 {
224
+ order: 1;
225
+ }
226
+
227
+ // Company comes second
228
+ .mobile-order-2 {
229
+ order: 2;
230
+ }
231
+
232
+ // Job title comes third
233
+ .mobile-order-3 {
234
+ order: 3;
235
+ }
236
+
237
+ // Location comes fourth
238
+ .mobile-order-4 {
239
+ order: 4;
240
+ }
241
+ }
242
+
243
+ // Ensure the ordered elements maintain their styling and layout
244
+ .mobile-order-1,
245
+ .mobile-order-2,
246
+ .mobile-order-3,
247
+ .mobile-order-4 {
248
+ width: 100%;
249
+ }
250
+
251
+ .date-range {
252
+ align-items: flex-start;
253
+ }
254
+
255
+ .location-row {
256
+ align-items: flex-start;
257
+ }
258
+ }
259
+
260
+ /* Media query: Also switch to column when screen width is small (<= 767px) */
122
261
  @media (max-width: 767px) {
123
262
  .entry-header {
124
263
  flex-direction: column;
@@ -169,7 +169,7 @@
169
169
  font-size: 14px;
170
170
  font-style: normal;
171
171
  font-weight: 400;
172
- line-height: 140%;
172
+ line-height: 1.4;
173
173
  letter-spacing: 0.035px;
174
174
  }
175
175
 
@@ -0,0 +1,86 @@
1
+ <al-general-container cdkScrollable [backgroundColor]="'#FFFFFF'" [padding]="'16px'" [borderRadius]="'8px'"
2
+ [borderPosition]="'top'" [borderColor]="'#87DAE2'" [boxShadow]="true" [height]="'calc(100vh)'" [overflowX]="'hidden'"
3
+ [overflowY]="'auto'">
4
+ <al-tabs [selectedIndex]="0" [size]="'large'">
5
+ <al-tab labelText="Resume">
6
+ <al-newresumeheader [title]="'Experiences'" [showHeaderCheckbox]="true" [headerCheckboxChecked]="false"
7
+ [isLargeScreen]="true" [showPopOutPanel]="false" [hiddenSection]="{ headerSectionHidden: false }"
8
+ [configEyeToggle]="configEyeToggle" [buttonConfig]="buttonConfig">
9
+ <al-responsive-columns [stackAt]="0" [gap]="'8px'" [padding]="'8px 12px'">
10
+ <div left>
11
+ <toolbar-left [variant]="'default'" [content]="'Section Content'" [isExtractionAnalysisActive]="false"
12
+ [showSearch]="true" (editEvent)="onEditEvent($event)">
13
+ </toolbar-left>
14
+ </div>
15
+ <div center>
16
+ <al-resume-entries [entries]="entries" [showHeader]="true" [showDescriptionLabel]="true"
17
+ [showCompany]="true" [showJobTitle]="true" [showDates]="true" [showLocation]="true" [showTimeline]="false"
18
+ [showReapplyButton]="true" [showLoader]="false" (reapplyClick)="onReapplyClick($event)"
19
+ (undoClick)="onUndoClick($event)">
20
+ </al-resume-entries>
21
+ </div>
22
+ <div right>
23
+ <toolbar-right [checked]="false" [alwaysShowIcons]="false" [overrideConfig]="toolbarRightConfig"
24
+ [currentObj]="{ hidden: false, subrole: false }" (checkboxChange)="onCheckboxChange($event)"
25
+ (visibilityToggle)="onVisibilityToggle($event)">
26
+ </toolbar-right>
27
+ </div>
28
+ </al-responsive-columns>
29
+ </al-newresumeheader>
30
+ <al-form *ngFor="let entry of entries; let i = index" [showLeftButton]="true" [showSaveButton]="true"
31
+ [showDeleteButton]="true" [testId]="getTestId(i)" (leftButtonClick)="onLeftButtonClick($event)"
32
+ (saveButtonClick)="onSaveButtonClick($event)" (deleteButtonClick)="onDeleteButtonClick($event)"
33
+ [scrollContainer]="'.general-container'">
34
+ <div leftButtonContent>
35
+ <al-ai-apply-bar [placeholder]="'Apply AI'" [applyLabel]="'Apply'" [showHelperText]="true" [showClose]="false"
36
+ [showChevronButton]="false" [applyDisabled]="false" [value]="'Apply AI'"
37
+ [options]="['Typing', 'Gathering', 'Processing']" (valueChange)="onAIApplyValueChange($event)"
38
+ (applyClick)="onAIApplyClick()" (closeClick)="onAIApplyClose()">
39
+ </al-ai-apply-bar>
40
+ </div>
41
+ <app-flex-grid [type]="'row'" [mobRow]="1" [tabRow]="2" [desktop]="4" [gap]="'16px'">
42
+ <al-input [label]="'Date Type'" [placeholder]="'Type here...'" [value]="'Month/Year'" [type]="'text'"
43
+ [disabled]="false" [helperText]="false" [hasDropDown]="true" [options]="['Month/Year','Year']"
44
+ [size]="'base'" [types]="'primary'" [dataTestId]="'test-input'"></al-input>
45
+ <al-input [label]="'Start Date'" [placeholder]="'Type here...'" [value]="entry.startDate" [type]="'date'"
46
+ [disabled]="false" [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'test-input'"
47
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
48
+ <al-input [label]="'End Date'" [placeholder]="'Type here...'" [value]="entry.endDate || ''" [type]="'date'"
49
+ [disabled]="false" [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'test-input'"
50
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
51
+ <al-checkbox labelPosition="before" labelText="Current Study" [checked]="entry.isPresent"
52
+ (change)="onFormCheckboxChange($event)"></al-checkbox>
53
+ </app-flex-grid>
54
+ <app-flex-grid [type]="'column'" [rows]="1" [mobRow]="1" [tabRow]="1" [desktop]="1" [gap]="'16px'">
55
+ <al-input [label]="'Company Name'" [placeholder]="'Company Name'" [value]="entry.companyName" [type]="'text'"
56
+ [size]="'base'" [types]="'primary'"></al-input>
57
+ <al-input [label]="'Job Title'" [placeholder]="'Job Title'" [value]="entry.jobTitle" [type]="'text'"
58
+ [size]="'base'" [types]="'primary'"></al-input>
59
+ </app-flex-grid>
60
+ <app-flex-grid [type]="'column'" [rows]="1" [mobRow]="1" [tabRow]="1" [desktop]="3" [gap]="'16px'">
61
+ <al-input [label]="'City'" [placeholder]="'City'" [value]="entry.city" [type]="'text'" [size]="'base'"
62
+ [types]="'primary'"></al-input>
63
+ <al-input [label]="'Region'" [placeholder]="'Region'" [value]="entry.region" [type]="'text'" [size]="'base'"
64
+ [types]="'primary'"></al-input>
65
+ <al-input [label]="'Country'" [placeholder]="'Country'" [value]="entry.country" [type]="'text'"
66
+ [size]="'base'" [types]="'primary'"></al-input>
67
+ </app-flex-grid>
68
+ <app-flex-grid [type]="'column'" [gap]="16" [countMobile]="1" [countTablet]="1" [countDesktop]="1">
69
+ <app-custom-editor [isVisible]="true" [showTable]="true" [historyControls]="true" [autobullet]="true"
70
+ [showLabels]="true" leftLabelText="Document Title" rightLabelText="Page 1 of 5"
71
+ [initialValue]="getDescriptionHtml(entry.descriptions)" editScreenSection="GENERAL" actionType="edit"
72
+ [dataTestId]="'custom-editor-testid'" (contentChangeFromQuill)="onContentChange($event)"
73
+ (ApplyAIinQuill)="onAIApply($event)"></app-custom-editor>
74
+ </app-flex-grid>
75
+ </al-form>
76
+ </al-tab>
77
+ <al-tab labelText="CoverSheet">
78
+ <h3>About Us</h3>
79
+ <p>Learn more about our company and mission.</p>
80
+ </al-tab>
81
+ <al-tab labelText="Ai Tools">
82
+ <h3>Contact Information</h3>
83
+ <p>Get in touch with us through various channels.</p>
84
+ </al-tab>
85
+ </al-tabs>
86
+ </al-general-container>
@@ -0,0 +1,35 @@
1
+ .split_panels {
2
+ width: calc(100%) !important;
3
+ height: 100% !important;
4
+ }
5
+
6
+ as-split {
7
+ display: flex !important;
8
+ height: 100% !important;
9
+ }
10
+
11
+ as-split-area {
12
+ overflow: hidden !important;
13
+ }
14
+
15
+ .as-split-gutter {
16
+ cursor: col-resize !important;
17
+ background-color: var(--as-gutter-background-color, #eeeeee) !important;
18
+ flex-basis: 8px !important;
19
+ min-width: 8px !important;
20
+ max-width: 8px !important;
21
+ position: relative !important;
22
+ z-index: 10 !important;
23
+
24
+ &:hover {
25
+ background-color: #d0d0d0 !important;
26
+ }
27
+
28
+ &.as-dragged {
29
+ background-color: #b0b0b0 !important;
30
+ }
31
+ }
32
+
33
+ .as-split-gutter > .as-split-gutter-icon {
34
+ display: none !important;
35
+ }
@@ -3,13 +3,13 @@
3
3
  (change)="onCheckboxChange($event)" (mouseenter)="onCheckboxHover(true)"
4
4
  (mouseleave)="onCheckboxHover(false)"></al-checkbox></div>
5
5
  <div class="toolbar-right-icons" [ngClass]="{'always-visible': showIcons}">
6
- <div class="icon-wrapper"><button *ngIf="requiredIcon.sr.display" type="button"
6
+ <div class="icon-wrapper" *ngIf="requiredIcon.sr.display"><button type="button"
7
7
  class="toolbar-icon toolbar-icon--subrole" [attr.aria-label]="requiredIcon.sr.title"
8
8
  [attr.title]="requiredIcon.sr.title" (click)="setSubrole()"><mat-icon
9
- [svgIcon]="currentObj['subrole'] ? 'subrole_active' : 'subrole'" class="subrole-icon"></mat-icon></button>
9
+ [svgIcon]="currentObj['subrole'] ? 'subrole_active' : 'subrole-icon-grey'" class="subrole-icon"></mat-icon></button>
10
10
  </div>
11
11
  <div class="icon-wrapper"><button *ngIf="requiredIcon.eye.display" type="button"
12
12
  class="toolbar-icon toolbar-icon--eye eye-icon" [attr.aria-label]="eyeLabel" [attr.title]="eyeTitle"
13
13
  (click)="onToggleVisibility()"><mat-icon [svgIcon]="eyeSvgIcon" class="eye-icon"></mat-icon></button></div>
14
14
  </div>
15
- </div>
15
+ </div>