@allsorter/ui-components 0.0.386 → 0.0.390

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.
@@ -17,6 +17,7 @@ export declare class AiApplyBarComponent {
17
17
  disabled: boolean;
18
18
  applyLabel: string;
19
19
  applyDisabled: boolean;
20
+ showApplyButton: boolean;
20
21
  showClose: boolean;
21
22
  iconOutlined: boolean;
22
23
  closeButtonTooltip: string;
@@ -33,5 +34,5 @@ export declare class AiApplyBarComponent {
33
34
  toggleBar(): void;
34
35
  onClose(): void;
35
36
  static ɵfac: i0.ɵɵFactoryDeclaration<AiApplyBarComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<AiApplyBarComponent, "al-ai-apply-bar", never, { "dataTestId": { "alias": "dataTestId"; "required": false; }; "showChevron": { "alias": "showChevron"; "required": false; }; "showChevronButton": { "alias": "showChevronButton"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "applyLabel": { "alias": "applyLabel"; "required": false; }; "applyDisabled": { "alias": "applyDisabled"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "iconOutlined": { "alias": "iconOutlined"; "required": false; }; "closeButtonTooltip": { "alias": "closeButtonTooltip"; "required": false; }; "closeButtonTooltipPosition": { "alias": "closeButtonTooltipPosition"; "required": false; }; "showHelperText": { "alias": "showHelperText"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; }, { "valueChange": "valueChange"; "applyClick": "applyClick"; "closeClick": "closeClick"; "chevronClick": "chevronClick"; }, never, never, true, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<AiApplyBarComponent, "al-ai-apply-bar", never, { "dataTestId": { "alias": "dataTestId"; "required": false; }; "showChevron": { "alias": "showChevron"; "required": false; }; "showChevronButton": { "alias": "showChevronButton"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "applyLabel": { "alias": "applyLabel"; "required": false; }; "applyDisabled": { "alias": "applyDisabled"; "required": false; }; "showApplyButton": { "alias": "showApplyButton"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "iconOutlined": { "alias": "iconOutlined"; "required": false; }; "closeButtonTooltip": { "alias": "closeButtonTooltip"; "required": false; }; "closeButtonTooltipPosition": { "alias": "closeButtonTooltipPosition"; "required": false; }; "showHelperText": { "alias": "showHelperText"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; }, { "valueChange": "valueChange"; "applyClick": "applyClick"; "closeClick": "closeClick"; "chevronClick": "chevronClick"; }, never, never, true, never>;
37
38
  }
@@ -1,6 +1,10 @@
1
- import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
1
+ import { AfterViewInit, ElementRef, OnDestroy, OnInit } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { MatIconRegistry } from '@angular/material/icon';
2
4
  import * as i0 from "@angular/core";
3
- export declare class CandidateSectionComponent implements AfterViewInit, OnDestroy {
5
+ export declare class CandidateSectionComponent implements AfterViewInit, OnDestroy, OnInit {
6
+ private iconRegistry;
7
+ private sanitizer;
4
8
  candidateContainer?: ElementRef<HTMLElement>;
5
9
  /**
6
10
  * When true, layout switches from 3 columns to "2-column" stacked layout.
@@ -10,34 +14,36 @@ export declare class CandidateSectionComponent implements AfterViewInit, OnDestr
10
14
  private resizeObserver?;
11
15
  useCustomHeader: boolean;
12
16
  candidateDetails: any;
13
- getFieldNotHidden?: (field: string) => boolean;
14
- getForceShowAllFields?: () => boolean;
15
- resumeService?: any;
16
- fieldVisibilityKeys?: Record<string, string | string[]>;
17
+ candidate_name: boolean;
18
+ candidate_gender: boolean;
19
+ candidate_phonenumber: boolean;
20
+ candidate_email: boolean;
21
+ candidate_linkedin: boolean;
22
+ candidate_address: boolean;
23
+ addressStreet: boolean;
24
+ addressCity: boolean;
25
+ addressRegion: boolean;
26
+ addressRegionCode: boolean;
27
+ addressCountry: boolean;
28
+ addressPostCode: boolean;
29
+ currentJob: boolean;
30
+ candidate_experience: boolean;
31
+ constructor(iconRegistry: MatIconRegistry, sanitizer: DomSanitizer);
17
32
  ngAfterViewInit(): void;
18
33
  ngOnDestroy(): void;
34
+ ngOnInit(): void;
35
+ private registerIcons;
19
36
  /**
20
37
  * Sets isNarrowLayout based on the current container width.
21
38
  * Uses 600px as the breakpoint where the layout switches from 3 to 2 columns.
22
39
  */
23
40
  private updateLayoutBreakpoint;
24
- shouldShow(...keys: string[]): boolean;
25
- private resolveKeys;
26
- shouldShowFor(fieldId: string, fallbackKeys: string[]): boolean;
27
41
  getCurrentJob(): string;
28
42
  getCurrentEmployer(): string;
29
43
  getTotalExpYears(): string;
30
44
  hasValue(): boolean;
31
45
  hasAddressValue(): boolean;
32
46
  hasExperienceValue(): boolean;
33
- getIconName(): string | undefined;
34
- getIconGender(): string | undefined;
35
- getIconPhone(): string | undefined;
36
- getIconEmail(): string | undefined;
37
- getIconLinkedIn(): string | undefined;
38
- getIconAddress(): string | undefined;
39
- getIconExperience(): string | undefined;
40
- getIconMostRecent(): string | undefined;
41
47
  static ɵfac: i0.ɵɵFactoryDeclaration<CandidateSectionComponent, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<CandidateSectionComponent, "al-candidate-section", never, { "useCustomHeader": { "alias": "useCustomHeader"; "required": false; }; "candidateDetails": { "alias": "candidateDetails"; "required": false; }; "getFieldNotHidden": { "alias": "getFieldNotHidden"; "required": false; }; "getForceShowAllFields": { "alias": "getForceShowAllFields"; "required": false; }; "resumeService": { "alias": "resumeService"; "required": false; }; "fieldVisibilityKeys": { "alias": "fieldVisibilityKeys"; "required": false; }; }, {}, never, never, false, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<CandidateSectionComponent, "al-candidate-section", never, { "useCustomHeader": { "alias": "useCustomHeader"; "required": false; }; "candidateDetails": { "alias": "candidateDetails"; "required": false; }; "candidate_name": { "alias": "candidate_name"; "required": false; }; "candidate_gender": { "alias": "candidate_gender"; "required": false; }; "candidate_phonenumber": { "alias": "candidate_phonenumber"; "required": false; }; "candidate_email": { "alias": "candidate_email"; "required": false; }; "candidate_linkedin": { "alias": "candidate_linkedin"; "required": false; }; "candidate_address": { "alias": "candidate_address"; "required": false; }; "addressStreet": { "alias": "addressStreet"; "required": false; }; "addressCity": { "alias": "addressCity"; "required": false; }; "addressRegion": { "alias": "addressRegion"; "required": false; }; "addressRegionCode": { "alias": "addressRegionCode"; "required": false; }; "addressCountry": { "alias": "addressCountry"; "required": false; }; "addressPostCode": { "alias": "addressPostCode"; "required": false; }; "currentJob": { "alias": "currentJob"; "required": false; }; "candidate_experience": { "alias": "candidate_experience"; "required": false; }; }, {}, never, never, false, never>;
43
49
  }
@@ -181,6 +181,7 @@ export declare class CustomEditorComponent implements OnInit, OnDestroy, AfterVi
181
181
  deleteRowBelow(event: MouseEvent): void;
182
182
  updateAIToolInMemory(tool: any): void;
183
183
  useAITool(event: MouseEvent): void;
184
+ useAutoBullet(event: MouseEvent): void;
184
185
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomEditorComponent, never>;
185
186
  static ɵcmp: i0.ɵɵComponentDeclaration<CustomEditorComponent, "app-custom-editor", never, { "bold": { "alias": "bold"; "required": false; }; "italic": { "alias": "italic"; "required": false; }; "underline": { "alias": "underline"; "required": false; }; "list": { "alias": "list"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; "dataTestId": { "alias": "dataTestId"; "required": false; }; "showLabels": { "alias": "showLabels"; "required": false; }; "leftLabelText": { "alias": "leftLabelText"; "required": false; }; "rightLabelText": { "alias": "rightLabelText"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "contentFromParent": { "alias": "contentFromParent"; "required": false; }; "editScreenSection": { "alias": "editScreenSection"; "required": false; }; "actionType": { "alias": "actionType"; "required": false; }; "historyControls": { "alias": "historyControls"; "required": false; }; "autobullet": { "alias": "autobullet"; "required": false; }; "skillsBullet": { "alias": "skillsBullet"; "required": false; }; "jsonData": { "alias": "jsonData"; "required": false; }; "formJsonData": { "alias": "formJsonData"; "required": false; }; "editorId": { "alias": "editorId"; "required": false; }; "sectionId": { "alias": "sectionId"; "required": false; }; "actionId": { "alias": "actionId"; "required": false; }; "undoCustom": { "alias": "undoCustom"; "required": false; }; "redoCustom": { "alias": "redoCustom"; "required": false; }; "undoSkill": { "alias": "undoSkill"; "required": false; }; "redoSkill": { "alias": "redoSkill"; "required": false; }; "matOptionAI": { "alias": "matOptionAI"; "required": false; }; "hideTableOption": { "alias": "hideTableOption"; "required": false; }; "hideAutoBulletOption": { "alias": "hideAutoBulletOption"; "required": false; }; "hideAIOption": { "alias": "hideAIOption"; "required": false; }; "showAIButton": { "alias": "showAIButton"; "required": false; }; "insertTablebtn": { "alias": "insertTablebtn"; "required": false; }; "insertRowAbovebtn": { "alias": "insertRowAbovebtn"; "required": false; }; "insertRowBelowbtn": { "alias": "insertRowBelowbtn"; "required": false; }; "insertColumnLeftbtn": { "alias": "insertColumnLeftbtn"; "required": false; }; "insertColumnRightbtn": { "alias": "insertColumnRightbtn"; "required": false; }; "deleteTablebtn": { "alias": "deleteTablebtn"; "required": false; }; "deleteRowAbovebtn": { "alias": "deleteRowAbovebtn"; "required": false; }; "deleteRowBelowbtn": { "alias": "deleteRowBelowbtn"; "required": false; }; "deleteColumnLeftbtn": { "alias": "deleteColumnLeftbtn"; "required": false; }; "deleteColumnRightbtn": { "alias": "deleteColumnRightbtn"; "required": false; }; "showTable": { "alias": "showTable"; "required": false; }; "toolbarConfig": { "alias": "toolbarConfig"; "required": false; }; "textFormattingConfig": { "alias": "textFormattingConfig"; "required": false; }; }, { "contentChangeFromQuill": "contentChangeFromQuill"; "ApplyAIinQuill": "ApplyAIinQuill"; "onAutoBullet": "onAutoBullet"; }, never, never, true, never>;
186
187
  }
@@ -36,6 +36,7 @@ export declare class FieldPlaceholderComponent {
36
36
  */
37
37
  padded?: boolean;
38
38
  isMaterialIcon(icon: string): boolean;
39
+ isRegisteredSvgIcon(icon: string): boolean;
39
40
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldPlaceholderComponent, never>;
40
41
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldPlaceholderComponent, "lib-field-placeholder", never, { "value": { "alias": "value"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; }; "testId": { "alias": "testId"; "required": false; }; "valueClass": { "alias": "valueClass"; "required": false; }; "placeholderClass": { "alias": "placeholderClass"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconAlt": { "alias": "iconAlt"; "required": false; }; "iconFont": { "alias": "iconFont"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "padded": { "alias": "padded"; "required": false; }; }, {}, never, never, true, never>;
41
42
  }
@@ -1,21 +1,37 @@
1
- import { QueryList, AfterContentInit, TemplateRef, AfterViewInit, ChangeDetectorRef } from '@angular/core';
1
+ import { QueryList, AfterContentInit, TemplateRef, AfterViewInit, ChangeDetectorRef, OnInit } from '@angular/core';
2
+ import { MatIconRegistry } from '@angular/material/icon';
3
+ import { DomSanitizer } from '@angular/platform-browser';
2
4
  import * as i0 from "@angular/core";
3
5
  export declare class AlTabComponent implements AfterViewInit {
4
6
  labelText: string;
5
7
  /** DEPRECATED: label -> labelText */
6
8
  set label(val: string);
7
9
  selected: boolean;
10
+ icon: string;
11
+ iconType: 'svg' | 'font';
12
+ showIcon: boolean;
13
+ tooltip: string;
14
+ tooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after';
8
15
  templateRef: TemplateRef<any>;
16
+ /**
17
+ * Returns the tooltip text. If no tooltip is explicitly set,
18
+ * defaults to the labelText for better accessibility.
19
+ */
20
+ get effectiveTooltip(): string;
9
21
  ngAfterViewInit(): void;
10
22
  static ɵfac: i0.ɵɵFactoryDeclaration<AlTabComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<AlTabComponent, "al-tab", never, { "labelText": { "alias": "labelText"; "required": false; }; "label": { "alias": "label"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, {}, never, ["*"], true, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlTabComponent, "al-tab", never, { "labelText": { "alias": "labelText"; "required": false; }; "label": { "alias": "label"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconType": { "alias": "iconType"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; }; }, {}, never, ["*"], true, never>;
12
24
  }
13
- export declare class TabsComponent implements AfterContentInit, AfterViewInit {
25
+ export declare class TabsComponent implements AfterContentInit, AfterViewInit, OnInit {
14
26
  private cdr;
27
+ private iconRegistry;
28
+ private sanitizer;
15
29
  tabComponents: QueryList<AlTabComponent>;
16
30
  selectedIndex: number;
17
31
  size: 'small' | 'medium' | 'large';
18
- constructor(cdr: ChangeDetectorRef);
32
+ constructor(cdr: ChangeDetectorRef, iconRegistry: MatIconRegistry, sanitizer: DomSanitizer);
33
+ ngOnInit(): void;
34
+ private registerIcons;
19
35
  ngAfterContentInit(): void;
20
36
  ngAfterViewInit(): void;
21
37
  static ɵfac: i0.ɵɵFactoryDeclaration<TabsComponent, never>;
@@ -1,4 +1,4 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
1
+ import { EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import { MatIconRegistry } from '@angular/material/icon';
3
3
  import { DomSanitizer } from '@angular/platform-browser';
4
4
  import * as i0 from "@angular/core";
@@ -11,25 +11,24 @@ export interface RequiredIconConfig {
11
11
  edit: IconConfig;
12
12
  search: IconConfig;
13
13
  }
14
- export declare class AppToolbarLeftComponent implements OnInit {
14
+ export declare class AppToolbarLeftComponent implements OnInit, OnChanges {
15
15
  private iconRegistry;
16
16
  private sanitizer;
17
17
  variant: string;
18
18
  constructor(iconRegistry: MatIconRegistry, sanitizer: DomSanitizer);
19
19
  private registerIcons;
20
20
  ngOnInit(): void;
21
- private _overrideConfig;
22
- set overrideConfig(val: Partial<RequiredIconConfig>);
23
- get overrideConfig(): Partial<RequiredIconConfig>;
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ overrideConfig: Partial<RequiredIconConfig>;
23
+ private updateRequiredIcon;
24
24
  private _defaultRequiredIcon;
25
25
  requiredIcon: RequiredIconConfig;
26
26
  content: string;
27
27
  editEvent: EventEmitter<string>;
28
28
  isExtractionAnalysisActive: boolean;
29
- showSearch: boolean;
29
+ searchEvent: EventEmitter<Event>;
30
30
  editSelectedSection(): void;
31
- sendMessage(): void;
32
31
  onSearchClick(event: Event): void;
33
32
  static ɵfac: i0.ɵɵFactoryDeclaration<AppToolbarLeftComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<AppToolbarLeftComponent, "toolbar-left", never, { "variant": { "alias": "variant"; "required": false; }; "overrideConfig": { "alias": "overrideConfig"; "required": false; }; "content": { "alias": "content"; "required": false; }; "isExtractionAnalysisActive": { "alias": "isExtractionAnalysisActive"; "required": false; }; "showSearch": { "alias": "showSearch"; "required": false; }; }, { "editEvent": "editEvent"; }, never, never, true, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppToolbarLeftComponent, "toolbar-left", never, { "variant": { "alias": "variant"; "required": false; }; "overrideConfig": { "alias": "overrideConfig"; "required": false; }; "content": { "alias": "content"; "required": false; }; "isExtractionAnalysisActive": { "alias": "isExtractionAnalysisActive"; "required": false; }; }, { "editEvent": "editEvent"; "searchEvent": "searchEvent"; }, never, never, true, never>;
35
34
  }
@@ -34,6 +34,11 @@ export declare const Candidate_Section_ICON: {
34
34
  candidate_experience: string;
35
35
  candidate_most_recent: string;
36
36
  };
37
+ export declare const Resume_Tab_icon: {
38
+ resume_tab_icon: string;
39
+ coversheet_tab_icon: string;
40
+ Ai_tools_tab_icon: string;
41
+ };
37
42
  export declare const NewResume_Header_Component_ICON: {
38
43
  'add-right_icon_section': string;
39
44
  'add_left-icon_section': string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allsorter/ui-components",
3
- "version": "0.0.386",
3
+ "version": "0.0.390",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0",
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
 
28
28
  <div class="ai-apply-button">
29
- <al-button [label]="applyLabel" [buttonType]="'icon-label'" [category]="'gradient'" [size]="'base'"
29
+ <al-button *ngIf="showApplyButton" [label]="applyLabel" [buttonType]="'icon-label'" [category]="'gradient'" [size]="'base'"
30
30
  [state]="applyDisabled ? 'disabled' : 'default'" (onClick)="applyClick.emit()">
31
31
  </al-button>
32
32
  <al-icon-button *ngIf="showChevronButton" icon="chevron_right" [iconOutlined]="true"
@@ -2,72 +2,68 @@
2
2
  <div class="columns-wrapper">
3
3
  <div class="column first-column">
4
4
  <div class="container" data-test-id="candidate-section-name-container"
5
- [ngClass]="shouldShowFor('name', []) ? '' : 'not-in-template'"><lib-field-placeholder [icon]="getIconName()"
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
7
  [placeholder]="'Name'" [tooltip]="candidateDetails?.firstName + ' ' + candidateDetails?.lastName"
8
8
  tooltipPosition="right" [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
- [ngClass]="shouldShowFor('gender', []) ? '' : 'not-in-template'"><lib-field-placeholder [icon]="getIconGender()"
11
+ [style.opacity]="candidate_gender ? '1' : '0.3'"><lib-field-placeholder icon="candidate_gender"
12
12
  [value]="candidateDetails?.userAssignedGender" [placeholder]="'Gender'"
13
13
  [tooltip]="candidateDetails?.userAssignedGender" tooltipPosition="right" [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
- [ngClass]="shouldShowFor('phone', []) ? '' : 'not-in-template'"><lib-field-placeholder [icon]="getIconPhone()"
17
- [value]="candidateDetails?.phoneNumber" [placeholder]="'Phone Number'"
16
+ [style.opacity]="candidate_phonenumber ? '1' : '0.3'"><lib-field-placeholder
17
+ icon="candidate_phonenumber" [value]="candidateDetails?.phoneNumber" [placeholder]="'Phone Number'"
18
18
  [tooltip]="candidateDetails?.phoneNumber" tooltipPosition="right" [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
- [ngClass]="shouldShowFor('email', []) ? '' : 'not-in-template'"><lib-field-placeholder [icon]="getIconEmail()"
21
+ [style.opacity]="candidate_email ? '1' : '0.3'"><lib-field-placeholder icon="candidate_email"
22
22
  [value]="candidateDetails?.emailAddress" [placeholder]="'Email Address'"
23
23
  [tooltip]="candidateDetails?.emailAddress" tooltipPosition="right" [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
- [ngClass]="shouldShowFor('linkedin', []) ? '' : 'not-in-template'"><lib-field-placeholder
27
- [icon]="getIconLinkedIn()" iconAlt="LinkedIn" [value]="candidateDetails?.linkedin" [placeholder]="'LinkedIn'"
26
+ [style.opacity]="candidate_linkedin ? '1' : '0.3'"><lib-field-placeholder
27
+ icon="candidate_linkedin" iconAlt="LinkedIn" [value]="candidateDetails?.linkedin" [placeholder]="'LinkedIn'"
28
28
  [tooltip]="candidateDetails?.linkedin" tooltipPosition="right" [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">
32
32
  <div data-test-id="candidate-section-address-container"
33
- [ngClass]="shouldShowFor('address', []) ? '' : 'not-in-template'">
34
- <div [ngClass]="shouldShowFor('addressStreet', []) ? '' : 'not-in-template'"><lib-field-placeholder
35
- [icon]="getIconAddress()" [value]="candidateDetails?.street" [placeholder]="'Street'"
33
+ [style.opacity]="candidate_address ? '1' : '0.3'">
34
+ <div [style.opacity]="addressStreet ? '1' : '0.3'"><lib-field-placeholder
35
+ icon="candidate_address" [value]="candidateDetails?.street" [placeholder]="'Street'"
36
36
  [tooltip]="candidateDetails?.street" tooltipPosition="right" [testId]="'candidate-section-address-street'"
37
37
  [valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
38
- <div [ngClass]="shouldShowFor('addressCity', []) ? '' : 'not-in-template'"><lib-field-placeholder
38
+ <div [style.opacity]="addressCity ? '1' : '0.3'"><lib-field-placeholder icon="no-icon"
39
39
  [value]="candidateDetails?.city" [placeholder]="'City'" [tooltip]="candidateDetails?.city"
40
40
  tooltipPosition="right" [testId]="'candidate-section-address-city'" [valueClass]="'typo-description'"
41
- [icon]="'data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%3E%3C%2Fsvg%3E'"
42
41
  [compact]="true"></lib-field-placeholder></div>
43
- <div [ngClass]="shouldShowFor('addressRegion', []) ? '' : 'not-in-template'"><lib-field-placeholder
44
- [value]="candidateDetails?.region" [placeholder]="'Region'" [tooltip]="candidateDetails?.region"
45
- tooltipPosition="right" [testId]="'candidate-section-address-region'" [valueClass]="'typo-description'"
46
- [icon]="'data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%3E%3C%2Fsvg%3E'"
47
- [compact]="true"></lib-field-placeholder></div>
48
- <div [ngClass]="shouldShowFor('addressRegionCode', []) ? '' : 'not-in-template'"><lib-field-placeholder
49
- [value]="candidateDetails?.regionCode" [placeholder]="'Region Code'"
42
+ <div [style.opacity]="addressRegion ? '1' : '0.3'"><lib-field-placeholder
43
+ icon="no-icon" [value]="candidateDetails?.region" [placeholder]="'Region'"
44
+ [tooltip]="candidateDetails?.region" tooltipPosition="right" [testId]="'candidate-section-address-region'"
45
+ [valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
46
+ <div [style.opacity]="addressRegionCode ? '1' : '0.3'"><lib-field-placeholder
47
+ [value]="candidateDetails?.regionCode" [placeholder]="'Region Code'" icon="no-icon"
50
48
  [tooltip]="candidateDetails?.regionCode" tooltipPosition="right"
51
49
  [testId]="'candidate-section-address-region-code'" [valueClass]="'typo-description'"
52
- [icon]="'data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%3E%3C%2Fsvg%3E'"
53
50
  [compact]="true"></lib-field-placeholder></div>
54
- <div [ngClass]="shouldShowFor('addressCountry', []) ? '' : 'not-in-template'"><lib-field-placeholder
55
- [value]="candidateDetails?.country" [placeholder]="'Country'" [tooltip]="candidateDetails?.country"
56
- tooltipPosition="right" [testId]="'candidate-section-address-country'" [valueClass]="'typo-description'"
57
- [icon]="'data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%3E%3C%2Fsvg%3E'"
58
- [compact]="true"></lib-field-placeholder></div>
59
- <div [ngClass]="shouldShowFor('addressPostCode', []) ? '' : 'not-in-template'"><lib-field-placeholder
60
- [value]="candidateDetails?.postCode" [placeholder]="'Post Code'" [tooltip]="candidateDetails?.postCode"
61
- tooltipPosition="right" [testId]="'candidate-section-address-post-code'" [valueClass]="'typo-description'"
62
- [icon]="'data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%3E%3C%2Fsvg%3E'"
51
+ <div [style.opacity]="addressCountry ? '1' : '0.3'"><lib-field-placeholder
52
+ icon="no-icon" [value]="candidateDetails?.country" [placeholder]="'Country'"
53
+ [tooltip]="candidateDetails?.country" tooltipPosition="right" [testId]="'candidate-section-address-country'"
54
+ [valueClass]="'typo-description'" [compact]="true"></lib-field-placeholder></div>
55
+ <div [style.opacity]="addressPostCode ? '1' : '0.3'"><lib-field-placeholder
56
+ icon="no-icon" [value]="candidateDetails?.postCode" [placeholder]="'Post Code'"
57
+ [tooltip]="candidateDetails?.postCode" tooltipPosition="right"
58
+ [testId]="'candidate-section-address-post-code'" [valueClass]="'typo-description'"
63
59
  [compact]="true"></lib-field-placeholder></div>
64
60
  </div>
65
61
  </div>
66
62
  </div>
67
63
  <div class="column third-column">
68
64
  <div class="container most-recent-container" data-test-id="candidate-section-current-employer-container">
69
- <div [ngClass]="shouldShowFor('currentJob', []) || shouldShowFor('currentEmployer', []) ? '' : 'not-in-template'">
70
- <lib-field-placeholder [icon]="getIconMostRecent()"
65
+ <div [style.opacity]="currentJob ? '1' : '0.3'">
66
+ <lib-field-placeholder icon="candidate_most_recent"
71
67
  [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>' : ''"
72
68
  [placeholder]="'Current Job'"
73
69
  [tooltip]="(getCurrentJob() || getCurrentEmployer()) ? 'Most Recently : ' + getCurrentJob() + (getCurrentEmployer() ? ' at ' + getCurrentEmployer() : '') : 'Current Job'"
@@ -80,12 +76,12 @@
80
76
  </div>
81
77
  </div>
82
78
  <div class="total-exp-parent container" data-test-id="candidate-section-total-exp-parent"
83
- [ngClass]="shouldShowFor('experience', []) ? '' : 'not-in-template'"><lib-field-placeholder
84
- [icon]="getIconExperience()"
79
+ [style.opacity]="candidate_experience ? '1' : '0.3'"><lib-field-placeholder
80
+ icon="candidate_experience"
85
81
  [value]="getTotalExpYears() ? 'Total Exp - <span class=\'total-exp-value\'>' + getTotalExpYears() + '</span> yrs' : ''"
86
82
  [placeholder]="'Total Exp'"
87
83
  [tooltip]="getTotalExpYears() ? 'Total Exp - ' + getTotalExpYears() + ' yrs' : 'Total Exp'"
88
84
  tooltipPosition="right" [testId]="'candidate-section-total-exp-value'" [valueClass]="'typo-description'"
89
85
  [compact]="true"></lib-field-placeholder></div>
90
86
  </div>
91
- </div>
87
+ </div>
@@ -4,7 +4,6 @@
4
4
  display: flex;
5
5
  flex-direction: row;
6
6
  gap: 16px;
7
- padding-top: 8px;
8
7
  }
9
8
 
10
9
  .columns-wrapper {
@@ -182,4 +181,4 @@
182
181
  top: 2px !important;
183
182
  position: relative !important;
184
183
  align-items: center !important;
185
- }
184
+ }
@@ -66,14 +66,14 @@
66
66
  </app-table>
67
67
 
68
68
  <!-- Auto Bullet Button -->
69
- <button *ngIf="autobullet" class="auto-bullet" mat-flat-button (click)="event.stopPropagation(); onAutoBullet.emit()"
69
+ <button *ngIf="autobullet" class="auto-bullet" mat-flat-button (click)="$event.stopPropagation(); useAutoBullet($event)"
70
70
  [disabled]="autoBulletDisable || isLoadingAI || !checkHtmlContent('')">
71
71
  {{ AutoBulletButton }}
72
72
  </button>
73
73
 
74
74
  <!-- Bullet Skill Button -->
75
75
  <button *ngIf="skillsBullet" class="bullet-skill" mat-flat-button
76
- (click)="event.stopPropagation(); transformToSkillsBullets($event)" [disabled]="isDisabled || isLoadingAI">
76
+ (click)="$event.stopPropagation(); transformToSkillsBullets()" [disabled]="isDisabled || isLoadingAI">
77
77
  {{ skillsButton }}
78
78
  </button>
79
79
  </div>
@@ -82,7 +82,7 @@
82
82
  <!-- Individual Text Formatting Buttons (Large Containers Only) -->
83
83
  <ng-container *ngIf="!isSmallScreen">
84
84
  <button *ngFor="let item of textFormattingConfig" class="format-button" [class.active]="getActiveState(item.type)"
85
- (click)="handleTextFormattingClick($event, item)" [title]="item.title" type="button" [matTooltip]="item.title"
85
+ (onClick)="handleTextFormattingClick($event, item)" [title]="item.title" type="button" [matTooltip]="item.title"
86
86
  matTooltipPosition="above">
87
87
  <mat-icon *ngIf="isSvgIcon(item.icon)" [svgIcon]="item.icon"
88
88
  [class.active-icon]="getActiveState(item.type)"></mat-icon>
@@ -100,20 +100,20 @@
100
100
 
101
101
  <!-- Auto Bullet Button (Large Screens Only) -->
102
102
  <button *ngIf="autobullet && !isSmallScreen" class="auto-bullet" mat-flat-button
103
- (click)="event.stopPropagation(); onAutoBullet.emit()" [disabled]="autoBulletDisable || isLoadingAI || !checkHtmlContent('')">
103
+ (click)="$event.stopPropagation(); useAutoBullet($event)" [disabled]="autoBulletDisable || isLoadingAI || !checkHtmlContent('')">
104
104
  {{ AutoBulletButton }}
105
105
  </button>
106
106
 
107
107
  <!-- Bullet Skill Button (Large Screens Only) -->
108
108
  <button *ngIf="skillsBullet && !isSmallScreen" class="bullet-skill" mat-flat-button
109
- (click)="event.stopPropagation(); transformToSkillsBullets($event)" [disabled]="isDisabled || isLoadingAI">
109
+ (click)="$event.stopPropagation(); transformToSkillsBullets($event)" [disabled]="isDisabled || isLoadingAI">
110
110
  {{ skillsButton }}
111
111
  </button>
112
112
 
113
113
  <!-- History Controls (Undo/Redo) -->
114
114
  <div *ngIf="historyControls" class="history-controls">
115
115
  <!-- Undo Button -->
116
- <button class="format-button" (click)="execCmd($event, 'undo')" title="Undo" type="button" matTooltip="Undo"
116
+ <button class="format-button" (onClick)="execCmd($event, 'undo')" title="Undo" type="button" matTooltip="Undo"
117
117
  matTooltipPosition="above">
118
118
  <span class="material-icons" [class.active-icon]="getActiveState('undo')">
119
119
  undo
@@ -121,7 +121,7 @@
121
121
  </button>
122
122
 
123
123
  <!-- Redo Button -->
124
- <button class="format-button" (click)="execCmd($event, 'redo')" title="Redo" type="button" matTooltip="Redo"
124
+ <button class="format-button" (clionClickck)="execCmd($event, 'redo')" title="Redo" type="button" matTooltip="Redo"
125
125
  matTooltipPosition="above">
126
126
  <span class="material-icons" [class.active-icon]="getActiveState('redo')">
127
127
  redo
@@ -1,13 +1,13 @@
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"
3
+ <!-- <al-button [buttonType]="'icon-circle'" [iconOnly]="true"
4
4
  [leftIcon]="isLeftButtonActive ? 'close' : 'auto_fix_high'"
5
5
  [arialabel]="isLeftButtonActive ? 'Close' : 'Edit'"
6
6
  [size]="'base'"
7
7
  [color]="isLeftButtonActive ? 'grey' : 'gradient'"
8
8
  (onClick)="handleLeftButtonClick($event)">
9
- </al-button>
10
- <div *ngIf="isLeftButtonActive"
9
+ </al-button> -->
10
+ <div
11
11
  class="left-button-container"
12
12
  [ngClass]="leftContainerClass"
13
13
  [ngStyle]="leftContainerStyle">
@@ -193,7 +193,7 @@ select.al-form__control {
193
193
 
194
194
  .fab.left {
195
195
  position: absolute;
196
- left: -16px;
196
+ left: -27px;
197
197
  /* intended design: slightly outside the inner frame */
198
198
  top: 0;
199
199
  /* Changed from top: 50% to top: 0, transform will be handled by JS */
@@ -1,7 +1,7 @@
1
1
  <al-responsive-columns [gap]="gap" [padding]="padding" [leftWidth]="leftWidth" [rightWidth]="rightWidth"
2
2
  [stackAt]="stackAt">
3
3
  <div left><toolbar-left [variant]="variant" [content]="content"
4
- [isExtractionAnalysisActive]="isExtractionAnalysisActive" [showSearch]="showSearch"
4
+ [isExtractionAnalysisActive]="isExtractionAnalysisActive"
5
5
  [overrideConfig]="overrideConfig" (editEvent)="onEditEvent($event)"></toolbar-left></div>
6
6
  <div center><al-resume-entries [entries]="entries" [showHeader]="showHeader"
7
7
  [showDescriptionLabel]="showDescriptionLabel" [showCompany]="showCompany" [showJobTitle]="showJobTitle"
@@ -17,4 +17,4 @@
17
17
  (visibilityToggle)="onVisibilityToggle($event)" (hideShowEvent)="onHideShowEvent($event)"
18
18
  (checkboxEvent)="onCheckboxEvent($event)" (setSubroleEvent)="onSetSubroleEvent($event)"></toolbar-right>
19
19
  </div>
20
- </al-responsive-columns>
20
+ </al-responsive-columns>
@@ -1,12 +1,18 @@
1
1
  <div class="field-row" [class.field-row-compact]="compact === true" [class.field-row-padded]="padded === true">
2
2
  <ng-container *ngIf="icon">
3
3
  <span class="field-icon">
4
- <ng-container *ngIf="isMaterialIcon(icon); else imageIcon">
4
+ <ng-container *ngIf="icon === 'no-icon'">
5
+ <!-- Transparent spacer to maintain icon alignment -->
6
+ </ng-container>
7
+ <ng-container *ngIf="isRegisteredSvgIcon(icon) && icon !== 'no-icon'">
8
+ <mat-icon [svgIcon]="icon"></mat-icon>
9
+ </ng-container>
10
+ <ng-container *ngIf="isMaterialIcon(icon) && !isRegisteredSvgIcon(icon) && icon !== 'no-icon'">
5
11
  <mat-icon [fontSet]="iconFont">{{ icon }}</mat-icon>
6
12
  </ng-container>
7
- <ng-template #imageIcon>
13
+ <ng-container *ngIf="!isMaterialIcon(icon) && !isRegisteredSvgIcon(icon) && icon !== 'no-icon'">
8
14
  <img [src]="icon" [alt]="iconAlt || 'icon'" />
9
- </ng-template>
15
+ </ng-container>
10
16
  </span>
11
17
  </ng-container>
12
18
  <span [matTooltip]="tooltip" [matTooltipPosition]="tooltipPosition" [matTooltipDisabled]="!tooltip"
@@ -51,7 +51,7 @@
51
51
  line-height: 140%;
52
52
  letter-spacing: 0.04px;
53
53
  min-height: 28px;
54
- align-items: flex-start;
54
+ align-items: center;
55
55
  }
56
56
 
57
57
  .field-row-padded {
@@ -73,9 +73,9 @@
73
73
  object-fit: contain;
74
74
  font-size: 20px;
75
75
  line-height: 20px;
76
- display: inline-flex;
77
- align-items: center;
78
- justify-content: center;
76
+ display: inline-flex;
77
+ align-items: center;
78
+ justify-content: center;
79
79
  color: #37C1CE;
80
80
  }
81
81
 
@@ -93,4 +93,4 @@
93
93
  overflow: hidden !important;
94
94
  text-overflow: ellipsis !important;
95
95
  white-space: normal !important;
96
- }
96
+ }
@@ -62,7 +62,7 @@
62
62
  flex: 1;
63
63
  width: 100%;
64
64
  gap: 12px;
65
- padding-top: 4px;
65
+ padding-top: 8px;
66
66
  }
67
67
 
68
68
  .timeline-indicator {
@@ -1,5 +1,15 @@
1
1
  <mat-tab-group [selectedIndex]="selectedIndex" [class]="'tabs-' + size" mat-align-tabs="start" headerPosition="above">
2
- <mat-tab *ngFor="let tab of tabComponents; let i = index" [label]="tab.labelText">
2
+ <mat-tab *ngFor="let tab of tabComponents; let i = index">
3
+ <ng-template mat-tab-label>
4
+ <span [ngClass]="{ 'tab-label-content': true, 'icon-only-tab': tab.icon && tab.showIcon && !tab.labelText }"
5
+ [matTooltip]="tab.effectiveTooltip"
6
+ [matTooltipPosition]="tab.tooltipPosition"
7
+ [matTooltipDisabled]="!tab.effectiveTooltip">
8
+ <mat-icon *ngIf="tab.icon && tab.showIcon && tab.iconType === 'svg'" [svgIcon]="tab.icon"></mat-icon>
9
+ <mat-icon *ngIf="tab.icon && tab.showIcon && tab.iconType === 'font'">{{ tab.icon }}</mat-icon>
10
+ <ng-container *ngIf="tab.labelText">{{ tab.labelText }}</ng-container>
11
+ </span>
12
+ </ng-template>
3
13
  <ng-container [ngTemplateOutlet]="tab.templateRef"></ng-container>
4
14
  </mat-tab>
5
15
  <!-- Debug info -->