@byuhbll/components 4.3.1 → 4.4.0
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/esm2022/lib/snackbar/snackbar.component.mjs +142 -0
- package/esm2022/lib/snackbar/snackbar.service.mjs +82 -0
- package/esm2022/lib/status-button/status-button.component.mjs +104 -0
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/byuhbll-components.mjs +320 -3
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/snackbar/snackbar.component.d.ts +44 -0
- package/lib/snackbar/snackbar.service.d.ts +37 -0
- package/lib/status-button/status-button.component.d.ts +38 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/styles/scss/_vars.scss +10 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import { NgClass } from '@angular/common';
|
|
3
|
+
import { StatusButtonComponent } from '../status-button/status-button.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const purposeToStatusMap = {
|
|
6
|
+
default: 'info',
|
|
7
|
+
info: 'info',
|
|
8
|
+
success: 'success',
|
|
9
|
+
error: 'error',
|
|
10
|
+
warning: 'warning',
|
|
11
|
+
};
|
|
12
|
+
export class SnackbarComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.purpose = 'default';
|
|
15
|
+
this.title = 'Snackbar Title';
|
|
16
|
+
this.description = 'Lorem ipsum';
|
|
17
|
+
this.fieldPlaceholder = 'Placeholder';
|
|
18
|
+
this.titleIcon = 'info';
|
|
19
|
+
this.buttonLabel = 'Done';
|
|
20
|
+
this.showTitle = true;
|
|
21
|
+
this.showTitleIcon = true;
|
|
22
|
+
this.showClose = true;
|
|
23
|
+
this.showProgressBar = true;
|
|
24
|
+
this.showField = true;
|
|
25
|
+
this.showButton = true;
|
|
26
|
+
this.autoDismiss = true;
|
|
27
|
+
this.visible = true;
|
|
28
|
+
this.progressMs = 4000;
|
|
29
|
+
this.y = 24;
|
|
30
|
+
this.closed = new EventEmitter();
|
|
31
|
+
this.visibleChange = new EventEmitter();
|
|
32
|
+
this.isOpen = false;
|
|
33
|
+
this.EXIT_MS = 300;
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
if (this.visible) {
|
|
37
|
+
// enter on next tick
|
|
38
|
+
setTimeout(() => (this.isOpen = true), 0);
|
|
39
|
+
this.startDismissTimer();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ngOnChanges(changes) {
|
|
43
|
+
if ('visible' in changes) {
|
|
44
|
+
// when parent toggles visible
|
|
45
|
+
if (this.visible) {
|
|
46
|
+
// becoming visible -> open + (re)start timer
|
|
47
|
+
this.isOpen = false;
|
|
48
|
+
setTimeout(() => (this.isOpen = true), 0);
|
|
49
|
+
this.startDismissTimer();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// becoming hidden -> stop timers and ensure closed state
|
|
53
|
+
this.clearDismissTimer();
|
|
54
|
+
this.isOpen = false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ngOnDestroy() {
|
|
59
|
+
this.clearDismissTimer();
|
|
60
|
+
}
|
|
61
|
+
// used by the × button, done button, and auto-dismiss
|
|
62
|
+
close() {
|
|
63
|
+
if (!this.isOpen && !this.visible)
|
|
64
|
+
return;
|
|
65
|
+
this.clearDismissTimer();
|
|
66
|
+
this.isOpen = false; // triggers exit transition
|
|
67
|
+
// after exit animation, hide + notify
|
|
68
|
+
window.setTimeout(() => {
|
|
69
|
+
if (this.visible) {
|
|
70
|
+
this.visible = false;
|
|
71
|
+
this.visibleChange.emit(false);
|
|
72
|
+
}
|
|
73
|
+
this.closed.emit();
|
|
74
|
+
}, this.EXIT_MS);
|
|
75
|
+
}
|
|
76
|
+
get status() {
|
|
77
|
+
return purposeToStatusMap[this.purpose];
|
|
78
|
+
}
|
|
79
|
+
startDismissTimer() {
|
|
80
|
+
if (!this.autoDismiss)
|
|
81
|
+
return;
|
|
82
|
+
this.clearDismissTimer();
|
|
83
|
+
this.dismissTimer = window.setTimeout(() => this.close(), this.progressMs);
|
|
84
|
+
}
|
|
85
|
+
clearDismissTimer() {
|
|
86
|
+
if (this.dismissTimer) {
|
|
87
|
+
clearTimeout(this.dismissTimer);
|
|
88
|
+
this.dismissTimer = undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SnackbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
92
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SnackbarComponent, isStandalone: true, selector: "lib-snackbar", inputs: { purpose: "purpose", title: "title", description: "description", fieldPlaceholder: "fieldPlaceholder", titleIcon: "titleIcon", buttonLabel: "buttonLabel", showTitle: ["showTitle", "showTitle", booleanAttribute], showTitleIcon: ["showTitleIcon", "showTitleIcon", booleanAttribute], showClose: ["showClose", "showClose", booleanAttribute], showProgressBar: ["showProgressBar", "showProgressBar", booleanAttribute], showField: ["showField", "showField", booleanAttribute], showButton: ["showButton", "showButton", booleanAttribute], autoDismiss: ["autoDismiss", "autoDismiss", booleanAttribute], visible: ["visible", "visible", booleanAttribute], progressMs: "progressMs", y: "y" }, outputs: { closed: "closed", visibleChange: "visibleChange" }, usesOnChanges: true, ngImport: i0, template: "@if (visible) {\n <section\n class=\"snackbar\"\n [ngClass]=\"{\n 'is-default': purpose === 'default',\n 'is-info': purpose === 'info',\n 'is-success': purpose === 'success',\n 'is-error': purpose === 'error',\n 'is-warning': purpose === 'warning',\n 'is-open': isOpen,\n }\"\n role=\"status\"\n aria-live=\"polite\"\n [style.--snackbar-progress-duration]=\"progressMs + 'ms'\"\n [style.top.px]=\"y\"\n >\n <div class=\"snackbar__left\">\n @if(showTitle) {\n <div class=\"snackbar__title-row\">\n <span \n [ngClass]=\"{\n 'snackbar__title-icon': true,\n 'has-icon': showTitle && showTitleIcon\n }\"\n aria-hidden=\"true\"\n >\n @if (showTitle && showTitleIcon) {\n <i class=\"material-icons\" id=\"snackbar-title-icon\" aria-hidden=\"true\">{{ titleIcon }}</i>\n }\n </span>\n @if (showTitle) {\n <h3 class=\"snackbar__title\">{{ title }}</h3>\n }\n </div>\n }\n <p class=\"snackbar__desc\">\n {{ description }}\n </p>\n @if (showField) {\n <input class=\"snackbar__input\" type=\"text\" [placeholder]=\"fieldPlaceholder\" />\n }\n @if (showButton) {\n <lib-status-button\n label={{buttonLabel}}\n [status]=\"status\"\n [clearVariant]=\"true\"\n (click)=\"close()\"\n ></lib-status-button>\n\n }\n </div>\n <button \n type=\"button\"\n (click)=\"close()\"\n class=\"snackbar__close\"\n aria-label=\"Dismiss\"\n [style.visibility]=\"showClose ? 'visible' : 'hidden'\"\n >\n \u00D7\n </button>\n @if (showProgressBar) {\n <div class=\"snackbar__progress\">\n <div class=\"snackbar__progress-fill\"></div>\n </div>\n }\n </section>\n}\n", styles: [":root{--border-radius-md: 4px;--colors-border-primary: #d0d0d0;--colors-surface-primary: white;--colors-border-information: #457fa6;--colors-surface-information: #ecf2f6;--colors-border-success: #3ba35a;--colors-surface-success: #ebf6ee;--colors-border-warning: #d1c844;--colors-surface-warning: #faf9ec;--colors-border-error: #c73e3d;--colors-surface-error: #f9ecec}.snackbar{--snackbar-border-color: var(--colors-border-primary);--snackbar-bg: var(--colors-surface-primary);--snackbar-text: #141414;--snackbar-title-color: var(--snackbar-text);--snackbar-icon-bg: #e5edf8;--snackbar-accent: #0047ba;--snackbar-input-border: var(--snackbar-border-color);--snackbar-progress: var(--snackbar-accent);display:flex;width:26.25rem;padding:1.25rem 1rem;justify-content:space-between;align-items:flex-start;gap:.25rem;position:relative;border-radius:var(--border-radius-md, 4px);border:1px solid var(--snackbar-border-color);background:var(--snackbar-bg);box-shadow:1px 1px 4px #00000040;color:var(--snackbar-text)}.snackbar__left{display:grid;gap:.5rem;flex:1 1 auto}.snackbar__left>.snackbar__title-row~*{margin-left:var(--snackbar-right-gutter, 1.85rem)}.snackbar__title-row{display:flex;align-items:center;gap:.25rem}.snackbar__title{margin:0;font-weight:400;font-size:1.2rem;line-height:1.2;color:var(--snackbar-title-color)}.snackbar__title-icon{display:inline-flex;align-items:center;justify-content:center;width:1.5em;height:1.5em}.snackbar__title-icon.has-icon{border-radius:50%;background:var(--snackbar-icon-bg);color:var(--snackbar-accent)}.snackbar__icon{font-weight:700;font-size:1rem;line-height:1}.snackbar__desc{margin:0;opacity:.9}.snackbar__input{width:100%;max-width:100%;box-sizing:border-box;padding:.5em;border-radius:4px;border:1px solid var(--snackbar-input-border);background:#fff;color:inherit}.snackbar__close{margin-left:.5em;border:0;background:transparent;color:inherit;opacity:.7;font-size:1.5rem;padding:.25rem;line-height:1;cursor:pointer}.snackbar__progress{position:absolute;left:0;right:0;bottom:-1px;height:4px;overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.snackbar__progress-fill{height:100%;width:0%;background:var(--snackbar-progress);animation:fill var(--snackbar-progress-duration, 4s) linear forwards}@keyframes fill{to{width:100%}}.snackbar.is-default{--snackbar-border-color: var(--colors-border-primary, #d0d0d0);--snackbar-bg: var(--colors-surface-primary, white);--snackbar-text: #141414;--snackbar-title-color: #003995;--snackbar-icon-bg: #e5edf8;--snackbar-accent: #003995;--snackbar-input-border: #d0d0d0;--snackbar-progress: #003995}.snackbar.is-info{--snackbar-border-color: var(--colors-border-information, #457fa6);--snackbar-bg: var(--colors-surface-information, #ecf2f6);--snackbar-text: #24495c;--snackbar-title-color: #24495c;--snackbar-icon-bg: #a2bfd3;--snackbar-accent: #306a88;--snackbar-input-border: #a2bfd3;--snackbar-progress: #306a88}.snackbar.is-success{--snackbar-border-color: var(--colors-border-success, #3ba35a);--snackbar-bg: var(--colors-surface-success, #ebf6ee);--snackbar-text: #20522e;--snackbar-title-color: #20522e;--snackbar-icon-bg: #9dd1ac;--snackbar-accent: #2e7d3f;--snackbar-input-border: #9dd1ac;--snackbar-progress: #2e7d3f}.snackbar.is-warning{--snackbar-border-color: var(--colors-border-warning, #d1c844);--snackbar-bg: var(--colors-surface-warning, #faf9ec);--snackbar-text: #514a18;--snackbar-title-color: #514a18;--snackbar-icon-bg: #e8e3a1;--snackbar-accent: #7a6f13;--snackbar-input-border: #d1c844;--snackbar-progress: #7a6f13}.snackbar.is-error{--snackbar-border-color: var(--colors-border-error, #c73e3d);--snackbar-bg: var(--colors-surface-error, #f9ecec);--snackbar-text: #611a1a;--snackbar-title-color: #611a1a;--snackbar-icon-bg: #e39e9e;--snackbar-accent: #912525;--snackbar-input-border: #c73e3d;--snackbar-progress: #912525}.snackbar{position:fixed;top:24px;right:24px;z-index:1000;transform:translate(120%);transition:transform .6s ease}.snackbar.is-open{transform:translate(0)}lib-status-button{--status-button-padding: .25em .5em .25em 0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: StatusButtonComponent, selector: "lib-status-button", inputs: ["label", "status", "leftIcon", "rightIcon", "hideLeftIcon", "hideRightIcon", "clearVariant"] }] }); }
|
|
93
|
+
}
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SnackbarComponent, decorators: [{
|
|
95
|
+
type: Component,
|
|
96
|
+
args: [{ selector: 'lib-snackbar', standalone: true, imports: [NgClass, StatusButtonComponent], template: "@if (visible) {\n <section\n class=\"snackbar\"\n [ngClass]=\"{\n 'is-default': purpose === 'default',\n 'is-info': purpose === 'info',\n 'is-success': purpose === 'success',\n 'is-error': purpose === 'error',\n 'is-warning': purpose === 'warning',\n 'is-open': isOpen,\n }\"\n role=\"status\"\n aria-live=\"polite\"\n [style.--snackbar-progress-duration]=\"progressMs + 'ms'\"\n [style.top.px]=\"y\"\n >\n <div class=\"snackbar__left\">\n @if(showTitle) {\n <div class=\"snackbar__title-row\">\n <span \n [ngClass]=\"{\n 'snackbar__title-icon': true,\n 'has-icon': showTitle && showTitleIcon\n }\"\n aria-hidden=\"true\"\n >\n @if (showTitle && showTitleIcon) {\n <i class=\"material-icons\" id=\"snackbar-title-icon\" aria-hidden=\"true\">{{ titleIcon }}</i>\n }\n </span>\n @if (showTitle) {\n <h3 class=\"snackbar__title\">{{ title }}</h3>\n }\n </div>\n }\n <p class=\"snackbar__desc\">\n {{ description }}\n </p>\n @if (showField) {\n <input class=\"snackbar__input\" type=\"text\" [placeholder]=\"fieldPlaceholder\" />\n }\n @if (showButton) {\n <lib-status-button\n label={{buttonLabel}}\n [status]=\"status\"\n [clearVariant]=\"true\"\n (click)=\"close()\"\n ></lib-status-button>\n\n }\n </div>\n <button \n type=\"button\"\n (click)=\"close()\"\n class=\"snackbar__close\"\n aria-label=\"Dismiss\"\n [style.visibility]=\"showClose ? 'visible' : 'hidden'\"\n >\n \u00D7\n </button>\n @if (showProgressBar) {\n <div class=\"snackbar__progress\">\n <div class=\"snackbar__progress-fill\"></div>\n </div>\n }\n </section>\n}\n", styles: [":root{--border-radius-md: 4px;--colors-border-primary: #d0d0d0;--colors-surface-primary: white;--colors-border-information: #457fa6;--colors-surface-information: #ecf2f6;--colors-border-success: #3ba35a;--colors-surface-success: #ebf6ee;--colors-border-warning: #d1c844;--colors-surface-warning: #faf9ec;--colors-border-error: #c73e3d;--colors-surface-error: #f9ecec}.snackbar{--snackbar-border-color: var(--colors-border-primary);--snackbar-bg: var(--colors-surface-primary);--snackbar-text: #141414;--snackbar-title-color: var(--snackbar-text);--snackbar-icon-bg: #e5edf8;--snackbar-accent: #0047ba;--snackbar-input-border: var(--snackbar-border-color);--snackbar-progress: var(--snackbar-accent);display:flex;width:26.25rem;padding:1.25rem 1rem;justify-content:space-between;align-items:flex-start;gap:.25rem;position:relative;border-radius:var(--border-radius-md, 4px);border:1px solid var(--snackbar-border-color);background:var(--snackbar-bg);box-shadow:1px 1px 4px #00000040;color:var(--snackbar-text)}.snackbar__left{display:grid;gap:.5rem;flex:1 1 auto}.snackbar__left>.snackbar__title-row~*{margin-left:var(--snackbar-right-gutter, 1.85rem)}.snackbar__title-row{display:flex;align-items:center;gap:.25rem}.snackbar__title{margin:0;font-weight:400;font-size:1.2rem;line-height:1.2;color:var(--snackbar-title-color)}.snackbar__title-icon{display:inline-flex;align-items:center;justify-content:center;width:1.5em;height:1.5em}.snackbar__title-icon.has-icon{border-radius:50%;background:var(--snackbar-icon-bg);color:var(--snackbar-accent)}.snackbar__icon{font-weight:700;font-size:1rem;line-height:1}.snackbar__desc{margin:0;opacity:.9}.snackbar__input{width:100%;max-width:100%;box-sizing:border-box;padding:.5em;border-radius:4px;border:1px solid var(--snackbar-input-border);background:#fff;color:inherit}.snackbar__close{margin-left:.5em;border:0;background:transparent;color:inherit;opacity:.7;font-size:1.5rem;padding:.25rem;line-height:1;cursor:pointer}.snackbar__progress{position:absolute;left:0;right:0;bottom:-1px;height:4px;overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.snackbar__progress-fill{height:100%;width:0%;background:var(--snackbar-progress);animation:fill var(--snackbar-progress-duration, 4s) linear forwards}@keyframes fill{to{width:100%}}.snackbar.is-default{--snackbar-border-color: var(--colors-border-primary, #d0d0d0);--snackbar-bg: var(--colors-surface-primary, white);--snackbar-text: #141414;--snackbar-title-color: #003995;--snackbar-icon-bg: #e5edf8;--snackbar-accent: #003995;--snackbar-input-border: #d0d0d0;--snackbar-progress: #003995}.snackbar.is-info{--snackbar-border-color: var(--colors-border-information, #457fa6);--snackbar-bg: var(--colors-surface-information, #ecf2f6);--snackbar-text: #24495c;--snackbar-title-color: #24495c;--snackbar-icon-bg: #a2bfd3;--snackbar-accent: #306a88;--snackbar-input-border: #a2bfd3;--snackbar-progress: #306a88}.snackbar.is-success{--snackbar-border-color: var(--colors-border-success, #3ba35a);--snackbar-bg: var(--colors-surface-success, #ebf6ee);--snackbar-text: #20522e;--snackbar-title-color: #20522e;--snackbar-icon-bg: #9dd1ac;--snackbar-accent: #2e7d3f;--snackbar-input-border: #9dd1ac;--snackbar-progress: #2e7d3f}.snackbar.is-warning{--snackbar-border-color: var(--colors-border-warning, #d1c844);--snackbar-bg: var(--colors-surface-warning, #faf9ec);--snackbar-text: #514a18;--snackbar-title-color: #514a18;--snackbar-icon-bg: #e8e3a1;--snackbar-accent: #7a6f13;--snackbar-input-border: #d1c844;--snackbar-progress: #7a6f13}.snackbar.is-error{--snackbar-border-color: var(--colors-border-error, #c73e3d);--snackbar-bg: var(--colors-surface-error, #f9ecec);--snackbar-text: #611a1a;--snackbar-title-color: #611a1a;--snackbar-icon-bg: #e39e9e;--snackbar-accent: #912525;--snackbar-input-border: #c73e3d;--snackbar-progress: #912525}.snackbar{position:fixed;top:24px;right:24px;z-index:1000;transform:translate(120%);transition:transform .6s ease}.snackbar.is-open{transform:translate(0)}lib-status-button{--status-button-padding: .25em .5em .25em 0}\n"] }]
|
|
97
|
+
}], propDecorators: { purpose: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], title: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}], description: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], fieldPlaceholder: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], titleIcon: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], buttonLabel: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}], showTitle: [{
|
|
110
|
+
type: Input,
|
|
111
|
+
args: [{ transform: booleanAttribute }]
|
|
112
|
+
}], showTitleIcon: [{
|
|
113
|
+
type: Input,
|
|
114
|
+
args: [{ transform: booleanAttribute }]
|
|
115
|
+
}], showClose: [{
|
|
116
|
+
type: Input,
|
|
117
|
+
args: [{ transform: booleanAttribute }]
|
|
118
|
+
}], showProgressBar: [{
|
|
119
|
+
type: Input,
|
|
120
|
+
args: [{ transform: booleanAttribute }]
|
|
121
|
+
}], showField: [{
|
|
122
|
+
type: Input,
|
|
123
|
+
args: [{ transform: booleanAttribute }]
|
|
124
|
+
}], showButton: [{
|
|
125
|
+
type: Input,
|
|
126
|
+
args: [{ transform: booleanAttribute }]
|
|
127
|
+
}], autoDismiss: [{
|
|
128
|
+
type: Input,
|
|
129
|
+
args: [{ transform: booleanAttribute }]
|
|
130
|
+
}], visible: [{
|
|
131
|
+
type: Input,
|
|
132
|
+
args: [{ transform: booleanAttribute }]
|
|
133
|
+
}], progressMs: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], y: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], closed: [{
|
|
138
|
+
type: Output
|
|
139
|
+
}], visibleChange: [{
|
|
140
|
+
type: Output
|
|
141
|
+
}] } });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUtOLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFVLE1BQU0sMENBQTBDLENBQUM7O0FBR3pGLE1BQU0sa0JBQWtCLEdBQW9DO0lBQ3hELE9BQU8sRUFBRSxNQUFNO0lBQ2YsSUFBSSxFQUFFLE1BQU07SUFDWixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztJQUNkLE9BQU8sRUFBRSxTQUFTO0NBQ3JCLENBQUM7QUFTRixNQUFNLE9BQU8saUJBQWlCO0lBUDlCO1FBUWEsWUFBTyxHQUFvQixTQUFTLENBQUM7UUFDckMsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLGdCQUFXLEdBQUcsYUFBYSxDQUFDO1FBQzVCLHFCQUFnQixHQUFHLGFBQWEsQ0FBQztRQUNqQyxjQUFTLEdBQVcsTUFBTSxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ1UsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZUFBVSxHQUFHLElBQUks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YUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3RhdHVzQnV0dG9uQ29tcG9uZW50LCBTdGF0dXMgfSBmcm9tICcuLi9zdGF0dXMtYnV0dG9uL3N0YXR1cy1idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIFNuYWNrYmFyUHVycG9zZSA9ICdkZWZhdWx0JyB8ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbmNvbnN0IHB1cnBvc2VUb1N0YXR1c01hcDogUmVjb3JkPFNuYWNrYmFyUHVycG9zZSwgU3RhdHVzPiA9IHtcbiAgICBkZWZhdWx0OiAnaW5mbycsXG4gICAgaW5mbzogJ2luZm8nLFxuICAgIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICB3YXJuaW5nOiAnd2FybmluZycsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zbmFja2JhcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgU3RhdHVzQnV0dG9uQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc25hY2tiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zbmFja2Jhci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFNuYWNrYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgcHVycG9zZTogU25hY2tiYXJQdXJwb3NlID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIHRpdGxlID0gJ1NuYWNrYmFyIFRpdGxlJztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICdMb3JlbSBpcHN1bSc7XG4gICAgQElucHV0KCkgZmllbGRQbGFjZWhvbGRlciA9ICdQbGFjZWhvbGRlcic7XG4gICAgQElucHV0KCkgdGl0bGVJY29uOiBzdHJpbmcgPSAnaW5mbyc7XG4gICAgQElucHV0KCkgYnV0dG9uTGFiZWwgPSAnRG9uZSc7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUaXRsZUljb24gPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xvc2UgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93UHJvZ3Jlc3NCYXIgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93RmllbGQgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QnV0dG9uID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b0Rpc21pc3MgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB2aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwcm9ncmVzc01zID0gNDAwMDtcbiAgICBASW5wdXQoKSB5ID0gMjQ7XG5cbiAgICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRpc21pc3NUaW1lcj86IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVYSVRfTVMgPSAzMDA7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gZW50ZXIgb24gbmV4dCB0aWNrXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmlzT3BlbiA9IHRydWUpLCAwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREaXNtaXNzVGltZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCd2aXNpYmxlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyB3aGVuIHBhcmVudCB0b2dnbGVzIHZpc2libGVcbiAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAvLyBiZWNvbWluZyB2aXNpYmxlIC0+IG9wZW4gKyAocmUpc3RhcnQgdGltZXJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuaXNPcGVuID0gdHJ1ZSksIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREaXNtaXNzVGltZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYmVjb21pbmcgaGlkZGVuIC0+IHN0b3AgdGltZXJzIGFuZCBlbnN1cmUgY2xvc2VkIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRpc21pc3NUaW1lcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckRpc21pc3NUaW1lcigpO1xuICAgIH1cblxuICAgIC8vIHVzZWQgYnkgdGhlIMOXIGJ1dHRvbiwgZG9uZSBidXR0b24sIGFuZCBhdXRvLWRpc21pc3NcbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAhdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2xlYXJEaXNtaXNzVGltZXIoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgLy8gdHJpZ2dlcnMgZXhpdCB0cmFuc2l0aW9uXG5cbiAgICAgICAgLy8gYWZ0ZXIgZXhpdCBhbmltYXRpb24sIGhpZGUgKyBub3RpZnlcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgICAgICAgfSwgdGhpcy5FWElUX01TKTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdHVzKCk6IFN0YXR1cyB7XG4gICAgICAgIHJldHVybiBwdXJwb3NlVG9TdGF0dXNNYXBbdGhpcy5wdXJwb3NlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0RGlzbWlzc1RpbWVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYXV0b0Rpc21pc3MpIHJldHVybjtcbiAgICAgICAgdGhpcy5jbGVhckRpc21pc3NUaW1lcigpO1xuICAgICAgICB0aGlzLmRpc21pc3NUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5wcm9ncmVzc01zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyRGlzbWlzc1RpbWVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNtaXNzVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRpc21pc3NUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmRpc21pc3NUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAodmlzaWJsZSkge1xuICAgIDxzZWN0aW9uXG4gICAgICAgIGNsYXNzPVwic25hY2tiYXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaXMtZGVmYXVsdCc6IHB1cnBvc2UgPT09ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdpcy1pbmZvJzogcHVycG9zZSA9PT0gJ2luZm8nLFxuICAgICAgICAgICAgJ2lzLXN1Y2Nlc3MnOiBwdXJwb3NlID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgICAnaXMtZXJyb3InOiBwdXJwb3NlID09PSAnZXJyb3InLFxuICAgICAgICAgICAgJ2lzLXdhcm5pbmcnOiBwdXJwb3NlID09PSAnd2FybmluZycsXG4gICAgICAgICAgICAnaXMtb3Blbic6IGlzT3BlbixcbiAgICAgICAgfVwiXG4gICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBbc3R5bGUuLS1zbmFja2Jhci1wcm9ncmVzcy1kdXJhdGlvbl09XCJwcm9ncmVzc01zICsgJ21zJ1wiXG4gICAgICAgIFtzdHlsZS50b3AucHhdPVwieVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX2xlZnRcIj5cbiAgICAgICAgICAgIEBpZihzaG93VGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX3RpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc25hY2tiYXJfX3RpdGxlLWljb24nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtaWNvbic6IHNob3dUaXRsZSAmJiBzaG93VGl0bGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1RpdGxlICYmIHNob3dUaXRsZUljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgaWQ9XCJzbmFja2Jhci10aXRsZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgdGl0bGVJY29uIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1RpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJzbmFja2Jhcl9fdGl0bGVcIj57eyB0aXRsZSB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic25hY2tiYXJfX2Rlc2NcIj5cbiAgICAgICAgICAgICAgICB7eyBkZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgQGlmIChzaG93RmllbGQpIHtcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzbmFja2Jhcl9faW5wdXRcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZFBsYWNlaG9sZGVyXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd0J1dHRvbikge1xuICAgICAgICAgICAgICAgIDxsaWItc3RhdHVzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17e2J1dHRvbkxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJzdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJWYXJpYW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgPjwvbGliLXN0YXR1cy1idXR0b24+XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic25hY2tiYXJfX2Nsb3NlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dDbG9zZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgw5dcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIEBpZiAoc2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hY2tiYXJfX3Byb2dyZXNzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYWNrYmFyX19wcm9ncmVzcy1maWxsXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvc2VjdGlvbj5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Injectable, createComponent } from '@angular/core';
|
|
2
|
+
import { SnackbarComponent } from './snackbar.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class SnackbarService {
|
|
5
|
+
constructor(appRef, env) {
|
|
6
|
+
this.appRef = appRef;
|
|
7
|
+
this.env = env;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* This open method is what consuming code will use to create a snackbar
|
|
11
|
+
* @param snackbarOptions interface found above
|
|
12
|
+
* @param anchor HTML Element, optional. The snackbar's entrance and exit animations will happen on this element's Y axis (px)
|
|
13
|
+
* @returns void.
|
|
14
|
+
*/
|
|
15
|
+
open(snackbarOptions = {}, anchor) {
|
|
16
|
+
const compRef = createComponent(SnackbarComponent, {
|
|
17
|
+
environmentInjector: this.env,
|
|
18
|
+
});
|
|
19
|
+
const desiredY = anchor // could be clamped if above or below viewport
|
|
20
|
+
? anchor.getBoundingClientRect().top
|
|
21
|
+
: snackbarOptions.y ?? 24;
|
|
22
|
+
Object.assign(compRef.instance, {
|
|
23
|
+
purpose: 'warning',
|
|
24
|
+
title: 'Snackbar Title',
|
|
25
|
+
description: 'Lorem ipsum is the standard dummy text in the design industry',
|
|
26
|
+
titleIcon: 'info',
|
|
27
|
+
fieldPlaceholder: 'Placeholder',
|
|
28
|
+
showTitle: true,
|
|
29
|
+
showTitleIcon: true,
|
|
30
|
+
showClose: true,
|
|
31
|
+
showProgressBar: true,
|
|
32
|
+
showField: true,
|
|
33
|
+
showButton: true,
|
|
34
|
+
progressMs: 4000,
|
|
35
|
+
autoDismiss: true,
|
|
36
|
+
y: desiredY,
|
|
37
|
+
right: 24,
|
|
38
|
+
zIndex: 10000,
|
|
39
|
+
visible: true,
|
|
40
|
+
...snackbarOptions,
|
|
41
|
+
});
|
|
42
|
+
this.appRef.attachView(compRef.hostView);
|
|
43
|
+
document.body.appendChild(compRef.location.nativeElement);
|
|
44
|
+
compRef.changeDetectorRef.detectChanges();
|
|
45
|
+
// Clamp Y after it’s in the DOM
|
|
46
|
+
const margin = 8;
|
|
47
|
+
const adjustY = () => {
|
|
48
|
+
const host = compRef.location.nativeElement.querySelector('section.snackbar') ??
|
|
49
|
+
compRef.location.nativeElement;
|
|
50
|
+
const h = host.offsetHeight || 0;
|
|
51
|
+
const maxTop = Math.max(margin, window.innerHeight - h - margin);
|
|
52
|
+
const clamped = Math.min(Math.max(desiredY, margin), maxTop);
|
|
53
|
+
if (compRef.instance.y !== clamped) {
|
|
54
|
+
compRef.instance.y = clamped;
|
|
55
|
+
compRef.changeDetectorRef.detectChanges();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
// Measure on next frame (styles applied)
|
|
59
|
+
const rafId = requestAnimationFrame(adjustY);
|
|
60
|
+
// re-clamp on resize (in case viewport changes while visible)
|
|
61
|
+
const onResize = () => adjustY();
|
|
62
|
+
window.addEventListener('resize', onResize);
|
|
63
|
+
// Cleanup when closed
|
|
64
|
+
const sub = compRef.instance.closed.subscribe(() => {
|
|
65
|
+
sub.unsubscribe();
|
|
66
|
+
cancelAnimationFrame(rafId);
|
|
67
|
+
window.removeEventListener('resize', onResize);
|
|
68
|
+
this.appRef.detachView(compRef.hostView);
|
|
69
|
+
compRef.destroy();
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
close: () => compRef.instance.close(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SnackbarService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
76
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SnackbarService, providedIn: 'root' }); }
|
|
77
|
+
}
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SnackbarService, decorators: [{
|
|
79
|
+
type: Injectable,
|
|
80
|
+
args: [{ providedIn: 'root' }]
|
|
81
|
+
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zbmFja2Jhci9zbmFja2Jhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sc0JBQXNCLENBQUM7O0FBc0IxRSxNQUFNLE9BQU8sZUFBZTtJQUN4QixZQUNZLE1BQXNCLEVBQ3RCLEdBQXdCO1FBRHhCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQXFCO0lBQ2pDLENBQUM7SUFFSjs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxrQkFBbUMsRUFBRSxFQUFFLE1BQW9CO1FBQzVELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNoQyxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsOENBQThDO1lBQ2xFLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHO1lBQ3BDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5QixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDNUIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixXQUFXLEVBQUUsK0RBQStEO1lBQzVFLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLGdCQUFnQixFQUFFLGFBQWE7WUFFL0IsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFFaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsV0FBVyxFQUFFLElBQUk7WUFFakIsQ0FBQyxFQUFFLFFBQVE7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxLQUFLO1lBRWIsT0FBTyxFQUFFLElBQUk7WUFDYixHQUFHLGVBQWU7U0FDckIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTFDLGdDQUFnQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxHQUNMLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBNkIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2hGLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBNkIsQ0FBQztZQUVwRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTdELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDN0IsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRix5Q0FBeUM7UUFDekMsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsOERBQThEO1FBQzlELE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFNUMsc0JBQXNCO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDSCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7U0FDeEMsQ0FBQztJQUNOLENBQUM7OEdBdEZRLGVBQWU7a0hBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEFwcGxpY2F0aW9uUmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBjcmVhdGVDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNuYWNrYmFyQ29tcG9uZW50LCBTbmFja2JhclB1cnBvc2UgfSBmcm9tICcuL3NuYWNrYmFyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hY2tiYXJPcHRpb25zIHtcbiAgICBwdXJwb3NlPzogU25hY2tiYXJQdXJwb3NlO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHRpdGxlSWNvbj86IHN0cmluZztcbiAgICBmaWVsZFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHNob3dUaXRsZT86IGJvb2xlYW47XG4gICAgc2hvd1RpdGxlSWNvbj86IGJvb2xlYW47XG4gICAgc2hvd0Nsb3NlPzogYm9vbGVhbjtcbiAgICBzaG93UHJvZ3Jlc3NCYXI/OiBib29sZWFuO1xuICAgIHNob3dGaWVsZD86IGJvb2xlYW47XG4gICAgc2hvd0J1dHRvbj86IGJvb2xlYW47XG4gICAgcHJvZ3Jlc3NNcz86IG51bWJlcjtcbiAgICBhdXRvRGlzbWlzcz86IGJvb2xlYW47XG4gICAgeT86IG51bWJlcjtcbiAgICByaWdodD86IG51bWJlcjtcbiAgICB6SW5kZXg/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU25hY2tiYXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGVudjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG9wZW4gbWV0aG9kIGlzIHdoYXQgY29uc3VtaW5nIGNvZGUgd2lsbCB1c2UgdG8gY3JlYXRlIGEgc25hY2tiYXJcbiAgICAgKiBAcGFyYW0gc25hY2tiYXJPcHRpb25zIGludGVyZmFjZSBmb3VuZCBhYm92ZVxuICAgICAqIEBwYXJhbSBhbmNob3IgSFRNTCBFbGVtZW50LCBvcHRpb25hbC4gVGhlIHNuYWNrYmFyJ3MgZW50cmFuY2UgYW5kIGV4aXQgYW5pbWF0aW9ucyB3aWxsIGhhcHBlbiBvbiB0aGlzIGVsZW1lbnQncyBZIGF4aXMgKHB4KVxuICAgICAqIEByZXR1cm5zIHZvaWQuXG4gICAgICovXG4gICAgb3BlbihzbmFja2Jhck9wdGlvbnM6IFNuYWNrYmFyT3B0aW9ucyA9IHt9LCBhbmNob3I/OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wUmVmID0gY3JlYXRlQ29tcG9uZW50KFNuYWNrYmFyQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGVzaXJlZFkgPSBhbmNob3IgLy8gY291bGQgYmUgY2xhbXBlZCBpZiBhYm92ZSBvciBiZWxvdyB2aWV3cG9ydFxuICAgICAgICAgICAgPyBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICAgICAgICA6IHNuYWNrYmFyT3B0aW9ucy55ID8/IDI0O1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29tcFJlZi5pbnN0YW5jZSwge1xuICAgICAgICAgICAgcHVycG9zZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgdGl0bGU6ICdTbmFja2JhciBUaXRsZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0xvcmVtIGlwc3VtIGlzIHRoZSBzdGFuZGFyZCBkdW1teSB0ZXh0IGluIHRoZSBkZXNpZ24gaW5kdXN0cnknLFxuICAgICAgICAgICAgdGl0bGVJY29uOiAnaW5mbycsXG4gICAgICAgICAgICBmaWVsZFBsYWNlaG9sZGVyOiAnUGxhY2Vob2xkZXInLFxuXG4gICAgICAgICAgICBzaG93VGl0bGU6IHRydWUsXG4gICAgICAgICAgICBzaG93VGl0bGVJY29uOiB0cnVlLFxuICAgICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgc2hvd1Byb2dyZXNzQmFyOiB0cnVlLFxuICAgICAgICAgICAgc2hvd0ZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcblxuICAgICAgICAgICAgcHJvZ3Jlc3NNczogNDAwMCxcbiAgICAgICAgICAgIGF1dG9EaXNtaXNzOiB0cnVlLFxuXG4gICAgICAgICAgICB5OiBkZXNpcmVkWSxcbiAgICAgICAgICAgIHJpZ2h0OiAyNCxcbiAgICAgICAgICAgIHpJbmRleDogMTAwMDAsXG5cbiAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAuLi5zbmFja2Jhck9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcFJlZi5ob3N0Vmlldyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29tcFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29tcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gQ2xhbXAgWSBhZnRlciBpdOKAmXMgaW4gdGhlIERPTVxuICAgICAgICBjb25zdCBtYXJnaW4gPSA4O1xuICAgICAgICBjb25zdCBhZGp1c3RZID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG9zdDogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIChjb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ3NlY3Rpb24uc25hY2tiYXInKSA/P1xuICAgICAgICAgICAgICAgIChjb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBoID0gaG9zdC5vZmZzZXRIZWlnaHQgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KG1hcmdpbiwgd2luZG93LmlubmVySGVpZ2h0IC0gaCAtIG1hcmdpbik7XG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4oTWF0aC5tYXgoZGVzaXJlZFksIG1hcmdpbiksIG1heFRvcCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wUmVmLmluc3RhbmNlLnkgIT09IGNsYW1wZWQpIHtcbiAgICAgICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLnkgPSBjbGFtcGVkO1xuICAgICAgICAgICAgICAgIGNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE1lYXN1cmUgb24gbmV4dCBmcmFtZSAoc3R5bGVzIGFwcGxpZWQpXG4gICAgICAgIGNvbnN0IHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFkanVzdFkpO1xuXG4gICAgICAgIC8vIHJlLWNsYW1wIG9uIHJlc2l6ZSAoaW4gY2FzZSB2aWV3cG9ydCBjaGFuZ2VzIHdoaWxlIHZpc2libGUpXG4gICAgICAgIGNvbnN0IG9uUmVzaXplID0gKCkgPT4gYWRqdXN0WSgpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xuXG4gICAgICAgIC8vIENsZWFudXAgd2hlbiBjbG9zZWRcbiAgICAgICAgY29uc3Qgc3ViID0gY29tcFJlZi5pbnN0YW5jZS5jbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVzaXplKTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoY29tcFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICBjb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiBjb21wUmVmLmluc3RhbmNlLmNsb3NlKCksXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { booleanAttribute, Component, Input } from '@angular/core';
|
|
2
|
+
import { CommonModule, NgIf } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
/**
|
|
6
|
+
* A button that indicates status with color and icon.
|
|
7
|
+
* Status can be one of: 'success', 'info', 'warning', 'error', or 'disabled'.
|
|
8
|
+
* Each status has a default left icon, but a custom left icon can be provided.
|
|
9
|
+
* A right icon can also be provided, defaulting to 'chevron_right'.
|
|
10
|
+
* The left and right icons can be hidden with the `hideLeftIcon` and `hideRightIcon` boolean inputs.
|
|
11
|
+
* A label input is required.
|
|
12
|
+
*/
|
|
13
|
+
export class StatusButtonComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
this._status = 'info';
|
|
16
|
+
this._leftIcon = '';
|
|
17
|
+
this._rightIcon = '';
|
|
18
|
+
this._hideLeftIcon = false;
|
|
19
|
+
this._hideRightIcon = false;
|
|
20
|
+
this._clearVariant = false;
|
|
21
|
+
}
|
|
22
|
+
set status(value) {
|
|
23
|
+
this._status = value || 'info';
|
|
24
|
+
}
|
|
25
|
+
get status() {
|
|
26
|
+
return this._status;
|
|
27
|
+
}
|
|
28
|
+
set leftIcon(value) {
|
|
29
|
+
this._leftIcon = value;
|
|
30
|
+
}
|
|
31
|
+
get leftIcon() {
|
|
32
|
+
if (this._hideLeftIcon)
|
|
33
|
+
return '';
|
|
34
|
+
return this._leftIcon || this.getDefaultLeftIcon(this._status);
|
|
35
|
+
}
|
|
36
|
+
set rightIcon(value) {
|
|
37
|
+
this._rightIcon = value;
|
|
38
|
+
}
|
|
39
|
+
get rightIcon() {
|
|
40
|
+
if (this._hideRightIcon)
|
|
41
|
+
return '';
|
|
42
|
+
return this._rightIcon || 'chevron_right';
|
|
43
|
+
}
|
|
44
|
+
set hideLeftIcon(value) {
|
|
45
|
+
this._hideLeftIcon = value;
|
|
46
|
+
}
|
|
47
|
+
get hideLeftIcon() {
|
|
48
|
+
return this._hideLeftIcon;
|
|
49
|
+
}
|
|
50
|
+
set hideRightIcon(value) {
|
|
51
|
+
this._hideRightIcon = value;
|
|
52
|
+
}
|
|
53
|
+
get hideRightIcon() {
|
|
54
|
+
return this._hideRightIcon;
|
|
55
|
+
}
|
|
56
|
+
set clearVariant(value) {
|
|
57
|
+
this._clearVariant = value;
|
|
58
|
+
}
|
|
59
|
+
get clearVariant() {
|
|
60
|
+
return this._clearVariant;
|
|
61
|
+
}
|
|
62
|
+
/** helper for default left icons */
|
|
63
|
+
getDefaultLeftIcon(status) {
|
|
64
|
+
switch (status) {
|
|
65
|
+
case 'success':
|
|
66
|
+
return 'check';
|
|
67
|
+
case 'info':
|
|
68
|
+
return 'info';
|
|
69
|
+
case 'warning':
|
|
70
|
+
return 'warning';
|
|
71
|
+
case 'error':
|
|
72
|
+
return 'error';
|
|
73
|
+
case 'disabled':
|
|
74
|
+
return 'block';
|
|
75
|
+
default:
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: StatusButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
80
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.0", type: StatusButtonComponent, isStandalone: true, selector: "lib-status-button", inputs: { label: "label", status: "status", leftIcon: "leftIcon", rightIcon: "rightIcon", hideLeftIcon: ["hideLeftIcon", "hideLeftIcon", booleanAttribute], hideRightIcon: ["hideRightIcon", "hideRightIcon", booleanAttribute], clearVariant: ["clearVariant", "clearVariant", booleanAttribute] }, ngImport: i0, template: "<button\n type=\"button\"\n [ngClass]=\"[\n status,\n clearVariant ? 'strokeless transparent-bg' : ''\n ]\"\n>\n <span *ngIf=\"leftIcon\" class=\"icon material-symbols-outlined\">{{ leftIcon }}</span>\n {{ label }}\n <span *ngIf=\"rightIcon\" class=\"icon material-symbols-outlined\">{{ rightIcon }}</span>\n</button>\n", styles: ["button{align-items:center;background-color:#ecf2f6;border:1px solid #457fa6;border-radius:4px;color:#3e7295;display:inline-flex;flex-shrink:0;font-size:1em;font-weight:400;gap:.5em;height:2.25em;justify-content:center;padding:var(--status-button-padding, .25em .5em)}button .icon{font-size:1.25em}button:focus{outline:2px solid #b967c7;outline-offset:2px}button:hover{background-color:#a2bfd3;color:#26485f;cursor:pointer}button.success{background-color:#ebf6ee;border:1px solid #3ba35a;color:#1d562e}button.success:hover{background-color:#9dd1ac;color:#1d562e}button.info{background-color:#ecf2f6;border:1px solid #457fa6;color:#3e7295}button.info:hover{background-color:#a2bfd3;color:#26485f}button.warning{background-color:#faf9ec;border:1px solid #d1c844;color:#635f04}button.warning:hover{background-color:#e8e3a1;color:#635f04}button.error{background-color:#f9ecec;border:1px solid #c73e3d;color:#702121}button.error:hover{background-color:#e39e9e;color:#702121}button.disabled{background-color:#e7e7e7;border:1px solid #8f8f8f;color:#767676}button.disabled:hover{background-color:#d0d0d0;color:#141414}button.strokeless{border:0px}button.transparent-bg{background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: StatusButtonComponent, decorators: [{
|
|
83
|
+
type: Component,
|
|
84
|
+
args: [{ selector: 'lib-status-button', standalone: true, imports: [CommonModule, NgIf], template: "<button\n type=\"button\"\n [ngClass]=\"[\n status,\n clearVariant ? 'strokeless transparent-bg' : ''\n ]\"\n>\n <span *ngIf=\"leftIcon\" class=\"icon material-symbols-outlined\">{{ leftIcon }}</span>\n {{ label }}\n <span *ngIf=\"rightIcon\" class=\"icon material-symbols-outlined\">{{ rightIcon }}</span>\n</button>\n", styles: ["button{align-items:center;background-color:#ecf2f6;border:1px solid #457fa6;border-radius:4px;color:#3e7295;display:inline-flex;flex-shrink:0;font-size:1em;font-weight:400;gap:.5em;height:2.25em;justify-content:center;padding:var(--status-button-padding, .25em .5em)}button .icon{font-size:1.25em}button:focus{outline:2px solid #b967c7;outline-offset:2px}button:hover{background-color:#a2bfd3;color:#26485f;cursor:pointer}button.success{background-color:#ebf6ee;border:1px solid #3ba35a;color:#1d562e}button.success:hover{background-color:#9dd1ac;color:#1d562e}button.info{background-color:#ecf2f6;border:1px solid #457fa6;color:#3e7295}button.info:hover{background-color:#a2bfd3;color:#26485f}button.warning{background-color:#faf9ec;border:1px solid #d1c844;color:#635f04}button.warning:hover{background-color:#e8e3a1;color:#635f04}button.error{background-color:#f9ecec;border:1px solid #c73e3d;color:#702121}button.error:hover{background-color:#e39e9e;color:#702121}button.disabled{background-color:#e7e7e7;border:1px solid #8f8f8f;color:#767676}button.disabled:hover{background-color:#d0d0d0;color:#141414}button.strokeless{border:0px}button.transparent-bg{background:transparent}\n"] }]
|
|
85
|
+
}], propDecorators: { label: [{
|
|
86
|
+
type: Input,
|
|
87
|
+
args: [{ required: true }]
|
|
88
|
+
}], status: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], leftIcon: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], rightIcon: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], hideLeftIcon: [{
|
|
95
|
+
type: Input,
|
|
96
|
+
args: [{ transform: booleanAttribute }]
|
|
97
|
+
}], hideRightIcon: [{
|
|
98
|
+
type: Input,
|
|
99
|
+
args: [{ transform: booleanAttribute }]
|
|
100
|
+
}], clearVariant: [{
|
|
101
|
+
type: Input,
|
|
102
|
+
args: [{ transform: booleanAttribute }]
|
|
103
|
+
}] } });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc3RhdHVzLWJ1dHRvbi9zdGF0dXMtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zdGF0dXMtYnV0dG9uL3N0YXR1cy1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBR3JEOzs7Ozs7O0dBT0c7QUFRSCxNQUFNLE9BQU8scUJBQXFCO0lBUGxDO1FBUVksWUFBTyxHQUFXLE1BQU0sQ0FBQztRQUN6QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixrQkFBYSxHQUFHLEtBQUssQ0FBQztLQXVFakM7SUFuRUcsSUFDSSxNQUFNLENBQUMsS0FBNEQ7UUFDbkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQ0ksUUFBUSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFDSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxlQUFlLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQ0ksWUFBWSxDQUFDLEtBQWM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFDSSxhQUFhLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUNJLFlBQVksQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELG9DQUFvQztJQUM1QixrQkFBa0IsQ0FBQyxNQUEyQjtRQUNsRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2IsS0FBSyxTQUFTO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBQ25CLEtBQUssTUFBTTtnQkFDUCxPQUFPLE1BQU0sQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxTQUFTLENBQUM7WUFDckIsS0FBSyxPQUFPO2dCQUNSLE9BQU8sT0FBTyxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDWCxPQUFPLE9BQU8sQ0FBQztZQUNuQjtnQkFDSSxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQzs4R0E1RVEscUJBQXFCO2tHQUFyQixxQkFBcUIsOExBb0NWLGdCQUFnQixxREFRaEIsZ0JBQWdCLGtEQVFoQixnQkFBZ0IsNkJDdkV4QyxpV0FXQSwwdENESWMsWUFBWTs7MkZBSWIscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDOzhCQVlGLEtBQUs7c0JBQS9CLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUdyQixNQUFNO3NCQURULEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLFNBQVM7c0JBRFosS0FBSztnQkFVRixZQUFZO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBU2xDLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBU2xDLFlBQVk7c0JBRGYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5leHBvcnQgdHlwZSBTdGF0dXMgPSAnc3VjY2VzcycgfCAnaW5mbycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ2Rpc2FibGVkJztcblxuLyoqXG4gKiBBIGJ1dHRvbiB0aGF0IGluZGljYXRlcyBzdGF0dXMgd2l0aCBjb2xvciBhbmQgaWNvbi5cbiAqIFN0YXR1cyBjYW4gYmUgb25lIG9mOiAnc3VjY2VzcycsICdpbmZvJywgJ3dhcm5pbmcnLCAnZXJyb3InLCBvciAnZGlzYWJsZWQnLlxuICogRWFjaCBzdGF0dXMgaGFzIGEgZGVmYXVsdCBsZWZ0IGljb24sIGJ1dCBhIGN1c3RvbSBsZWZ0IGljb24gY2FuIGJlIHByb3ZpZGVkLlxuICogQSByaWdodCBpY29uIGNhbiBhbHNvIGJlIHByb3ZpZGVkLCBkZWZhdWx0aW5nIHRvICdjaGV2cm9uX3JpZ2h0Jy5cbiAqIFRoZSBsZWZ0IGFuZCByaWdodCBpY29ucyBjYW4gYmUgaGlkZGVuIHdpdGggdGhlIGBoaWRlTGVmdEljb25gIGFuZCBgaGlkZVJpZ2h0SWNvbmAgYm9vbGVhbiBpbnB1dHMuXG4gKiBBIGxhYmVsIGlucHV0IGlzIHJlcXVpcmVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zdGF0dXMtYnV0dG9uJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nSWZdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdGF0dXMtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc3RhdHVzLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFN0YXR1c0J1dHRvbkNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBfc3RhdHVzOiBTdGF0dXMgPSAnaW5mbyc7XG4gICAgcHJpdmF0ZSBfbGVmdEljb24gPSAnJztcbiAgICBwcml2YXRlIF9yaWdodEljb24gPSAnJztcbiAgICBwcml2YXRlIF9oaWRlTGVmdEljb24gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oaWRlUmlnaHRJY29uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY2xlYXJWYXJpYW50ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBsYWJlbCE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXR1cyh2YWx1ZTogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgdGhpcy5fc3RhdHVzID0gdmFsdWUgfHwgJ2luZm8nO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxlZnRJY29uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGVmdEljb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGxlZnRJY29uKCkge1xuICAgICAgICBpZiAodGhpcy5faGlkZUxlZnRJY29uKSByZXR1cm4gJyc7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0SWNvbiB8fCB0aGlzLmdldERlZmF1bHRMZWZ0SWNvbih0aGlzLl9zdGF0dXMpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJpZ2h0SWNvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3JpZ2h0SWNvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmlnaHRJY29uKCkge1xuICAgICAgICBpZiAodGhpcy5faGlkZVJpZ2h0SWNvbikgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRJY29uIHx8ICdjaGV2cm9uX3JpZ2h0JztcbiAgICB9XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgaGlkZUxlZnRJY29uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVMZWZ0SWNvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgaGlkZUxlZnRJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUxlZnRJY29uO1xuICAgIH1cblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCBoaWRlUmlnaHRJY29uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVSaWdodEljb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGhpZGVSaWdodEljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlUmlnaHRJY29uO1xuICAgIH1cblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCBjbGVhclZhcmlhbnQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJWYXJpYW50ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBjbGVhclZhcmlhbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGVhclZhcmlhbnQ7XG4gICAgfVxuXG4gICAgLyoqIGhlbHBlciBmb3IgZGVmYXVsdCBsZWZ0IGljb25zICovXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0TGVmdEljb24oc3RhdHVzOiB0eXBlb2YgdGhpcy5fc3RhdHVzKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnY2hlY2snO1xuICAgICAgICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdpbmZvJztcbiAgICAgICAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnd2FybmluZyc7XG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdibG9jayc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbbmdDbGFzc109XCJbXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgY2xlYXJWYXJpYW50ID8gJ3N0cm9rZWxlc3MgdHJhbnNwYXJlbnQtYmcnIDogJydcbiAgICBdXCJcbj5cbiAgICA8c3BhbiAqbmdJZj1cImxlZnRJY29uXCIgY2xhc3M9XCJpY29uIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57eyBsZWZ0SWNvbiB9fTwvc3Bhbj5cbiAgICB7eyBsYWJlbCB9fVxuICAgIDxzcGFuICpuZ0lmPVwicmlnaHRJY29uXCIgY2xhc3M9XCJpY29uIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57eyByaWdodEljb24gfX08L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -11,6 +11,9 @@ export * from './lib/ss-search-bar/ss-search-bar.component';
|
|
|
11
11
|
export * from './lib/ss-search-bar/models/advanced-search.model';
|
|
12
12
|
export * from './lib/ss-search-bar/models/search-scope.model';
|
|
13
13
|
export * from './lib/ss-search-bar/models/search-config.model';
|
|
14
|
+
export * from './lib/snackbar/snackbar.service';
|
|
15
|
+
export * from './lib/snackbar/snackbar.component';
|
|
14
16
|
export { getUserStatusFromRoles } from './lib/contact-utils';
|
|
15
17
|
export { ADVANCED_SEARCH_QUALIFIER_MAP, ADVANCED_SEARCH_FIELD_MAP, ADVANCED_SEARCH_OPTIONS, } from './lib/ss-search-bar/constants';
|
|
16
|
-
|
|
18
|
+
export * from './lib/status-button/status-button.component';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFFQUFxRSxDQUFDO0FBQ3BGLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0gsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6Qix1QkFBdUIsR0FDMUIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxjQUFjLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb21wb25lbnRzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvaGJsbC1oZWFkZXIvaGJsbC1oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL2hibGwtaXRlbS10eXBlLWljb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oYmxsLWZvb3Rlci9oYmxsLWZvb3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW1wZXJzb25hdGlvbi1iYW5uZXIvaW1wZXJzb25hdGlvbi1iYW5uZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzLXNlYXJjaC1iYXIvc3Mtc2VhcmNoLWJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3Mtc2VhcmNoLWJhci9tb2RlbHMvYWR2YW5jZWQtc2VhcmNoLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzLXNlYXJjaC1iYXIvbW9kZWxzL3NlYXJjaC1zY29wZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zcy1zZWFyY2gtYmFyL21vZGVscy9zZWFyY2gtY29uZmlnLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NuYWNrYmFyL3NuYWNrYmFyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc25hY2tiYXIvc25hY2tiYXIuY29tcG9uZW50JztcbmV4cG9ydCB7IGdldFVzZXJTdGF0dXNGcm9tUm9sZXMgfSBmcm9tICcuL2xpYi9jb250YWN0LXV0aWxzJztcbmV4cG9ydCB7XG4gICAgQURWQU5DRURfU0VBUkNIX1FVQUxJRklFUl9NQVAsXG4gICAgQURWQU5DRURfU0VBUkNIX0ZJRUxEX01BUCxcbiAgICBBRFZBTkNFRF9TRUFSQ0hfT1BUSU9OUyxcbn0gZnJvbSAnLi9saWIvc3Mtc2VhcmNoLWJhci9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdHVzLWJ1dHRvbi9zdGF0dXMtYnV0dG9uLmNvbXBvbmVudCc7XG4iXX0=
|