@allsorter/ui-components 0.0.358 → 0.0.359
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Component, EventEmitter, Input, Output, NgModule, forwardRef } from '@angular/core';
|
|
2
|
+
import { Injectable, Component, EventEmitter, Input, Output, NgModule, forwardRef, HostBinding } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i1$1 from '@angular/material/icon';
|
|
@@ -459,6 +459,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
459
459
|
}]
|
|
460
460
|
}] });
|
|
461
461
|
|
|
462
|
+
class LoaderComponent {
|
|
463
|
+
/**
|
|
464
|
+
* This @HostBinding adds a class to the component's host element (<al-loader>)
|
|
465
|
+
* that matches the current status. For example, if status is 'processing',
|
|
466
|
+
* it adds `class="status-processing"`. This is what our CSS uses to show the right icon.
|
|
467
|
+
*/
|
|
468
|
+
get statusClass() {
|
|
469
|
+
const classes = [`status-${this.status}`, `size-${this.size}`];
|
|
470
|
+
if (this.autoLoop) {
|
|
471
|
+
classes.push('auto-loop');
|
|
472
|
+
}
|
|
473
|
+
return classes.join(' ');
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Get the display text for the current status
|
|
477
|
+
*/
|
|
478
|
+
get displayText() {
|
|
479
|
+
if (this.customText) {
|
|
480
|
+
return this.customText;
|
|
481
|
+
}
|
|
482
|
+
// Use custom texts array if provided
|
|
483
|
+
if (this.customTexts && this.customTexts.length >= 5) {
|
|
484
|
+
const statusIndex = this.statusOrder.indexOf(this.status);
|
|
485
|
+
if (statusIndex >= 0) {
|
|
486
|
+
return this.customTexts[statusIndex];
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
switch (this.status) {
|
|
490
|
+
case 'analyzing':
|
|
491
|
+
return 'Analyzing...';
|
|
492
|
+
case 'gathering':
|
|
493
|
+
return 'Gathering...';
|
|
494
|
+
case 'processing':
|
|
495
|
+
return 'Processing...';
|
|
496
|
+
case 'applying':
|
|
497
|
+
return 'Applying...';
|
|
498
|
+
case 'done':
|
|
499
|
+
return 'Done!';
|
|
500
|
+
default:
|
|
501
|
+
return '';
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
constructor() {
|
|
505
|
+
/**
|
|
506
|
+
* The current status of the loader. Controls which icon and text are displayed.
|
|
507
|
+
* @default 'analyzing'
|
|
508
|
+
*/
|
|
509
|
+
this.status = 'analyzing';
|
|
510
|
+
/**
|
|
511
|
+
* Whether to show the text below the loader icon.
|
|
512
|
+
* @default true
|
|
513
|
+
*/
|
|
514
|
+
this.showText = true;
|
|
515
|
+
/**
|
|
516
|
+
* Size of the loader component.
|
|
517
|
+
* @default 'medium'
|
|
518
|
+
*/
|
|
519
|
+
this.size = 'medium';
|
|
520
|
+
/**
|
|
521
|
+
* Whether to automatically loop through all statuses.
|
|
522
|
+
* @default false
|
|
523
|
+
*/
|
|
524
|
+
this.autoLoop = false;
|
|
525
|
+
/**
|
|
526
|
+
* Duration in milliseconds for each status when auto-looping.
|
|
527
|
+
* @default 3000
|
|
528
|
+
*/
|
|
529
|
+
this.loopDuration = 3000;
|
|
530
|
+
/**
|
|
531
|
+
* Whether to show completion state and stop looping when reaching 'done' status.
|
|
532
|
+
* @default false
|
|
533
|
+
*/
|
|
534
|
+
this.completeOnDone = false;
|
|
535
|
+
this.currentLoopIndex = 0;
|
|
536
|
+
this.statusOrder = ['analyzing', 'gathering', 'processing', 'applying', 'done'];
|
|
537
|
+
}
|
|
538
|
+
ngOnInit() {
|
|
539
|
+
if (this.autoLoop) {
|
|
540
|
+
this.startLoop();
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
ngOnDestroy() {
|
|
544
|
+
this.stopLoop();
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Start the auto-loop functionality
|
|
548
|
+
*/
|
|
549
|
+
startLoop() {
|
|
550
|
+
if (this.loopInterval) {
|
|
551
|
+
this.stopLoop();
|
|
552
|
+
}
|
|
553
|
+
// Set initial status
|
|
554
|
+
this.status = this.statusOrder[this.currentLoopIndex];
|
|
555
|
+
this.loopInterval = window.setInterval(() => {
|
|
556
|
+
this.currentLoopIndex = (this.currentLoopIndex + 1) % this.statusOrder.length;
|
|
557
|
+
this.status = this.statusOrder[this.currentLoopIndex];
|
|
558
|
+
// If completeOnDone is true and we reach 'done', stop looping
|
|
559
|
+
if (this.completeOnDone && this.status === 'done') {
|
|
560
|
+
this.stopLoop();
|
|
561
|
+
}
|
|
562
|
+
}, this.loopDuration);
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Stop the auto-loop functionality
|
|
566
|
+
*/
|
|
567
|
+
stopLoop() {
|
|
568
|
+
if (this.loopInterval) {
|
|
569
|
+
clearInterval(this.loopInterval);
|
|
570
|
+
this.loopInterval = undefined;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Manually trigger completion (sets status to 'done' and stops loop)
|
|
575
|
+
*/
|
|
576
|
+
triggerCompletion() {
|
|
577
|
+
this.stopLoop();
|
|
578
|
+
this.status = 'done';
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Reset the loader to the beginning
|
|
582
|
+
*/
|
|
583
|
+
reset() {
|
|
584
|
+
this.stopLoop();
|
|
585
|
+
this.currentLoopIndex = 0;
|
|
586
|
+
this.status = this.statusOrder[0];
|
|
587
|
+
if (this.autoLoop) {
|
|
588
|
+
this.startLoop();
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
592
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoaderComponent, isStandalone: true, selector: "al-loader", inputs: { status: "status", customText: "customText", showText: "showText", size: "size", autoLoop: "autoLoop", loopDuration: "loopDuration", customTexts: "customTexts", completeOnDone: "completeOnDone" }, host: { properties: { "class": "this.statusClass" } }, ngImport: i0, template: "<div class=\"loader-container\">\n <!-- Brain Icon -->\n <mat-icon class=\"loader-icon font-icon icon-brain\" fontSet=\"material-icons\">psychology</mat-icon>\n <!-- Cog Icon -->\n <mat-icon class=\"loader-icon font-icon icon-cog\" fontSet=\"material-icons\">sync</mat-icon>\n <!-- Document Icon -->\n <mat-icon class=\"loader-icon font-icon icon-document\" fontSet=\"material-icons\">article</mat-icon>\n <!-- Wand Icon -->\n <mat-icon class=\"loader-icon font-icon icon-wand\" fontSet=\"material-icons\">auto_awesome</mat-icon>\n <!-- Tick Icon -->\n <mat-icon class=\"loader-icon font-icon icon-tick\" fontSet=\"material-icons\">task_alt</mat-icon>\n</div>\n<div class=\"text-container\" *ngIf=\"showText\">\n <span class=\"loader-text\">{{ displayText }}</span>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined\";:host{display:flex;flex-direction:column;align-items:center;font-family:Roboto,sans-serif}.loader-container{position:relative;display:flex;align-items:center;justify-content:center}.loader-icon,.loader-text{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;transition:opacity .3s ease-in-out}.text-container{position:relative;margin-top:1rem}.loader-text{position:relative;color:#4b4f62;font-weight:300;font-size:1.125rem;text-align:center;opacity:0;transition:opacity .3s ease-in-out}.font-icon{display:flex;align-items:center;justify-content:center}mat-icon.loader-icon{display:flex;align-items:center;justify-content:center}:host(.size-small) .loader-container{width:48px;height:48px}:host(.size-small) .font-icon{font-size:48px}:host(.size-small) mat-icon.loader-icon{font-size:48px;width:48px;height:48px}:host(.size-small) .loader-text{font-size:.875rem}:host(.size-medium) .loader-container{width:80px;height:80px}:host(.size-medium) .font-icon{font-size:72px}:host(.size-medium) mat-icon.loader-icon{font-size:72px;width:72px;height:72px}:host(.size-medium) .loader-text{font-size:1.125rem}:host(.size-large) .loader-container{width:120px;height:120px}:host(.size-large) .font-icon{font-size:108px}:host(.size-large) mat-icon.loader-icon{font-size:108px;width:108px;height:108px}:host(.size-large) .loader-text{font-size:1.25rem}.icon-brain{color:#ef87bf}.icon-cog{color:#a2a6b8}.icon-document{color:#37c1ce}.icon-tick{color:#00ad83}.icon-wand{background:linear-gradient(275deg,#5473e8 -36.22%,#37c1ce 100.04%);-webkit-background-clip:text;background-clip:text;color:transparent}@keyframes animate-brain{0%{opacity:0;transform:scale(0)}12.5%{opacity:1;transform:scale(1.2)}25%{transform:scale(1)}37.5%{transform:scale(1.1)}50%{transform:scale(1)}62.5%{transform:scale(1.1)}75%{transform:scale(1)}87.5%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}@keyframes animate-cog{0%{opacity:0;transform:scale(0) rotate(0)}12.5%{opacity:1;transform:scale(1.2) rotate(0)}25%{transform:scale(1) rotate(0)}87.5%{opacity:1;transform:scale(1) rotate(180deg)}to{opacity:0;transform:scale(0) rotate(180deg)}}@keyframes animate-document{0%{opacity:0;transform:scale(0) translateY(0)}12.5%{opacity:1;transform:scale(1.2) translateY(0)}25%{transform:scale(1) translateY(0)}37.5%{transform:scale(1) translateY(-10px)}50%{transform:scale(1) translateY(0)}62.5%{transform:scale(1) translateY(-10px)}75%{transform:scale(1) translateY(0)}87.5%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(0) translateY(0)}}@keyframes animate-wand{0%{opacity:0;transform:scale(0) rotate(0)}12.5%{opacity:1;transform:scale(1.2) rotate(0)}25%{transform:scale(1) rotate(-20deg)}50%{transform:scale(1) rotate(20deg)}75%{transform:scale(1) rotate(-20deg)}87.5%{opacity:1;transform:scale(1) rotate(0)}to{opacity:0;transform:scale(0) rotate(0)}}@keyframes animate-tick{0%{opacity:0;transform:scale(0)}12.5%{opacity:1;transform:scale(1.2)}25%{transform:scale(1)}to{opacity:1;transform:scale(1)}}@keyframes animate-text{0%{opacity:0;transform:translate(30px)}12.5%{opacity:1;transform:translate(0)}87.5%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-30px)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes hop{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes wave{0%,to{transform:rotate(0)}25%{transform:rotate(-20deg)}75%{transform:rotate(20deg)}}:host(.status-analyzing) .icon-brain,:host(.status-analyzing) .loader-text{opacity:1}:host(.status-analyzing) .icon-brain{animation:pulse 1.5s ease-in-out infinite}:host(.status-gathering) .icon-cog,:host(.status-gathering) .loader-text{opacity:1}:host(.status-gathering) .icon-cog{animation:rotate 2s linear infinite}:host(.status-processing) .icon-document,:host(.status-processing) .loader-text{opacity:1}:host(.status-processing) .icon-document{animation:hop 1s ease-in-out infinite}:host(.status-applying) .icon-wand,:host(.status-applying) .loader-text{opacity:1}:host(.status-applying) .icon-wand{animation:wave 2s ease-in-out infinite}:host(.status-done) .icon-tick,:host(.status-done) .loader-text{opacity:1}:host(.status-done) .icon-tick{animation:pulse .5s ease-out}:host(.auto-loop.status-analyzing) .icon-brain{animation:animate-brain 3s ease-in-out}:host(.auto-loop.status-analyzing) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-gathering) .icon-cog{animation:animate-cog 3s ease-in-out}:host(.auto-loop.status-gathering) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-processing) .icon-document{animation:animate-document 3s ease-in-out}:host(.auto-loop.status-processing) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-applying) .icon-wand{animation:animate-wand 3s ease-in-out}:host(.auto-loop.status-applying) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-done) .icon-tick{animation:animate-tick 3s ease-in-out}:host(.auto-loop.status-done) .loader-text{animation:animate-text 3s ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
593
|
+
}
|
|
594
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoaderComponent, decorators: [{
|
|
595
|
+
type: Component,
|
|
596
|
+
args: [{ selector: 'al-loader', imports: [CommonModule, MatIconModule], standalone: true, template: "<div class=\"loader-container\">\n <!-- Brain Icon -->\n <mat-icon class=\"loader-icon font-icon icon-brain\" fontSet=\"material-icons\">psychology</mat-icon>\n <!-- Cog Icon -->\n <mat-icon class=\"loader-icon font-icon icon-cog\" fontSet=\"material-icons\">sync</mat-icon>\n <!-- Document Icon -->\n <mat-icon class=\"loader-icon font-icon icon-document\" fontSet=\"material-icons\">article</mat-icon>\n <!-- Wand Icon -->\n <mat-icon class=\"loader-icon font-icon icon-wand\" fontSet=\"material-icons\">auto_awesome</mat-icon>\n <!-- Tick Icon -->\n <mat-icon class=\"loader-icon font-icon icon-tick\" fontSet=\"material-icons\">task_alt</mat-icon>\n</div>\n<div class=\"text-container\" *ngIf=\"showText\">\n <span class=\"loader-text\">{{ displayText }}</span>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined\";:host{display:flex;flex-direction:column;align-items:center;font-family:Roboto,sans-serif}.loader-container{position:relative;display:flex;align-items:center;justify-content:center}.loader-icon,.loader-text{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;transition:opacity .3s ease-in-out}.text-container{position:relative;margin-top:1rem}.loader-text{position:relative;color:#4b4f62;font-weight:300;font-size:1.125rem;text-align:center;opacity:0;transition:opacity .3s ease-in-out}.font-icon{display:flex;align-items:center;justify-content:center}mat-icon.loader-icon{display:flex;align-items:center;justify-content:center}:host(.size-small) .loader-container{width:48px;height:48px}:host(.size-small) .font-icon{font-size:48px}:host(.size-small) mat-icon.loader-icon{font-size:48px;width:48px;height:48px}:host(.size-small) .loader-text{font-size:.875rem}:host(.size-medium) .loader-container{width:80px;height:80px}:host(.size-medium) .font-icon{font-size:72px}:host(.size-medium) mat-icon.loader-icon{font-size:72px;width:72px;height:72px}:host(.size-medium) .loader-text{font-size:1.125rem}:host(.size-large) .loader-container{width:120px;height:120px}:host(.size-large) .font-icon{font-size:108px}:host(.size-large) mat-icon.loader-icon{font-size:108px;width:108px;height:108px}:host(.size-large) .loader-text{font-size:1.25rem}.icon-brain{color:#ef87bf}.icon-cog{color:#a2a6b8}.icon-document{color:#37c1ce}.icon-tick{color:#00ad83}.icon-wand{background:linear-gradient(275deg,#5473e8 -36.22%,#37c1ce 100.04%);-webkit-background-clip:text;background-clip:text;color:transparent}@keyframes animate-brain{0%{opacity:0;transform:scale(0)}12.5%{opacity:1;transform:scale(1.2)}25%{transform:scale(1)}37.5%{transform:scale(1.1)}50%{transform:scale(1)}62.5%{transform:scale(1.1)}75%{transform:scale(1)}87.5%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}@keyframes animate-cog{0%{opacity:0;transform:scale(0) rotate(0)}12.5%{opacity:1;transform:scale(1.2) rotate(0)}25%{transform:scale(1) rotate(0)}87.5%{opacity:1;transform:scale(1) rotate(180deg)}to{opacity:0;transform:scale(0) rotate(180deg)}}@keyframes animate-document{0%{opacity:0;transform:scale(0) translateY(0)}12.5%{opacity:1;transform:scale(1.2) translateY(0)}25%{transform:scale(1) translateY(0)}37.5%{transform:scale(1) translateY(-10px)}50%{transform:scale(1) translateY(0)}62.5%{transform:scale(1) translateY(-10px)}75%{transform:scale(1) translateY(0)}87.5%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(0) translateY(0)}}@keyframes animate-wand{0%{opacity:0;transform:scale(0) rotate(0)}12.5%{opacity:1;transform:scale(1.2) rotate(0)}25%{transform:scale(1) rotate(-20deg)}50%{transform:scale(1) rotate(20deg)}75%{transform:scale(1) rotate(-20deg)}87.5%{opacity:1;transform:scale(1) rotate(0)}to{opacity:0;transform:scale(0) rotate(0)}}@keyframes animate-tick{0%{opacity:0;transform:scale(0)}12.5%{opacity:1;transform:scale(1.2)}25%{transform:scale(1)}to{opacity:1;transform:scale(1)}}@keyframes animate-text{0%{opacity:0;transform:translate(30px)}12.5%{opacity:1;transform:translate(0)}87.5%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-30px)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes hop{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes wave{0%,to{transform:rotate(0)}25%{transform:rotate(-20deg)}75%{transform:rotate(20deg)}}:host(.status-analyzing) .icon-brain,:host(.status-analyzing) .loader-text{opacity:1}:host(.status-analyzing) .icon-brain{animation:pulse 1.5s ease-in-out infinite}:host(.status-gathering) .icon-cog,:host(.status-gathering) .loader-text{opacity:1}:host(.status-gathering) .icon-cog{animation:rotate 2s linear infinite}:host(.status-processing) .icon-document,:host(.status-processing) .loader-text{opacity:1}:host(.status-processing) .icon-document{animation:hop 1s ease-in-out infinite}:host(.status-applying) .icon-wand,:host(.status-applying) .loader-text{opacity:1}:host(.status-applying) .icon-wand{animation:wave 2s ease-in-out infinite}:host(.status-done) .icon-tick,:host(.status-done) .loader-text{opacity:1}:host(.status-done) .icon-tick{animation:pulse .5s ease-out}:host(.auto-loop.status-analyzing) .icon-brain{animation:animate-brain 3s ease-in-out}:host(.auto-loop.status-analyzing) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-gathering) .icon-cog{animation:animate-cog 3s ease-in-out}:host(.auto-loop.status-gathering) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-processing) .icon-document{animation:animate-document 3s ease-in-out}:host(.auto-loop.status-processing) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-applying) .icon-wand{animation:animate-wand 3s ease-in-out}:host(.auto-loop.status-applying) .loader-text{animation:animate-text 3s ease-in-out}:host(.auto-loop.status-done) .icon-tick{animation:animate-tick 3s ease-in-out}:host(.auto-loop.status-done) .loader-text{animation:animate-text 3s ease-in-out}\n"] }]
|
|
597
|
+
}], ctorParameters: () => [], propDecorators: { status: [{
|
|
598
|
+
type: Input
|
|
599
|
+
}], customText: [{
|
|
600
|
+
type: Input
|
|
601
|
+
}], showText: [{
|
|
602
|
+
type: Input
|
|
603
|
+
}], size: [{
|
|
604
|
+
type: Input
|
|
605
|
+
}], autoLoop: [{
|
|
606
|
+
type: Input
|
|
607
|
+
}], loopDuration: [{
|
|
608
|
+
type: Input
|
|
609
|
+
}], customTexts: [{
|
|
610
|
+
type: Input
|
|
611
|
+
}], completeOnDone: [{
|
|
612
|
+
type: Input
|
|
613
|
+
}], statusClass: [{
|
|
614
|
+
type: HostBinding,
|
|
615
|
+
args: ['class']
|
|
616
|
+
}] } });
|
|
617
|
+
|
|
618
|
+
class LoaderModule {
|
|
619
|
+
constructor(iconRegistry, sanitizer) {
|
|
620
|
+
this.iconRegistry = iconRegistry;
|
|
621
|
+
this.sanitizer = sanitizer;
|
|
622
|
+
// register the CSS class alias so <mat-icon> knows about it…
|
|
623
|
+
this.iconRegistry.registerFontClassAlias('material-symbols-outlined', 'material-symbols-outlined');
|
|
624
|
+
}
|
|
625
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoaderModule, deps: [{ token: i1$1.MatIconRegistry }, { token: i2$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
626
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: LoaderModule, imports: [CommonModule, LoaderComponent], exports: [LoaderComponent] }); }
|
|
627
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoaderModule, imports: [CommonModule, LoaderComponent] }); }
|
|
628
|
+
}
|
|
629
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoaderModule, decorators: [{
|
|
630
|
+
type: NgModule,
|
|
631
|
+
args: [{
|
|
632
|
+
imports: [CommonModule, LoaderComponent],
|
|
633
|
+
exports: [LoaderComponent],
|
|
634
|
+
}]
|
|
635
|
+
}], ctorParameters: () => [{ type: i1$1.MatIconRegistry }, { type: i2$1.DomSanitizer }] });
|
|
636
|
+
|
|
462
637
|
/*
|
|
463
638
|
* Public API Surface of allsorter-lib
|
|
464
639
|
*/
|
|
@@ -467,5 +642,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
467
642
|
* Generated bundle index. Do not edit.
|
|
468
643
|
*/
|
|
469
644
|
|
|
470
|
-
export { AllsorterLibComponent, AllsorterLibService, ButtonComponent, ButtonModule, InputComponent, InputModule, ResumeHeaderComponent, ResumeHeaderModule };
|
|
645
|
+
export { AllsorterLibComponent, AllsorterLibService, ButtonComponent, ButtonModule, InputComponent, InputModule, LoaderComponent, LoaderModule, ResumeHeaderComponent, ResumeHeaderModule };
|
|
471
646
|
//# sourceMappingURL=allsorter-ui-components.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"allsorter-ui-components.mjs","sources":["../../../projects/allsorter-lib/src/lib/allsorter-lib.service.ts","../../../projects/allsorter-lib/src/lib/allsorter-lib.component.ts","../../../projects/allsorter-lib/src/lib/button/button.component.ts","../../../projects/allsorter-lib/src/lib/button/button.component.html","../../../projects/allsorter-lib/src/lib/button/button.module.ts","../../../projects/allsorter-lib/src/lib/input/input.component.ts","../../../projects/allsorter-lib/src/lib/input/input.component.html","../../../projects/allsorter-lib/src/lib/input/input.module.ts","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.component.ts","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.component.html","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.module.ts","../../../projects/allsorter-lib/src/public-api.ts","../../../projects/allsorter-lib/src/allsorter-ui-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AllsorterLibService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-allsorter-lib',\n template: `\n <p>\n allsorter-lib works!\n </p>\n `,\n styles: ``\n})\nexport class AllsorterLibComponent {\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'al-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule],\n standalone:true,\n})\nexport class ButtonComponent {\n /**\n * Storybook-only: Controls icon placement in stories. Valid values: 'none', 'left', 'right', 'dropdown'.\n */\n @Input() iconPlacement: 'none' | 'left' | 'right' | 'dropdown' = 'none';\n /**\n * Returns the typography class to apply. If the consumer passes `fontClass`,\n * that value wins. Otherwise we derive a sensible default based on `size`.\n */\n get effectiveFontClass(): string {\n if (this.fontClass) {\n return this.fontClass;\n }\n switch (this.size) {\n case 'xs':\n return 'font-body-small';\n case 'sm':\n case 'base':\n return 'font-body-medium';\n case 'l':\n case 'xl':\n case 'header':\n return 'font-body-large';\n default:\n return '';\n }\n }\n @Input() state: 'default' | 'hover' | 'pressed' | 'disabled' = 'default';\n @Input() category!: string;\n\n @Input() label: string | undefined = ' '; // Default label\n @Input() arialabel: string | undefined = ' '; // Default label\n @Input() iconOnly: boolean = false; // Toggle for icon-only button\n @Input() leftIcon: string | null | undefined = ''; // ✅ Default to null\n @Input() rightIcon: string | null | undefined = ''; // ✅ Default to null\n /** Show/hide left icon (Storybook control) */\n @Input() showLeftIcon: boolean = true;\n /** Show/hide right icon (Storybook control) */\n @Input() showRightIcon: boolean = true;\n /** If true, use outlined style for icons */\n @Input() outlined: boolean = false;\n @Input() color: 'primary' | 'accent' | 'warn' = 'primary';\n /** Text size option for label and icons */\n @Input() size: 'header' | 'xs' | 'sm' | 'base' | 'l' | 'xl' = 'base';\n\n /** Visual type of button: icon only circle, icon+label, two icons + label */\n @Input() buttonType: 'icon-circle' | 'icon-label' | 'two-icon-label' | 'dropdown' = 'icon-label';\n\n /** Optional typography class, e.g. 'font-display-large' */\n @Input() fontClass: string = '';\n\n @Output() onClick = new EventEmitter<Event>(); // Initialize\n @Output() onHover = new EventEmitter<Event>(); // Initialize\n @Output() onMouseLeave = new EventEmitter<Event>(); // Initialize\n\n /** Dropdown menu options, used when buttonType is 'dropdown' */\n @Input() dropdownOptions: Array<{ label: string; value?: any }> = [];\n\n /** Emits the selected dropdown option's value */\n @Output() optionSelect = new EventEmitter<any>();\n\n selectOption(option: any) {\n this.optionSelect.emit(option?.value ?? option);\n }\n\n computeGap(): number {\n // Header size uses a tighter 4px gap across all combinations\n if (this.size === 'header') {\n return 4;\n }\n const hasLabel = !!(this.label && this.label.trim()) && !this.iconOnly;\n const leftIconPresent = !!(this.leftIcon && this.leftIcon.trim());\n const rightIconPresent = !!(this.rightIcon && this.rightIcon.trim());\n const iconCount = (leftIconPresent ? 1 : 0) + (rightIconPresent ? 1 : 0);\n\n // 0 gap for purely icon-only buttons (≤1 icon and no label)\n if (!hasLabel && iconCount <= 1) {\n return 0;\n }\n\n // Tighter gap when we have two icons and a label (e.g., two-icon buttons)\n if (iconCount === 2 && !hasLabel) {\n return 4;\n }\n\n // Default gap\n return 8;\n }\n\n stateClasses: { [key: string]: string } = {\n default: 'btn-default',\n hover: 'btn-hover',\n pressed: 'btn-pressed',\n disabled: 'btn-disabled',\n };\n}\n","<!-- Regular button types -->\n<ng-container *ngIf=\"buttonType !== 'dropdown'; else dropdownTpl\">\n <button\n mat-flat-button\n class=\"btn custom-button\" [class]=\"effectiveFontClass\"\n [ngClass]=\"{\n 'size-header': size === 'header' && !fontClass,\n 'size-xs': size === 'xs' && !fontClass,\n 'size-sm': size === 'sm' && !fontClass,\n 'size-base': size === 'base' && !fontClass,\n 'size-l': size === 'l' && !fontClass,\n 'size-xl': size === 'xl' && !fontClass,\n 'mat-raised-button': variant === 'raised',\n 'mat-flat-button': variant === 'flat',\n \n 'mat-stroked-button': variant === 'stroked',\n 'mat-fab': variant === 'fab',\n 'mat-icon-button': variant === 'icon',\n 'icon-circle': buttonType === 'icon-circle',\n 'blue': category === 'blue',\n 'green': category === 'green',\n 'grey': category === 'grey',\n 'error': category === 'error',\n 'gradient': category === 'gradient',\n 'blue-no-outline': category === 'blue-no-outline',\n 'green-no-outline': category === 'green-no-outline',\n 'grey-no-outline': category === 'grey-no-outline',\n 'error-no-outline': category === 'error-no-outline',\n 'btn-default': state === 'default',\n 'btn-hover': state === 'hover',\n 'btn-pressed': state === 'pressed',\n 'btn-disabled': state === 'disabled'\n }\"\n [ngStyle]=\"{ color: color }\"\n [disabled]=\"state === 'disabled'\"\n (click)=\"onClick.emit($event)\"\n (mouseenter)=\"onHover.emit($event)\"\n (mouseleave)=\"onMouseLeave.emit($event)\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.gap.px]=\"computeGap()\"\n >\n <!-- Left Icon (Only shown if leftIcon is set and not empty) -->\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"left-icon\">{{ leftIconText }}</mat-icon>\n <!-- Label (Only shown if iconOnly is false) -->\n <span *ngIf=\"!iconOnly\" class=\"button-label\" [ngStyle]=\"{ color: color }\">{{ label || '' }}</span>\n \n <!-- Right Icon (Only shown if rightIcon is set and not empty) -->\n <mat-icon *ngIf=\"rightIcon?.trim() as rightIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"right-icon\">{{ rightIconText }}</mat-icon>\n </button>\n </ng-container>\n \n <!-- Dropdown button template -->\n <ng-template #dropdownTpl>\n <button\n mat-flat-button\n class=\"btn custom-button\" [class]=\"effectiveFontClass\"\n [ngClass]=\"{\n 'size-header': size === 'header' && !fontClass,\n 'size-xs': size === 'xs' && !fontClass,\n 'size-sm': size === 'sm' && !fontClass,\n 'size-base': size === 'base' && !fontClass,\n 'size-l': size === 'l' && !fontClass,\n 'size-xl': size === 'xl' && !fontClass,\n 'mat-raised-button': variant === 'raised',\n 'mat-flat-button': variant === 'flat',\n 'mat-stroked-button': variant === 'stroked',\n 'mat-fab': variant === 'fab',\n 'mat-icon-button': variant === 'icon',\n 'icon-label': true,\n 'blue': category === 'blue',\n 'green': category === 'green',\n 'grey': category === 'grey',\n 'error': category === 'error',\n 'gradient': category === 'gradient',\n 'blue-no-outline': category === 'blue-no-outline',\n 'green-no-outline': category === 'green-no-outline',\n 'grey-no-outline': category === 'grey-no-outline',\n 'error-no-outline': category === 'error-no-outline',\n 'btn-default': state === 'default',\n 'btn-hover': state === 'hover',\n 'btn-pressed': state === 'pressed',\n 'btn-disabled': state === 'disabled',\n \n }\"\n [ngStyle]=\"{ color: color }\"\n [disabled]=\"state === 'disabled'\"\n (mouseenter)=\"onHover.emit($event)\"\n (mouseleave)=\"onMouseLeave.emit($event)\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.gap.px]=\"computeGap()\"\n [matMenuTriggerFor]=\"menu\"\n >\n <!-- Left Icon (optional) -->\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"left-icon\">{{ leftIconText }}</mat-icon>\n <!-- Label -->\n <span *ngIf=\"!iconOnly\" class=\"button-label\" [ngStyle]=\"{ color: color }\">{{ label || '' }}</span>\n <!-- Dropdown Arrow Icon -->\n <mat-icon class=\"right-icon\">arrow_drop_down</mat-icon>\n </button>\n <!-- Mat Menu -->\n <mat-menu #menu=\"matMenu\" panelClass=\"custom-dropdown-menu\">\n <button mat-menu-item *ngFor=\"let opt of dropdownOptions\" (click)=\"selectOption(opt)\" [ngClass]=\"effectiveFontClass\">\n {{ opt.label || opt }}\n </button>\n </mat-menu>\n </ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from './button.component';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@NgModule({\n imports: [CommonModule, ButtonComponent],\n exports: [ButtonComponent],\n})\nexport class ButtonModule {\n constructor(\n private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer\n ) {\n // register the CSS class alias so <mat-icon> knows about it…\n this.iconRegistry.registerFontClassAlias(\n 'material-symbols-outlined',\n 'material-symbols-outlined'\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\n\n@Component({\n selector: 'al-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.css',\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatSelectModule, MatOptionModule],\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() label: string = '';\n @Input() placeholder: string = '';\n @Input() value: string = '';\n @Input() formControlName: string = '';\n\n @Input() type: 'text' | 'email' | 'number' | 'password' | 'tel' | 'url' | 'date' = 'text';\n @Input() disabled: boolean = false;\n @Input() helperText: boolean = false;\n @Input() helperTextLabel: string = '';\n @Input() leftIcon: string = '';\n @Input() rightIcon: string = '';\n @Input() dropDown: boolean = false;\n @Input() options: string[] = [];\n @Input() size: 'xs' | 'small' | 'base' | 'large' | 'header' = 'base';\n @Input() inputTypes: 'simple' | 'primary' | 'success' | 'warn' | 'disabled' | 'plain' = 'simple';\n noBorder: boolean = false;\n outlined: boolean = false;\n\n @Output() valueChange = new EventEmitter<string>();\n\n private onChange = (value: string) => { };\n onTouched = () => { };\n\n get isDisabled(): boolean {\n return this.disabled || this.inputTypes === 'disabled';\n }\n\n writeValue(value: string | null | undefined): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInputChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onSelectionChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n getSizeClass(): string {\n return 'al-input-size-' + this.size;\n }\n\n getCategoryClass(): string {\n if (this.disabled) {\n return 'al-input-category-disabled';\n }\n if (this.inputTypes === 'plain') {\n return 'al-input-category-plain';\n }\n return 'al-input-category-' + this.inputTypes;\n }\n}\n","<mat-form-field appearance=\"outline\" class=\"al-input-field\" [ngClass]=\"[\n helperText ? 'has-error' : '',\n getSizeClass(),\n getCategoryClass(),\n noBorder ? 'al-input-no-border' : '',\n leftIcon ? 'has-left-icon' : ''\n ]\">\n <mat-label *ngIf=\"label && !noBorder\">{{ label }}</mat-label>\n\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\" [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n matPrefix class=\"left-icon\">{{ leftIconText }}</mat-icon>\n\n <ng-container *ngIf=\"dropDown; else regularInput\">\n <mat-select [disabled]=\"isDisabled\" [(ngModel)]=\"value\" (selectionChange)=\"onSelectionChange($event.value)\">\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">{{ option }}</mat-option>\n </mat-select>\n </ng-container>\n <ng-template #regularInput>\n <input matInput [placeholder]=\"placeholder\" [type]=\"type\" [disabled]=\"isDisabled\" [(ngModel)]=\"value\"\n (input)=\"onInputChange($any($event.target).value)\" (blur)=\"onTouched()\" />\n </ng-template>\n\n <mat-icon *ngIf=\"rightIcon?.trim() as rightIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\" matSuffix class=\"right-icon\">{{ rightIconText\n }}</mat-icon>\n\n <mat-error *ngIf=\"false && helperTextLabel\">{{ helperTextLabel }}</mat-error>\n <mat-hint *ngIf=\"helperText && helperTextLabel\">{{ helperTextLabel }}</mat-hint>\n</mat-form-field>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from './input.component';\n\n@NgModule({\n imports: [CommonModule, InputComponent],\n exports: [InputComponent],\n})\nexport class InputModule { }\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CdkAccordionModule } from '@angular/cdk/accordion';\nimport { ButtonComponent } from '../button/button.component';\nimport { EyeIconConfig, HeaderButton, InputHandlersConfig, SectionCheckboxConfig } from './resume-header.model';\n\n@Component({\n selector: 'al-resume-header',\n templateUrl: './resume-header.component.html',\n styleUrl: './resume-header.component.css',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatMenuModule,\n MatIconModule,\n CdkAccordionModule,\n ButtonComponent\n ]\n})\nexport class ResumeHeaderComponent {\n hideTimeout: any;\n isMenuVisible = false;\n isEducationHidden = false;\n @Input() hiddenSection: { headerSectionHidden: boolean } = { headerSectionHidden: false };\n @Input() isLargeScreen = true;\n @Input() inputHandlers!: InputHandlersConfig;\n @Output() focusField = new EventEmitter<string>();\n @Output() blurField = new EventEmitter<void>();\n @Output() enterKeyPressed = new EventEmitter<KeyboardEvent>();\n @Input() checked = false;\n @Input() checkboxConfig!: SectionCheckboxConfig;\n @Output() checkedCheckBoxChange = new EventEmitter<boolean>();\n @Input() disabled = false;\n @Input() buttonConfig: HeaderButton[] = [];\n @Output() buttonClicked = new EventEmitter<HeaderButton>();\n @Input() configEyeToggle!: EyeIconConfig[];\n @Input() accordionItem: any;\n @Output() showHideToggleSection = new EventEmitter<{ isHidden: boolean; accordionItem?: any; config: EyeIconConfig }>();\n @Input() toggleEditIcon?: (field: string) => void;\n @Input() showSection = true;\n @Output() sectionToggled = new EventEmitter<boolean>();\n @Input() borderColor = '#37c1ce';\n\n toggleAccordion(accordionItem: any) {\n accordionItem.toggle();\n this.showSection = accordionItem.expanded;\n this.sectionToggled.emit(this.showSection);\n }\n\n ngOnInit() {\n this.checkScreenSize();\n }\n\n checkScreenSize() {\n this.isLargeScreen = window.innerWidth >= 1400;\n }\n\n showMenu() {\n this.isMenuVisible = true;\n this.clearHideTimeout();\n }\n\n startHideTimeout() {\n this.clearHideTimeout();\n this.hideTimeout = setTimeout(() => {\n this.isMenuVisible = false;\n }, 300);\n }\n\n clearHideTimeout() {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n onButtonClick(btn: any) {\n if (btn.buttonType !== 'dropdown') {\n this.buttonClicked.emit(btn);\n }\n }\n\n onDropdownSelect(btn: any, value: any) {\n if (btn.buttonType === 'dropdown') {\n // Find the selected option\n const selectedOption = btn.dropdownOptions?.find((option: any) => option.value === value);\n\n // If the option has a custom function, call it\n if (selectedOption?.function) {\n selectedOption.function();\n }\n\n // Always emit the buttonClicked event for tracking\n this.buttonClicked.emit({ ...btn, dropdownValue: value });\n }\n }\n}\n","<cdk-accordion class=\"example-accordion\">\n <cdk-accordion-item #accordionItem=\"cdkAccordionItem\" [expanded]=\"true\" class=\"example-accordion-item\">\n\n <div class=\"example-accordion-item-header\" [ngStyle]=\"{ 'border-color': borderColor }\">\n <div class=\"left_side_header\" *ngIf=\"!hiddenSection?.headerSectionHidden; else hiddenHeaderLayout\">\n <div [matTooltip]=\"accordionItem.expanded ? 'Collapse' : 'Expand'\" matTooltipPosition=\"above\">\n <button (click)=\"toggleAccordion(accordionItem)\" tabindex=\"0\" class=\"toggle-button align-center \"\n [attr.aria-expanded]=\"accordionItem.expanded\">\n <span class=\"material-icons-outlined\" *ngIf=\"!accordionItem.expanded\">\n expand_less\n </span>\n <span class=\"material-icons-outlined\" *ngIf=\"accordionItem.expanded\">\n expand_more\n </span>\n </button>\n </div>\n\n <div class=\"edit-input-group\">\n <span *ngIf=\"!inputHandlers.headersLoading\" class=\"align-center\">\n <span class=\"material-symbols-outlined\" [attr.alt]=\"inputHandlers.iconAltText || 'edit-icon'\"\n (click)=\"toggleEditIcon?.('educationHeader')\"\n [matTooltip]=\"inputHandlers.tooltipText || 'This header can be edited'\"\n [matTooltipPosition]=\"inputHandlers.tooltipPosition || 'above'\"\n *ngIf=\"inputHandlers.getFieldNotHidden('')\">\n edit\n </span>\n </span>\n\n <div class=\"content_width\" data-test-id=\"edu-section-title-input\">\n <div class=\"content_width\" data-test-id=\"edu-section-title-input\" *ngIf=\"!inputHandlers.headersLoading\">\n <input #textInputSection type=\"text\" [ngClass]=\"{\n 'focusout-input-text': !inputHandlers?.isFocused,\n 'onfocus-input-text': inputHandlers?.isFocused\n }\" [(ngModel)]=\"inputHandlers.shownTitle\" [attr.aria-label]=\"inputHandlers.shownTitle\"\n (focus)=\"focusField.emit('educationHeader')\" (focusout)=\"blurField.emit()\"\n (keypress)=\"enterKeyPressed.emit($event)\" [disabled]=\"inputHandlers?.isDisabled?.() ?? false\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- ✅ FIXED: Right side header (shows when section is NOT hidden) -->\n <div class=\"right_side_header\" *ngIf=\"!hiddenSection?.headerSectionHidden\">\n <ng-container *ngIf=\"isLargeScreen\">\n <ng-container class=\"button-margin\"\n *ngTemplateOutlet=\"headerButtonsTemplate; context: { buttons: buttonConfig }\">\n </ng-container>\n </ng-container>\n\n <div class=\"hover-menu-container\" *ngIf=\"!isLargeScreen\">\n <div class=\"menu-trigger\" (mouseenter)=\"showMenu()\" (mouseleave)=\"startHideTimeout()\">\n <span class=\"material-symbols-outlined menu-icon\">more_vert</span>\n </div>\n <div class=\"slide-out-panel\" [class.visible]=\"isMenuVisible\" (mouseenter)=\"showMenu()\"\n (mouseleave)=\"startHideTimeout()\">\n <div class=\"fit-panel\">\n <ng-container *ngTemplateOutlet=\"headerButtonsTemplate; context: { buttons: buttonConfig }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- ✅ FIXED: Eye icon for hiding section -->\n <ng-container *ngIf=\"!hiddenSection?.headerSectionHidden\">\n <ng-container *ngFor=\"let eyeConfig of configEyeToggle\">\n <ng-container\n *ngTemplateOutlet=\"eyeIconTemplate; context: { isHidden: false, accordionItem: accordionItem, configEyeToggle: eyeConfig }\"></ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"checkboxConfig?.sectionItems?.length\" class=\"mat-checkbox-margin\">\n <mat-checkbox class=\"example-margin\" [matTooltip]=\"checkboxConfig?.tooltipText || 'Select All'\"\n [matTooltipPosition]=\"checkboxConfig.tooltipPosition|| 'above'\" [(ngModel)]=\"checked\"\n (ngModelChange)=\"checkedCheckBoxChange.emit($event)\"\n [disabled]=\"disabled || checkboxConfig?.disabled ?? false\" data-test-id=\"edu-section-select-all-checkbox\">\n </mat-checkbox>\n </div>\n </div>\n\n <!-- ✅ FIXED: Hidden header layout (shows when section IS hidden) -->\n <ng-template #hiddenHeaderLayout>\n <div class=\"hide-header\">\n <span class=\"header-text-turncate\">{{ inputHandlers?.shownTitle }}</span>\n <div class=\"hidden-write\">Section hidden</div>\n\n <!-- ✅ FIXED: Eye icon for showing section -->\n <ng-container *ngIf=\"hiddenSection?.headerSectionHidden\">\n <ng-container *ngFor=\"let eyeConfig of configEyeToggle\">\n <ng-container *ngIf=\"!eyeConfig['onClick']\">\n <ng-container\n *ngTemplateOutlet=\"eyeIconTemplate; context: { isHidden: true, accordionItem: accordionItem, configEyeToggle: eyeConfig }\"></ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <!-- ✅ FIXED: Accordion body (only shows when expanded AND not hidden) -->\n <div *ngIf=\"accordionItem.expanded && !hiddenSection?.headerSectionHidden\" class=\"example-accordion-item-body\"\n role=\"region\">\n Lorem ipsum dolor, sit amet, consectetur adipisicing elit. Perferendis excepturi incidunt ipsum\n deleniti labore, tempore non nam doloribus blanditiis veritatis illo autem iure aliquid ullam\n rem tenetur deserunt velit culpa?\n </div>\n\n </cdk-accordion-item>\n</cdk-accordion>\n\n<!-- Header Buttons Template -->\n<ng-template #headerButtonsTemplate let-buttons=\"buttons\" let-handleClick=\"handleClick\">\n <ng-container *ngFor=\"let btn of buttonConfig\">\n <al-button *ngIf=\"!btn.hidden && (!btn.displayCondition || btn.displayCondition())\" [category]=\"btn.category\"\n [buttonType]=\"btn.buttonType\" [label]=\"btn.label\" [leftIcon]=\"btn.leftIcon\" [rightIcon]=\"btn.rightIcon\"\n [variant]=\"btn.variant\" [state]=\"btn.state\" [color]=\"btn.color\" [size]=\"btn.size\" [outlined]=\"btn.outlined\"\n [dropdownOptions]=\"btn.buttonType === 'dropdown' ? btn.dropdownOptions : null\"\n (optionSelect)=\"onDropdownSelect(btn, $event)\" (click)=\"onButtonClick(btn)\" [attr.alt]=\"btn.alt\"\n [attr.data-test-id]=\"btn.testId\" [matTooltip]=\"btn.tooltipText\"\n [matTooltipPosition]=\"btn.tooltipPosition || 'above'\">\n </al-button>\n </ng-container>\n</ng-template>\n\n<!-- ✅ FIXED: Eye Icon Template with proper click handler -->\n<ng-template #eyeIconTemplate let-isHidden=\"isHidden\" let-accordionItem=\"accordionItem\"\n let-configEyeToggle=\"configEyeToggle\">\n <div *ngIf=\"configEyeToggle\" class=\"mat-checkbox-margin align-center\"\n [attr.data-test-id]=\"isHidden ? 'edu-section-show-eye-div' : 'edu-section-hide-eye-div'\">\n <span class=\"material-symbols-outlined delete-multiple mat-fab.mat-accent\"\n [matTooltip]=\"configEyeToggle.tooltips[isHidden ? 'collapse' : 'expand']\"\n [matTooltipPosition]=\"configEyeToggle.tooltips.position\"\n [attr.aria-label]=\"configEyeToggle.ariaLabels[isHidden ? 'collapsed' : 'expanded']\"\n (click)=\"showHideToggleSection.emit({ isHidden: isHidden, accordionItem: accordionItem, config: configEyeToggle })\"\n [attr.data-test-id]=\"isHidden ? 'edu-section-show-eye-icon' : 'edu-section-show-hide-eye-icon'\">\n {{ isHidden ? 'visibility' : 'visibility_off' }}\n </span>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResumeHeaderComponent } from './resume-header.component';\n\n@NgModule({\n imports: [CommonModule, ResumeHeaderComponent],\n exports: [ResumeHeaderComponent],\n})\nexport class ResumeHeaderModule { }\n","/*\n * Public API Surface of allsorter-lib\n */\n\nexport * from './lib/allsorter-lib.service';\nexport * from './lib/allsorter-lib.component';\nexport * from './lib/button/button.component';\nexport * from './lib/button/button.module';\nexport * from './lib/input/input.component';\nexport * from './lib/input/input.module';\nexport * from './lib/resume-header/resume-header.component';\nexport * from './lib/resume-header/resume-header.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2","i4","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"allsorter-ui-components.mjs","sources":["../../../projects/allsorter-lib/src/lib/allsorter-lib.service.ts","../../../projects/allsorter-lib/src/lib/allsorter-lib.component.ts","../../../projects/allsorter-lib/src/lib/button/button.component.ts","../../../projects/allsorter-lib/src/lib/button/button.component.html","../../../projects/allsorter-lib/src/lib/button/button.module.ts","../../../projects/allsorter-lib/src/lib/input/input.component.ts","../../../projects/allsorter-lib/src/lib/input/input.component.html","../../../projects/allsorter-lib/src/lib/input/input.module.ts","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.component.ts","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.component.html","../../../projects/allsorter-lib/src/lib/resume-header/resume-header.module.ts","../../../projects/allsorter-lib/src/lib/loader/loader.component.ts","../../../projects/allsorter-lib/src/lib/loader/loader.component.html","../../../projects/allsorter-lib/src/lib/loader/loader.module.ts","../../../projects/allsorter-lib/src/public-api.ts","../../../projects/allsorter-lib/src/allsorter-ui-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AllsorterLibService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-allsorter-lib',\n template: `\n <p>\n allsorter-lib works!\n </p>\n `,\n styles: ``\n})\nexport class AllsorterLibComponent {\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'al-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule],\n standalone:true,\n})\nexport class ButtonComponent {\n /**\n * Storybook-only: Controls icon placement in stories. Valid values: 'none', 'left', 'right', 'dropdown'.\n */\n @Input() iconPlacement: 'none' | 'left' | 'right' | 'dropdown' = 'none';\n /**\n * Returns the typography class to apply. If the consumer passes `fontClass`,\n * that value wins. Otherwise we derive a sensible default based on `size`.\n */\n get effectiveFontClass(): string {\n if (this.fontClass) {\n return this.fontClass;\n }\n switch (this.size) {\n case 'xs':\n return 'font-body-small';\n case 'sm':\n case 'base':\n return 'font-body-medium';\n case 'l':\n case 'xl':\n case 'header':\n return 'font-body-large';\n default:\n return '';\n }\n }\n @Input() state: 'default' | 'hover' | 'pressed' | 'disabled' = 'default';\n @Input() category!: string;\n\n @Input() label: string | undefined = ' '; // Default label\n @Input() arialabel: string | undefined = ' '; // Default label\n @Input() iconOnly: boolean = false; // Toggle for icon-only button\n @Input() leftIcon: string | null | undefined = ''; // ✅ Default to null\n @Input() rightIcon: string | null | undefined = ''; // ✅ Default to null\n /** Show/hide left icon (Storybook control) */\n @Input() showLeftIcon: boolean = true;\n /** Show/hide right icon (Storybook control) */\n @Input() showRightIcon: boolean = true;\n /** If true, use outlined style for icons */\n @Input() outlined: boolean = false;\n @Input() color: 'primary' | 'accent' | 'warn' = 'primary';\n /** Text size option for label and icons */\n @Input() size: 'header' | 'xs' | 'sm' | 'base' | 'l' | 'xl' = 'base';\n\n /** Visual type of button: icon only circle, icon+label, two icons + label */\n @Input() buttonType: 'icon-circle' | 'icon-label' | 'two-icon-label' | 'dropdown' = 'icon-label';\n\n /** Optional typography class, e.g. 'font-display-large' */\n @Input() fontClass: string = '';\n\n @Output() onClick = new EventEmitter<Event>(); // Initialize\n @Output() onHover = new EventEmitter<Event>(); // Initialize\n @Output() onMouseLeave = new EventEmitter<Event>(); // Initialize\n\n /** Dropdown menu options, used when buttonType is 'dropdown' */\n @Input() dropdownOptions: Array<{ label: string; value?: any }> = [];\n\n /** Emits the selected dropdown option's value */\n @Output() optionSelect = new EventEmitter<any>();\n\n selectOption(option: any) {\n this.optionSelect.emit(option?.value ?? option);\n }\n\n computeGap(): number {\n // Header size uses a tighter 4px gap across all combinations\n if (this.size === 'header') {\n return 4;\n }\n const hasLabel = !!(this.label && this.label.trim()) && !this.iconOnly;\n const leftIconPresent = !!(this.leftIcon && this.leftIcon.trim());\n const rightIconPresent = !!(this.rightIcon && this.rightIcon.trim());\n const iconCount = (leftIconPresent ? 1 : 0) + (rightIconPresent ? 1 : 0);\n\n // 0 gap for purely icon-only buttons (≤1 icon and no label)\n if (!hasLabel && iconCount <= 1) {\n return 0;\n }\n\n // Tighter gap when we have two icons and a label (e.g., two-icon buttons)\n if (iconCount === 2 && !hasLabel) {\n return 4;\n }\n\n // Default gap\n return 8;\n }\n\n stateClasses: { [key: string]: string } = {\n default: 'btn-default',\n hover: 'btn-hover',\n pressed: 'btn-pressed',\n disabled: 'btn-disabled',\n };\n}\n","<!-- Regular button types -->\n<ng-container *ngIf=\"buttonType !== 'dropdown'; else dropdownTpl\">\n <button\n mat-flat-button\n class=\"btn custom-button\" [class]=\"effectiveFontClass\"\n [ngClass]=\"{\n 'size-header': size === 'header' && !fontClass,\n 'size-xs': size === 'xs' && !fontClass,\n 'size-sm': size === 'sm' && !fontClass,\n 'size-base': size === 'base' && !fontClass,\n 'size-l': size === 'l' && !fontClass,\n 'size-xl': size === 'xl' && !fontClass,\n 'mat-raised-button': variant === 'raised',\n 'mat-flat-button': variant === 'flat',\n \n 'mat-stroked-button': variant === 'stroked',\n 'mat-fab': variant === 'fab',\n 'mat-icon-button': variant === 'icon',\n 'icon-circle': buttonType === 'icon-circle',\n 'blue': category === 'blue',\n 'green': category === 'green',\n 'grey': category === 'grey',\n 'error': category === 'error',\n 'gradient': category === 'gradient',\n 'blue-no-outline': category === 'blue-no-outline',\n 'green-no-outline': category === 'green-no-outline',\n 'grey-no-outline': category === 'grey-no-outline',\n 'error-no-outline': category === 'error-no-outline',\n 'btn-default': state === 'default',\n 'btn-hover': state === 'hover',\n 'btn-pressed': state === 'pressed',\n 'btn-disabled': state === 'disabled'\n }\"\n [ngStyle]=\"{ color: color }\"\n [disabled]=\"state === 'disabled'\"\n (click)=\"onClick.emit($event)\"\n (mouseenter)=\"onHover.emit($event)\"\n (mouseleave)=\"onMouseLeave.emit($event)\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.gap.px]=\"computeGap()\"\n >\n <!-- Left Icon (Only shown if leftIcon is set and not empty) -->\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"left-icon\">{{ leftIconText }}</mat-icon>\n <!-- Label (Only shown if iconOnly is false) -->\n <span *ngIf=\"!iconOnly\" class=\"button-label\" [ngStyle]=\"{ color: color }\">{{ label || '' }}</span>\n \n <!-- Right Icon (Only shown if rightIcon is set and not empty) -->\n <mat-icon *ngIf=\"rightIcon?.trim() as rightIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"right-icon\">{{ rightIconText }}</mat-icon>\n </button>\n </ng-container>\n \n <!-- Dropdown button template -->\n <ng-template #dropdownTpl>\n <button\n mat-flat-button\n class=\"btn custom-button\" [class]=\"effectiveFontClass\"\n [ngClass]=\"{\n 'size-header': size === 'header' && !fontClass,\n 'size-xs': size === 'xs' && !fontClass,\n 'size-sm': size === 'sm' && !fontClass,\n 'size-base': size === 'base' && !fontClass,\n 'size-l': size === 'l' && !fontClass,\n 'size-xl': size === 'xl' && !fontClass,\n 'mat-raised-button': variant === 'raised',\n 'mat-flat-button': variant === 'flat',\n 'mat-stroked-button': variant === 'stroked',\n 'mat-fab': variant === 'fab',\n 'mat-icon-button': variant === 'icon',\n 'icon-label': true,\n 'blue': category === 'blue',\n 'green': category === 'green',\n 'grey': category === 'grey',\n 'error': category === 'error',\n 'gradient': category === 'gradient',\n 'blue-no-outline': category === 'blue-no-outline',\n 'green-no-outline': category === 'green-no-outline',\n 'grey-no-outline': category === 'grey-no-outline',\n 'error-no-outline': category === 'error-no-outline',\n 'btn-default': state === 'default',\n 'btn-hover': state === 'hover',\n 'btn-pressed': state === 'pressed',\n 'btn-disabled': state === 'disabled',\n \n }\"\n [ngStyle]=\"{ color: color }\"\n [disabled]=\"state === 'disabled'\"\n (mouseenter)=\"onHover.emit($event)\"\n (mouseleave)=\"onMouseLeave.emit($event)\"\n [style.display]=\"'inline-flex'\"\n [style.align-items]=\"'center'\"\n [style.gap.px]=\"computeGap()\"\n [matMenuTriggerFor]=\"menu\"\n >\n <!-- Left Icon (optional) -->\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n class=\"left-icon\">{{ leftIconText }}</mat-icon>\n <!-- Label -->\n <span *ngIf=\"!iconOnly\" class=\"button-label\" [ngStyle]=\"{ color: color }\">{{ label || '' }}</span>\n <!-- Dropdown Arrow Icon -->\n <mat-icon class=\"right-icon\">arrow_drop_down</mat-icon>\n </button>\n <!-- Mat Menu -->\n <mat-menu #menu=\"matMenu\" panelClass=\"custom-dropdown-menu\">\n <button mat-menu-item *ngFor=\"let opt of dropdownOptions\" (click)=\"selectOption(opt)\" [ngClass]=\"effectiveFontClass\">\n {{ opt.label || opt }}\n </button>\n </mat-menu>\n </ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from './button.component';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@NgModule({\n imports: [CommonModule, ButtonComponent],\n exports: [ButtonComponent],\n})\nexport class ButtonModule {\n constructor(\n private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer\n ) {\n // register the CSS class alias so <mat-icon> knows about it…\n this.iconRegistry.registerFontClassAlias(\n 'material-symbols-outlined',\n 'material-symbols-outlined'\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\n\n@Component({\n selector: 'al-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.css',\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatSelectModule, MatOptionModule],\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() label: string = '';\n @Input() placeholder: string = '';\n @Input() value: string = '';\n @Input() formControlName: string = '';\n\n @Input() type: 'text' | 'email' | 'number' | 'password' | 'tel' | 'url' | 'date' = 'text';\n @Input() disabled: boolean = false;\n @Input() helperText: boolean = false;\n @Input() helperTextLabel: string = '';\n @Input() leftIcon: string = '';\n @Input() rightIcon: string = '';\n @Input() dropDown: boolean = false;\n @Input() options: string[] = [];\n @Input() size: 'xs' | 'small' | 'base' | 'large' | 'header' = 'base';\n @Input() inputTypes: 'simple' | 'primary' | 'success' | 'warn' | 'disabled' | 'plain' = 'simple';\n noBorder: boolean = false;\n outlined: boolean = false;\n\n @Output() valueChange = new EventEmitter<string>();\n\n private onChange = (value: string) => { };\n onTouched = () => { };\n\n get isDisabled(): boolean {\n return this.disabled || this.inputTypes === 'disabled';\n }\n\n writeValue(value: string | null | undefined): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onInputChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onSelectionChange(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n getSizeClass(): string {\n return 'al-input-size-' + this.size;\n }\n\n getCategoryClass(): string {\n if (this.disabled) {\n return 'al-input-category-disabled';\n }\n if (this.inputTypes === 'plain') {\n return 'al-input-category-plain';\n }\n return 'al-input-category-' + this.inputTypes;\n }\n}\n","<mat-form-field appearance=\"outline\" class=\"al-input-field\" [ngClass]=\"[\n helperText ? 'has-error' : '',\n getSizeClass(),\n getCategoryClass(),\n noBorder ? 'al-input-no-border' : '',\n leftIcon ? 'has-left-icon' : ''\n ]\">\n <mat-label *ngIf=\"label && !noBorder\">{{ label }}</mat-label>\n\n <mat-icon *ngIf=\"leftIcon?.trim() as leftIconText\" [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\"\n matPrefix class=\"left-icon\">{{ leftIconText }}</mat-icon>\n\n <ng-container *ngIf=\"dropDown; else regularInput\">\n <mat-select [disabled]=\"isDisabled\" [(ngModel)]=\"value\" (selectionChange)=\"onSelectionChange($event.value)\">\n <mat-option *ngFor=\"let option of options\" [value]=\"option\">{{ option }}</mat-option>\n </mat-select>\n </ng-container>\n <ng-template #regularInput>\n <input matInput [placeholder]=\"placeholder\" [type]=\"type\" [disabled]=\"isDisabled\" [(ngModel)]=\"value\"\n (input)=\"onInputChange($any($event.target).value)\" (blur)=\"onTouched()\" />\n </ng-template>\n\n <mat-icon *ngIf=\"rightIcon?.trim() as rightIconText\"\n [fontSet]=\"outlined ? 'material-icons-outlined' : 'material-icons'\" matSuffix class=\"right-icon\">{{ rightIconText\n }}</mat-icon>\n\n <mat-error *ngIf=\"false && helperTextLabel\">{{ helperTextLabel }}</mat-error>\n <mat-hint *ngIf=\"helperText && helperTextLabel\">{{ helperTextLabel }}</mat-hint>\n</mat-form-field>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from './input.component';\n\n@NgModule({\n imports: [CommonModule, InputComponent],\n exports: [InputComponent],\n})\nexport class InputModule { }\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CdkAccordionModule } from '@angular/cdk/accordion';\nimport { ButtonComponent } from '../button/button.component';\nimport { EyeIconConfig, HeaderButton, InputHandlersConfig, SectionCheckboxConfig } from './resume-header.model';\n\n@Component({\n selector: 'al-resume-header',\n templateUrl: './resume-header.component.html',\n styleUrl: './resume-header.component.css',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatMenuModule,\n MatIconModule,\n CdkAccordionModule,\n ButtonComponent\n ]\n})\nexport class ResumeHeaderComponent {\n hideTimeout: any;\n isMenuVisible = false;\n isEducationHidden = false;\n @Input() hiddenSection: { headerSectionHidden: boolean } = { headerSectionHidden: false };\n @Input() isLargeScreen = true;\n @Input() inputHandlers!: InputHandlersConfig;\n @Output() focusField = new EventEmitter<string>();\n @Output() blurField = new EventEmitter<void>();\n @Output() enterKeyPressed = new EventEmitter<KeyboardEvent>();\n @Input() checked = false;\n @Input() checkboxConfig!: SectionCheckboxConfig;\n @Output() checkedCheckBoxChange = new EventEmitter<boolean>();\n @Input() disabled = false;\n @Input() buttonConfig: HeaderButton[] = [];\n @Output() buttonClicked = new EventEmitter<HeaderButton>();\n @Input() configEyeToggle!: EyeIconConfig[];\n @Input() accordionItem: any;\n @Output() showHideToggleSection = new EventEmitter<{ isHidden: boolean; accordionItem?: any; config: EyeIconConfig }>();\n @Input() toggleEditIcon?: (field: string) => void;\n @Input() showSection = true;\n @Output() sectionToggled = new EventEmitter<boolean>();\n @Input() borderColor = '#37c1ce';\n\n toggleAccordion(accordionItem: any) {\n accordionItem.toggle();\n this.showSection = accordionItem.expanded;\n this.sectionToggled.emit(this.showSection);\n }\n\n ngOnInit() {\n this.checkScreenSize();\n }\n\n checkScreenSize() {\n this.isLargeScreen = window.innerWidth >= 1400;\n }\n\n showMenu() {\n this.isMenuVisible = true;\n this.clearHideTimeout();\n }\n\n startHideTimeout() {\n this.clearHideTimeout();\n this.hideTimeout = setTimeout(() => {\n this.isMenuVisible = false;\n }, 300);\n }\n\n clearHideTimeout() {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n onButtonClick(btn: any) {\n if (btn.buttonType !== 'dropdown') {\n this.buttonClicked.emit(btn);\n }\n }\n\n onDropdownSelect(btn: any, value: any) {\n if (btn.buttonType === 'dropdown') {\n // Find the selected option\n const selectedOption = btn.dropdownOptions?.find((option: any) => option.value === value);\n\n // If the option has a custom function, call it\n if (selectedOption?.function) {\n selectedOption.function();\n }\n\n // Always emit the buttonClicked event for tracking\n this.buttonClicked.emit({ ...btn, dropdownValue: value });\n }\n }\n}\n","<cdk-accordion class=\"example-accordion\">\n <cdk-accordion-item #accordionItem=\"cdkAccordionItem\" [expanded]=\"true\" class=\"example-accordion-item\">\n\n <div class=\"example-accordion-item-header\" [ngStyle]=\"{ 'border-color': borderColor }\">\n <div class=\"left_side_header\" *ngIf=\"!hiddenSection?.headerSectionHidden; else hiddenHeaderLayout\">\n <div [matTooltip]=\"accordionItem.expanded ? 'Collapse' : 'Expand'\" matTooltipPosition=\"above\">\n <button (click)=\"toggleAccordion(accordionItem)\" tabindex=\"0\" class=\"toggle-button align-center \"\n [attr.aria-expanded]=\"accordionItem.expanded\">\n <span class=\"material-icons-outlined\" *ngIf=\"!accordionItem.expanded\">\n expand_less\n </span>\n <span class=\"material-icons-outlined\" *ngIf=\"accordionItem.expanded\">\n expand_more\n </span>\n </button>\n </div>\n\n <div class=\"edit-input-group\">\n <span *ngIf=\"!inputHandlers.headersLoading\" class=\"align-center\">\n <span class=\"material-symbols-outlined\" [attr.alt]=\"inputHandlers.iconAltText || 'edit-icon'\"\n (click)=\"toggleEditIcon?.('educationHeader')\"\n [matTooltip]=\"inputHandlers.tooltipText || 'This header can be edited'\"\n [matTooltipPosition]=\"inputHandlers.tooltipPosition || 'above'\"\n *ngIf=\"inputHandlers.getFieldNotHidden('')\">\n edit\n </span>\n </span>\n\n <div class=\"content_width\" data-test-id=\"edu-section-title-input\">\n <div class=\"content_width\" data-test-id=\"edu-section-title-input\" *ngIf=\"!inputHandlers.headersLoading\">\n <input #textInputSection type=\"text\" [ngClass]=\"{\n 'focusout-input-text': !inputHandlers?.isFocused,\n 'onfocus-input-text': inputHandlers?.isFocused\n }\" [(ngModel)]=\"inputHandlers.shownTitle\" [attr.aria-label]=\"inputHandlers.shownTitle\"\n (focus)=\"focusField.emit('educationHeader')\" (focusout)=\"blurField.emit()\"\n (keypress)=\"enterKeyPressed.emit($event)\" [disabled]=\"inputHandlers?.isDisabled?.() ?? false\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- ✅ FIXED: Right side header (shows when section is NOT hidden) -->\n <div class=\"right_side_header\" *ngIf=\"!hiddenSection?.headerSectionHidden\">\n <ng-container *ngIf=\"isLargeScreen\">\n <ng-container class=\"button-margin\"\n *ngTemplateOutlet=\"headerButtonsTemplate; context: { buttons: buttonConfig }\">\n </ng-container>\n </ng-container>\n\n <div class=\"hover-menu-container\" *ngIf=\"!isLargeScreen\">\n <div class=\"menu-trigger\" (mouseenter)=\"showMenu()\" (mouseleave)=\"startHideTimeout()\">\n <span class=\"material-symbols-outlined menu-icon\">more_vert</span>\n </div>\n <div class=\"slide-out-panel\" [class.visible]=\"isMenuVisible\" (mouseenter)=\"showMenu()\"\n (mouseleave)=\"startHideTimeout()\">\n <div class=\"fit-panel\">\n <ng-container *ngTemplateOutlet=\"headerButtonsTemplate; context: { buttons: buttonConfig }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- ✅ FIXED: Eye icon for hiding section -->\n <ng-container *ngIf=\"!hiddenSection?.headerSectionHidden\">\n <ng-container *ngFor=\"let eyeConfig of configEyeToggle\">\n <ng-container\n *ngTemplateOutlet=\"eyeIconTemplate; context: { isHidden: false, accordionItem: accordionItem, configEyeToggle: eyeConfig }\"></ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"checkboxConfig?.sectionItems?.length\" class=\"mat-checkbox-margin\">\n <mat-checkbox class=\"example-margin\" [matTooltip]=\"checkboxConfig?.tooltipText || 'Select All'\"\n [matTooltipPosition]=\"checkboxConfig.tooltipPosition|| 'above'\" [(ngModel)]=\"checked\"\n (ngModelChange)=\"checkedCheckBoxChange.emit($event)\"\n [disabled]=\"disabled || checkboxConfig?.disabled ?? false\" data-test-id=\"edu-section-select-all-checkbox\">\n </mat-checkbox>\n </div>\n </div>\n\n <!-- ✅ FIXED: Hidden header layout (shows when section IS hidden) -->\n <ng-template #hiddenHeaderLayout>\n <div class=\"hide-header\">\n <span class=\"header-text-turncate\">{{ inputHandlers?.shownTitle }}</span>\n <div class=\"hidden-write\">Section hidden</div>\n\n <!-- ✅ FIXED: Eye icon for showing section -->\n <ng-container *ngIf=\"hiddenSection?.headerSectionHidden\">\n <ng-container *ngFor=\"let eyeConfig of configEyeToggle\">\n <ng-container *ngIf=\"!eyeConfig['onClick']\">\n <ng-container\n *ngTemplateOutlet=\"eyeIconTemplate; context: { isHidden: true, accordionItem: accordionItem, configEyeToggle: eyeConfig }\"></ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <!-- ✅ FIXED: Accordion body (only shows when expanded AND not hidden) -->\n <div *ngIf=\"accordionItem.expanded && !hiddenSection?.headerSectionHidden\" class=\"example-accordion-item-body\"\n role=\"region\">\n Lorem ipsum dolor, sit amet, consectetur adipisicing elit. Perferendis excepturi incidunt ipsum\n deleniti labore, tempore non nam doloribus blanditiis veritatis illo autem iure aliquid ullam\n rem tenetur deserunt velit culpa?\n </div>\n\n </cdk-accordion-item>\n</cdk-accordion>\n\n<!-- Header Buttons Template -->\n<ng-template #headerButtonsTemplate let-buttons=\"buttons\" let-handleClick=\"handleClick\">\n <ng-container *ngFor=\"let btn of buttonConfig\">\n <al-button *ngIf=\"!btn.hidden && (!btn.displayCondition || btn.displayCondition())\" [category]=\"btn.category\"\n [buttonType]=\"btn.buttonType\" [label]=\"btn.label\" [leftIcon]=\"btn.leftIcon\" [rightIcon]=\"btn.rightIcon\"\n [variant]=\"btn.variant\" [state]=\"btn.state\" [color]=\"btn.color\" [size]=\"btn.size\" [outlined]=\"btn.outlined\"\n [dropdownOptions]=\"btn.buttonType === 'dropdown' ? btn.dropdownOptions : null\"\n (optionSelect)=\"onDropdownSelect(btn, $event)\" (click)=\"onButtonClick(btn)\" [attr.alt]=\"btn.alt\"\n [attr.data-test-id]=\"btn.testId\" [matTooltip]=\"btn.tooltipText\"\n [matTooltipPosition]=\"btn.tooltipPosition || 'above'\">\n </al-button>\n </ng-container>\n</ng-template>\n\n<!-- ✅ FIXED: Eye Icon Template with proper click handler -->\n<ng-template #eyeIconTemplate let-isHidden=\"isHidden\" let-accordionItem=\"accordionItem\"\n let-configEyeToggle=\"configEyeToggle\">\n <div *ngIf=\"configEyeToggle\" class=\"mat-checkbox-margin align-center\"\n [attr.data-test-id]=\"isHidden ? 'edu-section-show-eye-div' : 'edu-section-hide-eye-div'\">\n <span class=\"material-symbols-outlined delete-multiple mat-fab.mat-accent\"\n [matTooltip]=\"configEyeToggle.tooltips[isHidden ? 'collapse' : 'expand']\"\n [matTooltipPosition]=\"configEyeToggle.tooltips.position\"\n [attr.aria-label]=\"configEyeToggle.ariaLabels[isHidden ? 'collapsed' : 'expanded']\"\n (click)=\"showHideToggleSection.emit({ isHidden: isHidden, accordionItem: accordionItem, config: configEyeToggle })\"\n [attr.data-test-id]=\"isHidden ? 'edu-section-show-eye-icon' : 'edu-section-show-hide-eye-icon'\">\n {{ isHidden ? 'visibility' : 'visibility_off' }}\n </span>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResumeHeaderComponent } from './resume-header.component';\n\n@NgModule({\n imports: [CommonModule, ResumeHeaderComponent],\n exports: [ResumeHeaderComponent],\n})\nexport class ResumeHeaderModule { }\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, HostBinding, OnInit, OnDestroy } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n// Define a type for the possible status values for better type safety.\nexport type LoaderStatus = 'analyzing' | 'gathering' | 'processing' | 'applying' | 'done';\n\n@Component({\n selector: 'al-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss'],\n imports: [CommonModule, MatIconModule],\n standalone: true,\n})\nexport class LoaderComponent implements OnInit, OnDestroy {\n \n /**\n * The current status of the loader. Controls which icon and text are displayed.\n * @default 'analyzing'\n */\n @Input() status: LoaderStatus = 'analyzing';\n\n /**\n * Optional custom text to display instead of the default status text.\n */\n @Input() customText?: string;\n\n /**\n * Whether to show the text below the loader icon.\n * @default true\n */\n @Input() showText: boolean = true;\n\n /**\n * Size of the loader component.\n * @default 'medium'\n */\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Whether to automatically loop through all statuses.\n * @default false\n */\n @Input() autoLoop: boolean = false;\n\n /**\n * Duration in milliseconds for each status when auto-looping.\n * @default 3000\n */\n @Input() loopDuration: number = 3000;\n\n /**\n * Custom text array for each status. If provided, overrides default status text.\n * Array should have 5 elements corresponding to: analyzing, gathering, processing, applying, done\n */\n @Input() customTexts?: string[];\n\n /**\n * Whether to show completion state and stop looping when reaching 'done' status.\n * @default false\n */\n @Input() completeOnDone: boolean = false;\n\n // Private properties for looping functionality\n private loopInterval?: number;\n private currentLoopIndex = 0;\n private readonly statusOrder: LoaderStatus[] = ['analyzing', 'gathering', 'processing', 'applying', 'done'];\n\n /**\n * This @HostBinding adds a class to the component's host element (<al-loader>)\n * that matches the current status. For example, if status is 'processing',\n * it adds `class=\"status-processing\"`. This is what our CSS uses to show the right icon.\n */\n @HostBinding('class')\n get statusClass() {\n const classes = [`status-${this.status}`, `size-${this.size}`];\n if (this.autoLoop) {\n classes.push('auto-loop');\n }\n return classes.join(' ');\n }\n\n /**\n * Get the display text for the current status\n */\n get displayText(): string {\n if (this.customText) {\n return this.customText;\n }\n \n // Use custom texts array if provided\n if (this.customTexts && this.customTexts.length >= 5) {\n const statusIndex = this.statusOrder.indexOf(this.status);\n if (statusIndex >= 0) {\n return this.customTexts[statusIndex];\n }\n }\n \n switch (this.status) {\n case 'analyzing':\n return 'Analyzing...';\n case 'gathering':\n return 'Gathering...';\n case 'processing':\n return 'Processing...';\n case 'applying':\n return 'Applying...';\n case 'done':\n return 'Done!';\n default:\n return '';\n }\n }\n\n constructor() { }\n\n ngOnInit() {\n if (this.autoLoop) {\n this.startLoop();\n }\n }\n\n ngOnDestroy() {\n this.stopLoop();\n }\n\n /**\n * Start the auto-loop functionality\n */\n startLoop() {\n if (this.loopInterval) {\n this.stopLoop();\n }\n \n // Set initial status\n this.status = this.statusOrder[this.currentLoopIndex];\n \n this.loopInterval = window.setInterval(() => {\n this.currentLoopIndex = (this.currentLoopIndex + 1) % this.statusOrder.length;\n this.status = this.statusOrder[this.currentLoopIndex];\n \n // If completeOnDone is true and we reach 'done', stop looping\n if (this.completeOnDone && this.status === 'done') {\n this.stopLoop();\n }\n }, this.loopDuration);\n }\n\n /**\n * Stop the auto-loop functionality\n */\n stopLoop() {\n if (this.loopInterval) {\n clearInterval(this.loopInterval);\n this.loopInterval = undefined;\n }\n }\n\n /**\n * Manually trigger completion (sets status to 'done' and stops loop)\n */\n triggerCompletion() {\n this.stopLoop();\n this.status = 'done';\n }\n\n /**\n * Reset the loader to the beginning\n */\n reset() {\n this.stopLoop();\n this.currentLoopIndex = 0;\n this.status = this.statusOrder[0];\n if (this.autoLoop) {\n this.startLoop();\n }\n }\n}\n","<div class=\"loader-container\">\n <!-- Brain Icon -->\n <mat-icon class=\"loader-icon font-icon icon-brain\" fontSet=\"material-icons\">psychology</mat-icon>\n <!-- Cog Icon -->\n <mat-icon class=\"loader-icon font-icon icon-cog\" fontSet=\"material-icons\">sync</mat-icon>\n <!-- Document Icon -->\n <mat-icon class=\"loader-icon font-icon icon-document\" fontSet=\"material-icons\">article</mat-icon>\n <!-- Wand Icon -->\n <mat-icon class=\"loader-icon font-icon icon-wand\" fontSet=\"material-icons\">auto_awesome</mat-icon>\n <!-- Tick Icon -->\n <mat-icon class=\"loader-icon font-icon icon-tick\" fontSet=\"material-icons\">task_alt</mat-icon>\n</div>\n<div class=\"text-container\" *ngIf=\"showText\">\n <span class=\"loader-text\">{{ displayText }}</span>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoaderComponent } from './loader.component';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@NgModule({\n imports: [CommonModule, LoaderComponent],\n exports: [LoaderComponent],\n})\nexport class LoaderModule {\n constructor(\n private iconRegistry: MatIconRegistry,\n private sanitizer: DomSanitizer\n ) {\n // register the CSS class alias so <mat-icon> knows about it…\n this.iconRegistry.registerFontClassAlias(\n 'material-symbols-outlined',\n 'material-symbols-outlined'\n );\n }\n}\n","/*\n * Public API Surface of allsorter-lib\n */\n\nexport * from './lib/allsorter-lib.service';\nexport * from './lib/allsorter-lib.component';\nexport * from './lib/button/button.component';\nexport * from './lib/button/button.module';\nexport * from './lib/input/input.component';\nexport * from './lib/input/input.module';\nexport * from './lib/resume-header/resume-header.component';\nexport * from './lib/resume-header/resume-header.module';\nexport * from './lib/loader/loader.component';\nexport * from './lib/loader/loader.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2","i4","i5"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type LoaderStatus = 'analyzing' | 'gathering' | 'processing' | 'applying' | 'done';
|
|
4
|
+
export declare class LoaderComponent implements OnInit, OnDestroy {
|
|
5
|
+
/**
|
|
6
|
+
* The current status of the loader. Controls which icon and text are displayed.
|
|
7
|
+
* @default 'analyzing'
|
|
8
|
+
*/
|
|
9
|
+
status: LoaderStatus;
|
|
10
|
+
/**
|
|
11
|
+
* Optional custom text to display instead of the default status text.
|
|
12
|
+
*/
|
|
13
|
+
customText?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Whether to show the text below the loader icon.
|
|
16
|
+
* @default true
|
|
17
|
+
*/
|
|
18
|
+
showText: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Size of the loader component.
|
|
21
|
+
* @default 'medium'
|
|
22
|
+
*/
|
|
23
|
+
size: 'small' | 'medium' | 'large';
|
|
24
|
+
/**
|
|
25
|
+
* Whether to automatically loop through all statuses.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
autoLoop: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Duration in milliseconds for each status when auto-looping.
|
|
31
|
+
* @default 3000
|
|
32
|
+
*/
|
|
33
|
+
loopDuration: number;
|
|
34
|
+
/**
|
|
35
|
+
* Custom text array for each status. If provided, overrides default status text.
|
|
36
|
+
* Array should have 5 elements corresponding to: analyzing, gathering, processing, applying, done
|
|
37
|
+
*/
|
|
38
|
+
customTexts?: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Whether to show completion state and stop looping when reaching 'done' status.
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
completeOnDone: boolean;
|
|
44
|
+
private loopInterval?;
|
|
45
|
+
private currentLoopIndex;
|
|
46
|
+
private readonly statusOrder;
|
|
47
|
+
/**
|
|
48
|
+
* This @HostBinding adds a class to the component's host element (<al-loader>)
|
|
49
|
+
* that matches the current status. For example, if status is 'processing',
|
|
50
|
+
* it adds `class="status-processing"`. This is what our CSS uses to show the right icon.
|
|
51
|
+
*/
|
|
52
|
+
get statusClass(): string;
|
|
53
|
+
/**
|
|
54
|
+
* Get the display text for the current status
|
|
55
|
+
*/
|
|
56
|
+
get displayText(): string;
|
|
57
|
+
constructor();
|
|
58
|
+
ngOnInit(): void;
|
|
59
|
+
ngOnDestroy(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Start the auto-loop functionality
|
|
62
|
+
*/
|
|
63
|
+
startLoop(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Stop the auto-loop functionality
|
|
66
|
+
*/
|
|
67
|
+
stopLoop(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Manually trigger completion (sets status to 'done' and stops loop)
|
|
70
|
+
*/
|
|
71
|
+
triggerCompletion(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Reset the loader to the beginning
|
|
74
|
+
*/
|
|
75
|
+
reset(): void;
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LoaderComponent, never>;
|
|
77
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LoaderComponent, "al-loader", never, { "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>;
|
|
78
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MatIconRegistry } from '@angular/material/icon';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "./loader.component";
|
|
6
|
+
export declare class LoaderModule {
|
|
7
|
+
private iconRegistry;
|
|
8
|
+
private sanitizer;
|
|
9
|
+
constructor(iconRegistry: MatIconRegistry, sanitizer: DomSanitizer);
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LoaderModule, never>;
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<LoaderModule, never, [typeof i1.CommonModule, typeof i2.LoaderComponent], [typeof i2.LoaderComponent]>;
|
|
12
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<LoaderModule>;
|
|
13
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -6,3 +6,5 @@ export * from './lib/input/input.component';
|
|
|
6
6
|
export * from './lib/input/input.module';
|
|
7
7
|
export * from './lib/resume-header/resume-header.component';
|
|
8
8
|
export * from './lib/resume-header/resume-header.module';
|
|
9
|
+
export * from './lib/loader/loader.component';
|
|
10
|
+
export * from './lib/loader/loader.module';
|