@carefirst/library 1.3.8 → 1.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +31 -0
- package/ng-package.json +8 -0
- package/package.json +11 -14
- package/public/styles/colors.scss +2 -2
- package/public/styles/font.scss +2 -2
- package/src/lib/components/alert/alert.component.html +0 -0
- package/src/lib/components/alert/alert.component.scss +63 -0
- package/src/lib/components/alert/alert.component.spec.ts +23 -0
- package/src/lib/components/alert/alert.component.ts +73 -0
- package/src/lib/components/badge/badge.component.html +5 -0
- package/src/lib/components/badge/badge.component.scss +96 -0
- package/src/lib/components/badge/badge.component.spec.ts +23 -0
- package/src/lib/components/badge/badge.component.ts +61 -0
- package/src/lib/components/button/button.component.html +20 -0
- package/src/lib/components/button/button.component.scss +153 -0
- package/src/lib/components/button/button.component.spec.ts +21 -0
- package/src/lib/components/button/button.component.ts +94 -0
- package/src/lib/components/calendar/calendar.component.html +9 -0
- package/src/lib/components/calendar/calendar.component.scss +34 -0
- package/src/lib/components/calendar/calendar.component.spec.ts +23 -0
- package/src/lib/components/calendar/calendar.component.ts +53 -0
- package/src/lib/components/chat-bubble/chat-bubble.component.html +9 -0
- package/src/lib/components/chat-bubble/chat-bubble.component.scss +31 -0
- package/src/lib/components/chat-bubble/chat-bubble.component.spec.ts +23 -0
- package/src/lib/components/chat-bubble/chat-bubble.component.ts +43 -0
- package/src/lib/components/form-input/form-input.component.html +37 -0
- package/src/lib/components/form-input/form-input.component.scss +23 -0
- package/src/lib/components/form-input/form-input.component.spec.ts +23 -0
- package/src/lib/components/form-input/form-input.component.ts +95 -0
- package/src/lib/components/form-input-select/form-input-select.component.html +27 -0
- package/src/lib/components/form-input-select/form-input-select.component.scss +40 -0
- package/src/lib/components/form-input-select/form-input-select.component.spec.ts +23 -0
- package/src/lib/components/form-input-select/form-input-select.component.ts +61 -0
- package/src/lib/components/form-input-text-area/form-input-text-area.component.html +29 -0
- package/src/lib/components/form-input-text-area/form-input-text-area.component.scss +19 -0
- package/src/lib/components/form-input-text-area/form-input-text-area.component.spec.ts +23 -0
- package/src/lib/components/form-input-text-area/form-input-text-area.component.ts +76 -0
- package/src/lib/components/form-validation/form-validation.component.html +8 -0
- package/src/lib/components/form-validation/form-validation.component.scss +8 -0
- package/src/lib/components/form-validation/form-validation.component.spec.ts +23 -0
- package/src/lib/components/form-validation/form-validation.component.ts +34 -0
- package/src/lib/components/icon/icon.component.html +529 -0
- package/src/lib/components/icon/icon.component.scss +61 -0
- package/src/lib/components/icon/icon.component.spec.ts +21 -0
- package/src/lib/components/icon/icon.component.ts +40 -0
- package/src/lib/components/logo/logo.component.html +10 -0
- package/src/lib/components/logo/logo.component.scss +5 -0
- package/src/lib/components/logo/logo.component.spec.ts +23 -0
- package/src/lib/components/logo/logo.component.ts +21 -0
- package/src/lib/components/notification/notification.component.html +39 -0
- package/src/lib/components/notification/notification.component.scss +20 -0
- package/src/lib/components/notification/notification.component.spec.ts +21 -0
- package/src/lib/components/notification/notification.component.ts +23 -0
- package/src/lib/components/page/page.component.html +5 -0
- package/src/lib/components/page/page.component.scss +35 -0
- package/src/lib/components/page/page.component.spec.ts +21 -0
- package/src/lib/components/page/page.component.ts +42 -0
- package/src/lib/components/spacer/spacer.component.html +4 -0
- package/src/lib/components/spacer/spacer.component.scss +27 -0
- package/src/lib/components/spacer/spacer.component.spec.ts +21 -0
- package/src/lib/components/spacer/spacer.component.ts +43 -0
- package/src/lib/components/spinner/spinner.component.html +1 -0
- package/src/lib/components/spinner/spinner.component.scss +14 -0
- package/src/lib/components/spinner/spinner.component.spec.ts +23 -0
- package/src/lib/components/spinner/spinner.component.ts +33 -0
- package/src/lib/directives/button-loader.directive.spec.ts +8 -0
- package/src/lib/directives/button-loader.directive.ts +77 -0
- package/src/lib/interfaces/alert.interface.ts +20 -0
- package/src/lib/interfaces/icon.interface.ts +62 -0
- package/src/lib/interfaces/input.interface.ts +8 -0
- package/src/lib/interfaces/notification.interface.ts +15 -0
- package/src/lib/interfaces/spacer.interface.ts +6 -0
- package/src/lib/library.module.ts +66 -0
- package/src/lib/utils/attribute.util.ts +66 -0
- package/src/lib/utils/form-validators-utility.ts +186 -0
- package/{public-api.d.ts → src/public-api.ts} +21 -0
- package/tsconfig.lib.json +12 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/esm2022/carefirst-library.mjs +0 -2
- package/esm2022/lib/components/alert/alert.component.mjs +0 -56
- package/esm2022/lib/components/button/button.component.mjs +0 -87
- package/esm2022/lib/components/calendar/calendar.component.mjs +0 -39
- package/esm2022/lib/components/form-input/form-input.component.mjs +0 -87
- package/esm2022/lib/components/form-input-select/form-input-select.component.mjs +0 -46
- package/esm2022/lib/components/form-input-text-area/form-input-text-area.component.mjs +0 -61
- package/esm2022/lib/components/form-validation/form-validation.component.mjs +0 -20
- package/esm2022/lib/components/icon/icon.component.mjs +0 -29
- package/esm2022/lib/components/logo/logo.component.mjs +0 -18
- package/esm2022/lib/components/notification/notification.component.mjs +0 -22
- package/esm2022/lib/components/page/page.component.mjs +0 -31
- package/esm2022/lib/components/spacer/spacer.component.mjs +0 -30
- package/esm2022/lib/directives/button-loader.directive.mjs +0 -41
- package/esm2022/lib/interfaces/alert.interface.mjs +0 -2
- package/esm2022/lib/interfaces/icon.interface.mjs +0 -52
- package/esm2022/lib/interfaces/input.interface.mjs +0 -2
- package/esm2022/lib/interfaces/notification.interface.mjs +0 -2
- package/esm2022/lib/interfaces/spacer.interface.mjs +0 -2
- package/esm2022/lib/library.module.mjs +0 -85
- package/esm2022/lib/utils/attribute.util.mjs +0 -34
- package/esm2022/lib/utils/form-validators-utility.mjs +0 -113
- package/esm2022/public-api.mjs +0 -21
- package/fesm2022/carefirst-library.mjs +0 -799
- package/fesm2022/carefirst-library.mjs.map +0 -1
- package/index.d.ts +0 -2
- package/lib/components/alert/alert.component.d.ts +0 -14
- package/lib/components/button/button.component.d.ts +0 -30
- package/lib/components/calendar/calendar.component.d.ts +0 -15
- package/lib/components/form-input/form-input.component.d.ts +0 -37
- package/lib/components/form-input-select/form-input-select.component.d.ts +0 -21
- package/lib/components/form-input-text-area/form-input-text-area.component.d.ts +0 -27
- package/lib/components/form-validation/form-validation.component.d.ts +0 -9
- package/lib/components/icon/icon.component.d.ts +0 -13
- package/lib/components/logo/logo.component.d.ts +0 -7
- package/lib/components/notification/notification.component.d.ts +0 -9
- package/lib/components/page/page.component.d.ts +0 -13
- package/lib/components/spacer/spacer.component.d.ts +0 -14
- package/lib/directives/button-loader.directive.d.ts +0 -12
- package/lib/interfaces/alert.interface.d.ts +0 -11
- package/lib/interfaces/icon.interface.d.ts +0 -4
- package/lib/interfaces/input.interface.d.ts +0 -4
- package/lib/interfaces/notification.interface.d.ts +0 -11
- package/lib/interfaces/spacer.interface.d.ts +0 -3
- package/lib/library.module.d.ts +0 -22
- package/lib/utils/attribute.util.d.ts +0 -4
- package/lib/utils/form-validators-utility.d.ts +0 -8
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//--- Screen size breakpoint
|
|
2
|
+
$desktop-breakpoint: 768px; //--- Same as ionic md breakpoint
|
|
3
|
+
|
|
4
|
+
/*===============================================
|
|
5
|
+
============== Mobile Only Spacer ===============
|
|
6
|
+
===============================================*/
|
|
7
|
+
@media not (min-width: $desktop-breakpoint) {
|
|
8
|
+
div.mobile-only {
|
|
9
|
+
display: block;
|
|
10
|
+
}
|
|
11
|
+
div.desktop-only {
|
|
12
|
+
display: none;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/*===============================================
|
|
17
|
+
============== Desktop Only Spacer ==============
|
|
18
|
+
===============================================*/
|
|
19
|
+
|
|
20
|
+
@media (min-width: $desktop-breakpoint) {
|
|
21
|
+
div.mobile-only {
|
|
22
|
+
display: none;
|
|
23
|
+
}
|
|
24
|
+
div.desktop-only {
|
|
25
|
+
display: block;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { SpacerComponent } from './spacer.component';
|
|
4
|
+
|
|
5
|
+
describe('SpacerComponent', () => {
|
|
6
|
+
let component: SpacerComponent;
|
|
7
|
+
let fixture: ComponentFixture<SpacerComponent>;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
TestBed.configureTestingModule({
|
|
11
|
+
declarations: [SpacerComponent]
|
|
12
|
+
});
|
|
13
|
+
fixture = TestBed.createComponent(SpacerComponent);
|
|
14
|
+
component = fixture.componentInstance;
|
|
15
|
+
fixture.detectChanges();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should create', () => {
|
|
19
|
+
expect(component).toBeTruthy();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CareFirst Library - Spacer
|
|
3
|
+
*
|
|
4
|
+
* @file spacer.component
|
|
5
|
+
* @description Contains all the logic for generating a CareFirst Div Spacer
|
|
6
|
+
* @author Jacques Coetzee
|
|
7
|
+
* @since 2023 - 11 - 07
|
|
8
|
+
* @usage <cf-spacer %default=""% %mobile=""% %desktop=""%>CONTENT</cf-spacer>
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Component, Input, type OnChanges, type SimpleChanges } from '@angular/core';
|
|
12
|
+
import { validateNumberValue } from '../../utils/attribute.util';
|
|
13
|
+
import type { SpacerNumberT, SpacerStringT } from '../../interfaces/spacer.interface';
|
|
14
|
+
|
|
15
|
+
@Component({
|
|
16
|
+
selector: 'cf-spacer',
|
|
17
|
+
templateUrl: './spacer.component.html',
|
|
18
|
+
styleUrls: ['./spacer.component.scss'],
|
|
19
|
+
})
|
|
20
|
+
export class SpacerComponent implements OnChanges {
|
|
21
|
+
@Input() default?: SpacerStringT | SpacerNumberT | undefined;
|
|
22
|
+
@Input() mobile?: SpacerStringT | SpacerNumberT | undefined;
|
|
23
|
+
@Input() desktop?: SpacerStringT | SpacerNumberT | undefined;
|
|
24
|
+
|
|
25
|
+
//--- Local variables
|
|
26
|
+
inputDefault: number | undefined = undefined;
|
|
27
|
+
inputMobile: number | undefined = undefined;
|
|
28
|
+
inputDesktop: number | undefined = undefined;
|
|
29
|
+
|
|
30
|
+
/**----------------------------------------------------------------
|
|
31
|
+
* @name ngOnChanges
|
|
32
|
+
* @description Update various values on input changes
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
ngOnChanges(changes: SimpleChanges): void {
|
|
36
|
+
//--- Default
|
|
37
|
+
this.inputDefault = validateNumberValue(changes, 'default', this.inputDefault);
|
|
38
|
+
//--- Mobile
|
|
39
|
+
this.inputMobile = validateNumberValue(changes, 'mobile', this.inputMobile);
|
|
40
|
+
//--- Desktop
|
|
41
|
+
this.inputDesktop = validateNumberValue(changes, 'desktop', this.inputDesktop);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<div id="spinner" [style]="'font-size: ' + inputSize + 'px'"></div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#spinner {
|
|
2
|
+
width: 1em;
|
|
3
|
+
height: 1em;
|
|
4
|
+
border: 0.15em solid var(--cf-app-system-color-outline);
|
|
5
|
+
border-radius: 50%;
|
|
6
|
+
border-top-color: var(--cf-app-color-accent);
|
|
7
|
+
animation: spin 1s linear infinite;
|
|
8
|
+
|
|
9
|
+
@keyframes spin {
|
|
10
|
+
to {
|
|
11
|
+
transform: rotate(360deg);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { SpinnerComponent } from './spinner.component';
|
|
4
|
+
|
|
5
|
+
describe('SpinnerComponent', () => {
|
|
6
|
+
let component: SpinnerComponent;
|
|
7
|
+
let fixture: ComponentFixture<SpinnerComponent>;
|
|
8
|
+
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
await TestBed.configureTestingModule({
|
|
11
|
+
imports: [SpinnerComponent]
|
|
12
|
+
})
|
|
13
|
+
.compileComponents();
|
|
14
|
+
|
|
15
|
+
fixture = TestBed.createComponent(SpinnerComponent);
|
|
16
|
+
component = fixture.componentInstance;
|
|
17
|
+
fixture.detectChanges();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should create', () => {
|
|
21
|
+
expect(component).toBeTruthy();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CareFirst Library - Spinner
|
|
3
|
+
*
|
|
4
|
+
* @file spinner.component
|
|
5
|
+
* @description Contains all the logic for generating a CareFirst Spinner
|
|
6
|
+
* @author Jacques Coetzee
|
|
7
|
+
* @since 2024 - 02 - 23
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Component, Input, type OnChanges, type SimpleChanges } from '@angular/core';
|
|
11
|
+
import { validateNumberValue } from '../../utils/attribute.util';
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'cf-spinner',
|
|
15
|
+
templateUrl: './spinner.component.html',
|
|
16
|
+
styleUrl: './spinner.component.scss',
|
|
17
|
+
})
|
|
18
|
+
export class SpinnerComponent implements OnChanges {
|
|
19
|
+
@Input() size: number | string = 20;
|
|
20
|
+
|
|
21
|
+
//--- Local variables
|
|
22
|
+
inputSize: number = 20;
|
|
23
|
+
|
|
24
|
+
/**----------------------------------------------------------------
|
|
25
|
+
* @name ngOnChanges
|
|
26
|
+
* @description Update various values on input changes
|
|
27
|
+
* @returns {void}
|
|
28
|
+
*/
|
|
29
|
+
ngOnChanges(changes: SimpleChanges): void {
|
|
30
|
+
//--- Size
|
|
31
|
+
this.inputSize = validateNumberValue(changes, 'size', this.inputSize) || this.inputSize;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Button Loader Directive
|
|
3
|
+
*
|
|
4
|
+
* @file button-loader.directive
|
|
5
|
+
* @description HTML directive used to disable a button while loading
|
|
6
|
+
* @author Jacques Coetzee
|
|
7
|
+
* @since 2022 - 07 - 22
|
|
8
|
+
* @usage Add to any HTML tag: *cfButtonLoader="true"
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Component, Directive, Input, Renderer2, TemplateRef, ViewContainerRef, ElementRef } from '@angular/core';
|
|
12
|
+
|
|
13
|
+
@Directive({
|
|
14
|
+
selector: '[cfButtonLoader]',
|
|
15
|
+
})
|
|
16
|
+
export class ButtonLoaderDirective {
|
|
17
|
+
/**----------------------------------------------------------------
|
|
18
|
+
* @name Constructor
|
|
19
|
+
*/
|
|
20
|
+
constructor(
|
|
21
|
+
private templateRef: TemplateRef<HTMLElement>,
|
|
22
|
+
private renderer: Renderer2,
|
|
23
|
+
private viewContainer: ViewContainerRef,
|
|
24
|
+
private elementRef: ElementRef<HTMLElement>
|
|
25
|
+
) {}
|
|
26
|
+
|
|
27
|
+
/**----------------------------------------------------------------
|
|
28
|
+
* @name cfButtonLoader
|
|
29
|
+
* @description Displays a loading overlay and disables a button
|
|
30
|
+
* @param {boolean} loading
|
|
31
|
+
*/
|
|
32
|
+
@Input() set cfButtonLoader(loading: boolean) {
|
|
33
|
+
//--- Clear HTML container
|
|
34
|
+
this.viewContainer.clear();
|
|
35
|
+
//--- Reattach element as child
|
|
36
|
+
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
37
|
+
if (loading) {
|
|
38
|
+
//--- Add loading spinner
|
|
39
|
+
this.viewContainer.createComponent(SpinnerComponent);
|
|
40
|
+
//--- Set parent container position to relative
|
|
41
|
+
this.renderer.setStyle(this.elementRef.nativeElement.parentElement, 'position', 'relative');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**==================================================================
|
|
47
|
+
* @class SpinnerComponent
|
|
48
|
+
* @description The spinner component used to render an ion-spinner on the button
|
|
49
|
+
* @author Jacques Coetzee
|
|
50
|
+
* @since 2022 - 07 - 22
|
|
51
|
+
* ===== */
|
|
52
|
+
|
|
53
|
+
@Component({
|
|
54
|
+
template: '<div class="loading-spinner"></div>',
|
|
55
|
+
styles: [
|
|
56
|
+
`
|
|
57
|
+
@keyframes spinner {
|
|
58
|
+
to {
|
|
59
|
+
transform: rotate(360deg);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.loading-spinner {
|
|
64
|
+
position: absolute;
|
|
65
|
+
top: calc(50% - 1em);
|
|
66
|
+
left: calc(50% - 1em);
|
|
67
|
+
width: 2em;
|
|
68
|
+
height: 2em;
|
|
69
|
+
border-radius: 50%;
|
|
70
|
+
border: 3px solid var(--cf-app-system-color-outline);
|
|
71
|
+
border-top-color: var(--cf-app-color-accent);
|
|
72
|
+
animation: spinner 1s linear infinite;
|
|
73
|
+
}
|
|
74
|
+
`,
|
|
75
|
+
],
|
|
76
|
+
})
|
|
77
|
+
class SpinnerComponent {}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**==============================================
|
|
2
|
+
* @interface AlertDataI
|
|
3
|
+
* @description Defines the properties needed to show a care first alert
|
|
4
|
+
*/
|
|
5
|
+
export interface AlertDataI {
|
|
6
|
+
heading: string;
|
|
7
|
+
message: string;
|
|
8
|
+
alertIdentifier: string | number;
|
|
9
|
+
buttonTrue?: string; //--- Default to 'OK'
|
|
10
|
+
buttonFalse?: string; //--- Default to 'Cancel'
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**==============================================
|
|
14
|
+
* @interface AlertEventI
|
|
15
|
+
* @description Defines the structure of the returned event from the alert when a button is clicked
|
|
16
|
+
*/
|
|
17
|
+
export interface AlertEventI {
|
|
18
|
+
identifier: string | number;
|
|
19
|
+
status: boolean;
|
|
20
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**==============================================
|
|
2
|
+
* @interface IconsT
|
|
3
|
+
* @description Short description
|
|
4
|
+
*/
|
|
5
|
+
export const iconsC = [
|
|
6
|
+
'home',
|
|
7
|
+
'cog',
|
|
8
|
+
'profile',
|
|
9
|
+
'scan',
|
|
10
|
+
'person',
|
|
11
|
+
'appointment',
|
|
12
|
+
'clock',
|
|
13
|
+
'calendar',
|
|
14
|
+
'email',
|
|
15
|
+
'phone',
|
|
16
|
+
'sign-out',
|
|
17
|
+
'sign-in',
|
|
18
|
+
'close',
|
|
19
|
+
'check-mark',
|
|
20
|
+
'rating-star-blank',
|
|
21
|
+
'rating-star-filled',
|
|
22
|
+
'back-arrow',
|
|
23
|
+
'lock',
|
|
24
|
+
'show-password',
|
|
25
|
+
'hide-password',
|
|
26
|
+
'circle-check',
|
|
27
|
+
'circle-alert',
|
|
28
|
+
'direction-switch',
|
|
29
|
+
'chat-bubbles',
|
|
30
|
+
'phone-down',
|
|
31
|
+
'mic',
|
|
32
|
+
'no-mic',
|
|
33
|
+
'button-forward-arrow',
|
|
34
|
+
'button-check-box',
|
|
35
|
+
'social-media-whatsapp',
|
|
36
|
+
'social-media-facebook',
|
|
37
|
+
'social-media-linkedin',
|
|
38
|
+
'social-media-instagram',
|
|
39
|
+
'social-media-google-mail',
|
|
40
|
+
'instant-video-service',
|
|
41
|
+
'instant-telephonic-service',
|
|
42
|
+
'scheduled-video-service',
|
|
43
|
+
'scheduled-telephonic-service',
|
|
44
|
+
'vital-scan-service',
|
|
45
|
+
'open-back-arrow',
|
|
46
|
+
'open-forward-arrow',
|
|
47
|
+
'open-up-arrow',
|
|
48
|
+
'open-down-arrow',
|
|
49
|
+
'single-document',
|
|
50
|
+
'lightning',
|
|
51
|
+
'microsoft-365',
|
|
52
|
+
'user-dependent',
|
|
53
|
+
'plus',
|
|
54
|
+
] as const;
|
|
55
|
+
export type IconsT = (typeof iconsC)[number];
|
|
56
|
+
|
|
57
|
+
/**==============================================
|
|
58
|
+
* @interface IconColorT
|
|
59
|
+
* @description All available colors in CSS classes
|
|
60
|
+
*/
|
|
61
|
+
export const iconColorC = ['primary', 'secondary', 'success', 'warning', 'error', 'white', 'accent'] as const;
|
|
62
|
+
export type IconColorT = (typeof iconColorC)[number];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**==============================================
|
|
2
|
+
* @interface NotificationPayloadI
|
|
3
|
+
* @description Setup needed to show a notification
|
|
4
|
+
*/
|
|
5
|
+
export interface NotificationPayloadI {
|
|
6
|
+
heading: string;
|
|
7
|
+
status: 'success' | 'warning' | 'error'; //--- success=green, warning=yellow, error=red
|
|
8
|
+
message?: string;
|
|
9
|
+
canClose?: true; //--- Adds a clickable x to hide notification
|
|
10
|
+
button?: {
|
|
11
|
+
buttonText: string;
|
|
12
|
+
buttonClickIdentifier: string | number; //--- user set identifier used to know witch notifications button has been clicked
|
|
13
|
+
buttonHeading?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**==============================================
|
|
2
|
+
* @description Available Spacer Values
|
|
3
|
+
*/
|
|
4
|
+
export const spacerNumberArray = [4, 8, 12, 16, 24, 32, 38, 48, 72] as const;
|
|
5
|
+
export type SpacerNumberT = (typeof spacerNumberArray)[number];
|
|
6
|
+
export type SpacerStringT = `${SpacerNumberT}`;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
//--- Modules
|
|
4
|
+
import { IonicModule } from '@ionic/angular';
|
|
5
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
//--- Directives
|
|
7
|
+
import { ButtonLoaderDirective } from './directives/button-loader.directive';
|
|
8
|
+
//--- Components
|
|
9
|
+
import { PageComponent } from './components/page/page.component';
|
|
10
|
+
import { ButtonComponent } from './components/button/button.component';
|
|
11
|
+
import { SpacerComponent } from './components/spacer/spacer.component';
|
|
12
|
+
import { IconComponent } from './components/icon/icon.component';
|
|
13
|
+
import { NotificationComponent } from './components/notification/notification.component';
|
|
14
|
+
import { AlertComponent } from './components/alert/alert.component';
|
|
15
|
+
import { LogoComponent } from './components/logo/logo.component';
|
|
16
|
+
import { CalendarComponent } from './components/calendar/calendar.component';
|
|
17
|
+
import { FormValidationComponent } from './components/form-validation/form-validation.component';
|
|
18
|
+
import { FormInputComponent } from './components/form-input/form-input.component';
|
|
19
|
+
import { FormInputSelectComponent } from './components/form-input-select/form-input-select.component';
|
|
20
|
+
import { FormInputTextAreaComponent } from './components/form-input-text-area/form-input-text-area.component';
|
|
21
|
+
import { ChatBubbleComponent } from './components/chat-bubble/chat-bubble.component';
|
|
22
|
+
import { BadgeComponent } from './components/badge/badge.component';
|
|
23
|
+
import { SpinnerComponent } from './components/spinner/spinner.component';
|
|
24
|
+
|
|
25
|
+
@NgModule({
|
|
26
|
+
declarations: [
|
|
27
|
+
PageComponent,
|
|
28
|
+
ButtonComponent,
|
|
29
|
+
SpacerComponent,
|
|
30
|
+
IconComponent,
|
|
31
|
+
ButtonLoaderDirective,
|
|
32
|
+
NotificationComponent,
|
|
33
|
+
AlertComponent,
|
|
34
|
+
LogoComponent,
|
|
35
|
+
CalendarComponent,
|
|
36
|
+
FormValidationComponent,
|
|
37
|
+
FormInputComponent,
|
|
38
|
+
FormInputSelectComponent,
|
|
39
|
+
FormInputTextAreaComponent,
|
|
40
|
+
ChatBubbleComponent,
|
|
41
|
+
BadgeComponent,
|
|
42
|
+
SpinnerComponent,
|
|
43
|
+
],
|
|
44
|
+
|
|
45
|
+
imports: [IonicModule, CommonModule, ReactiveFormsModule],
|
|
46
|
+
exports: [
|
|
47
|
+
PageComponent,
|
|
48
|
+
ButtonComponent,
|
|
49
|
+
SpacerComponent,
|
|
50
|
+
IconComponent,
|
|
51
|
+
ButtonLoaderDirective,
|
|
52
|
+
NotificationComponent,
|
|
53
|
+
AlertComponent,
|
|
54
|
+
LogoComponent,
|
|
55
|
+
CalendarComponent,
|
|
56
|
+
FormValidationComponent,
|
|
57
|
+
FormInputComponent,
|
|
58
|
+
FormInputSelectComponent,
|
|
59
|
+
FormInputTextAreaComponent,
|
|
60
|
+
ChatBubbleComponent,
|
|
61
|
+
BadgeComponent,
|
|
62
|
+
SpinnerComponent,
|
|
63
|
+
],
|
|
64
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
65
|
+
})
|
|
66
|
+
export class CareFirstLibraryModule {}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute Utility
|
|
3
|
+
*
|
|
4
|
+
* @file attribute.util
|
|
5
|
+
* @description Contains various utility functions pertaining to attribute handling
|
|
6
|
+
* @author Jacques Coetzee
|
|
7
|
+
* @since 2023 - 11 - 08
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { SimpleChanges } from '@angular/core';
|
|
11
|
+
|
|
12
|
+
/**----------------------------------------------------------------
|
|
13
|
+
* @name checkTruthAttribute
|
|
14
|
+
* @description Check whether an attribute is either just available or specifically set to boolean value
|
|
15
|
+
* @param {SimpleChanges} changes
|
|
16
|
+
* @param {string} attribute
|
|
17
|
+
* @param {boolean} curVal
|
|
18
|
+
* @returns {boolean}
|
|
19
|
+
*/
|
|
20
|
+
export function checkTruthAttribute(changes: SimpleChanges, attribute: string, curVal: boolean): boolean {
|
|
21
|
+
if (!(attribute in changes)) return curVal;
|
|
22
|
+
const valueChanged = changes[attribute]?.currentValue;
|
|
23
|
+
if (typeof valueChanged === 'boolean') {
|
|
24
|
+
return valueChanged;
|
|
25
|
+
} else if (typeof valueChanged === 'string' && ['true', ''].includes(valueChanged)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**----------------------------------------------------------------
|
|
32
|
+
* @name validateStringValue
|
|
33
|
+
* @description Validate whether an attribute is set and contains a specific string option
|
|
34
|
+
* @param {SimpleChanges} changes
|
|
35
|
+
* @param {string} attribute
|
|
36
|
+
* @param {string[]} options
|
|
37
|
+
* @param {T | undefined} curVal
|
|
38
|
+
* @returns {string | undefined} Returns correct string value or undefined if either not available or not in list
|
|
39
|
+
*/
|
|
40
|
+
export function validateStringValue<T>(changes: SimpleChanges, attribute: string, options: T[], curVal: T | undefined): T | undefined {
|
|
41
|
+
if (!(attribute in changes)) return curVal;
|
|
42
|
+
const valueChanged = changes[attribute]?.currentValue;
|
|
43
|
+
if (valueChanged && options.includes(valueChanged)) {
|
|
44
|
+
return valueChanged as T;
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**----------------------------------------------------------------
|
|
50
|
+
* @name validateNumberValue
|
|
51
|
+
* @description Validate whether an attribute is set and contains a specific number value
|
|
52
|
+
* @param {SimpleChanges} changes
|
|
53
|
+
* @param {string} attribute
|
|
54
|
+
* @param {number | undefined} curVal
|
|
55
|
+
* @returns {number | undefined} Returns correct number value or undefined if either not available or not a number
|
|
56
|
+
*/
|
|
57
|
+
export function validateNumberValue(changes: SimpleChanges, attribute: string, curVal: number | undefined): number | undefined {
|
|
58
|
+
if (!(attribute in changes)) return curVal;
|
|
59
|
+
const valueChanged = changes[attribute]?.currentValue;
|
|
60
|
+
if (typeof valueChanged === 'number' && valueChanged >= 0) {
|
|
61
|
+
return valueChanged;
|
|
62
|
+
} else if (typeof valueChanged === 'string' && +valueChanged >= 0) {
|
|
63
|
+
return +valueChanged;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|