@allsorter/ui-components 0.0.406 → 0.0.410
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 +187 -61
- package/fesm2022/allsorter-ui-components.mjs.map +1 -1
- package/lib/editable-form-wrapper/editable-form-wrapper.component.d.ts +6 -1
- package/lib/loader/loader.component.d.ts +7 -2
- package/lib/newresumeheader/newresumeheader.component.d.ts +3 -1
- package/lib/toggle-buttons/toggle-buttons.component.d.ts +2 -0
- package/lib/utils/animations.d.ts +22 -0
- package/package.json +1 -1
- package/src/lib/button/button.component.scss +1 -0
- package/src/lib/candidate-section/candidate-section.component.html +13 -17
- package/src/lib/candidate-section/candidate-section.component.scss +1 -0
- package/src/lib/custom-editor/custom-editor.component.scss +1 -1
- package/src/lib/editable-form-wrapper/editable-form-wrapper.component.html +0 -7
- package/src/lib/editable-form-wrapper/editable-form-wrapper.component.scss +43 -5
- package/src/lib/field-placeholder/field-placeholder.component.scss +4 -5
- package/src/lib/input/input.component.scss +2 -0
- package/src/lib/loader/loader.component.html +5 -5
- package/src/lib/loader/loader.component.scss +36 -13
- package/src/lib/newresumeheader/newresumeheader.component.html +5 -3
- package/src/lib/newresumeheader/newresumeheader.component.scss +6 -1
- package/src/lib/resume-entries/resume-entries.component.html +4 -1
- package/src/lib/resume-entries/resume-entries.component.scss +19 -11
- package/src/lib/tabs/tabs.component.html +1 -1
- package/src/lib/tabs/tabs.component.scss +7 -0
- package/src/lib/toggle-buttons/toggle-buttons.component.html +4 -2
- package/src/lib/toggle-buttons/toggle-buttons.component.scss +16 -0
|
@@ -40,6 +40,11 @@ export declare class EditableFormWrapperComponent implements AfterViewInit, OnDe
|
|
|
40
40
|
* If not provided, defaults to window scrolling.
|
|
41
41
|
*/
|
|
42
42
|
scrollContainer: string | HTMLElement | null;
|
|
43
|
+
/**
|
|
44
|
+
* Padding for button clamp boundaries.
|
|
45
|
+
* @default 36
|
|
46
|
+
*/
|
|
47
|
+
clampPadding: number;
|
|
43
48
|
/**
|
|
44
49
|
* Emitted when the left (edit) button is clicked.
|
|
45
50
|
*/
|
|
@@ -75,5 +80,5 @@ export declare class EditableFormWrapperComponent implements AfterViewInit, OnDe
|
|
|
75
80
|
ngOnDestroy(): void;
|
|
76
81
|
private setupScrollBehavior;
|
|
77
82
|
static ɵfac: i0.ɵɵFactoryDeclaration<EditableFormWrapperComponent, never>;
|
|
78
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EditableFormWrapperComponent, "al-form", never, { "testId": { "alias": "testId"; "required": false; }; "showLeftButton": { "alias": "showLeftButton"; "required": false; }; "showSaveButton": { "alias": "showSaveButton"; "required": false; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; }; "leftContainerClass": { "alias": "leftContainerClass"; "required": false; }; "leftContainerStyle": { "alias": "leftContainerStyle"; "required": false; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; }; }, { "leftButtonClick": "leftButtonClick"; "saveButtonClick": "saveButtonClick"; "deleteButtonClick": "deleteButtonClick"; }, never, ["[leftButtonContent]", "*"], true, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EditableFormWrapperComponent, "al-form", never, { "testId": { "alias": "testId"; "required": false; }; "showLeftButton": { "alias": "showLeftButton"; "required": false; }; "showSaveButton": { "alias": "showSaveButton"; "required": false; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; }; "leftContainerClass": { "alias": "leftContainerClass"; "required": false; }; "leftContainerStyle": { "alias": "leftContainerStyle"; "required": false; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; }; "clampPadding": { "alias": "clampPadding"; "required": false; }; }, { "leftButtonClick": "leftButtonClick"; "saveButtonClick": "saveButtonClick"; "deleteButtonClick": "deleteButtonClick"; }, never, ["[leftButtonContent]", "*"], true, never>;
|
|
79
84
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnInit, OnDestroy } from '@angular/core';
|
|
1
|
+
import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export type LoaderStatus = 'analyzing' | 'gathering' | 'processing' | 'applying' | 'done';
|
|
4
4
|
export declare class LoaderComponent implements OnInit, OnDestroy {
|
|
@@ -43,6 +43,11 @@ export declare class LoaderComponent implements OnInit, OnDestroy {
|
|
|
43
43
|
* @default false
|
|
44
44
|
*/
|
|
45
45
|
completeOnDone: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Event emitted when the loader completes a full cycle (reaches 'done' status).
|
|
48
|
+
* Only emits when completeOnDone is true.
|
|
49
|
+
*/
|
|
50
|
+
completed: EventEmitter<void>;
|
|
46
51
|
private loopInterval?;
|
|
47
52
|
private currentLoopIndex;
|
|
48
53
|
private readonly statusOrder;
|
|
@@ -78,5 +83,5 @@ export declare class LoaderComponent implements OnInit, OnDestroy {
|
|
|
78
83
|
*/
|
|
79
84
|
reset(): void;
|
|
80
85
|
static ɵfac: i0.ɵɵFactoryDeclaration<LoaderComponent, never>;
|
|
81
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LoaderComponent, "al-loader", never, { "dataTestId": { "alias": "dataTestId"; "required": false; }; "status": { "alias": "status"; "required": false; }; "customText": { "alias": "customText"; "required": false; }; "showText": { "alias": "showText"; "required": false; }; "size": { "alias": "size"; "required": false; }; "autoLoop": { "alias": "autoLoop"; "required": false; }; "loopDuration": { "alias": "loopDuration"; "required": false; }; "customTexts": { "alias": "customTexts"; "required": false; }; "completeOnDone": { "alias": "completeOnDone"; "required": false; }; }, {}, never, never, true, never>;
|
|
86
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LoaderComponent, "al-loader", never, { "dataTestId": { "alias": "dataTestId"; "required": false; }; "status": { "alias": "status"; "required": false; }; "customText": { "alias": "customText"; "required": false; }; "showText": { "alias": "showText"; "required": false; }; "size": { "alias": "size"; "required": false; }; "autoLoop": { "alias": "autoLoop"; "required": false; }; "loopDuration": { "alias": "loopDuration"; "required": false; }; "customTexts": { "alias": "customTexts"; "required": false; }; "completeOnDone": { "alias": "completeOnDone"; "required": false; }; }, { "completed": "completed"; }, never, never, true, never>;
|
|
82
87
|
}
|
|
@@ -10,6 +10,8 @@ export declare class NewResumeHeaderComponent implements OnInit, OnDestroy, Afte
|
|
|
10
10
|
title: string;
|
|
11
11
|
showHeaderCheckbox: boolean;
|
|
12
12
|
showEyeIcon: boolean;
|
|
13
|
+
showMenuTrigger: boolean;
|
|
14
|
+
showHeaderButtons: boolean;
|
|
13
15
|
headerCheckboxChecked: boolean;
|
|
14
16
|
configEyeToggle: EyeIconConfig[];
|
|
15
17
|
hiddenSection: {
|
|
@@ -163,5 +165,5 @@ export declare class NewResumeHeaderComponent implements OnInit, OnDestroy, Afte
|
|
|
163
165
|
ngAfterViewInit(): void;
|
|
164
166
|
ngOnDestroy(): void;
|
|
165
167
|
static ɵfac: i0.ɵɵFactoryDeclaration<NewResumeHeaderComponent, never>;
|
|
166
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NewResumeHeaderComponent, "al-newresumeheader", never, { "title": { "alias": "title"; "required": false; }; "showHeaderCheckbox": { "alias": "showHeaderCheckbox"; "required": false; }; "showEyeIcon": { "alias": "showEyeIcon"; "required": false; }; "headerCheckboxChecked": { "alias": "headerCheckboxChecked"; "required": false; }; "configEyeToggle": { "alias": "configEyeToggle"; "required": false; }; "hiddenSection": { "alias": "hiddenSection"; "required": false; }; "buttonConfig": { "alias": "buttonConfig"; "required": false; }; "isLargeScreen": { "alias": "isLargeScreen"; "required": false; }; "popOutButtonLabel": { "alias": "popOutButtonLabel"; "required": false; }; "popOutButtonIcon": { "alias": "popOutButtonIcon"; "required": false; }; "popOutButtonTooltip": { "alias": "popOutButtonTooltip"; "required": false; }; "popOutButtonTooltipPosition": { "alias": "popOutButtonTooltipPosition"; "required": false; }; "showPopOutPanel": { "alias": "showPopOutPanel"; "required": false; }; "popOutMessage": { "alias": "popOutMessage"; "required": false; }; "dataTestId": { "alias": "dataTestId"; "required": false; }; "fieldVisibility": { "alias": "fieldVisibility"; "required": false; }; "index": { "alias": "index"; "required": false; }; "showBottomBorder": { "alias": "showBottomBorder"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; }, { "titleChange": "titleChange"; "sectionToggled": "sectionToggled"; "headerCheckboxChange": "headerCheckboxChange"; "showHideToggleSection": "showHideToggleSection"; "buttonClicked": "buttonClicked"; "popOutButtonClick": "popOutButtonClick"; }, never, ["[header-left]", "[header-center-left]", "[header-center-center]", "[header-center-right]", "[header-right]", "[header-left]", "[header-center-right]", "[header-right]", "*"], true, never>;
|
|
168
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NewResumeHeaderComponent, "al-newresumeheader", never, { "title": { "alias": "title"; "required": false; }; "showHeaderCheckbox": { "alias": "showHeaderCheckbox"; "required": false; }; "showEyeIcon": { "alias": "showEyeIcon"; "required": false; }; "showMenuTrigger": { "alias": "showMenuTrigger"; "required": false; }; "showHeaderButtons": { "alias": "showHeaderButtons"; "required": false; }; "headerCheckboxChecked": { "alias": "headerCheckboxChecked"; "required": false; }; "configEyeToggle": { "alias": "configEyeToggle"; "required": false; }; "hiddenSection": { "alias": "hiddenSection"; "required": false; }; "buttonConfig": { "alias": "buttonConfig"; "required": false; }; "isLargeScreen": { "alias": "isLargeScreen"; "required": false; }; "popOutButtonLabel": { "alias": "popOutButtonLabel"; "required": false; }; "popOutButtonIcon": { "alias": "popOutButtonIcon"; "required": false; }; "popOutButtonTooltip": { "alias": "popOutButtonTooltip"; "required": false; }; "popOutButtonTooltipPosition": { "alias": "popOutButtonTooltipPosition"; "required": false; }; "showPopOutPanel": { "alias": "showPopOutPanel"; "required": false; }; "popOutMessage": { "alias": "popOutMessage"; "required": false; }; "dataTestId": { "alias": "dataTestId"; "required": false; }; "fieldVisibility": { "alias": "fieldVisibility"; "required": false; }; "index": { "alias": "index"; "required": false; }; "showBottomBorder": { "alias": "showBottomBorder"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; }, { "titleChange": "titleChange"; "sectionToggled": "sectionToggled"; "headerCheckboxChange": "headerCheckboxChange"; "showHideToggleSection": "showHideToggleSection"; "buttonClicked": "buttonClicked"; "popOutButtonClick": "popOutButtonClick"; }, never, ["[header-left]", "[header-center-left]", "[header-center-center]", "[header-center-right]", "[header-right]", "[header-left]", "[header-center-right]", "[header-right]", "*"], true, never>;
|
|
167
169
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AnimationTriggerMetadata } from '@angular/animations';
|
|
2
|
+
/**
|
|
3
|
+
* Expand and collapse animation for accordion content
|
|
4
|
+
* Animates height from 0 to auto with overflow handling
|
|
5
|
+
* Similar to jQuery animate({ height: auto }) behavior
|
|
6
|
+
*/
|
|
7
|
+
export declare const expandCollapse: AnimationTriggerMetadata;
|
|
8
|
+
/**
|
|
9
|
+
* Fade animation for showing/hiding content with opacity changes
|
|
10
|
+
* Used when toggling visibility via eye icon
|
|
11
|
+
*/
|
|
12
|
+
export declare const fadeInOut: AnimationTriggerMetadata;
|
|
13
|
+
/**
|
|
14
|
+
* Simple slide down animation (height only, no opacity)
|
|
15
|
+
* Alternative animation for simpler expand/collapse
|
|
16
|
+
*/
|
|
17
|
+
export declare const slideDown: AnimationTriggerMetadata;
|
|
18
|
+
/**
|
|
19
|
+
* Fade only animation (opacity only, no height changes)
|
|
20
|
+
* Used for subtle show/hide effects
|
|
21
|
+
*/
|
|
22
|
+
export declare const fadeOnly: AnimationTriggerMetadata;
|
package/package.json
CHANGED
|
@@ -4,28 +4,28 @@
|
|
|
4
4
|
<div class="container" data-test-id="candidate-section-name-container"
|
|
5
5
|
[style.opacity]="candidate_name ? '1' : '0.3'"><lib-field-placeholder icon="candidate_name"
|
|
6
6
|
[value]="candidateDetails?.firstName && candidateDetails?.lastName ? candidateDetails?.firstName + ' ' + candidateDetails?.lastName : candidateDetails?.firstName || candidateDetails?.lastName"
|
|
7
|
-
[placeholder]="'Name'"
|
|
8
|
-
|
|
7
|
+
[placeholder]="'Name'"
|
|
8
|
+
[testId]="'candidate-section-name'" [valueClass]="'typo-description'"
|
|
9
9
|
[compact]="true"></lib-field-placeholder></div>
|
|
10
10
|
<div class="container" data-test-id="candidate-section-gender-container"
|
|
11
11
|
[style.opacity]="candidate_gender ? '1' : '0.3'"><lib-field-placeholder icon="candidate_gender"
|
|
12
12
|
[value]="candidateDetails?.userAssignedGender" [placeholder]="'Gender'"
|
|
13
|
-
[
|
|
13
|
+
[testId]="'candidate-section-gender'"
|
|
14
14
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
15
15
|
<div class="container" data-test-id="candidate-section-phone-container"
|
|
16
16
|
[style.opacity]="candidate_phonenumber ? '1' : '0.3'"><lib-field-placeholder
|
|
17
17
|
icon="candidate_phonenumber" [value]="candidateDetails?.phoneNumber" [placeholder]="'Phone Number'"
|
|
18
|
-
[
|
|
18
|
+
[testId]="'candidate-section-phone'"
|
|
19
19
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
20
20
|
<div class="container" data-test-id="candidate-section-email-container"
|
|
21
21
|
[style.opacity]="candidate_email ? '1' : '0.3'"><lib-field-placeholder icon="candidate_email"
|
|
22
22
|
[value]="candidateDetails?.emailAddress" [placeholder]="'Email Address'"
|
|
23
|
-
[
|
|
23
|
+
[testId]="'candidate-section-email'"
|
|
24
24
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
25
25
|
<div class="container" data-test-id="candidate-section-linkedin-container"
|
|
26
26
|
[style.opacity]="candidate_linkedin ? '1' : '0.3'"><lib-field-placeholder
|
|
27
27
|
icon="candidate_linkedin" iconAlt="LinkedIn" [value]="candidateDetails?.linkedin" [placeholder]="'LinkedIn'"
|
|
28
|
-
[
|
|
28
|
+
[testId]="'candidate-section-linkedin'"
|
|
29
29
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
30
30
|
</div>
|
|
31
31
|
<div class="column second-column">
|
|
@@ -33,28 +33,26 @@
|
|
|
33
33
|
[style.opacity]="candidate_address ? '1' : '0.3'">
|
|
34
34
|
<div [style.opacity]="addressStreet ? '1' : '0.3'"><lib-field-placeholder
|
|
35
35
|
icon="candidate_address" [value]="candidateDetails?.street" [placeholder]="'Street'"
|
|
36
|
-
[
|
|
36
|
+
[testId]="'candidate-section-address-street'"
|
|
37
37
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
38
38
|
<div [style.opacity]="addressCity ? '1' : '0.3'"><lib-field-placeholder icon="no-icon"
|
|
39
|
-
[value]="candidateDetails?.city" [placeholder]="'City'"
|
|
40
|
-
|
|
39
|
+
[value]="candidateDetails?.city" [placeholder]="'City'"
|
|
40
|
+
[testId]="'candidate-section-address-city'" [valueClass]="'typo-description'"
|
|
41
41
|
[compact]="true"></lib-field-placeholder></div>
|
|
42
42
|
<div [style.opacity]="addressRegion ? '1' : '0.3'"><lib-field-placeholder
|
|
43
43
|
icon="no-icon" [value]="candidateDetails?.region" [placeholder]="'Region'"
|
|
44
|
-
[
|
|
44
|
+
[testId]="'candidate-section-address-region'"
|
|
45
45
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
46
46
|
<div [style.opacity]="addressRegionCode ? '1' : '0.3'"><lib-field-placeholder
|
|
47
47
|
[value]="candidateDetails?.regionCode" [placeholder]="'Region Code'" icon="no-icon"
|
|
48
|
-
[tooltip]="candidateDetails?.regionCode" tooltipPosition="right"
|
|
49
48
|
[testId]="'candidate-section-address-region-code'" [valueClass]="'typo-description'"
|
|
50
49
|
[compact]="true"></lib-field-placeholder></div>
|
|
51
50
|
<div [style.opacity]="addressCountry ? '1' : '0.3'"><lib-field-placeholder
|
|
52
51
|
icon="no-icon" [value]="candidateDetails?.country" [placeholder]="'Country'"
|
|
53
|
-
[
|
|
52
|
+
[testId]="'candidate-section-address-country'"
|
|
54
53
|
[valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
|
|
55
54
|
<div [style.opacity]="addressPostCode ? '1' : '0.3'"><lib-field-placeholder
|
|
56
55
|
icon="no-icon" [value]="candidateDetails?.postCode" [placeholder]="'Post Code'"
|
|
57
|
-
[tooltip]="candidateDetails?.postCode" tooltipPosition="right"
|
|
58
56
|
[testId]="'candidate-section-address-post-code'" [valueClass]="'typo-description'"
|
|
59
57
|
[compact]="true"></lib-field-placeholder></div>
|
|
60
58
|
</div>
|
|
@@ -66,8 +64,7 @@
|
|
|
66
64
|
<lib-field-placeholder icon="candidate_most_recent"
|
|
67
65
|
[value]="(getCurrentJob() || getCurrentEmployer()) ? 'Most Recently : <span class=\'most-recent-inline\'>' + (getCurrentJob() ? '<span class=\'total-exp-value\'>' + getCurrentJob() + '</span>' : '') + (getCurrentEmployer() ? (getCurrentJob() ? ' at <span class=\'total-exp-value\'>' + getCurrentEmployer() + '</span>' : '<span class=\'total-exp-value\'>' + getCurrentEmployer() + '</span>') : '') + '</span>' : ''"
|
|
68
66
|
[placeholder]="'Current Job'"
|
|
69
|
-
[
|
|
70
|
-
tooltipPosition="right" [testId]="'candidate-section-current-job'" [valueClass]="'typo-description'"
|
|
67
|
+
[testId]="'candidate-section-current-job'" [valueClass]="'typo-description'"
|
|
71
68
|
[compact]="true"></lib-field-placeholder>
|
|
72
69
|
<div class="most-recent-details">
|
|
73
70
|
<div class="current-job-title" *ngIf="getCurrentJob()">{{getCurrentJob()}}</div>
|
|
@@ -80,8 +77,7 @@
|
|
|
80
77
|
icon="candidate_experience"
|
|
81
78
|
[value]="getTotalExpYears() ? 'Total Exp - <span class=\'total-exp-value\'>' + getTotalExpYears() + '</span> yrs' : ''"
|
|
82
79
|
[placeholder]="'Total Exp'"
|
|
83
|
-
[
|
|
84
|
-
tooltipPosition="right" [testId]="'candidate-section-total-exp-value'" [valueClass]="'typo-description'"
|
|
80
|
+
[testId]="'candidate-section-total-exp-value'" [valueClass]="'typo-description'"
|
|
85
81
|
[compact]="true"></lib-field-placeholder></div>
|
|
86
82
|
</div>
|
|
87
83
|
</div>
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
<div class="al-form-wrapper" #wrapper [attr.data-test-id]="testId">
|
|
2
2
|
<div *ngIf="showLeftButton" #leftButton class="fab left">
|
|
3
|
-
<!-- <al-button [buttonType]="'icon-circle'" [iconOnly]="true"
|
|
4
|
-
[leftIcon]="isLeftButtonActive ? 'close' : 'auto_fix_high'"
|
|
5
|
-
[arialabel]="isLeftButtonActive ? 'Close' : 'Edit'"
|
|
6
|
-
[size]="'base'"
|
|
7
|
-
[color]="isLeftButtonActive ? 'grey' : 'gradient'"
|
|
8
|
-
(onClick)="handleLeftButtonClick($event)">
|
|
9
|
-
</al-button> -->
|
|
10
3
|
<div
|
|
11
4
|
class="left-button-container"
|
|
12
5
|
[ngClass]="leftContainerClass"
|
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
/* Enable container queries for responsive layout based on container size */
|
|
55
55
|
container-type: inline-size;
|
|
56
56
|
container-name: form-wrapper;
|
|
57
|
+
/* Isolate layout calculations to prevent FABs from causing parent reflow */
|
|
58
|
+
contain: layout style;
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
/* Subtle outer rounded border (like a frame) */
|
|
@@ -195,19 +197,28 @@ select.al-form__control {
|
|
|
195
197
|
position: absolute;
|
|
196
198
|
left: -27px;
|
|
197
199
|
/* intended design: slightly outside the inner frame */
|
|
198
|
-
top:
|
|
199
|
-
/*
|
|
200
|
+
top: 36px;
|
|
201
|
+
/* Start at clampPadding position to minimize jump */
|
|
200
202
|
z-index: 10;
|
|
201
203
|
background-color: #fff;
|
|
202
204
|
border-radius: 50%;
|
|
203
205
|
will-change: transform;
|
|
204
206
|
/* Optimize for smooth scrolling */
|
|
205
207
|
transition: transform 0.1s ease-out;
|
|
208
|
+
opacity: 0;
|
|
209
|
+
/* Start hidden, shown after positioning */
|
|
210
|
+
/* Match height with right button group (2 buttons + 8px gap = ~88px) */
|
|
211
|
+
height: 88px;
|
|
212
|
+
display: flex;
|
|
213
|
+
align-items: center;
|
|
214
|
+
/* Center the inner button container */
|
|
206
215
|
|
|
207
216
|
.left-button-container {
|
|
208
217
|
position: absolute;
|
|
209
218
|
left: 56px;
|
|
210
|
-
|
|
219
|
+
/* Vertically centered by flexbox on parent */
|
|
220
|
+
top: 50%;
|
|
221
|
+
transform: translateY(-50%);
|
|
211
222
|
z-index: 1;
|
|
212
223
|
pointer-events: auto;
|
|
213
224
|
}
|
|
@@ -217,8 +228,8 @@ select.al-form__control {
|
|
|
217
228
|
position: absolute;
|
|
218
229
|
right: -16px;
|
|
219
230
|
/* slightly outside the inner frame */
|
|
220
|
-
top:
|
|
221
|
-
/*
|
|
231
|
+
top: 36px;
|
|
232
|
+
/* Start at clampPadding position to minimize jump */
|
|
222
233
|
display: flex;
|
|
223
234
|
flex-direction: column;
|
|
224
235
|
border-radius: 50%;
|
|
@@ -228,6 +239,16 @@ select.al-form__control {
|
|
|
228
239
|
will-change: transform;
|
|
229
240
|
/* Optimize for smooth scrolling */
|
|
230
241
|
transition: transform 0.1s ease-out;
|
|
242
|
+
opacity: 0;
|
|
243
|
+
/* Start hidden, shown after positioning */
|
|
244
|
+
/* Fixed height to match left button (2 buttons + 8px gap) */
|
|
245
|
+
height: 82px;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* When buttons are positioned, show them */
|
|
249
|
+
.fab.left.positioned,
|
|
250
|
+
.fab-group.right.positioned {
|
|
251
|
+
opacity: 1;
|
|
231
252
|
}
|
|
232
253
|
|
|
233
254
|
/* Add gap between form rows (app-flex-grid elements) */
|
|
@@ -294,4 +315,21 @@ select.al-form__control {
|
|
|
294
315
|
:host ::ng-deep app-flex-grid.row.min-cols-2 > *:nth-child(3):last-child { order: 2; } /* End Date middle */
|
|
295
316
|
}
|
|
296
317
|
|
|
318
|
+
/* Fade-in animation for FABs on initial render */
|
|
319
|
+
@keyframes fadeIn {
|
|
320
|
+
from {
|
|
321
|
+
opacity: 0;
|
|
322
|
+
}
|
|
323
|
+
to {
|
|
324
|
+
opacity: 1;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Apply fade-in animation to left and right FABs */
|
|
329
|
+
.fab.left,
|
|
330
|
+
.fab-group.right {
|
|
331
|
+
opacity: 0;
|
|
332
|
+
animation: fadeIn 1s ease-out forwards;
|
|
333
|
+
}
|
|
334
|
+
|
|
297
335
|
/* Remove special outline/background styles so buttons render as-is */
|
|
@@ -80,10 +80,9 @@
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
.value-text {
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
83
|
+
// .value-text {
|
|
84
|
+
// color: $color-grey-600 !important;
|
|
85
|
+
// }
|
|
87
86
|
// Apply collapsed styles when .collapsed is anywhere in parent hierarchy
|
|
88
87
|
.collapsed .value-text {
|
|
89
88
|
display: -webkit-box !important;
|
|
@@ -93,4 +92,4 @@
|
|
|
93
92
|
overflow: hidden !important;
|
|
94
93
|
text-overflow: ellipsis !important;
|
|
95
94
|
white-space: normal !important;
|
|
96
|
-
}
|
|
95
|
+
}
|
|
@@ -420,6 +420,7 @@
|
|
|
420
420
|
display: flex !important;
|
|
421
421
|
align-items: center !important;
|
|
422
422
|
justify-content: center !important;
|
|
423
|
+
cursor: pointer;
|
|
423
424
|
}
|
|
424
425
|
|
|
425
426
|
/* Icon sizing by size category */
|
|
@@ -498,6 +499,7 @@ mat-icon[matSuffix] {
|
|
|
498
499
|
display: flex;
|
|
499
500
|
align-items: center;
|
|
500
501
|
justify-content: center;
|
|
502
|
+
cursor: pointer;
|
|
501
503
|
}
|
|
502
504
|
|
|
503
505
|
/* ===== FLOATING LABEL POSITIONING ===== */
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
<div class="loader-container" [attr.data-testid]="effectiveDataTestId">
|
|
2
2
|
<!-- Brain Icon -->
|
|
3
|
-
<mat-icon class="loader-icon font-icon icon-brain" fontSet="material-
|
|
3
|
+
<mat-icon class="loader-icon font-icon icon-brain" fontSet="material-symbols-outlined">network_intelligence</mat-icon>
|
|
4
4
|
<!-- Settings/Gear Icon -->
|
|
5
5
|
<mat-icon class="loader-icon font-icon icon-cog" fontSet="material-icons-outlined">settings</mat-icon>
|
|
6
6
|
<!-- Document Icon -->
|
|
7
|
-
<mat-icon class="loader-icon font-icon icon-document" fontSet="material-icons">article</mat-icon>
|
|
7
|
+
<mat-icon class="loader-icon font-icon icon-document" fontSet="material-icons-outlined">article</mat-icon>
|
|
8
8
|
<!-- Wand Icon -->
|
|
9
|
-
<mat-icon class="loader-icon font-icon icon-wand" fontSet="material-icons">auto_awesome</mat-icon>
|
|
9
|
+
<mat-icon class="loader-icon font-icon icon-wand" fontSet="material-icons-outlined">auto_awesome</mat-icon>
|
|
10
10
|
<!-- Settings Icon -->
|
|
11
|
-
<mat-icon class="loader-icon font-icon icon-tick" fontSet="material-icons">
|
|
11
|
+
<mat-icon class="loader-icon font-icon icon-tick" fontSet="material-icons-outlined">done</mat-icon>
|
|
12
12
|
</div>
|
|
13
13
|
<div class="text-container" *ngIf="showText">
|
|
14
14
|
<span class="loader-text">{{ displayText }}</span>
|
|
15
|
-
</div>
|
|
15
|
+
</div>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@import url("https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined");
|
|
2
|
+
@import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=network_intelligence");
|
|
2
3
|
|
|
3
4
|
:host {
|
|
4
5
|
display: flex;
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
|
|
29
30
|
.text-container {
|
|
30
31
|
position: relative;
|
|
31
|
-
margin-top:
|
|
32
|
+
margin-top: 4px;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
.loader-text {
|
|
@@ -56,6 +57,28 @@ mat-icon.loader-icon {
|
|
|
56
57
|
justify-content: center;
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
/* Ensure icon-tick renders at correct size when using material-icons fontSet */
|
|
61
|
+
:host(.size-medium) .icon-tick[fontSet="material-icons"] {
|
|
62
|
+
font-size: 72px !important;
|
|
63
|
+
width: 72px !important;
|
|
64
|
+
height: 72px !important;
|
|
65
|
+
line-height: 72px !important;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:host(.size-small) .icon-tick[fontSet="material-icons"] {
|
|
69
|
+
font-size: 48px !important;
|
|
70
|
+
width: 48px !important;
|
|
71
|
+
height: 48px !important;
|
|
72
|
+
line-height: 48px !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host(.size-large) .icon-tick[fontSet="material-icons"] {
|
|
76
|
+
font-size: 108px !important;
|
|
77
|
+
width: 108px !important;
|
|
78
|
+
height: 108px !important;
|
|
79
|
+
line-height: 108px !important;
|
|
80
|
+
}
|
|
81
|
+
|
|
59
82
|
/* Size variations */
|
|
60
83
|
:host(.size-small) {
|
|
61
84
|
.loader-container {
|
|
@@ -86,11 +109,11 @@ mat-icon.loader-icon {
|
|
|
86
109
|
}
|
|
87
110
|
|
|
88
111
|
.font-icon {
|
|
89
|
-
font-size: 72px;
|
|
112
|
+
font-size: 72px !important;
|
|
90
113
|
}
|
|
91
114
|
|
|
92
115
|
mat-icon.loader-icon {
|
|
93
|
-
font-size: 72px;
|
|
116
|
+
font-size: 72px !important;
|
|
94
117
|
width: 72px;
|
|
95
118
|
height: 72px;
|
|
96
119
|
}
|
|
@@ -453,41 +476,41 @@ mat-icon.loader-icon {
|
|
|
453
476
|
/* --- Looping Mode: Enhanced animations with enter/exit transitions --- */
|
|
454
477
|
/* These are triggered when autoLoop is enabled */
|
|
455
478
|
:host(.auto-loop.status-analyzing) .icon-brain {
|
|
456
|
-
animation: animate-brain
|
|
479
|
+
animation: animate-brain 2s ease-in-out;
|
|
457
480
|
}
|
|
458
481
|
|
|
459
482
|
:host(.auto-loop.status-analyzing) .loader-text {
|
|
460
|
-
animation: animate-text
|
|
483
|
+
animation: animate-text 2s ease-in-out;
|
|
461
484
|
}
|
|
462
485
|
|
|
463
486
|
:host(.auto-loop.status-gathering) .icon-cog {
|
|
464
|
-
animation: animate-cog
|
|
487
|
+
animation: animate-cog 2s ease-in-out;
|
|
465
488
|
}
|
|
466
489
|
|
|
467
490
|
:host(.auto-loop.status-gathering) .loader-text {
|
|
468
|
-
animation: animate-text
|
|
491
|
+
animation: animate-text 2s ease-in-out;
|
|
469
492
|
}
|
|
470
493
|
|
|
471
494
|
:host(.auto-loop.status-processing) .icon-document {
|
|
472
|
-
animation: animate-document
|
|
495
|
+
animation: animate-document 2s ease-in-out;
|
|
473
496
|
}
|
|
474
497
|
|
|
475
498
|
:host(.auto-loop.status-processing) .loader-text {
|
|
476
|
-
animation: animate-text
|
|
499
|
+
animation: animate-text 2s ease-in-out;
|
|
477
500
|
}
|
|
478
501
|
|
|
479
502
|
:host(.auto-loop.status-applying) .icon-wand {
|
|
480
|
-
animation: animate-wand
|
|
503
|
+
animation: animate-wand 2s ease-in-out;
|
|
481
504
|
}
|
|
482
505
|
|
|
483
506
|
:host(.auto-loop.status-applying) .loader-text {
|
|
484
|
-
animation: animate-text
|
|
507
|
+
animation: animate-text 2s ease-in-out;
|
|
485
508
|
}
|
|
486
509
|
|
|
487
510
|
:host(.auto-loop.status-done) .icon-tick {
|
|
488
|
-
animation: animate-tick
|
|
511
|
+
animation: animate-tick 2s ease-in-out;
|
|
489
512
|
}
|
|
490
513
|
|
|
491
514
|
:host(.auto-loop.status-done) .loader-text {
|
|
492
|
-
animation: animate-text
|
|
515
|
+
animation: animate-text 2s ease-in-out;
|
|
493
516
|
}
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
</div>
|
|
47
47
|
<div center><ng-content select="[header-center-center]"></ng-content>
|
|
48
48
|
<!-- Header buttons for large screens (including Deep Extraction via buttonConfig) --><ng-container
|
|
49
|
-
*ngIf="isLargeScreen"><ng-container
|
|
49
|
+
*ngIf="isLargeScreen && showHeaderButtons"><ng-container
|
|
50
50
|
*ngTemplateOutlet="headerButtonsTemplate; context: { buttons: buttonConfig }"></ng-container></ng-container>
|
|
51
51
|
<!-- Menu trigger and slide-out panel for small screens only -->
|
|
52
|
-
<div class="hover-menu-container" *ngIf="!isLargeScreen">
|
|
52
|
+
<div class="hover-menu-container" *ngIf="!isLargeScreen && showMenuTrigger && showHeaderButtons">
|
|
53
53
|
<div class="menu-trigger" (click)="toggleMenu()"><al-button buttonType="icon-label" iconOnly
|
|
54
54
|
size="header" category="grey" leftIcon="more_vert" aria-label="More options"
|
|
55
55
|
[dataTestId]="'resume-header-more-menu'"></al-button></div>
|
|
@@ -103,7 +103,9 @@
|
|
|
103
103
|
</div>
|
|
104
104
|
<!-- Accordion body with expand/collapse animation -->
|
|
105
105
|
<div class="example-accordion-item-body-wrapper">
|
|
106
|
-
<div class="example-accordion-item-body"
|
|
106
|
+
<div class="example-accordion-item-body"
|
|
107
|
+
*ngIf="accordionItem.expanded && !isSectionHidden"
|
|
108
|
+
[@expandCollapse]>
|
|
107
109
|
<!-- Pop-out Panel -->
|
|
108
110
|
<div *ngIf="shouldShowPopOut" #popOutPanel class="pop-out-panel"
|
|
109
111
|
[ngClass]="{'pop-out-narrow': isPopOutNarrow}">
|
|
@@ -162,6 +162,7 @@
|
|
|
162
162
|
border-bottom: 2px solid #37c1ce;
|
|
163
163
|
border-radius: 8px;
|
|
164
164
|
box-sizing: border-box;
|
|
165
|
+
margin-top: 16px !important;
|
|
165
166
|
|
|
166
167
|
/**
|
|
167
168
|
* When the Deep Extraction pop-out panel is NOT shown (showPopOutPanel === false),
|
|
@@ -171,7 +172,11 @@
|
|
|
171
172
|
*/
|
|
172
173
|
&.header-with-bottom-margin {
|
|
173
174
|
margin-bottom: 16px;
|
|
175
|
+
|
|
176
|
+
|
|
174
177
|
}
|
|
178
|
+
|
|
179
|
+
|
|
175
180
|
}
|
|
176
181
|
|
|
177
182
|
|
|
@@ -666,4 +671,4 @@
|
|
|
666
671
|
// position: relative;
|
|
667
672
|
// z-index: 1;
|
|
668
673
|
// }
|
|
669
|
-
// }
|
|
674
|
+
// }
|
|
@@ -52,10 +52,13 @@
|
|
|
52
52
|
<lib-field-placeholder [value]="entry.city" [placeholder]="'City'" valueClass="font-location-text"
|
|
53
53
|
[testId]="'entry-' + i + '-city'" [compact]="true"
|
|
54
54
|
[tooltip]="locationTooltip" [tooltipPosition]="tooltipPosition"></lib-field-placeholder>
|
|
55
|
+
<span class="location-comma">,</span>
|
|
55
56
|
<lib-field-placeholder [value]="entry.region" [placeholder]="'Region'" valueClass="font-location-text"
|
|
56
57
|
[testId]="'entry-' + i + '-region'" [compact]="true"
|
|
57
58
|
[tooltip]="locationTooltip" [tooltipPosition]="tooltipPosition"></lib-field-placeholder>
|
|
58
|
-
<
|
|
59
|
+
<span class="location-comma">,</span>
|
|
60
|
+
<lib-field-placeholder [value]="entry.country" [placeholder]="'Country'"
|
|
61
|
+
valueClass="font-location-text"
|
|
59
62
|
[testId]="'entry-' + i + '-country'" [compact]="true"
|
|
60
63
|
[tooltip]="locationTooltip" [tooltipPosition]="tooltipPosition"></lib-field-placeholder>
|
|
61
64
|
</div>
|
|
@@ -350,15 +350,23 @@
|
|
|
350
350
|
flex-direction: column;
|
|
351
351
|
gap: 4px;
|
|
352
352
|
|
|
353
|
+
::ng-deep .value-text {
|
|
354
|
+
color: #717793;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// ::ng-deep .placeholder-text {
|
|
358
|
+
// color: #717793;
|
|
359
|
+
// }
|
|
360
|
+
|
|
353
361
|
&.collapsed .value-text {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
+
display: -webkit-box !important;
|
|
363
|
+
-webkit-line-clamp: 1 !important;
|
|
364
|
+
line-clamp: 1 !important;
|
|
365
|
+
-webkit-box-orient: vertical !important;
|
|
366
|
+
overflow: hidden !important;
|
|
367
|
+
text-overflow: ellipsis !important;
|
|
368
|
+
white-space: normal !important;
|
|
369
|
+
}
|
|
362
370
|
|
|
363
371
|
}
|
|
364
372
|
|
|
@@ -397,8 +405,8 @@
|
|
|
397
405
|
display: flex;
|
|
398
406
|
justify-content: center;
|
|
399
407
|
align-items: center;
|
|
400
|
-
padding: 24px 0;
|
|
401
|
-
min-height: 80px;
|
|
408
|
+
// padding: 24px 0;
|
|
409
|
+
// min-height: 80px;
|
|
402
410
|
}
|
|
403
411
|
|
|
404
412
|
.entry-loader-container {
|
|
@@ -435,7 +443,7 @@
|
|
|
435
443
|
font-style: normal;
|
|
436
444
|
letter-spacing: 0.15px;
|
|
437
445
|
font-family: Roboto, sans-serif;
|
|
438
|
-
color: #717793;
|
|
446
|
+
color: #717793 !important;
|
|
439
447
|
}
|
|
440
448
|
|
|
441
449
|
p,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<mat-tab-group [selectedIndex]="selectedIndex" [class]="'tabs-' + size" mat-align-tabs="start" headerPosition="above">
|
|
1
|
+
<mat-tab-group [selectedIndex]="selectedIndex" [class]="'tabs-' + size" mat-align-tabs="start" headerPosition="above" animationDuration="0ms">
|
|
2
2
|
<mat-tab *ngFor="let tab of tabComponents; let i = index">
|
|
3
3
|
<ng-template mat-tab-label>
|
|
4
4
|
<span [ngClass]="{ 'tab-label-content': true, 'icon-only-tab': tab.icon && tab.showIcon && !tab.labelText }"
|