@pecb-ui/components 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +556 -0
  2. package/esm2022/lib/components/button/button.component.mjs +171 -0
  3. package/esm2022/lib/components/card/card.component.mjs +182 -0
  4. package/esm2022/lib/components/checkbox/checkbox.component.mjs +126 -0
  5. package/esm2022/lib/components/datepicker/datepicker.component.mjs +349 -0
  6. package/esm2022/lib/components/dropdown/dropdown.component.mjs +329 -0
  7. package/esm2022/lib/components/input/input.component.mjs +321 -0
  8. package/esm2022/lib/components/pagination/pagination.component.mjs +197 -0
  9. package/esm2022/lib/components/radio/radio.component.mjs +147 -0
  10. package/esm2022/lib/components/right-modal/right-modal.component.mjs +234 -0
  11. package/esm2022/lib/components/sidebar/sidebar.component.mjs +155 -0
  12. package/esm2022/lib/components/status/status.component.mjs +50 -0
  13. package/esm2022/lib/components/tab/tab.component.mjs +151 -0
  14. package/esm2022/lib/components/table/table.component.mjs +503 -0
  15. package/esm2022/lib/components/toggle/toggle.component.mjs +126 -0
  16. package/esm2022/lib/pecb-components.module.mjs +118 -0
  17. package/esm2022/lib/services/loading.service.mjs +182 -0
  18. package/esm2022/lib/services/notification.service.mjs +144 -0
  19. package/esm2022/lib/services/theme.service.mjs +232 -0
  20. package/esm2022/lib/shared/interfaces/component.interfaces.mjs +2 -0
  21. package/esm2022/lib/shared/types/common.types.mjs +6 -0
  22. package/esm2022/lib/shared/utils/accessibility.utils.mjs +223 -0
  23. package/esm2022/lib/shared/utils/dom.utils.mjs +240 -0
  24. package/esm2022/lib/shared/utils/error.utils.mjs +277 -0
  25. package/esm2022/lib/shared/utils/string.utils.mjs +204 -0
  26. package/esm2022/pecb-ui-components.mjs +5 -0
  27. package/esm2022/public-api.mjs +53 -0
  28. package/fesm2022/pecb-ui-components.mjs +4587 -0
  29. package/fesm2022/pecb-ui-components.mjs.map +1 -0
  30. package/index.d.ts +5 -0
  31. package/lib/components/button/button.component.d.ts +130 -0
  32. package/lib/components/card/card.component.d.ts +140 -0
  33. package/lib/components/checkbox/checkbox.component.d.ts +74 -0
  34. package/lib/components/datepicker/datepicker.component.d.ts +155 -0
  35. package/lib/components/dropdown/dropdown.component.d.ts +144 -0
  36. package/lib/components/input/input.component.d.ts +215 -0
  37. package/lib/components/pagination/pagination.component.d.ts +53 -0
  38. package/lib/components/radio/radio.component.d.ts +93 -0
  39. package/lib/components/right-modal/right-modal.component.d.ts +137 -0
  40. package/lib/components/sidebar/sidebar.component.d.ts +97 -0
  41. package/lib/components/status/status.component.d.ts +19 -0
  42. package/lib/components/tab/tab.component.d.ts +102 -0
  43. package/lib/components/table/table.component.d.ts +403 -0
  44. package/lib/components/toggle/toggle.component.d.ts +74 -0
  45. package/lib/pecb-components.module.d.ts +37 -0
  46. package/lib/services/loading.service.d.ts +129 -0
  47. package/lib/services/notification.service.d.ts +136 -0
  48. package/lib/services/theme.service.d.ts +142 -0
  49. package/lib/shared/interfaces/component.interfaces.d.ts +283 -0
  50. package/lib/shared/types/common.types.d.ts +86 -0
  51. package/lib/shared/utils/accessibility.utils.d.ts +167 -0
  52. package/lib/shared/utils/dom.utils.d.ts +108 -0
  53. package/lib/shared/utils/error.utils.d.ts +191 -0
  54. package/lib/shared/utils/string.utils.d.ts +144 -0
  55. package/package.json +61 -0
  56. package/public-api.d.ts +24 -0
@@ -0,0 +1,126 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { generateUniqueId } from '../../shared/utils/dom.utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ /**
8
+ * A professional toggle/switch component with label and description support.
9
+ * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <pecb-toggle
14
+ * label="Enable notifications"
15
+ * description="Receive email notifications"
16
+ * [(ngModel)]="notificationsEnabled"
17
+ * ></pecb-toggle>
18
+ * ```
19
+ *
20
+ * @publicApi
21
+ */
22
+ export class ToggleComponent {
23
+ constructor(cdr) {
24
+ this.cdr = cdr;
25
+ /**
26
+ * Unique ID for the toggle element
27
+ */
28
+ this.id = generateUniqueId('toggle');
29
+ /**
30
+ * Position of the label relative to the toggle control.
31
+ * 'right' (default): [toggle] Title Description
32
+ * 'left': Title Description [toggle]
33
+ */
34
+ this.labelPosition = 'right';
35
+ /**
36
+ * Whether the toggle is disabled
37
+ */
38
+ this.disabled = false;
39
+ /**
40
+ * Event emitted when toggle state changes
41
+ */
42
+ this.toggleChange = new EventEmitter();
43
+ // Internal state
44
+ this.checked = false;
45
+ // ControlValueAccessor
46
+ this.onChange = () => { };
47
+ this.onTouched = () => { };
48
+ }
49
+ /**
50
+ * Get CSS classes for the toggle wrapper
51
+ */
52
+ get wrapperClasses() {
53
+ return [
54
+ 'pecb-toggle',
55
+ this.disabled ? 'pecb-toggle--disabled' : '',
56
+ this.checked ? 'pecb-toggle--checked' : '',
57
+ this.labelPosition === 'left' ? 'pecb-toggle--label-left' : ''
58
+ ].filter(Boolean);
59
+ }
60
+ /**
61
+ * Handle toggle change
62
+ */
63
+ onToggleChange(event) {
64
+ if (this.disabled)
65
+ return;
66
+ const checked = event.target.checked;
67
+ this.checked = checked;
68
+ this.onChange(this.checked);
69
+ this.toggleChange.emit(this.checked);
70
+ this.cdr.markForCheck();
71
+ }
72
+ /**
73
+ * Handle blur event
74
+ */
75
+ onBlur() {
76
+ this.onTouched();
77
+ }
78
+ // ControlValueAccessor implementation
79
+ writeValue(value) {
80
+ this.checked = !!value;
81
+ this.cdr.markForCheck();
82
+ }
83
+ registerOnChange(fn) {
84
+ this.onChange = fn;
85
+ }
86
+ registerOnTouched(fn) {
87
+ this.onTouched = fn;
88
+ }
89
+ setDisabledState(isDisabled) {
90
+ this.disabled = isDisabled;
91
+ this.cdr.markForCheck();
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToggleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToggleComponent, isStandalone: true, selector: "pecb-toggle", inputs: { id: "id", name: "name", label: "label", description: "description", labelPosition: "labelPosition", disabled: "disabled" }, outputs: { toggleChange: "toggleChange" }, providers: [
95
+ {
96
+ provide: NG_VALUE_ACCESSOR,
97
+ useExisting: forwardRef(() => ToggleComponent),
98
+ multi: true
99
+ }
100
+ ], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-toggle__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"pecb-toggle__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n [attr.aria-checked]=\"checked\"\r\n (change)=\"onToggleChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-toggle__control\">\r\n <span class=\"pecb-toggle__thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-toggle{position:relative;display:inline-block}.pecb-toggle__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-toggle__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-toggle__control{position:relative;display:inline-flex;align-items:center;flex-shrink:0;width:44px;height:24px;margin-top:0;border-radius:12px;background-color:#c2c2c2;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__thumb{position:absolute;left:2px;width:20px;height:20px;border-radius:50%;background-color:#fff;box-shadow:0 2px 4px #0003;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-toggle__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-toggle__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-toggle:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#919191}.pecb-toggle__input:focus-visible+.pecb-toggle__control{outline:2px solid #212427;outline-offset:2px}.pecb-toggle--checked .pecb-toggle__control{background-color:#212427}.pecb-toggle--checked .pecb-toggle__thumb{transform:translate(20px)}.pecb-toggle--checked:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#34383d}.pecb-toggle--disabled .pecb-toggle__label{cursor:not-allowed}.pecb-toggle--disabled .pecb-toggle__control{background-color:#f7f5f5}.pecb-toggle--disabled .pecb-toggle__thumb{background-color:#ececec;box-shadow:none}.pecb-toggle--disabled.pecb-toggle--checked .pecb-toggle__control{background-color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__text{color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__description{color:#ececec}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToggleComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'pecb-toggle', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
105
+ {
106
+ provide: NG_VALUE_ACCESSOR,
107
+ useExisting: forwardRef(() => ToggleComponent),
108
+ multi: true
109
+ }
110
+ ], template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-toggle__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"pecb-toggle__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n [attr.aria-checked]=\"checked\"\r\n (change)=\"onToggleChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-toggle__control\">\r\n <span class=\"pecb-toggle__thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-toggle{position:relative;display:inline-block}.pecb-toggle__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-toggle__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-toggle__control{position:relative;display:inline-flex;align-items:center;flex-shrink:0;width:44px;height:24px;margin-top:0;border-radius:12px;background-color:#c2c2c2;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__thumb{position:absolute;left:2px;width:20px;height:20px;border-radius:50%;background-color:#fff;box-shadow:0 2px 4px #0003;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-toggle__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-toggle__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-toggle:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#919191}.pecb-toggle__input:focus-visible+.pecb-toggle__control{outline:2px solid #212427;outline-offset:2px}.pecb-toggle--checked .pecb-toggle__control{background-color:#212427}.pecb-toggle--checked .pecb-toggle__thumb{transform:translate(20px)}.pecb-toggle--checked:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#34383d}.pecb-toggle--disabled .pecb-toggle__label{cursor:not-allowed}.pecb-toggle--disabled .pecb-toggle__control{background-color:#f7f5f5}.pecb-toggle--disabled .pecb-toggle__thumb{background-color:#ececec;box-shadow:none}.pecb-toggle--disabled.pecb-toggle--checked .pecb-toggle__control{background-color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__text{color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__description{color:#ececec}\n"] }]
111
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
112
+ type: Input
113
+ }], name: [{
114
+ type: Input
115
+ }], label: [{
116
+ type: Input
117
+ }], description: [{
118
+ type: Input
119
+ }], labelPosition: [{
120
+ type: Input
121
+ }], disabled: [{
122
+ type: Input
123
+ }], toggleChange: [{
124
+ type: Output
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixFQUN2QixVQUFVLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBSWhFOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBZ0JILE1BQU0sT0FBTyxlQUFlO0lBNkMxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVDMUM7O1dBRUc7UUFDTSxPQUFFLEdBQVcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFpQmpEOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUF3QixPQUFPLENBQUM7UUFFdEQ7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXJELGlCQUFpQjtRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLHVCQUF1QjtRQUNmLGFBQVEsR0FBNkIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlDLGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFSSxDQUFDO0lBRTlDOztPQUVHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU87WUFDTCxhQUFhO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQy9ELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLE9BQU8sQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQTRCO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBaEdVLGVBQWU7bUdBQWYsZUFBZSwyT0FSZjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDM0NILHEwQ0E2QkEsMG9FRElZLFlBQVk7OzRGQVlYLGVBQWU7a0JBZjNCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtzRkFNUSxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBmb3J3YXJkUmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgVG9nZ2xlTGFiZWxQb3NpdGlvbiA9ICdyaWdodCcgfCAnbGVmdCc7XHJcblxyXG4vKipcclxuICogQSBwcm9mZXNzaW9uYWwgdG9nZ2xlL3N3aXRjaCBjb21wb25lbnQgd2l0aCBsYWJlbCBhbmQgZGVzY3JpcHRpb24gc3VwcG9ydC5cclxuICogRnVsbHkgYWNjZXNzaWJsZSB3aXRoIFdDQUcgMi4xIEFBIGNvbXBsaWFuY2UgYW5kIHJlYWN0aXZlIGZvcm1zIHN1cHBvcnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItdG9nZ2xlXHJcbiAqICAgbGFiZWw9XCJFbmFibGUgbm90aWZpY2F0aW9uc1wiXHJcbiAqICAgZGVzY3JpcHRpb249XCJSZWNlaXZlIGVtYWlsIG5vdGlmaWNhdGlvbnNcIlxyXG4gKiAgIFsobmdNb2RlbCldPVwibm90aWZpY2F0aW9uc0VuYWJsZWRcIlxyXG4gKiA+PC9wZWNiLXRvZ2dsZT5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGVjYi10b2dnbGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvZ2dsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUb2dnbGVDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRvZ2dsZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvKipcclxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSB0b2dnbGUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBnZW5lcmF0ZVVuaXF1ZUlkKCd0b2dnbGUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBhdHRyaWJ1dGUgZm9yIHRoZSB0b2dnbGVcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBMYWJlbCB0ZXh0IHRvIGRpc3BsYXlcclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRGVzY3JpcHRpb24gdGV4dCB0byBkaXNwbGF5IGJlbG93IGxhYmVsXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBsYWJlbCByZWxhdGl2ZSB0byB0aGUgdG9nZ2xlIGNvbnRyb2wuXHJcbiAgICogJ3JpZ2h0JyAoZGVmYXVsdCk6IFt0b2dnbGVdIFRpdGxlIERlc2NyaXB0aW9uXHJcbiAgICogJ2xlZnQnOiBUaXRsZSBEZXNjcmlwdGlvbiBbdG9nZ2xlXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246IFRvZ2dsZUxhYmVsUG9zaXRpb24gPSAncmlnaHQnO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSB0b2dnbGUgaXMgZGlzYWJsZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdG9nZ2xlIHN0YXRlIGNoYW5nZXNcclxuICAgKi9cclxuICBAT3V0cHV0KCkgdG9nZ2xlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvLyBJbnRlcm5hbCBzdGF0ZVxyXG4gIGNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBDU1MgY2xhc3NlcyBmb3IgdGhlIHRvZ2dsZSB3cmFwcGVyXHJcbiAgICovXHJcbiAgZ2V0IHdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdwZWNiLXRvZ2dsZScsXHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPyAncGVjYi10b2dnbGUtLWRpc2FibGVkJyA6ICcnLFxyXG4gICAgICB0aGlzLmNoZWNrZWQgPyAncGVjYi10b2dnbGUtLWNoZWNrZWQnIDogJycsXHJcbiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ3BlY2ItdG9nZ2xlLS1sYWJlbC1sZWZ0JyA6ICcnXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0b2dnbGUgY2hhbmdlXHJcbiAgICovXHJcbiAgb25Ub2dnbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy50b2dnbGVDaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgYmx1ciBldmVudFxyXG4gICAqL1xyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIndyYXBwZXJDbGFzc2VzLmpvaW4oJyAnKVwiPlxyXG4gIDxsYWJlbCBbYXR0ci5mb3JdPVwiaWRcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19sYWJlbFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICBjbGFzcz1cInBlY2ItdG9nZ2xlX19pbnB1dFwiXHJcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZGVzY3JpcHRpb24gPyBpZCArICctZGVzY3JpcHRpb24nIDogbnVsbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2VkXCJcclxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuICpuZ0lmPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250ZW50XCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi10b2dnbGVfX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250cm9sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicGVjYi10b2dnbGVfX3RodW1iXCI+PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJsYWJlbFBvc2l0aW9uID09PSAncmlnaHQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250ZW50XCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi10b2dnbGVfX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9sYWJlbD5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,118 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ButtonComponent } from './components/button/button.component';
4
+ import { CardComponent, CardHeaderComponent, CardBodyComponent, CardFooterComponent } from './components/card/card.component';
5
+ import { StatusComponent } from './components/status/status.component';
6
+ import { PaginationComponent } from './components/pagination/pagination.component';
7
+ import { TableComponent } from './components/table/table.component';
8
+ import { TabComponent } from './components/tab/tab.component';
9
+ import { DatepickerComponent } from './components/datepicker/datepicker.component';
10
+ import { InputComponent } from './components/input/input.component';
11
+ import { RadioComponent } from './components/radio/radio.component';
12
+ import { CheckboxComponent } from './components/checkbox/checkbox.component';
13
+ import { ToggleComponent } from './components/toggle/toggle.component';
14
+ import { DropdownComponent } from './components/dropdown/dropdown.component';
15
+ import { RightModalComponent, RightModalHeaderDirective, RightModalContentDirective, RightModalFooterDirective } from './components/right-modal/right-modal.component';
16
+ import { SidebarComponent } from './components/sidebar/sidebar.component';
17
+ import * as i0 from "@angular/core";
18
+ const COMPONENTS = [
19
+ ButtonComponent,
20
+ CardComponent,
21
+ CardHeaderComponent,
22
+ CardBodyComponent,
23
+ CardFooterComponent,
24
+ StatusComponent,
25
+ PaginationComponent,
26
+ TableComponent,
27
+ TabComponent,
28
+ DatepickerComponent,
29
+ InputComponent,
30
+ RadioComponent,
31
+ CheckboxComponent,
32
+ ToggleComponent,
33
+ DropdownComponent,
34
+ RightModalComponent,
35
+ RightModalHeaderDirective,
36
+ RightModalContentDirective,
37
+ RightModalFooterDirective,
38
+ SidebarComponent
39
+ ];
40
+ /**
41
+ * PECB UI Components Module
42
+ *
43
+ * A professional Angular components library with TypeScript and SCSS.
44
+ * Import this module to use all PECB UI components in your application.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { PecbComponentsModule } from '@pecb-ui/components';
49
+ *
50
+ * @NgModule({
51
+ * imports: [PecbComponentsModule]
52
+ * })
53
+ * export class AppModule { }
54
+ * ```
55
+ */
56
+ export class PecbComponentsModule {
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
58
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, imports: [CommonModule, ButtonComponent,
59
+ CardComponent,
60
+ CardHeaderComponent,
61
+ CardBodyComponent,
62
+ CardFooterComponent,
63
+ StatusComponent,
64
+ PaginationComponent,
65
+ TableComponent,
66
+ TabComponent,
67
+ DatepickerComponent,
68
+ InputComponent,
69
+ RadioComponent,
70
+ CheckboxComponent,
71
+ ToggleComponent,
72
+ DropdownComponent,
73
+ RightModalComponent,
74
+ RightModalHeaderDirective,
75
+ RightModalContentDirective,
76
+ RightModalFooterDirective,
77
+ SidebarComponent], exports: [ButtonComponent,
78
+ CardComponent,
79
+ CardHeaderComponent,
80
+ CardBodyComponent,
81
+ CardFooterComponent,
82
+ StatusComponent,
83
+ PaginationComponent,
84
+ TableComponent,
85
+ TabComponent,
86
+ DatepickerComponent,
87
+ InputComponent,
88
+ RadioComponent,
89
+ CheckboxComponent,
90
+ ToggleComponent,
91
+ DropdownComponent,
92
+ RightModalComponent,
93
+ RightModalHeaderDirective,
94
+ RightModalContentDirective,
95
+ RightModalFooterDirective,
96
+ SidebarComponent] }); }
97
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, imports: [CommonModule, ButtonComponent,
98
+ StatusComponent,
99
+ PaginationComponent,
100
+ TableComponent,
101
+ TabComponent,
102
+ DatepickerComponent,
103
+ InputComponent,
104
+ RadioComponent,
105
+ CheckboxComponent,
106
+ ToggleComponent,
107
+ DropdownComponent,
108
+ RightModalComponent,
109
+ SidebarComponent] }); }
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, decorators: [{
112
+ type: NgModule,
113
+ args: [{
114
+ imports: [CommonModule, ...COMPONENTS],
115
+ exports: COMPONENTS
116
+ }]
117
+ }] });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVjYi1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9wZWNiLWNvbXBvbmVudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUMxQixNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQUUxRSxNQUFNLFVBQVUsR0FBRztJQUNqQixlQUFlO0lBQ2YsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsZ0JBQWdCO0NBQ2pCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixZQUhyQixZQUFZLEVBdkN0QixlQUFlO1lBQ2YsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsZ0JBQWdCLGFBbkJoQixlQUFlO1lBQ2YsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsZ0JBQWdCO2dIQXVCTCxvQkFBb0IsWUFIckIsWUFBWSxFQXZDdEIsZUFBZTtZQUtmLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFJbkIsZ0JBQWdCOzs0RkF1Qkwsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLFVBQVU7aUJBQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FyZENvbXBvbmVudCxcclxuICBDYXJkSGVhZGVyQ29tcG9uZW50LFxyXG4gIENhcmRCb2R5Q29tcG9uZW50LFxyXG4gIENhcmRGb290ZXJDb21wb25lbnRcclxufSBmcm9tICcuL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWIvdGFiLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgUmlnaHRNb2RhbENvbXBvbmVudCxcclxuICBSaWdodE1vZGFsSGVhZGVyRGlyZWN0aXZlLFxyXG4gIFJpZ2h0TW9kYWxDb250ZW50RGlyZWN0aXZlLFxyXG4gIFJpZ2h0TW9kYWxGb290ZXJEaXJlY3RpdmVcclxufSBmcm9tICcuL2NvbXBvbmVudHMvcmlnaHQtbW9kYWwvcmlnaHQtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IENPTVBPTkVOVFMgPSBbXHJcbiAgQnV0dG9uQ29tcG9uZW50LFxyXG4gIENhcmRDb21wb25lbnQsXHJcbiAgQ2FyZEhlYWRlckNvbXBvbmVudCxcclxuICBDYXJkQm9keUNvbXBvbmVudCxcclxuICBDYXJkRm9vdGVyQ29tcG9uZW50LFxyXG4gIFN0YXR1c0NvbXBvbmVudCxcclxuICBQYWdpbmF0aW9uQ29tcG9uZW50LFxyXG4gIFRhYmxlQ29tcG9uZW50LFxyXG4gIFRhYkNvbXBvbmVudCxcclxuICBEYXRlcGlja2VyQ29tcG9uZW50LFxyXG4gIElucHV0Q29tcG9uZW50LFxyXG4gIFJhZGlvQ29tcG9uZW50LFxyXG4gIENoZWNrYm94Q29tcG9uZW50LFxyXG4gIFRvZ2dsZUNvbXBvbmVudCxcclxuICBEcm9wZG93bkNvbXBvbmVudCxcclxuICBSaWdodE1vZGFsQ29tcG9uZW50LFxyXG4gIFJpZ2h0TW9kYWxIZWFkZXJEaXJlY3RpdmUsXHJcbiAgUmlnaHRNb2RhbENvbnRlbnREaXJlY3RpdmUsXHJcbiAgUmlnaHRNb2RhbEZvb3RlckRpcmVjdGl2ZSxcclxuICBTaWRlYmFyQ29tcG9uZW50XHJcbl07XHJcblxyXG4vKipcclxuICogUEVDQiBVSSBDb21wb25lbnRzIE1vZHVsZVxyXG4gKlxyXG4gKiBBIHByb2Zlc3Npb25hbCBBbmd1bGFyIGNvbXBvbmVudHMgbGlicmFyeSB3aXRoIFR5cGVTY3JpcHQgYW5kIFNDU1MuXHJcbiAqIEltcG9ydCB0aGlzIG1vZHVsZSB0byB1c2UgYWxsIFBFQ0IgVUkgY29tcG9uZW50cyBpbiB5b3VyIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IFBlY2JDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnQHBlY2ItdWkvY29tcG9uZW50cyc7XHJcbiAqXHJcbiAqIEBOZ01vZHVsZSh7XHJcbiAqICAgaW1wb3J0czogW1BlY2JDb21wb25lbnRzTW9kdWxlXVxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgLi4uQ09NUE9ORU5UU10sXHJcbiAgZXhwb3J0czogQ09NUE9ORU5UU1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVjYkNvbXBvbmVudHNNb2R1bGUge31cclxuIl19
@@ -0,0 +1,182 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * A stateless, injectable loading service for managing loading states.
7
+ *
8
+ * This service provides a centralized way to track loading states across
9
+ * the application, supporting multiple concurrent loading operations with
10
+ * individual tracking capabilities.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { LoadingService } from '@pecb-ui/components';
15
+ *
16
+ * @Component({...})
17
+ * export class MyComponent {
18
+ * isLoading$ = this.loadingService.isLoading$('my-operation');
19
+ *
20
+ * constructor(private loadingService: LoadingService) {}
21
+ *
22
+ * async loadData(): Promise<void> {
23
+ * this.loadingService.start('my-operation', 'Loading data...');
24
+ * try {
25
+ * await this.fetchData();
26
+ * } finally {
27
+ * this.loadingService.stop('my-operation');
28
+ * }
29
+ * }
30
+ * }
31
+ * ```
32
+ *
33
+ * @publicApi
34
+ */
35
+ export class LoadingService {
36
+ constructor() {
37
+ this.loadingStates = new Map();
38
+ this.statesSubject = new BehaviorSubject(new Map());
39
+ /** Default loading operation ID */
40
+ this.defaultId = 'global';
41
+ }
42
+ /**
43
+ * Observable of all loading states
44
+ */
45
+ get states$() {
46
+ return this.statesSubject.asObservable();
47
+ }
48
+ /**
49
+ * Observable that emits true when any loading operation is active
50
+ */
51
+ get isAnyLoading$() {
52
+ return this.statesSubject.pipe(map(states => Array.from(states.values()).some(state => state.isLoading)));
53
+ }
54
+ /**
55
+ * Get observable for a specific loading operation
56
+ * @param id - The loading operation identifier
57
+ */
58
+ isLoading$(id = this.defaultId) {
59
+ return this.statesSubject.pipe(map(states => states.get(id)?.isLoading ?? false));
60
+ }
61
+ /**
62
+ * Get observable for loading state with message
63
+ * @param id - The loading operation identifier
64
+ */
65
+ getState$(id = this.defaultId) {
66
+ return this.statesSubject.pipe(map(states => states.get(id)));
67
+ }
68
+ /**
69
+ * Check if a specific operation is currently loading (synchronous)
70
+ * @param id - The loading operation identifier
71
+ */
72
+ isLoading(id = this.defaultId) {
73
+ return this.loadingStates.get(id)?.isLoading ?? false;
74
+ }
75
+ /**
76
+ * Check if any operation is currently loading (synchronous)
77
+ */
78
+ isAnyLoading() {
79
+ return Array.from(this.loadingStates.values()).some(state => state.isLoading);
80
+ }
81
+ /**
82
+ * Start a loading operation
83
+ * @param id - The loading operation identifier
84
+ * @param message - Optional message to display
85
+ */
86
+ start(id = this.defaultId, message) {
87
+ this.updateState(id, { isLoading: true, message, progress: undefined });
88
+ }
89
+ /**
90
+ * Stop a loading operation
91
+ * @param id - The loading operation identifier
92
+ */
93
+ stop(id = this.defaultId) {
94
+ this.updateState(id, { isLoading: false, message: undefined, progress: undefined });
95
+ }
96
+ /**
97
+ * Update progress for a loading operation
98
+ * @param id - The loading operation identifier
99
+ * @param progress - Progress percentage (0-100)
100
+ * @param message - Optional updated message
101
+ */
102
+ setProgress(id, progress, message) {
103
+ const currentState = this.loadingStates.get(id);
104
+ if (currentState) {
105
+ this.updateState(id, {
106
+ isLoading: true,
107
+ progress: Math.min(100, Math.max(0, progress)),
108
+ message: message ?? currentState.message
109
+ });
110
+ }
111
+ }
112
+ /**
113
+ * Update the message for a loading operation
114
+ * @param id - The loading operation identifier
115
+ * @param message - New message to display
116
+ */
117
+ setMessage(id, message) {
118
+ const currentState = this.loadingStates.get(id);
119
+ if (currentState) {
120
+ this.updateState(id, { ...currentState, id, message });
121
+ }
122
+ }
123
+ /**
124
+ * Stop all loading operations
125
+ */
126
+ stopAll() {
127
+ this.loadingStates.clear();
128
+ this.statesSubject.next(new Map());
129
+ }
130
+ /**
131
+ * Remove a loading state completely
132
+ * @param id - The loading operation identifier
133
+ */
134
+ remove(id) {
135
+ this.loadingStates.delete(id);
136
+ this.emitStates();
137
+ }
138
+ /**
139
+ * Execute an async operation with automatic loading state management
140
+ * @param id - The loading operation identifier
141
+ * @param operation - The async operation to execute
142
+ * @param message - Optional loading message
143
+ * @returns The result of the operation
144
+ */
145
+ async withLoading(id, operation, message) {
146
+ this.start(id, message);
147
+ try {
148
+ return await operation();
149
+ }
150
+ finally {
151
+ this.stop(id);
152
+ }
153
+ }
154
+ /**
155
+ * Update a loading state
156
+ */
157
+ updateState(id, partialState) {
158
+ const state = {
159
+ id,
160
+ isLoading: partialState.isLoading,
161
+ message: partialState.message,
162
+ progress: partialState.progress
163
+ };
164
+ this.loadingStates.set(id, state);
165
+ this.emitStates();
166
+ }
167
+ /**
168
+ * Emit current states to subscribers
169
+ */
170
+ emitStates() {
171
+ this.statesSubject.next(new Map(this.loadingStates));
172
+ }
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
174
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, providedIn: 'root' }); }
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, decorators: [{
177
+ type: Injectable,
178
+ args: [{
179
+ providedIn: 'root'
180
+ }]
181
+ }] });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2xvYWRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWdCckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJbUIsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFM0YsbUNBQW1DO1FBQ2xCLGNBQVMsR0FBRyxRQUFRLENBQUM7S0E2SnZDO0lBM0pDOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWEsSUFBSSxDQUFDLFNBQVM7UUFDcEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLENBQ2xELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsSUFBSSxDQUFDLFNBQVM7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUFhLElBQUksQ0FBQyxTQUFTO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBYSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQWdCO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxLQUFhLElBQUksQ0FBQyxTQUFTO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFVLEVBQUUsUUFBZ0IsRUFBRSxPQUFnQjtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEVBQVUsRUFBRSxPQUFlO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FDZixFQUFVLEVBQ1YsU0FBMkIsRUFDM0IsT0FBZ0I7UUFFaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxFQUFVLEVBQUUsWUFBNEQ7UUFDMUYsTUFBTSxLQUFLLEdBQWlCO1lBQzFCLEVBQUU7WUFDRixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7WUFDakMsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBQzdCLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUTtTQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBaktVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqXHJcbiAqIExvYWRpbmcgc3RhdGUgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdTdGF0ZSB7XHJcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbG9hZGluZyBvcGVyYXRpb24gKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBsb2FkaW5nICovXHJcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIC8qKiBPcHRpb25hbCBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKiBPcHRpb25hbCBwcm9ncmVzcyBwZXJjZW50YWdlICgwLTEwMCkgKi9cclxuICBwcm9ncmVzcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGVsZXNzLCBpbmplY3RhYmxlIGxvYWRpbmcgc2VydmljZSBmb3IgbWFuYWdpbmcgbG9hZGluZyBzdGF0ZXMuXHJcbiAqXHJcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyBhIGNlbnRyYWxpemVkIHdheSB0byB0cmFjayBsb2FkaW5nIHN0YXRlcyBhY3Jvc3NcclxuICogdGhlIGFwcGxpY2F0aW9uLCBzdXBwb3J0aW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgbG9hZGluZyBvcGVyYXRpb25zIHdpdGhcclxuICogaW5kaXZpZHVhbCB0cmFja2luZyBjYXBhYmlsaXRpZXMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAcGVjYi11aS9jb21wb25lbnRzJztcclxuICpcclxuICogQENvbXBvbmVudCh7Li4ufSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcclxuICogICBpc0xvYWRpbmckID0gdGhpcy5sb2FkaW5nU2VydmljZS5pc0xvYWRpbmckKCdteS1vcGVyYXRpb24nKTtcclxuICpcclxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSkge31cclxuICpcclxuICogICBhc3luYyBsb2FkRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICogICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoJ215LW9wZXJhdGlvbicsICdMb2FkaW5nIGRhdGEuLi4nKTtcclxuICogICAgIHRyeSB7XHJcbiAqICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XHJcbiAqICAgICB9IGZpbmFsbHkge1xyXG4gKiAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoJ215LW9wZXJhdGlvbicpO1xyXG4gKiAgICAgfVxyXG4gKiAgIH1cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHB1YmxpY0FwaVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9hZGluZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1N0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+PihuZXcgTWFwKCkpO1xyXG5cclxuICAvKiogRGVmYXVsdCBsb2FkaW5nIG9wZXJhdGlvbiBJRCAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdElkID0gJ2dsb2JhbCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgYWxsIGxvYWRpbmcgc3RhdGVzXHJcbiAgICovXHJcbiAgZ2V0IHN0YXRlcyQoKTogT2JzZXJ2YWJsZTxNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgd2hlbiBhbnkgbG9hZGluZyBvcGVyYXRpb24gaXMgYWN0aXZlXHJcbiAgICovXHJcbiAgZ2V0IGlzQW55TG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZXMgPT4gQXJyYXkuZnJvbShzdGF0ZXMudmFsdWVzKCkpLnNvbWUoc3RhdGUgPT4gc3RhdGUuaXNMb2FkaW5nKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgb2JzZXJ2YWJsZSBmb3IgYSBzcGVjaWZpYyBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgaXNMb2FkaW5nJChpZDogc3RyaW5nID0gdGhpcy5kZWZhdWx0SWQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlc1N1YmplY3QucGlwZShcclxuICAgICAgbWFwKHN0YXRlcyA9PiBzdGF0ZXMuZ2V0KGlkKT8uaXNMb2FkaW5nID8/IGZhbHNlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBvYnNlcnZhYmxlIGZvciBsb2FkaW5nIHN0YXRlIHdpdGggbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgZ2V0U3RhdGUkKGlkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRJZCk6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlIHwgdW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZXMgPT4gc3RhdGVzLmdldChpZCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IGxvYWRpbmcgKHN5bmNocm9ub3VzKVxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgaXNMb2FkaW5nKGlkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRJZCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpPy5pc0xvYWRpbmcgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhbnkgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBsb2FkaW5nIChzeW5jaHJvbm91cylcclxuICAgKi9cclxuICBpc0FueUxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmxvYWRpbmdTdGF0ZXMudmFsdWVzKCkpLnNvbWUoc3RhdGUgPT4gc3RhdGUuaXNMb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGEgbG9hZGluZyBvcGVyYXRpb25cclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbG9hZGluZyBvcGVyYXRpb24gaWRlbnRpZmllclxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5XHJcbiAgICovXHJcbiAgc3RhcnQoaWQ6IHN0cmluZyA9IHRoaXMuZGVmYXVsdElkLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7IGlzTG9hZGluZzogdHJ1ZSwgbWVzc2FnZSwgcHJvZ3Jlc3M6IHVuZGVmaW5lZCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYSBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgc3RvcChpZDogc3RyaW5nID0gdGhpcy5kZWZhdWx0SWQpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoaWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgbWVzc2FnZTogdW5kZWZpbmVkLCBwcm9ncmVzczogdW5kZWZpbmVkIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHByb2dyZXNzIGZvciBhIGxvYWRpbmcgb3BlcmF0aW9uXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGxvYWRpbmcgb3BlcmF0aW9uIGlkZW50aWZpZXJcclxuICAgKiBAcGFyYW0gcHJvZ3Jlc3MgLSBQcm9ncmVzcyBwZXJjZW50YWdlICgwLTEwMClcclxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIHVwZGF0ZWQgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHNldFByb2dyZXNzKGlkOiBzdHJpbmcsIHByb2dyZXNzOiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7XHJcbiAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgIHByb2dyZXNzOiBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHByb2dyZXNzKSksXHJcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSA/PyBjdXJyZW50U3RhdGUubWVzc2FnZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbWVzc2FnZSBmb3IgYSBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBOZXcgbWVzc2FnZSB0byBkaXNwbGF5XHJcbiAgICovXHJcbiAgc2V0TWVzc2FnZShpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7IC4uLmN1cnJlbnRTdGF0ZSwgaWQsIG1lc3NhZ2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFsbCBsb2FkaW5nIG9wZXJhdGlvbnNcclxuICAgKi9cclxuICBzdG9wQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGVzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnN0YXRlc1N1YmplY3QubmV4dChuZXcgTWFwKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgbG9hZGluZyBzdGF0ZSBjb21wbGV0ZWx5XHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGxvYWRpbmcgb3BlcmF0aW9uIGlkZW50aWZpZXJcclxuICAgKi9cclxuICByZW1vdmUoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGVzLmRlbGV0ZShpZCk7XHJcbiAgICB0aGlzLmVtaXRTdGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGUgYW4gYXN5bmMgb3BlcmF0aW9uIHdpdGggYXV0b21hdGljIGxvYWRpbmcgc3RhdGUgbWFuYWdlbWVudFxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBhc3luYyBvcGVyYXRpb24gdG8gZXhlY3V0ZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgbG9hZGluZyBtZXNzYWdlXHJcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgYXN5bmMgd2l0aExvYWRpbmc8VD4oXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgb3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxyXG4gICAgbWVzc2FnZT86IHN0cmluZ1xyXG4gICk6IFByb21pc2U8VD4ge1xyXG4gICAgdGhpcy5zdGFydChpZCwgbWVzc2FnZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgb3BlcmF0aW9uKCk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLnN0b3AoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgbG9hZGluZyBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUoaWQ6IHN0cmluZywgcGFydGlhbFN0YXRlOiBQYXJ0aWFsPExvYWRpbmdTdGF0ZT4gJiB7IGlzTG9hZGluZzogYm9vbGVhbiB9KTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0ZTogTG9hZGluZ1N0YXRlID0ge1xyXG4gICAgICBpZCxcclxuICAgICAgaXNMb2FkaW5nOiBwYXJ0aWFsU3RhdGUuaXNMb2FkaW5nLFxyXG4gICAgICBtZXNzYWdlOiBwYXJ0aWFsU3RhdGUubWVzc2FnZSxcclxuICAgICAgcHJvZ3Jlc3M6IHBhcnRpYWxTdGF0ZS5wcm9ncmVzc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZXMuc2V0KGlkLCBzdGF0ZSk7XHJcbiAgICB0aGlzLmVtaXRTdGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgY3VycmVudCBzdGF0ZXMgdG8gc3Vic2NyaWJlcnNcclxuICAgKi9cclxuICBwcml2YXRlIGVtaXRTdGF0ZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlc1N1YmplY3QubmV4dChuZXcgTWFwKHRoaXMubG9hZGluZ1N0YXRlcykpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,144 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A stateless, injectable notification service for displaying toast notifications.
6
+ *
7
+ * This service provides a reactive way to manage notifications across the application.
8
+ * It uses RxJS Subjects to emit notification events that can be consumed by notification
9
+ * display components.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { NotificationService } from '@pecb-ui/components';
14
+ *
15
+ * @Component({...})
16
+ * export class MyComponent {
17
+ * constructor(private notificationService: NotificationService) {}
18
+ *
19
+ * showSuccess(): void {
20
+ * this.notificationService.success('Operation completed successfully!');
21
+ * }
22
+ *
23
+ * showError(): void {
24
+ * this.notificationService.error('An error occurred', 'Error Title');
25
+ * }
26
+ * }
27
+ * ```
28
+ *
29
+ * @publicApi
30
+ */
31
+ export class NotificationService {
32
+ constructor() {
33
+ this.notificationSubject = new Subject();
34
+ this.dismissSubject = new Subject();
35
+ this.clearSubject = new Subject();
36
+ /** Default duration for notifications in milliseconds */
37
+ this.defaultDuration = 5000;
38
+ /** Default position for notifications */
39
+ this.defaultPosition = 'top-right';
40
+ }
41
+ /**
42
+ * Observable stream of notifications
43
+ */
44
+ get notifications$() {
45
+ return this.notificationSubject.asObservable();
46
+ }
47
+ /**
48
+ * Observable stream of dismissed notification IDs
49
+ */
50
+ get dismiss$() {
51
+ return this.dismissSubject.asObservable();
52
+ }
53
+ /**
54
+ * Observable stream for clear all events
55
+ */
56
+ get clear$() {
57
+ return this.clearSubject.asObservable();
58
+ }
59
+ /**
60
+ * Show a success notification
61
+ * @param message - The notification message
62
+ * @param title - Optional title
63
+ * @param config - Optional additional configuration
64
+ */
65
+ success(message, title, config) {
66
+ return this.show({ ...config, message, title, type: 'success' });
67
+ }
68
+ /**
69
+ * Show an error notification
70
+ * @param message - The notification message
71
+ * @param title - Optional title
72
+ * @param config - Optional additional configuration
73
+ */
74
+ error(message, title, config) {
75
+ return this.show({ ...config, message, title, type: 'error' });
76
+ }
77
+ /**
78
+ * Show a warning notification
79
+ * @param message - The notification message
80
+ * @param title - Optional title
81
+ * @param config - Optional additional configuration
82
+ */
83
+ warning(message, title, config) {
84
+ return this.show({ ...config, message, title, type: 'warning' });
85
+ }
86
+ /**
87
+ * Show an info notification
88
+ * @param message - The notification message
89
+ * @param title - Optional title
90
+ * @param config - Optional additional configuration
91
+ */
92
+ info(message, title, config) {
93
+ return this.show({ ...config, message, title, type: 'info' });
94
+ }
95
+ /**
96
+ * Show a notification with custom configuration
97
+ * @param config - Full notification configuration
98
+ * @returns The notification ID
99
+ */
100
+ show(config) {
101
+ const id = config.id || this.generateId();
102
+ const notification = {
103
+ id,
104
+ message: config.message,
105
+ title: config.title,
106
+ type: config.type,
107
+ duration: config.duration ?? this.defaultDuration,
108
+ dismissible: config.dismissible ?? true,
109
+ position: config.position ?? this.defaultPosition,
110
+ customClass: config.customClass,
111
+ timestamp: new Date()
112
+ };
113
+ this.notificationSubject.next(notification);
114
+ return id;
115
+ }
116
+ /**
117
+ * Dismiss a specific notification by ID
118
+ * @param id - The notification ID to dismiss
119
+ */
120
+ dismiss(id) {
121
+ this.dismissSubject.next(id);
122
+ }
123
+ /**
124
+ * Clear all notifications
125
+ */
126
+ clearAll() {
127
+ this.clearSubject.next();
128
+ }
129
+ /**
130
+ * Generate a unique notification ID
131
+ */
132
+ generateId() {
133
+ return `notification-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
134
+ }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
136
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, decorators: [{
139
+ type: Injectable,
140
+ args: [{
141
+ providedIn: 'root'
142
+ }]
143
+ }] });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQTJDM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUltQix3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDdkMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXBELHlEQUF5RDtRQUN4QyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN4Qyx5Q0FBeUM7UUFDeEIsb0JBQWUsR0FBeUIsV0FBVyxDQUFDO0tBNEd0RTtJQTFHQzs7T0FFRztJQUNILElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQW9DO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBb0M7UUFDekUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUFvQztRQUMzRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQW9DO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsTUFBMEI7UUFDN0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFMUMsTUFBTSxZQUFZLEdBQWlCO1lBQ2pDLEVBQUU7WUFDRixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNqRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQ3ZDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ2pELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEVBQVU7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNoQixPQUFPLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQzsrR0FuSFUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZpY2VcclxuICovXHJcbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiBwb3NpdGlvbiBvbiBzY3JlZW5cclxuICovXHJcbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblBvc2l0aW9uID0gJ3RvcC1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ3RvcC1jZW50ZXInIHwgJ2JvdHRvbS1jZW50ZXInO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlnIHtcclxuICAvKiogTm90aWZpY2F0aW9uIG1lc3NhZ2UgKi9cclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgLyoqIE5vdGlmaWNhdGlvbiB0aXRsZSAob3B0aW9uYWwpICovXHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgLyoqIFR5cGUgb2Ygbm90aWZpY2F0aW9uICovXHJcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcclxuICAvKiogRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzICgwIGZvciBwZXJzaXN0ZW50KSAqL1xyXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIGRpc21pc3NlZCAqL1xyXG4gIGRpc21pc3NpYmxlPzogYm9vbGVhbjtcclxuICAvKiogUG9zaXRpb24gb24gc2NyZWVuICovXHJcbiAgcG9zaXRpb24/OiBOb3RpZmljYXRpb25Qb3NpdGlvbjtcclxuICAvKiogQ3VzdG9tIENTUyBjbGFzcyAqL1xyXG4gIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciAqL1xyXG4gIGlkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogTm90aWZpY2F0aW9uIG9iamVjdCB3aXRoIGFsbCBwcm9wZXJ0aWVzXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiBleHRlbmRzIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uQ29uZmlnLCAndGl0bGUnIHwgJ2N1c3RvbUNsYXNzJz4+IHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICB0aW1lc3RhbXA6IERhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRlbGVzcywgaW5qZWN0YWJsZSBub3RpZmljYXRpb24gc2VydmljZSBmb3IgZGlzcGxheWluZyB0b2FzdCBub3RpZmljYXRpb25zLlxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgYSByZWFjdGl2ZSB3YXkgdG8gbWFuYWdlIG5vdGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi5cclxuICogSXQgdXNlcyBSeEpTIFN1YmplY3RzIHRvIGVtaXQgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IGNhbiBiZSBjb25zdW1lZCBieSBub3RpZmljYXRpb25cclxuICogZGlzcGxheSBjb21wb25lbnRzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAcGVjYi11aS9jb21wb25lbnRzJztcclxuICpcclxuICogQENvbXBvbmVudCh7Li4ufSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcclxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XHJcbiAqXHJcbiAqICAgc2hvd1N1Y2Nlc3MoKTogdm9pZCB7XHJcbiAqICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcygnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XHJcbiAqICAgfVxyXG4gKlxyXG4gKiAgIHNob3dFcnJvcigpOiB2b2lkIHtcclxuICogICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCAnRXJyb3IgVGl0bGUnKTtcclxuICogICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvbj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRpc21pc3NTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xlYXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLyoqIERlZmF1bHQgZHVyYXRpb24gZm9yIG5vdGlmaWNhdGlvbnMgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RHVyYXRpb24gPSA1MDAwO1xyXG4gIC8qKiBEZWZhdWx0IHBvc2l0aW9uIGZvciBub3RpZmljYXRpb25zICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UG9zaXRpb246IE5vdGlmaWNhdGlvblBvc2l0aW9uID0gJ3RvcC1yaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIG5vdGlmaWNhdGlvbnNcclxuICAgKi9cclxuICBnZXQgbm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb24+IHtcclxuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBkaXNtaXNzZWQgbm90aWZpY2F0aW9uIElEc1xyXG4gICAqL1xyXG4gIGdldCBkaXNtaXNzJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzbWlzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBmb3IgY2xlYXIgYWxsIGV2ZW50c1xyXG4gICAqL1xyXG4gIGdldCBjbGVhciQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgc3VjY2VzcyBub3RpZmljYXRpb25cclxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBub3RpZmljYXRpb24gbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0aXRsZSAtIE9wdGlvbmFsIHRpdGxlXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxOb3RpZmljYXRpb25Db25maWc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coeyAuLi5jb25maWcsIG1lc3NhZ2UsIHRpdGxlLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGFuIGVycm9yIG5vdGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIC0gT3B0aW9uYWwgdGl0bGVcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxOb3RpZmljYXRpb25Db25maWc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coeyAuLi5jb25maWcsIG1lc3NhZ2UsIHRpdGxlLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIHdhcm5pbmcgbm90aWZpY2F0aW9uXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gdGl0bGUgLSBPcHRpb25hbCB0aXRsZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICB3YXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcsIGNvbmZpZz86IFBhcnRpYWw8Tm90aWZpY2F0aW9uQ29uZmlnPik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93KHsgLi4uY29uZmlnLCBtZXNzYWdlLCB0aXRsZSwgdHlwZTogJ3dhcm5pbmcnIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBpbmZvIG5vdGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIC0gT3B0aW9uYWwgdGl0bGVcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbkNvbmZpZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7IC4uLmNvbmZpZywgbWVzc2FnZSwgdGl0bGUsIHR5cGU6ICdpbmZvJyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBub3RpZmljYXRpb24gd2l0aCBjdXN0b20gY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBGdWxsIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgVGhlIG5vdGlmaWNhdGlvbiBJRFxyXG4gICAqL1xyXG4gIHNob3coY29uZmlnOiBOb3RpZmljYXRpb25Db25maWcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWQgPSBjb25maWcuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCk7XHJcblxyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24gPSB7XHJcbiAgICAgIGlkLFxyXG4gICAgICBtZXNzYWdlOiBjb25maWcubWVzc2FnZSxcclxuICAgICAgdGl0bGU6IGNvbmZpZy50aXRsZSxcclxuICAgICAgdHlwZTogY29uZmlnLnR5cGUsXHJcbiAgICAgIGR1cmF0aW9uOiBjb25maWcuZHVyYXRpb24gPz8gdGhpcy5kZWZhdWx0RHVyYXRpb24sXHJcbiAgICAgIGRpc21pc3NpYmxlOiBjb25maWcuZGlzbWlzc2libGUgPz8gdHJ1ZSxcclxuICAgICAgcG9zaXRpb246IGNvbmZpZy5wb3NpdGlvbiA/PyB0aGlzLmRlZmF1bHRQb3NpdGlvbixcclxuICAgICAgY3VzdG9tQ2xhc3M6IGNvbmZpZy5jdXN0b21DbGFzcyxcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9uU3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XHJcbiAgICByZXR1cm4gaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNtaXNzIGEgc3BlY2lmaWMgbm90aWZpY2F0aW9uIGJ5IElEXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG5vdGlmaWNhdGlvbiBJRCB0byBkaXNtaXNzXHJcbiAgICovXHJcbiAgZGlzbWlzcyhpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc21pc3NTdWJqZWN0Lm5leHQoaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIG5vdGlmaWNhdGlvbnNcclxuICAgKi9cclxuICBjbGVhckFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJTdWJqZWN0Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIG5vdGlmaWNhdGlvbiBJRFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBub3RpZmljYXRpb24tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gO1xyXG4gIH1cclxufVxyXG4iXX0=