@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.
- package/fesm2022/allsorter-ui-components.mjs +475 -288
- package/fesm2022/allsorter-ui-components.mjs.map +1 -1
- package/lib/ai-apply-bar/ai-apply-bar.component.d.ts +7 -1
- package/lib/ai-wrapper/ai-wrapper.component.d.ts +92 -0
- package/lib/ai-wrapper/ai-wrapper.module.d.ts +12 -0
- package/lib/custom-editor/custom-editor.component.d.ts +3 -14
- package/lib/editable-form-wrapper/editable-form-wrapper.component.d.ts +33 -2
- package/lib/experience-section/experience-section.component.d.ts +2 -2
- package/lib/newresumeheader/newresumeheader.component.d.ts +3 -0
- package/lib/styles/typography-classes.scss +1 -1
- package/lib/{app-toolbar/app-toolbar.component.d.ts → toolbar-left/toolbar-left.component.d.ts} +1 -1
- package/lib/{app-toolbar/app-toolbar.module.d.ts → toolbar-left/toolbar-left.module.d.ts} +1 -1
- package/lib/{app-toolbar-right/app-toolbar-right.component.d.ts → toolbar-right/toolbar-right.component.d.ts} +1 -1
- package/lib/{app-toolbar-right/app-toolbar-right.module.d.ts → toolbar-right/toolbar-right.module.d.ts} +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +6 -4
- package/src/lib/ai-apply-bar/ai-apply-bar.component.html +39 -37
- package/src/lib/ai-apply-bar/ai-apply-bar.component.scss +56 -22
- package/src/lib/ai-wrapper/ai-wrapper.component.html +38 -0
- package/src/lib/ai-wrapper/ai-wrapper.component.scss +371 -0
- package/src/lib/candidate-section/candidate-section.component.scss +25 -0
- package/src/lib/custom-editor/custom-editor.component.scss +2 -1
- package/src/lib/editable-form-wrapper/editable-form-wrapper.component.html +19 -7
- package/src/lib/editable-form-wrapper/editable-form-wrapper.component.scss +12 -1
- package/src/lib/experience-section/experience-section.component.html +4 -4
- package/src/lib/field-placeholder/field-placeholder.component.html +3 -3
- package/src/lib/field-placeholder/field-placeholder.component.scss +20 -61
- package/src/lib/input/input.component.html +1 -1
- package/src/lib/input/input.component.scss +4 -4
- package/src/lib/newresumeheader/newresumeheader.component.html +70 -127
- package/src/lib/responsive-layout/responsive-layout.component.scss +23 -0
- package/src/lib/resume-entries/resume-entries.component.scss +141 -2
- package/src/lib/styles/typography-classes.scss +1 -1
- package/src/lib/test-styling/test-styling.component.html +86 -0
- package/src/lib/test-styling/test-styling.component.scss +35 -0
- package/src/lib/{app-toolbar-right/app-toolbar-right.component.html → toolbar-right/toolbar-right.component.html} +3 -3
- /package/src/lib/{app-toolbar/app-toolbar.component.html → toolbar-left/toolbar-left.component.html} +0 -0
- /package/src/lib/{app-toolbar/app-toolbar.component.scss → toolbar-left/toolbar-left.component.scss} +0 -0
- /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"
|
|
2
|
-
[width]="'100%'"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
</span>
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
101
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
[
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
149
|
-
|
|
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)"
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -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"
|
|
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>
|
/package/src/lib/{app-toolbar/app-toolbar.component.html → toolbar-left/toolbar-left.component.html}
RENAMED
|
File without changes
|
/package/src/lib/{app-toolbar/app-toolbar.component.scss → toolbar-left/toolbar-left.component.scss}
RENAMED
|
File without changes
|
|
File without changes
|