@allsorter/ui-components 0.0.398 → 0.0.402

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.
@@ -23,6 +23,20 @@ export declare class NewResumeHeaderComponent implements OnInit, OnDestroy, Afte
23
23
  * 2. Otherwise, fall back to `hiddenSection.headerSectionHidden` for backward compatibility.
24
24
  */
25
25
  get isSectionHidden(): boolean;
26
+ /**
27
+ * Returns dynamic styles based on field visibility.
28
+ * Used by extra sections to apply template-driven background colors.
29
+ *
30
+ * Only applies custom styles when fieldVisibility is configured.
31
+ * When section is hidden without fieldVisibility: no custom styles (CSS handles opacity)
32
+ * When field is visible: light background (#ECEDF1)
33
+ * When field is hidden: dark background (#4B4F62)
34
+ *
35
+ * @returns Object with CSS properties for ngStyle binding, or empty object for default CSS
36
+ */
37
+ getDynamicStyles(): {
38
+ [key: string]: string;
39
+ };
26
40
  buttonConfig: HeaderButton[];
27
41
  isLargeScreen: boolean;
28
42
  private resizeListener?;
@@ -33,6 +47,20 @@ export declare class NewResumeHeaderComponent implements OnInit, OnDestroy, Afte
33
47
  showPopOutPanel: boolean;
34
48
  popOutMessage: string;
35
49
  dataTestId?: string;
50
+ /**
51
+ * Field visibility configuration for extra sections.
52
+ * Controls dynamic background color and padding based on template field visibility.
53
+ * When not provided, defaults to visible state (light background).
54
+ */
55
+ fieldVisibility: {
56
+ isVisible: boolean;
57
+ fieldIdentifier?: string;
58
+ };
59
+ /**
60
+ * Index for indexed field checks (e.g., extra-section with esd1, esd2, etc.)
61
+ * Optional - only needed when using indexed field identifiers
62
+ */
63
+ index?: number;
36
64
  get shouldShowPopOut(): boolean;
37
65
  /**
38
66
  * Combined state for expand/collapse animation.
@@ -123,5 +151,5 @@ export declare class NewResumeHeaderComponent implements OnInit, OnDestroy, Afte
123
151
  ngAfterViewInit(): void;
124
152
  ngOnDestroy(): void;
125
153
  static ɵfac: i0.ɵɵFactoryDeclaration<NewResumeHeaderComponent, never>;
126
- static ɵcmp: i0.ɵɵComponentDeclaration<NewResumeHeaderComponent, "al-newresumeheader", never, { "title": { "alias": "title"; "required": false; }; "showHeaderCheckbox": { "alias": "showHeaderCheckbox"; "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; }; }, { "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>;
154
+ static ɵcmp: i0.ɵɵComponentDeclaration<NewResumeHeaderComponent, "al-newresumeheader", never, { "title": { "alias": "title"; "required": false; }; "showHeaderCheckbox": { "alias": "showHeaderCheckbox"; "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; }; }, { "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>;
127
155
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allsorter/ui-components",
3
- "version": "0.0.398",
3
+ "version": "0.0.402",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0",
@@ -2,7 +2,14 @@
2
2
  [padding]="'0'" [width]="'100%'"><cdk-accordion class="example-accordion"><cdk-accordion-item
3
3
  #accordionItem="cdkAccordionItem" [expanded]="true" class="example-accordion-item">
4
4
  <div class="example-accordion-item-header" #accordionHeader
5
- [ngClass]="{'header-hidden': isSectionHidden, 'header-with-bottom-margin': !showPopOutPanel}">
5
+ [ngClass]="{
6
+ 'header-hidden': isSectionHidden,
7
+ 'header-hide-sb': (fieldVisibility?.isVisible === false),
8
+ 'header-visible-sb': (fieldVisibility?.isVisible !== false),
9
+ 'header-with-bottom-margin': !showPopOutPanel
10
+ }"
11
+ [ngStyle]="getDynamicStyles()"
12
+ [attr.data-test-id]="dataTestId">
6
13
  <!-- Normal header layout (shows when section is NOT hidden) --><ng-container
7
14
  *ngIf="!isSectionHidden; else hiddenHeaderLayout"><al-responsive-columns [stackAt]="0" [gap]="'12px'"
8
15
  [padding]="'8px 12px'">
@@ -26,6 +33,7 @@
26
33
  <div left>
27
34
  <div class="edit-input-group" [ngClass]="{'input-focused': isInputFocused}">
28
35
  <div class="content_width"><span *ngIf="!isTitleEditing" class="title-text"
36
+ [ngClass]="{ 'title-text-white': fieldVisibility?.isVisible === false }"
29
37
  (click)="onTitleClick()">
30
38
  {{ title || 'Click to edit' }}
31
39
  </span><input *ngIf="isTitleEditing" #titleInput type="text" [(ngModel)]="editedTitle"
@@ -71,13 +79,14 @@
71
79
  [rightWidth]="'32px'">
72
80
  <div left>
73
81
  <div class="edit-input-group hide-header-title">
74
- <div class="content_width"><span class="title-text header-text-turncate">
82
+ <div class="content_width"><span class="title-text header-text-turncate"
83
+ [ngClass]="{ 'title-text-white': fieldVisibility?.isVisible === false }">
75
84
  {{ title }}
76
85
  </span></div>
77
86
  </div>
78
87
  </div>
79
88
  <div center>
80
- <div class="hidden-write">Section hidden</div>
89
+ <div class="hidden-write-sb" [ngClass]="{ 'hidden-write-white-sb': fieldVisibility?.isVisible === false }">Section hidden</div>
81
90
  </div>
82
91
  <div right><ng-content select="[header-center-right]"></ng-content>
83
92
  <!-- Eye icon - uses actual isHidden value from config, always visible --><ng-container
@@ -123,12 +132,13 @@
123
132
  <div class="mat-checkbox-margin align-center"
124
133
  [attr.data-test-id]="isHidden ? 'section-show-eye-div' : 'section-hide-eye-div'"
125
134
  style="display: flex; align-items: center; justify-content: center;"><mat-icon
126
- class="delete-multiple mat-fab.mat-accent eye-icon" [svgIcon]="isHidden ? 'visibility' : 'visibility_off'"
135
+ class="delete-multiple mat-fab.mat-accent eye-icon" [svgIcon]="isHidden ? (fieldVisibility?.isVisible === false ? 'visibility_white' : 'visibility') : (fieldVisibility?.isVisible === false ? 'visibility_off_white' : 'visibility_off')"
127
136
  [matTooltip]="configEyeToggle?.tooltips?.[isHidden ? 'collapse' : 'expand'] || (isHidden ? 'Show Section' : 'Hide Section')"
128
137
  [matTooltipPosition]="configEyeToggle?.tooltips?.position || 'above'"
129
138
  [attr.aria-label]="configEyeToggle?.ariaLabels?.[isHidden ? 'collapsed' : 'expanded'] || (isHidden ? 'Show section' : 'Hide section')"
130
139
  (click)="onEyeIconClick(isHidden, accordionItem, configEyeToggle)"
131
140
  [attr.data-test-id]="isHidden ? 'section-show-eye-icon' : 'section-hide-eye-icon'"
132
- style="cursor: pointer; display: inline-block; width: 24px; height: 24px; font-size: 24px; color: #717793;"
141
+ [style.color]="fieldVisibility?.isVisible === false ? '#fff' : '#717793'"
142
+ style="cursor: pointer; display: inline-block; width: 24px; height: 24px; font-size: 24px;"
133
143
  [style.opacity]="1" [style.visibility]="'visible'"></mat-icon></div>
134
144
  </ng-template>
@@ -62,7 +62,7 @@
62
62
  .example-accordion-item-header al-responsive-columns div[center] al-responsive-columns div[left] {
63
63
  flex-shrink: 1;
64
64
  min-width: 0;
65
- overflow: hidden;
65
+ overflow: visible;
66
66
  max-width: 100%;
67
67
  transition: flex 0.2s ease, width 0.2s ease;
68
68
  }
@@ -77,7 +77,7 @@
77
77
 
78
78
  .example-accordion-item-header al-responsive-columns div[center] al-responsive-columns ::ng-deep .column.left {
79
79
  min-width: 0;
80
- overflow: hidden;
80
+ overflow: visible;
81
81
  max-width: 100%;
82
82
  transition: flex 0.2s ease;
83
83
  }
@@ -114,9 +114,9 @@
114
114
 
115
115
  /* Animation wrapper - ensures smooth height transitions */
116
116
  // .example-accordion-item-body-wrapper {
117
- // width: 100%;
118
- // overflow: hidden;
119
- // }
117
+ // width: 100%;
118
+ // overflow: hidden;
119
+ // }
120
120
 
121
121
  .toggle-button {
122
122
  border: none;
@@ -213,19 +213,44 @@
213
213
  }
214
214
 
215
215
  /* Edit input group hover effect for title */
216
+ // .edit-input-group {
217
+ // display: flex;
218
+ // align-items: center;
219
+ // gap: 4px;
220
+ // min-width: 0;
221
+ // border-radius: 4px;
222
+ // transition: background-color 0.2s ease, width 0.2s ease;
223
+ // padding: 0 8px;
224
+ // flex-shrink: 1;
225
+ // width: 100%;
226
+ // max-width: 100%;
227
+ // overflow: hidden;
228
+ // flex: 1 1 0;
229
+ // }
230
+
231
+ // /* Expand edit-input-group to 100% width when input is focused */
232
+ // .edit-input-group.input-focused {
233
+ // width: 100%;
234
+ // flex: 1 1 100%;
235
+ // min-width: 0;
236
+ // }
237
+
238
+ // .edit-input-group:hover {
239
+ // background-color: #D1D3DB;
240
+ // }
216
241
  .edit-input-group {
217
242
  display: flex;
218
243
  align-items: center;
219
244
  gap: 4px;
220
245
  min-width: 0;
221
246
  border-radius: 4px;
222
- transition: background-color 0.2s ease, width 0.2s ease;
247
+ transition: width 0.2s ease, background-color 0.2s ease;
223
248
  padding: 0 8px;
224
- flex-shrink: 1;
249
+ margin: 0 -8px;
225
250
  width: 100%;
226
- max-width: 100%;
227
- overflow: hidden;
251
+ overflow: visible;
228
252
  flex: 1 1 0;
253
+ position: relative;
229
254
  }
230
255
 
231
256
  /* Expand edit-input-group to 100% width when input is focused */
@@ -235,6 +260,7 @@
235
260
  min-width: 0;
236
261
  }
237
262
 
263
+ /* Hover effect - direct background */
238
264
  .edit-input-group:hover {
239
265
  background-color: #D1D3DB;
240
266
  }
@@ -448,6 +474,11 @@
448
474
  cursor: pointer;
449
475
  }
450
476
 
477
+ /* White text for dark background */
478
+ .title-text-white {
479
+ color: #fff;
480
+ }
481
+
451
482
  .title-input {
452
483
  font-size: 16px;
453
484
  font-weight: 400;
@@ -562,18 +593,39 @@
562
593
  flex-shrink: 0;
563
594
  }
564
595
 
565
- .hidden-write {
596
+ .hidden-write-sb {
566
597
  color: #a2a6b8;
567
598
  font-weight: 400;
568
599
  font-family: 'Roboto', sans-serif;
569
600
  white-space: nowrap;
570
601
  }
571
602
 
603
+ /* White text for dark background */
604
+ .hidden-write-white-sb {
605
+ color: #fff;
606
+ }
607
+
572
608
  /* Apply reduced opacity to entire header when hidden */
573
609
  .example-accordion-item-header.header-hidden {
574
610
  opacity: 0.7;
575
611
  }
576
612
 
613
+ /**
614
+ * Extra Section Header Styles
615
+ * These classes are used for extra sections to support dynamic background colors
616
+ * based on template field visibility
617
+ */
618
+
619
+ /* Standard header style - visible section with light background */
620
+ .example-accordion-item-header.header-visible-sb {
621
+ transition: background-color 0.2s ease;
622
+ }
623
+
624
+ /* Collapsed header style - hidden section or field with dark background */
625
+ .example-accordion-item-header.header-hide-sb {
626
+ background-color: #4B4F62;
627
+ }
628
+
577
629
  .mat-checkbox-margin {
578
630
  margin-left: 8px;
579
631
  }
@@ -584,34 +636,34 @@
584
636
 
585
637
  /* Smooth hover effect on eye icon container - circular background without jumping */
586
638
  // .mat-checkbox-margin {
587
- // position: relative;
588
- // display: inline-flex;
589
- // align-items: center;
590
- // justify-content: center;
591
-
592
- // &::before {
593
- // content: '';
594
- // position: absolute;
595
- // top: 50%;
596
- // left: 50%;
597
- // transform: translate(-50%, -50%);
598
- // width: 28px;
599
- // height: 28px;
600
- // border-radius: 4px;
601
- // background-color: transparent;
602
- // transition: background-color 0.2s ease;
603
- // z-index: 0;
604
- // pointer-events: none;
605
- // }
606
-
607
- // &:hover::before {
608
- // background-color: rgba(211, 211, 211, 0.9) !important;
609
-
610
- // }
611
-
612
- // /* Ensure icon stays above the background */
613
- // mat-icon {
614
- // position: relative;
615
- // z-index: 1;
616
- // }
617
- // }
639
+ // position: relative;
640
+ // display: inline-flex;
641
+ // align-items: center;
642
+ // justify-content: center;
643
+
644
+ // &::before {
645
+ // content: '';
646
+ // position: absolute;
647
+ // top: 50%;
648
+ // left: 50%;
649
+ // transform: translate(-50%, -50%);
650
+ // width: 28px;
651
+ // height: 28px;
652
+ // border-radius: 4px;
653
+ // background-color: transparent;
654
+ // transition: background-color 0.2s ease;
655
+ // z-index: 0;
656
+ // pointer-events: none;
657
+ // }
658
+
659
+ // &:hover::before {
660
+ // background-color: rgba(211, 211, 211, 0.9) !important;
661
+
662
+ // }
663
+
664
+ // /* Ensure icon stays above the background */
665
+ // mat-icon {
666
+ // position: relative;
667
+ // z-index: 1;
668
+ // }
669
+ // }
@@ -5,7 +5,7 @@
5
5
  .container {
6
6
  display: grid;
7
7
  grid-template-columns: var(--template-columns, var(--left-width, auto) 1fr var(--right-width, auto));
8
- gap: var(--gap, 12px);
8
+ gap: var(--gap, 8px);
9
9
  padding: var(--padding, 0);
10
10
  }
11
11