@allsorter/ui-components 0.0.408 → 0.0.412

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/fesm2022/allsorter-ui-components.mjs +134 -61
  2. package/fesm2022/allsorter-ui-components.mjs.map +1 -1
  3. package/lib/editable-form-wrapper/editable-form-wrapper.component.d.ts +6 -1
  4. package/lib/loader/loader.component.d.ts +7 -2
  5. package/lib/newresumeheader/newresumeheader.component.d.ts +3 -1
  6. package/lib/responsive-layout/responsive-layout.component.d.ts +1 -0
  7. package/lib/toggle-buttons/toggle-buttons.component.d.ts +2 -0
  8. package/package.json +1 -1
  9. package/src/lib/button/button.component.scss +1 -0
  10. package/src/lib/candidate-section/candidate-section.component.html +13 -17
  11. package/src/lib/candidate-section/candidate-section.component.scss +1 -0
  12. package/src/lib/custom-editor/custom-editor.component.scss +1 -1
  13. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.html +0 -7
  14. package/src/lib/editable-form-wrapper/editable-form-wrapper.component.scss +269 -25
  15. package/src/lib/field-placeholder/field-placeholder.component.scss +4 -5
  16. package/src/lib/input/input.component.scss +2 -0
  17. package/src/lib/loader/loader.component.html +5 -5
  18. package/src/lib/loader/loader.component.scss +36 -13
  19. package/src/lib/newresumeheader/newresumeheader.component.html +2 -2
  20. package/src/lib/newresumeheader/newresumeheader.component.scss +6 -1
  21. package/src/lib/resume-entries/resume-entries.component.html +4 -1
  22. package/src/lib/resume-entries/resume-entries.component.scss +19 -11
  23. package/src/lib/tabs/tabs.component.html +1 -1
  24. package/src/lib/tabs/tabs.component.scss +7 -0
  25. package/src/lib/test-styling/test-styling.component.html +159 -1
  26. package/src/lib/toggle-buttons/toggle-buttons.component.html +4 -2
  27. package/src/lib/toggle-buttons/toggle-buttons.component.scss +16 -0
@@ -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-icons">psychology</mat-icon>
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">build</mat-icon>
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: 8px;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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 3s ease-in-out;
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>
@@ -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
- <lib-field-placeholder [value]="entry.country" [placeholder]="'Country'" valueClass="font-location-text"
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
- display: -webkit-box !important;
355
- -webkit-line-clamp: 1 !important;
356
- line-clamp: 1 !important;
357
- -webkit-box-orient: vertical !important;
358
- overflow: hidden !important;
359
- text-overflow: ellipsis !important;
360
- white-space: normal !important;
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 }"
@@ -68,6 +68,13 @@
68
68
  }
69
69
  }
70
70
 
71
+ // Icon size - 20x20px for all icons
72
+ .mat-mdc-tab .mat-icon {
73
+ width: 20px !important;
74
+ height: 20px !important;
75
+ font-size: 20px !important;
76
+ }
77
+
71
78
  // Medium size (36px height) - default
72
79
  &.tabs-medium .mat-mdc-tab-header {
73
80
  height: 36px;
@@ -149,6 +149,164 @@
149
149
  <!-- candidate-section-form -->
150
150
 
151
151
  </al-tab>
152
+ <al-tab labelText="Education">
153
+ <h2>Education Section - Responsive Form Layout</h2>
154
+ <p>Testing field order and responsive behavior</p>
155
+
156
+ <al-form [showLeftButton]="true" [showSaveButton]="true" [showDeleteButton]="true" [testId]="'education-section'"
157
+ (leftButtonClick)="onLeftButtonClick($event)" (saveButtonClick)="onSaveButtonClick($event)"
158
+ (deleteButtonClick)="onDeleteButtonClick($event)">
159
+ <div leftButtonContent>
160
+ <al-ai-apply-bar [placeholder]="'Apply AI'" [applyLabel]="'Apply'" [showHelperText]="true" [showClose]="false"
161
+ [showChevronButton]="false" [applyDisabled]="false" [value]="'Apply AI'"
162
+ [options]="['Typing', 'Gathering', 'Processing']" (valueChange)="onAIApplyValueChange($event)"
163
+ (applyClick)="onAIApplyClick()" (closeClick)="onAIApplyClose()">
164
+ </al-ai-apply-bar>
165
+ </div>
166
+
167
+ <!-- Row: Date Type, Current Study (checkbox), Start Date, End Date -->
168
+ <!-- Mobile: 2 rows (Date Type|Checkbox, Start|End) - Desktop: reordered -->
169
+ <app-flex-grid [type]="'row'" [mobRow]="2" [tabRow]="2" [desktop]="4" [gap]="'16px'" [minColumns]="2">
170
+ <al-input [label]="'Date Type'" [placeholder]="'Select Date Type'" [value]="'Month/Year'" [type]="'text'"
171
+ [disabled]="false" [helperText]="false" [hasDropDown]="true" [options]="['Month/Year','Year']"
172
+ [size]="'base'" [types]="'primary'" [dataTestId]="'edu-date-type'"></al-input>
173
+ <al-checkbox labelPosition="after" labelText="Current Study"
174
+ (change)="onFormCheckboxChange($event)"></al-checkbox>
175
+ <al-input [label]="'start Date'" [placeholder]="'End Date'" [value]="''" [type]="'date'" [disabled]="false"
176
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'edu-end-date'"
177
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
178
+ <al-input [label]="'End Date'" [placeholder]="'End Date'" [value]="''" [type]="'date'" [disabled]="false"
179
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'edu-end-date'"
180
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
181
+ </app-flex-grid>
182
+
183
+ <!-- Row: Core Fields -->
184
+ <app-flex-grid [type]="'column'" [rows]="1" [mobRow]="1" [tabRow]="1" [desktop]="1" [gap]="'16px'">
185
+ <al-input [label]="'Course Title'" [placeholder]="'Course Title'" [value]="'Bachelor of Science'"
186
+ [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
187
+ <al-input [label]="'School Name'" [placeholder]="'School Name'" [value]="'Oxford University'" [type]="'text'"
188
+ [size]="'base'" [types]="'primary'"></al-input>
189
+ <al-input [label]="'Type of Degree'" [placeholder]="'Type of Degree'" [value]="'Bachelor'" [type]="'text'"
190
+ [size]="'base'" [types]="'primary'"></al-input>
191
+ <al-input [label]="'Education Description'" [placeholder]="'Education Description'"
192
+ [value]="'Studied Computer Science'" [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
193
+ <al-input [label]="'Education Location'" [placeholder]="'Education Location'" [value]="'Oxford, UK'"
194
+ [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
195
+ </app-flex-grid>
196
+
197
+ <!-- Rich Text Editor Section -->
198
+ <app-flex-grid [type]="'column'" [gap]="16" [countMobile]="1" [countTablet]="1" [countDesktop]="1">
199
+ <app-custom-editor [isVisible]="true" [showTable]="true" [historyControls]="true" [autobullet]="true"
200
+ [showLabels]="true" leftLabelText="Document Title" rightLabelText="Page 1 of 5"
201
+ initialValue="<p>Start typing here...</p>" editScreenSection="GENERAL" actionType="edit"
202
+ [dataTestId]="'custom-editor-testid'" (contentChangeFromQuill)="onContentChange($event)"
203
+ (ApplyAIinQuill)="onAIApply($event)"></app-custom-editor>
204
+ </app-flex-grid>
205
+ </al-form>
206
+ </al-tab>
207
+ <al-tab labelText="Edu Without Date Type">
208
+ <h2>Education Section - Without Date Type</h2>
209
+ <p>Testing layout when Date Type field is not present</p>
210
+
211
+ <al-form [showLeftButton]="true" [showSaveButton]="true" [showDeleteButton]="true" [testId]="'edu-without-date-type'"
212
+ (leftButtonClick)="onLeftButtonClick($event)" (saveButtonClick)="onSaveButtonClick($event)"
213
+ (deleteButtonClick)="onDeleteButtonClick($event)">
214
+ <div leftButtonContent>
215
+ <al-ai-apply-bar [placeholder]="'Apply AI'" [applyLabel]="'Apply'" [showHelperText]="true" [showClose]="false"
216
+ [showChevronButton]="false" [applyDisabled]="false" [value]="'Apply AI'"
217
+ [options]="['Typing', 'Gathering', 'Processing']" (valueChange)="onAIApplyValueChange($event)"
218
+ (applyClick)="onAIApplyClick()" (closeClick)="onAIApplyClose()">
219
+ </al-ai-apply-bar>
220
+ </div>
221
+
222
+ <!-- Row: Current Study (checkbox), Start Date, End Date -->
223
+ <!-- Mobile: 3 rows (each field on own row) - Desktop: reordered -->
224
+ <app-flex-grid [type]="'row'" [mobRow]="2" [tabRow]="2" [desktop]="4" [gap]="'16px'" [minColumns]="2">
225
+ <al-checkbox labelPosition="after" labelText="Current Study"
226
+ (change)="onFormCheckboxChange($event)"></al-checkbox>
227
+ <al-input [label]="'Start Date'" [placeholder]="'Start Date'" [value]="''" [type]="'date'" [disabled]="false"
228
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'edu-start-date'"
229
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
230
+ <al-input [label]="'End Date'" [placeholder]="'End Date'" [value]="''" [type]="'date'" [disabled]="false"
231
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'edu-end-date'"
232
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
233
+ </app-flex-grid>
234
+
235
+ <!-- Row: Core Fields -->
236
+ <app-flex-grid [type]="'column'" [rows]="1" [mobRow]="1" [tabRow]="1" [desktop]="1" [gap]="'16px'">
237
+ <al-input [label]="'Course Title'" [placeholder]="'Course Title'" [value]="'Bachelor of Science'"
238
+ [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
239
+ <al-input [label]="'School Name'" [placeholder]="'School Name'" [value]="'Oxford University'" [type]="'text'"
240
+ [size]="'base'" [types]="'primary'"></al-input>
241
+ <al-input [label]="'Type of Degree'" [placeholder]="'Type of Degree'" [value]="'Bachelor'" [type]="'text'"
242
+ [size]="'base'" [types]="'primary'"></al-input>
243
+ <al-input [label]="'Education Description'" [placeholder]="'Education Description'"
244
+ [value]="'Studied Computer Science'" [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
245
+ <al-input [label]="'Education Location'" [placeholder]="'Education Location'" [value]="'Oxford, UK'"
246
+ [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
247
+ </app-flex-grid>
248
+
249
+ <!-- Rich Text Editor Section -->
250
+ <app-flex-grid [type]="'column'" [gap]="16" [countMobile]="1" [countTablet]="1" [countDesktop]="1">
251
+ <app-custom-editor [isVisible]="true" [showTable]="true" [historyControls]="true" [autobullet]="true"
252
+ [showLabels]="true" leftLabelText="Document Title" rightLabelText="Page 1 of 5"
253
+ initialValue="<p>Start typing here...</p>" editScreenSection="GENERAL" actionType="edit"
254
+ [dataTestId]="'custom-editor-testid'" (contentChangeFromQuill)="onContentChange($event)"
255
+ (ApplyAIinQuill)="onAIApply($event)"></app-custom-editor>
256
+ </app-flex-grid>
257
+ </al-form>
258
+ </al-tab>
259
+ <al-tab labelText="3-Column Layout">
260
+ <h2>3-Column Layout Test</h2>
261
+ <p>Start Date → End Date → Checkbox (equal widths on desktop, checkbox first on mobile)</p>
262
+
263
+ <al-form [showLeftButton]="true" [showSaveButton]="true" [showDeleteButton]="true" [testId]="'3-col-layout'"
264
+ (leftButtonClick)="onLeftButtonClick($event)" (saveButtonClick)="onSaveButtonClick($event)"
265
+ (deleteButtonClick)="onDeleteButtonClick($event)">
266
+ <div leftButtonContent>
267
+ <al-ai-apply-bar [placeholder]="'Apply AI'" [applyLabel]="'Apply'" [showHelperText]="true" [showClose]="false"
268
+ [showChevronButton]="false" [applyDisabled]="false" [value]="'Apply AI'"
269
+ [options]="['Typing', 'Gathering', 'Processing']" (valueChange)="onAIApplyValueChange($event)"
270
+ (applyClick)="onAIApplyClick()" (closeClick)="onAIApplyClose()">
271
+ </al-ai-apply-bar>
272
+ </div>
273
+
274
+ <!-- 3-Column Layout: Start Date, End Date, Checkbox -->
275
+ <!-- Desktop: 3 equal columns (1fr each) -->
276
+ <!-- Mobile: Checkbox first (full width), then dates in row 2 -->
277
+ <app-flex-grid [type]="'row'" [mobRow]="2" [tabRow]="3" [desktop]="3" [gap]="'16px'" [minColumns]="3">
278
+ <al-input [label]="'Start Date'" [placeholder]="'Start Date'" [value]="''" [type]="'date'" [disabled]="false"
279
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'3-col-start-date'"
280
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
281
+ <al-input [label]="'End Date'" [placeholder]="'End Date'" [value]="''" [type]="'date'" [disabled]="false"
282
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'3-col-end-date'"
283
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
284
+ <al-checkbox labelPosition="after" labelText="Current Study"
285
+ (change)="onFormCheckboxChange($event)"></al-checkbox>
286
+ </app-flex-grid>
287
+
288
+ <!-- Test: Checkbox FIRST (matching actual project DOM order) -->
289
+ <p style="margin-top: 24px; color: #666; font-size: 14px;"><strong>Test with Checkbox First (Actual [type]="'row'" [mobRow]="2" [tabRow]="3" [desktop]="3" [gap]="'16px'" [minColumns]="3" Project Order):</strong></p>
290
+ <app-flex-grid>
291
+ <al-checkbox labelPosition="after" labelText="Current Study"
292
+ (change)="onFormCheckboxChange($event)"></al-checkbox>
293
+ <al-input [label]="'Start Date'" [placeholder]="'Start Date'" [value]="''" [type]="'date'" [disabled]="false"
294
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'3-col-start-date-2'"
295
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
296
+ <al-input [label]="'End Date'" [placeholder]="'End Date'" [value]="''" [type]="'date'" [disabled]="false"
297
+ [helperText]="false" [size]="'base'" [types]="'primary'" [dataTestId]="'3-col-end-date-2'"
298
+ (monthSelected)="onMonthSelected($event)" (yearSelected)="onYearSelected($event)"></al-input>
299
+ </app-flex-grid>
300
+
301
+ <!-- Core Fields -->
302
+ <app-flex-grid [type]="'column'" [rows]="1" [mobRow]="1" [tabRow]="1" [desktop]="1" [gap]="'16px'">
303
+ <al-input [label]="'Course Title'" [placeholder]="'Course Title'" [value]="'Bachelor of Science'"
304
+ [type]="'text'" [size]="'base'" [types]="'primary'"></al-input>
305
+ <al-input [label]="'School Name'" [placeholder]="'School Name'" [value]="'Oxford University'" [type]="'text'"
306
+ [size]="'base'" [types]="'primary'"></al-input>
307
+ </app-flex-grid>
308
+ </al-form>
309
+ </al-tab>
152
310
  <al-tab labelText="CoverSheet">
153
311
  <h3>About Us</h3>
154
312
  <p>Learn more about our company and mission.</p>
@@ -158,4 +316,4 @@
158
316
  <p>Get in touch with us through various channels.</p>
159
317
  </al-tab>
160
318
  </al-tabs>
161
- </al-general-container>
319
+ </al-general-container>
@@ -2,11 +2,13 @@
2
2
  (change)="onSelectionChange($event.value)" [ngClass]="[getSizeClass(), vertical ? 'al-toggle-vertical' : '']">
3
3
 
4
4
  <mat-button-toggle *ngFor="let button of buttons" [value]="button.id" [disabled]="button.disabled"
5
- [attr.aria-label]="button.label" [style.display]="'inline-flex'" [style.align-items]="'center'"
5
+ [attr.aria-label]="button.label" [matTooltip]="button.tooltip" [style.display]="'inline-flex'" [style.align-items]="'center'"
6
6
  [style.gap.px]="computeGap(button)" [attr.data-testid]="button.dataTestId || dataTestId">
7
7
 
8
8
  <!-- Icon (shown based on type) -->
9
- <mat-icon *ngIf="(type === 'default' || type === 'icon-only') && button.icon?.trim()" class="button-icon">{{
9
+ <mat-icon *ngIf="(type === 'default' || type === 'icon-only') && button.icon?.trim()"
10
+ [fontSet]="button.fontSet || 'material-icons'"
11
+ class="button-icon">{{
10
12
  button.icon }}</mat-icon>
11
13
 
12
14
  <!-- Label (shown based on type) -->
@@ -3,6 +3,7 @@
3
3
  ============================================ */
4
4
 
5
5
  @import url("https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined");
6
+ @import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200");
6
7
  @import '../styles/colors.scss';
7
8
  @import '../styles/typography-classes.scss';
8
9
 
@@ -282,3 +283,18 @@ mat-button-toggle:focus-visible {
282
283
  outline: 2px solid $color-blue-500;
283
284
  outline-offset: 2px;
284
285
  }
286
+
287
+ /* ============================================
288
+ MATERIAL SYMBOLS OUTLINED SUPPORT
289
+ ============================================ */
290
+
291
+ /* Material Symbols Outlined font family */
292
+ ::ng-deep .material-symbols-outlined {
293
+ font-family: 'Material Symbols Outlined';
294
+ font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
295
+ }
296
+
297
+ mat-button-toggle .mat-icon.material-symbols-outlined {
298
+ font-family: 'Material Symbols Outlined' !important;
299
+ font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24 !important;
300
+ }