@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,171 @@
1
+ import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { generateUniqueId } from '../../shared/utils/dom.utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ /**
7
+ * A professional button component with multiple variants and sizes.
8
+ * Fully accessible with WCAG 2.1 AA compliance.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * <pecb-button variant="primary" size="md" (clicked)="handleClick()">
13
+ * Click me
14
+ * </pecb-button>
15
+ *
16
+ * <!-- With leading icon -->
17
+ * <pecb-button variant="primary" iconStyle="leading" icon="+">
18
+ * Add Item
19
+ * </pecb-button>
20
+ *
21
+ * <!-- Icon only button -->
22
+ * <pecb-button variant="secondary" iconStyle="icon-only" icon="+" ariaLabel="Add item"></pecb-button>
23
+ * ```
24
+ *
25
+ * @publicApi
26
+ */
27
+ export class ButtonComponent {
28
+ constructor() {
29
+ /**
30
+ * Unique ID for the button element
31
+ */
32
+ this.id = generateUniqueId('btn');
33
+ /**
34
+ * The visual style variant of the button
35
+ */
36
+ this.variant = 'primary';
37
+ /**
38
+ * The size of the button
39
+ */
40
+ this.size = 'md';
41
+ /**
42
+ * Icon placement style
43
+ */
44
+ this.iconStyle = 'none';
45
+ /**
46
+ * Whether the button is disabled
47
+ */
48
+ this.disabled = false;
49
+ /**
50
+ * Whether the button should take full width
51
+ */
52
+ this.fullWidth = false;
53
+ /**
54
+ * Whether the button is in loading state
55
+ */
56
+ this.loading = false;
57
+ /**
58
+ * Button type attribute
59
+ */
60
+ this.type = 'button';
61
+ /**
62
+ * Event emitted when the button is clicked
63
+ */
64
+ this.clicked = new EventEmitter();
65
+ }
66
+ /**
67
+ * Host binding for the component's ID
68
+ */
69
+ get hostId() {
70
+ return null; // ID is on the button element, not the host
71
+ }
72
+ /**
73
+ * Get CSS classes for the button
74
+ */
75
+ get buttonClasses() {
76
+ return [
77
+ 'pecb-button',
78
+ `pecb-button--${this.variant}`,
79
+ `pecb-button--${this.size}`,
80
+ this.iconStyle !== 'none' ? `pecb-button--icon-${this.iconStyle}` : '',
81
+ this.fullWidth ? 'pecb-button--full-width' : '',
82
+ this.loading ? 'pecb-button--loading' : ''
83
+ ].filter(Boolean);
84
+ }
85
+ /**
86
+ * Check if we should show leading icon
87
+ */
88
+ get showLeadingIcon() {
89
+ return this.iconStyle === 'leading' && !!this.icon && !this.loading;
90
+ }
91
+ /**
92
+ * Check if we should show trailing icon
93
+ */
94
+ get showTrailingIcon() {
95
+ return this.iconStyle === 'trailing' && !!this.icon && !this.loading;
96
+ }
97
+ /**
98
+ * Check if this is icon-only button
99
+ */
100
+ get isIconOnly() {
101
+ return this.iconStyle === 'icon-only';
102
+ }
103
+ /**
104
+ * Get the loading announcement text for screen readers
105
+ */
106
+ get loadingText() {
107
+ return 'Loading, please wait';
108
+ }
109
+ /**
110
+ * Handle button click
111
+ */
112
+ onClick(event) {
113
+ if (!this.disabled && !this.loading) {
114
+ this.clicked.emit(event);
115
+ }
116
+ }
117
+ /**
118
+ * Handle keyboard events for accessibility
119
+ */
120
+ onKeyDown(event) {
121
+ // Allow Enter and Space to trigger click
122
+ if ((event.key === 'Enter' || event.key === ' ') && !this.disabled && !this.loading) {
123
+ event.preventDefault();
124
+ this.clicked.emit(event);
125
+ }
126
+ }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonComponent, isStandalone: true, selector: "pecb-button", inputs: { id: "id", variant: "variant", size: "size", iconStyle: "iconStyle", icon: "icon", disabled: "disabled", fullWidth: "fullWidth", loading: "loading", type: "type", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", ariaExpanded: "ariaExpanded", ariaPressed: "ariaPressed", ariaHasPopup: "ariaHasPopup", ariaControls: "ariaControls" }, outputs: { clicked: "clicked" }, host: { properties: { "attr.id": "this.hostId" } }, ngImport: i0, template: "<button\r\n [id]=\"id\"\r\n [type]=\"type\"\r\n [disabled]=\"disabled || loading\"\r\n [class]=\"buttonClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n [attr.aria-expanded]=\"ariaExpanded !== undefined ? ariaExpanded : null\"\r\n [attr.aria-pressed]=\"ariaPressed !== undefined ? ariaPressed : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-busy]=\"loading ? true : null\"\r\n [attr.aria-disabled]=\"disabled ? true : null\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-button__content\">\r\n <!-- Loading spinner with screen reader announcement -->\r\n <span *ngIf=\"loading\" class=\"pecb-button__spinner\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"loading\" class=\"pecb-button__sr-only\">{{ loadingText }}</span>\r\n\r\n <!-- Leading icon -->\r\n <span\r\n *ngIf=\"showLeadingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--leading\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Icon only -->\r\n <span\r\n *ngIf=\"isIconOnly && icon && !loading\"\r\n class=\"pecb-button__icon\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Button text content (hidden for icon-only) -->\r\n <span *ngIf=\"!isIconOnly\" class=\"pecb-button__text\">\r\n <ng-content></ng-content>\r\n </span>\r\n\r\n <!-- Trailing icon -->\r\n <span\r\n *ngIf=\"showTrailingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--trailing\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n </span>\r\n</button>\r\n", styles: [".pecb-button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:500;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;border:1px solid transparent;border-radius:8px;cursor:pointer;transition-property:background-color,border-color,color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-button:focus-visible{outline:2px solid #a11e29;outline-offset:2px}.pecb-button:disabled{cursor:not-allowed;opacity:.5}.pecb-button--sm{padding:6px 12px;font-size:14px;min-height:24px;gap:6px}.pecb-button--md{padding:8px 16px;font-size:14px;min-height:32px;gap:8px}.pecb-button--lg{padding:12px 20px;font-size:16px;min-height:40px;gap:8px}.pecb-button--primary{background-color:#a11e29;color:#fff;border-color:#a11e29}.pecb-button--primary:hover:not(:disabled){background-color:#7f1820;border-color:#7f1820}.pecb-button--primary:active:not(:disabled){background-color:#6d141c;border-color:#6d141c}.pecb-button--primary-outline{background-color:#fff;color:#a11e29;border-color:#a11e29}.pecb-button--primary-outline:hover:not(:disabled){background-color:#a11e2914;border-color:#7f1820}.pecb-button--primary-outline:active:not(:disabled){background-color:#a11e2929;border-color:#6d141c}.pecb-button--primary-2{background-color:#212427;color:#fff;border-color:#212427}.pecb-button--primary-2:hover:not(:disabled){background-color:#34383d;border-color:#34383d}.pecb-button--primary-2:active:not(:disabled){background-color:#2a2e32;border-color:#2a2e32}.pecb-button--primary-2-outline{background-color:#fff;color:#212427;border-color:#212427}.pecb-button--primary-2-outline:hover:not(:disabled){background-color:#f4f4f4;border-color:#34383d}.pecb-button--primary-2-outline:active:not(:disabled){background-color:#ececec;border-color:#212427}.pecb-button--neutral{background-color:#313131;color:#fff;border-color:#313131}.pecb-button--neutral:hover:not(:disabled){background-color:#4b4b4b;border-color:#4b4b4b}.pecb-button--neutral:active:not(:disabled){background-color:#3e3e3e;border-color:#3e3e3e}.pecb-button--neutral-outline{background-color:#fff;color:#313131;border-color:#313131}.pecb-button--neutral-outline:hover:not(:disabled){background-color:#f4f4f4;border-color:#4b4b4b}.pecb-button--neutral-outline:active:not(:disabled){background-color:#ececec;border-color:#313131}.pecb-button--secondary{background-color:#fff;color:#313131;border-color:#c2c2c2}.pecb-button--secondary:hover:not(:disabled){background-color:#f4f4f4;border-color:#919191}.pecb-button--secondary:active:not(:disabled){background-color:#ececec;border-color:#616161}.pecb-button--text{background-color:transparent;color:#313131;border-color:transparent}.pecb-button--text:hover:not(:disabled){background-color:#f4f4f4}.pecb-button--text:active:not(:disabled){background-color:#ececec}.pecb-button--destructive{background-color:#dc3545;color:#fff;border-color:#dc3545}.pecb-button--destructive:hover:not(:disabled){background-color:#c62232;border-color:#c62232}.pecb-button--destructive:active:not(:disabled){background-color:#b51f2e;border-color:#b51f2e}.pecb-button--destructive-outline{background-color:#fff;color:#dc3545;border-color:#dc3545}.pecb-button--destructive-outline:hover:not(:disabled){background-color:#fdecea;border-color:#c62232}.pecb-button--destructive-outline:active:not(:disabled){background-color:#fbd7d3;border-color:#b51f2e}.pecb-button--icon-leading .pecb-button__content,.pecb-button--icon-trailing .pecb-button__content{gap:8px}.pecb-button--icon-icon-only.pecb-button--sm{padding:6px;min-width:24px}.pecb-button--icon-icon-only.pecb-button--md{padding:8px;min-width:32px}.pecb-button--icon-icon-only.pecb-button--lg{padding:12px;min-width:40px}.pecb-button--full-width{width:100%}.pecb-button--loading{cursor:wait}.pecb-button__content{display:inline-flex;align-items:center;justify-content:center;gap:8px}.pecb-button__icon{display:inline-flex;align-items:center;justify-content:center;font-size:1.1em;line-height:1}.pecb-button__icon--leading{margin-right:0}.pecb-button__icon--trailing{margin-left:0}.pecb-button__text{display:inline-flex;align-items:center}.pecb-button__spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:pecb-button-spin .6s linear infinite}@keyframes pecb-button-spin{to{transform:rotate(360deg)}}.pecb-button__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ selector: 'pecb-button', standalone: true, imports: [CommonModule], template: "<button\r\n [id]=\"id\"\r\n [type]=\"type\"\r\n [disabled]=\"disabled || loading\"\r\n [class]=\"buttonClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n [attr.aria-expanded]=\"ariaExpanded !== undefined ? ariaExpanded : null\"\r\n [attr.aria-pressed]=\"ariaPressed !== undefined ? ariaPressed : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-busy]=\"loading ? true : null\"\r\n [attr.aria-disabled]=\"disabled ? true : null\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-button__content\">\r\n <!-- Loading spinner with screen reader announcement -->\r\n <span *ngIf=\"loading\" class=\"pecb-button__spinner\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"loading\" class=\"pecb-button__sr-only\">{{ loadingText }}</span>\r\n\r\n <!-- Leading icon -->\r\n <span\r\n *ngIf=\"showLeadingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--leading\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Icon only -->\r\n <span\r\n *ngIf=\"isIconOnly && icon && !loading\"\r\n class=\"pecb-button__icon\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Button text content (hidden for icon-only) -->\r\n <span *ngIf=\"!isIconOnly\" class=\"pecb-button__text\">\r\n <ng-content></ng-content>\r\n </span>\r\n\r\n <!-- Trailing icon -->\r\n <span\r\n *ngIf=\"showTrailingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--trailing\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n </span>\r\n</button>\r\n", styles: [".pecb-button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:500;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;user-select:none;border:1px solid transparent;border-radius:8px;cursor:pointer;transition-property:background-color,border-color,color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-button:focus-visible{outline:2px solid #a11e29;outline-offset:2px}.pecb-button:disabled{cursor:not-allowed;opacity:.5}.pecb-button--sm{padding:6px 12px;font-size:14px;min-height:24px;gap:6px}.pecb-button--md{padding:8px 16px;font-size:14px;min-height:32px;gap:8px}.pecb-button--lg{padding:12px 20px;font-size:16px;min-height:40px;gap:8px}.pecb-button--primary{background-color:#a11e29;color:#fff;border-color:#a11e29}.pecb-button--primary:hover:not(:disabled){background-color:#7f1820;border-color:#7f1820}.pecb-button--primary:active:not(:disabled){background-color:#6d141c;border-color:#6d141c}.pecb-button--primary-outline{background-color:#fff;color:#a11e29;border-color:#a11e29}.pecb-button--primary-outline:hover:not(:disabled){background-color:#a11e2914;border-color:#7f1820}.pecb-button--primary-outline:active:not(:disabled){background-color:#a11e2929;border-color:#6d141c}.pecb-button--primary-2{background-color:#212427;color:#fff;border-color:#212427}.pecb-button--primary-2:hover:not(:disabled){background-color:#34383d;border-color:#34383d}.pecb-button--primary-2:active:not(:disabled){background-color:#2a2e32;border-color:#2a2e32}.pecb-button--primary-2-outline{background-color:#fff;color:#212427;border-color:#212427}.pecb-button--primary-2-outline:hover:not(:disabled){background-color:#f4f4f4;border-color:#34383d}.pecb-button--primary-2-outline:active:not(:disabled){background-color:#ececec;border-color:#212427}.pecb-button--neutral{background-color:#313131;color:#fff;border-color:#313131}.pecb-button--neutral:hover:not(:disabled){background-color:#4b4b4b;border-color:#4b4b4b}.pecb-button--neutral:active:not(:disabled){background-color:#3e3e3e;border-color:#3e3e3e}.pecb-button--neutral-outline{background-color:#fff;color:#313131;border-color:#313131}.pecb-button--neutral-outline:hover:not(:disabled){background-color:#f4f4f4;border-color:#4b4b4b}.pecb-button--neutral-outline:active:not(:disabled){background-color:#ececec;border-color:#313131}.pecb-button--secondary{background-color:#fff;color:#313131;border-color:#c2c2c2}.pecb-button--secondary:hover:not(:disabled){background-color:#f4f4f4;border-color:#919191}.pecb-button--secondary:active:not(:disabled){background-color:#ececec;border-color:#616161}.pecb-button--text{background-color:transparent;color:#313131;border-color:transparent}.pecb-button--text:hover:not(:disabled){background-color:#f4f4f4}.pecb-button--text:active:not(:disabled){background-color:#ececec}.pecb-button--destructive{background-color:#dc3545;color:#fff;border-color:#dc3545}.pecb-button--destructive:hover:not(:disabled){background-color:#c62232;border-color:#c62232}.pecb-button--destructive:active:not(:disabled){background-color:#b51f2e;border-color:#b51f2e}.pecb-button--destructive-outline{background-color:#fff;color:#dc3545;border-color:#dc3545}.pecb-button--destructive-outline:hover:not(:disabled){background-color:#fdecea;border-color:#c62232}.pecb-button--destructive-outline:active:not(:disabled){background-color:#fbd7d3;border-color:#b51f2e}.pecb-button--icon-leading .pecb-button__content,.pecb-button--icon-trailing .pecb-button__content{gap:8px}.pecb-button--icon-icon-only.pecb-button--sm{padding:6px;min-width:24px}.pecb-button--icon-icon-only.pecb-button--md{padding:8px;min-width:32px}.pecb-button--icon-icon-only.pecb-button--lg{padding:12px;min-width:40px}.pecb-button--full-width{width:100%}.pecb-button--loading{cursor:wait}.pecb-button__content{display:inline-flex;align-items:center;justify-content:center;gap:8px}.pecb-button__icon{display:inline-flex;align-items:center;justify-content:center;font-size:1.1em;line-height:1}.pecb-button__icon--leading{margin-right:0}.pecb-button__icon--trailing{margin-left:0}.pecb-button__text{display:inline-flex;align-items:center}.pecb-button__spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:pecb-button-spin .6s linear infinite}@keyframes pecb-button-spin{to{transform:rotate(360deg)}}.pecb-button__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
133
+ }], propDecorators: { id: [{
134
+ type: Input
135
+ }], variant: [{
136
+ type: Input
137
+ }], size: [{
138
+ type: Input
139
+ }], iconStyle: [{
140
+ type: Input
141
+ }], icon: [{
142
+ type: Input
143
+ }], disabled: [{
144
+ type: Input
145
+ }], fullWidth: [{
146
+ type: Input
147
+ }], loading: [{
148
+ type: Input
149
+ }], type: [{
150
+ type: Input
151
+ }], ariaLabel: [{
152
+ type: Input
153
+ }], ariaLabelledBy: [{
154
+ type: Input
155
+ }], ariaDescribedBy: [{
156
+ type: Input
157
+ }], ariaExpanded: [{
158
+ type: Input
159
+ }], ariaPressed: [{
160
+ type: Input
161
+ }], ariaHasPopup: [{
162
+ type: Input
163
+ }], ariaControls: [{
164
+ type: Input
165
+ }], clicked: [{
166
+ type: Output
167
+ }], hostId: [{
168
+ type: HostBinding,
169
+ args: ['attr.id']
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQWdCaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBUUgsTUFBTSxPQUFPLGVBQWU7SUFQNUI7UUFRRTs7V0FFRztRQUNNLE9BQUUsR0FBVyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5Qzs7V0FFRztRQUNNLFlBQU8sR0FBa0IsU0FBUyxDQUFDO1FBRTVDOztXQUVHO1FBQ00sU0FBSSxHQUFlLElBQUksQ0FBQztRQUVqQzs7V0FFRztRQUNNLGNBQVMsR0FBb0IsTUFBTSxDQUFDO1FBTzdDOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXpCOztXQUVHO1FBQ00sU0FBSSxHQUFrQyxRQUFRLENBQUM7UUF1Q3hEOztXQUVHO1FBQ08sWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7S0FzRXBEO0lBcEVDOztPQUVHO0lBQ0gsSUFBNEIsTUFBTTtRQUNoQyxPQUFPLElBQUksQ0FBQyxDQUFDLDRDQUE0QztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGFBQWE7UUFDZixPQUFPO1lBQ0wsYUFBYTtZQUNiLGdCQUFnQixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLGdCQUFnQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzNDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsS0FBb0I7UUFDNUIseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBOEIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDOytHQTNKVSxlQUFlO21HQUFmLGVBQWUsOGhCQzlDNUIsdXhEQXVEQSxvbkpEYlksWUFBWTs7NEZBSVgsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQVFkLEVBQUU7c0JBQVYsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0ksT0FBTztzQkFBaEIsTUFBTTtnQkFLcUIsTUFBTTtzQkFBakMsV0FBVzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSWQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMvZG9tLnV0aWxzJztcclxuXHJcbmV4cG9ydCB0eXBlIEJ1dHRvblZhcmlhbnQgPVxyXG4gIHwgJ3ByaW1hcnknXHJcbiAgfCAncHJpbWFyeS1vdXRsaW5lJ1xyXG4gIHwgJ3ByaW1hcnktMidcclxuICB8ICdwcmltYXJ5LTItb3V0bGluZSdcclxuICB8ICduZXV0cmFsJ1xyXG4gIHwgJ25ldXRyYWwtb3V0bGluZSdcclxuICB8ICdzZWNvbmRhcnknXHJcbiAgfCAndGV4dCdcclxuICB8ICdkZXN0cnVjdGl2ZSdcclxuICB8ICdkZXN0cnVjdGl2ZS1vdXRsaW5lJztcclxuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcclxuZXhwb3J0IHR5cGUgQnV0dG9uSWNvblN0eWxlID0gJ25vbmUnIHwgJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJyB8ICdpY29uLW9ubHknO1xyXG5cclxuLyoqXHJcbiAqIEEgcHJvZmVzc2lvbmFsIGJ1dHRvbiBjb21wb25lbnQgd2l0aCBtdWx0aXBsZSB2YXJpYW50cyBhbmQgc2l6ZXMuXHJcbiAqIEZ1bGx5IGFjY2Vzc2libGUgd2l0aCBXQ0FHIDIuMSBBQSBjb21wbGlhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxwZWNiLWJ1dHRvbiB2YXJpYW50PVwicHJpbWFyeVwiIHNpemU9XCJtZFwiIChjbGlja2VkKT1cImhhbmRsZUNsaWNrKClcIj5cclxuICogICBDbGljayBtZVxyXG4gKiA8L3BlY2ItYnV0dG9uPlxyXG4gKlxyXG4gKiA8IS0tIFdpdGggbGVhZGluZyBpY29uIC0tPlxyXG4gKiA8cGVjYi1idXR0b24gdmFyaWFudD1cInByaW1hcnlcIiBpY29uU3R5bGU9XCJsZWFkaW5nXCIgaWNvbj1cIitcIj5cclxuICogICBBZGQgSXRlbVxyXG4gKiA8L3BlY2ItYnV0dG9uPlxyXG4gKlxyXG4gKiA8IS0tIEljb24gb25seSBidXR0b24gLS0+XHJcbiAqIDxwZWNiLWJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgaWNvblN0eWxlPVwiaWNvbi1vbmx5XCIgaWNvbj1cIitcIiBhcmlhTGFiZWw9XCJBZGQgaXRlbVwiPjwvcGVjYi1idXR0b24+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItYnV0dG9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQge1xyXG4gIC8qKlxyXG4gICAqIFVuaXF1ZSBJRCBmb3IgdGhlIGJ1dHRvbiBlbGVtZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IGdlbmVyYXRlVW5pcXVlSWQoJ2J0bicpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdmlzdWFsIHN0eWxlIHZhcmlhbnQgb2YgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEJ1dHRvblZhcmlhbnQgPSAncHJpbWFyeSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzaXplIG9mIHRoZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBzaXplOiBCdXR0b25TaXplID0gJ21kJztcclxuXHJcbiAgLyoqXHJcbiAgICogSWNvbiBwbGFjZW1lbnQgc3R5bGVcclxuICAgKi9cclxuICBASW5wdXQoKSBpY29uU3R5bGU6IEJ1dHRvbkljb25TdHlsZSA9ICdub25lJztcclxuXHJcbiAgLyoqXHJcbiAgICogSWNvbiB0byBkaXNwbGF5ICh1c2VkIHdpdGggaWNvblN0eWxlKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGljb24/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBzaG91bGQgdGFrZSBmdWxsIHdpZHRoXHJcbiAgICovXHJcbiAgQElucHV0KCkgZnVsbFdpZHRoID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBpbiBsb2FkaW5nIHN0YXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBCdXR0b24gdHlwZSBhdHRyaWJ1dGVcclxuICAgKi9cclxuICBASW5wdXQoKSB0eXBlOiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyA9ICdidXR0b24nO1xyXG5cclxuICAvLyAtLS0gQVJJQSBBY2Nlc3NpYmlsaXR5IFByb3BlcnRpZXMgLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIEFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBidXR0b24gKHJlcXVpcmVkIGZvciBpY29uLW9ubHkgYnV0dG9ucylcclxuICAgKi9cclxuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIElEIG9mIGVsZW1lbnQgdGhhdCBsYWJlbHMgdGhpcyBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSUQgb2YgZWxlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGlzIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRCeT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIHRoZSBidXR0b24gY29udHJvbHMgYW4gZXhwYW5kYWJsZSBlbGVtZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgYXJpYUV4cGFuZGVkPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIHRoZSBwcmVzc2VkIHN0YXRlIGZvciB0b2dnbGUgYnV0dG9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFQcmVzc2VkPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIHRoZSBidXR0b24gb3BlbnMgYSBwb3B1cCAobWVudSwgbGlzdGJveCwgZGlhbG9nLCBldGMuKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFIYXNQb3B1cD86IGJvb2xlYW4gfCAnbWVudScgfCAnbGlzdGJveCcgfCAndHJlZScgfCAnZ3JpZCcgfCAnZGlhbG9nJztcclxuXHJcbiAgLyoqXHJcbiAgICogSUQgb2YgdGhlIGVsZW1lbnQgY29udHJvbGxlZCBieSB0aGlzIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFDb250cm9scz86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBIb3N0IGJpbmRpbmcgZm9yIHRoZSBjb21wb25lbnQncyBJRFxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIGdldCBob3N0SWQoKTogbnVsbCB7XHJcbiAgICByZXR1cm4gbnVsbDsgLy8gSUQgaXMgb24gdGhlIGJ1dHRvbiBlbGVtZW50LCBub3QgdGhlIGhvc3RcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBDU1MgY2xhc3NlcyBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGdldCBidXR0b25DbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdwZWNiLWJ1dHRvbicsXHJcbiAgICAgIGBwZWNiLWJ1dHRvbi0tJHt0aGlzLnZhcmlhbnR9YCxcclxuICAgICAgYHBlY2ItYnV0dG9uLS0ke3RoaXMuc2l6ZX1gLFxyXG4gICAgICB0aGlzLmljb25TdHlsZSAhPT0gJ25vbmUnID8gYHBlY2ItYnV0dG9uLS1pY29uLSR7dGhpcy5pY29uU3R5bGV9YCA6ICcnLFxyXG4gICAgICB0aGlzLmZ1bGxXaWR0aCA/ICdwZWNiLWJ1dHRvbi0tZnVsbC13aWR0aCcgOiAnJyxcclxuICAgICAgdGhpcy5sb2FkaW5nID8gJ3BlY2ItYnV0dG9uLS1sb2FkaW5nJyA6ICcnXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHdlIHNob3VsZCBzaG93IGxlYWRpbmcgaWNvblxyXG4gICAqL1xyXG4gIGdldCBzaG93TGVhZGluZ0ljb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU3R5bGUgPT09ICdsZWFkaW5nJyAmJiAhIXRoaXMuaWNvbiAmJiAhdGhpcy5sb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgd2Ugc2hvdWxkIHNob3cgdHJhaWxpbmcgaWNvblxyXG4gICAqL1xyXG4gIGdldCBzaG93VHJhaWxpbmdJY29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblN0eWxlID09PSAndHJhaWxpbmcnICYmICEhdGhpcy5pY29uICYmICF0aGlzLmxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGlzIGlzIGljb24tb25seSBidXR0b25cclxuICAgKi9cclxuICBnZXQgaXNJY29uT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TdHlsZSA9PT0gJ2ljb24tb25seSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxvYWRpbmcgYW5ub3VuY2VtZW50IHRleHQgZm9yIHNjcmVlbiByZWFkZXJzXHJcbiAgICovXHJcbiAgZ2V0IGxvYWRpbmdUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ0xvYWRpbmcsIHBsZWFzZSB3YWl0JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBidXR0b24gY2xpY2tcclxuICAgKi9cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubG9hZGluZykge1xyXG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIGZvciBhY2Nlc3NpYmlsaXR5XHJcbiAgICovXHJcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBBbGxvdyBFbnRlciBhbmQgU3BhY2UgdG8gdHJpZ2dlciBjbGlja1xyXG4gICAgaWYgKChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpICYmICF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQgYXMgdW5rbm93biBhcyBNb3VzZUV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvblxyXG4gIFtpZF09XCJpZFwiXHJcbiAgW3R5cGVdPVwidHlwZVwiXHJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvYWRpbmdcIlxyXG4gIFtjbGFzc109XCJidXR0b25DbGFzc2VzLmpvaW4oJyAnKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXHJcbiAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnlcIlxyXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiYXJpYUV4cGFuZGVkICE9PSB1bmRlZmluZWQgPyBhcmlhRXhwYW5kZWQgOiBudWxsXCJcclxuICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiYXJpYVByZXNzZWQgIT09IHVuZGVmaW5lZCA/IGFyaWFQcmVzc2VkIDogbnVsbFwiXHJcbiAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhcmlhSGFzUG9wdXBcIlxyXG4gIFthdHRyLmFyaWEtY29udHJvbHNdPVwiYXJpYUNvbnRyb2xzXCJcclxuICBbYXR0ci5hcmlhLWJ1c3ldPVwibG9hZGluZyA/IHRydWUgOiBudWxsXCJcclxuICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxyXG4gIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxyXG4gIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuPlxyXG4gIDxzcGFuIGNsYXNzPVwicGVjYi1idXR0b25fX2NvbnRlbnRcIj5cclxuICAgIDwhLS0gTG9hZGluZyBzcGlubmVyIHdpdGggc2NyZWVuIHJlYWRlciBhbm5vdW5jZW1lbnQgLS0+XHJcbiAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInBlY2ItYnV0dG9uX19zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJwZWNiLWJ1dHRvbl9fc3Itb25seVwiPnt7IGxvYWRpbmdUZXh0IH19PC9zcGFuPlxyXG5cclxuICAgIDwhLS0gTGVhZGluZyBpY29uIC0tPlxyXG4gICAgPHNwYW5cclxuICAgICAgKm5nSWY9XCJzaG93TGVhZGluZ0ljb25cIlxyXG4gICAgICBjbGFzcz1cInBlY2ItYnV0dG9uX19pY29uIHBlY2ItYnV0dG9uX19pY29uLS1sZWFkaW5nXCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAge3sgaWNvbiB9fVxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDwhLS0gSWNvbiBvbmx5IC0tPlxyXG4gICAgPHNwYW5cclxuICAgICAgKm5nSWY9XCJpc0ljb25Pbmx5ICYmIGljb24gJiYgIWxvYWRpbmdcIlxyXG4gICAgICBjbGFzcz1cInBlY2ItYnV0dG9uX19pY29uXCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAge3sgaWNvbiB9fVxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDwhLS0gQnV0dG9uIHRleHQgY29udGVudCAoaGlkZGVuIGZvciBpY29uLW9ubHkpIC0tPlxyXG4gICAgPHNwYW4gKm5nSWY9XCIhaXNJY29uT25seVwiIGNsYXNzPVwicGVjYi1idXR0b25fX3RleHRcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDwhLS0gVHJhaWxpbmcgaWNvbiAtLT5cclxuICAgIDxzcGFuXHJcbiAgICAgICpuZ0lmPVwic2hvd1RyYWlsaW5nSWNvblwiXHJcbiAgICAgIGNsYXNzPVwicGVjYi1idXR0b25fX2ljb24gcGVjYi1idXR0b25fX2ljb24tLXRyYWlsaW5nXCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAge3sgaWNvbiB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvc3Bhbj5cclxuPC9idXR0b24+XHJcbiJdfQ==
@@ -0,0 +1,182 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { generateUniqueId } from '../../shared/utils/dom.utils';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A professional card component for displaying content in a contained format.
6
+ * Fully accessible with WCAG 2.1 AA compliance.
7
+ *
8
+ * @example
9
+ * ```html
10
+ * <!-- Basic card -->
11
+ * <pecb-card elevation="md">
12
+ * <pecb-card-header>
13
+ * <h3>Card Title</h3>
14
+ * </pecb-card-header>
15
+ * <pecb-card-body>
16
+ * <p>Card content goes here</p>
17
+ * </pecb-card-body>
18
+ * </pecb-card>
19
+ *
20
+ * <!-- Accessible card with region role -->
21
+ * <pecb-card role="region" ariaLabel="Product Information">
22
+ * <pecb-card-body>
23
+ * <p>Product details...</p>
24
+ * </pecb-card-body>
25
+ * </pecb-card>
26
+ *
27
+ * <!-- Card as article -->
28
+ * <pecb-card role="article" ariaLabelledBy="article-title">
29
+ * <pecb-card-header>
30
+ * <h2 id="article-title">Article Headline</h2>
31
+ * </pecb-card-header>
32
+ * <pecb-card-body>
33
+ * <p>Article content...</p>
34
+ * </pecb-card-body>
35
+ * </pecb-card>
36
+ * ```
37
+ *
38
+ * @publicApi
39
+ */
40
+ export class CardComponent {
41
+ constructor() {
42
+ /**
43
+ * Unique ID for the card element
44
+ */
45
+ this.id = generateUniqueId('card');
46
+ /**
47
+ * The elevation level (shadow depth) of the card
48
+ */
49
+ this.elevation = 'md';
50
+ /**
51
+ * Whether the card should be hoverable with elevation change
52
+ */
53
+ this.hoverable = false;
54
+ /**
55
+ * Whether to add padding to the card
56
+ */
57
+ this.noPadding = false;
58
+ // --- ARIA Accessibility Properties ---
59
+ /**
60
+ * Semantic role for the card (article, region, group, listitem, or none)
61
+ * Use 'article' for self-contained content, 'region' for significant sections
62
+ */
63
+ this.role = 'none';
64
+ }
65
+ /**
66
+ * Get CSS classes for the card
67
+ */
68
+ get cardClasses() {
69
+ return [
70
+ 'pecb-card',
71
+ `pecb-card--elevation-${this.elevation}`,
72
+ this.hoverable ? 'pecb-card--hoverable' : '',
73
+ this.noPadding ? 'pecb-card--no-padding' : ''
74
+ ].filter(Boolean);
75
+ }
76
+ /**
77
+ * Get the role attribute value
78
+ */
79
+ get roleAttribute() {
80
+ return this.role !== 'none' ? this.role : null;
81
+ }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardComponent, isStandalone: true, selector: "pecb-card", inputs: { id: "id", elevation: "elevation", hoverable: "hoverable", noPadding: "noPadding", role: "role", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy" }, ngImport: i0, template: "<div\r\n [id]=\"id\"\r\n [class]=\"cardClasses.join(' ')\"\r\n [attr.role]=\"roleAttribute\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }); }
84
+ }
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardComponent, decorators: [{
86
+ type: Component,
87
+ args: [{ selector: 'pecb-card', standalone: true, template: "<div\r\n [id]=\"id\"\r\n [class]=\"cardClasses.join(' ')\"\r\n [attr.role]=\"roleAttribute\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }]
88
+ }], propDecorators: { id: [{
89
+ type: Input
90
+ }], elevation: [{
91
+ type: Input
92
+ }], hoverable: [{
93
+ type: Input
94
+ }], noPadding: [{
95
+ type: Input
96
+ }], role: [{
97
+ type: Input
98
+ }], ariaLabel: [{
99
+ type: Input
100
+ }], ariaLabelledBy: [{
101
+ type: Input
102
+ }], ariaDescribedBy: [{
103
+ type: Input
104
+ }] } });
105
+ /**
106
+ * Card header component for displaying title and actions.
107
+ *
108
+ * @example
109
+ * ```html
110
+ * <pecb-card-header>
111
+ * <h3>Card Title</h3>
112
+ * </pecb-card-header>
113
+ * ```
114
+ *
115
+ * @publicApi
116
+ */
117
+ export class CardHeaderComponent {
118
+ constructor() {
119
+ /**
120
+ * Heading level for accessibility (1-6)
121
+ * Only used if the header content doesn't contain a heading element
122
+ */
123
+ this.headingLevel = null;
124
+ }
125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
126
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardHeaderComponent, isStandalone: true, selector: "pecb-card-header", inputs: { headingLevel: "headingLevel" }, ngImport: i0, template: `
127
+ <div class="pecb-card__header" role="heading" [attr.aria-level]="headingLevel">
128
+ <ng-content></ng-content>
129
+ </div>
130
+ `, isInline: true, styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }); }
131
+ }
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardHeaderComponent, decorators: [{
133
+ type: Component,
134
+ args: [{ selector: 'pecb-card-header', standalone: true, template: `
135
+ <div class="pecb-card__header" role="heading" [attr.aria-level]="headingLevel">
136
+ <ng-content></ng-content>
137
+ </div>
138
+ `, styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }]
139
+ }], propDecorators: { headingLevel: [{
140
+ type: Input
141
+ }] } });
142
+ /**
143
+ * Card body component for main content.
144
+ *
145
+ * @example
146
+ * ```html
147
+ * <pecb-card-body>
148
+ * <p>Card content goes here</p>
149
+ * </pecb-card-body>
150
+ * ```
151
+ *
152
+ * @publicApi
153
+ */
154
+ export class CardBodyComponent {
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardBodyComponent, isStandalone: true, selector: "pecb-card-body", ngImport: i0, template: '<div class="pecb-card__body"><ng-content></ng-content></div>', isInline: true, styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }); }
157
+ }
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardBodyComponent, decorators: [{
159
+ type: Component,
160
+ args: [{ selector: 'pecb-card-body', standalone: true, template: '<div class="pecb-card__body"><ng-content></ng-content></div>', styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }]
161
+ }] });
162
+ /**
163
+ * Card footer component for actions and additional information.
164
+ *
165
+ * @example
166
+ * ```html
167
+ * <pecb-card-footer>
168
+ * <button>Action</button>
169
+ * </pecb-card-footer>
170
+ * ```
171
+ *
172
+ * @publicApi
173
+ */
174
+ export class CardFooterComponent {
175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
176
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CardFooterComponent, isStandalone: true, selector: "pecb-card-footer", ngImport: i0, template: '<div class="pecb-card__footer"><ng-content></ng-content></div>', isInline: true, styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }); }
177
+ }
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardFooterComponent, decorators: [{
179
+ type: Component,
180
+ args: [{ selector: 'pecb-card-footer', standalone: true, template: '<div class="pecb-card__footer"><ng-content></ng-content></div>', styles: [".pecb-card{position:relative;display:flex;flex-direction:column;background-color:#fff;border-radius:16px;overflow:hidden;transition-property:box-shadow,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-card:not(.pecb-card--no-padding){padding:20px}.pecb-card--elevation-none{box-shadow:none;border:1px solid #ececec}.pecb-card--elevation-sm{box-shadow:0 1px 2px #0000000d}.pecb-card--elevation-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--elevation-lg{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--elevation-xl{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card--hoverable{cursor:pointer}.pecb-card--hoverable:hover{transform:translateY(-2px)}.pecb-card--hoverable:hover.pecb-card--elevation-sm{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.pecb-card--hoverable:hover.pecb-card--elevation-md{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-card--hoverable:hover.pecb-card--elevation-lg{box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.pecb-card__header{margin-bottom:16px}.pecb-card__header h1,.pecb-card__header h2,.pecb-card__header h3,.pecb-card__header h4,.pecb-card__header h5,.pecb-card__header h6{margin:0;font-weight:700;color:#313131}.pecb-card--no-padding .pecb-card__header{padding:20px 20px 0}.pecb-card__body{flex:1;color:#616161}.pecb-card--no-padding .pecb-card__body{padding:0 20px}.pecb-card__body p:last-child{margin-bottom:0}.pecb-card__footer{margin-top:16px;padding-top:16px;border-top:1px solid #ececec}.pecb-card--no-padding .pecb-card__footer{padding:20px 20px 0}\n"] }]
181
+ }] });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVNoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFPSCxNQUFNLE9BQU8sYUFBYTtJQU4xQjtRQU9FOztXQUVHO1FBQ00sT0FBRSxHQUFXLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9DOztXQUVHO1FBQ00sY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFekM7O1dBRUc7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQix3Q0FBd0M7UUFFeEM7OztXQUdHO1FBQ00sU0FBSSxHQUFhLE1BQU0sQ0FBQztLQW1DbEM7SUFsQkM7O09BRUc7SUFDSCxJQUFJLFdBQVc7UUFDYixPQUFPO1lBQ0wsV0FBVztZQUNYLHdCQUF3QixJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzlDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDOytHQTdEVSxhQUFhO21HQUFiLGFBQWEsK1FDcEQxQix3UkFVQTs7NEZEMENhLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUk7OEJBUVAsRUFBRTtzQkFBVixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFHLElBQUk7c0JBQVosS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSzs7QUFzQlI7Ozs7Ozs7Ozs7O0dBV0c7QUFXSCxNQUFNLE9BQU8sbUJBQW1CO0lBVmhDO1FBV0U7OztXQUdHO1FBQ00saUJBQVksR0FBa0IsSUFBSSxDQUFDO0tBQzdDOytHQU5ZLG1CQUFtQjttR0FBbkIsbUJBQW1CLHNIQVBwQjs7OztHQUlUOzs0RkFHVSxtQkFBbUI7a0JBVi9CLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksWUFDTjs7OztHQUlUOzhCQVFRLFlBQVk7c0JBQXBCLEtBQUs7O0FBR1I7Ozs7Ozs7Ozs7O0dBV0c7QUFPSCxNQUFNLE9BQU8saUJBQWlCOytHQUFqQixpQkFBaUI7bUdBQWpCLGlCQUFpQiwwRUFIbEIsOERBQThEOzs0RkFHN0QsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksWUFDTiw4REFBOEQ7O0FBSzFFOzs7Ozs7Ozs7OztHQVdHO0FBT0gsTUFBTSxPQUFPLG1CQUFtQjsrR0FBbkIsbUJBQW1CO21HQUFuQixtQkFBbUIsNEVBSHBCLGdFQUFnRTs7NEZBRy9ELG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxZQUNOLGdFQUFnRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ2FyZEVsZXZhdGlvbiA9ICdub25lJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCc7XHJcblxyXG4vKipcclxuICogU2VtYW50aWMgcm9sZSBmb3IgdGhlIGNhcmQgY29tcG9uZW50XHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYXJkUm9sZSA9ICdhcnRpY2xlJyB8ICdyZWdpb24nIHwgJ2dyb3VwJyB8ICdsaXN0aXRlbScgfCAnbm9uZSc7XHJcblxyXG4vKipcclxuICogQSBwcm9mZXNzaW9uYWwgY2FyZCBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgY29udGVudCBpbiBhIGNvbnRhaW5lZCBmb3JtYXQuXHJcbiAqIEZ1bGx5IGFjY2Vzc2libGUgd2l0aCBXQ0FHIDIuMSBBQSBjb21wbGlhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDwhLS0gQmFzaWMgY2FyZCAtLT5cclxuICogPHBlY2ItY2FyZCBlbGV2YXRpb249XCJtZFwiPlxyXG4gKiAgIDxwZWNiLWNhcmQtaGVhZGVyPlxyXG4gKiAgICAgPGgzPkNhcmQgVGl0bGU8L2gzPlxyXG4gKiAgIDwvcGVjYi1jYXJkLWhlYWRlcj5cclxuICogICA8cGVjYi1jYXJkLWJvZHk+XHJcbiAqICAgICA8cD5DYXJkIGNvbnRlbnQgZ29lcyBoZXJlPC9wPlxyXG4gKiAgIDwvcGVjYi1jYXJkLWJvZHk+XHJcbiAqIDwvcGVjYi1jYXJkPlxyXG4gKlxyXG4gKiA8IS0tIEFjY2Vzc2libGUgY2FyZCB3aXRoIHJlZ2lvbiByb2xlIC0tPlxyXG4gKiA8cGVjYi1jYXJkIHJvbGU9XCJyZWdpb25cIiBhcmlhTGFiZWw9XCJQcm9kdWN0IEluZm9ybWF0aW9uXCI+XHJcbiAqICAgPHBlY2ItY2FyZC1ib2R5PlxyXG4gKiAgICAgPHA+UHJvZHVjdCBkZXRhaWxzLi4uPC9wPlxyXG4gKiAgIDwvcGVjYi1jYXJkLWJvZHk+XHJcbiAqIDwvcGVjYi1jYXJkPlxyXG4gKlxyXG4gKiA8IS0tIENhcmQgYXMgYXJ0aWNsZSAtLT5cclxuICogPHBlY2ItY2FyZCByb2xlPVwiYXJ0aWNsZVwiIGFyaWFMYWJlbGxlZEJ5PVwiYXJ0aWNsZS10aXRsZVwiPlxyXG4gKiAgIDxwZWNiLWNhcmQtaGVhZGVyPlxyXG4gKiAgICAgPGgyIGlkPVwiYXJ0aWNsZS10aXRsZVwiPkFydGljbGUgSGVhZGxpbmU8L2gyPlxyXG4gKiAgIDwvcGVjYi1jYXJkLWhlYWRlcj5cclxuICogICA8cGVjYi1jYXJkLWJvZHk+XHJcbiAqICAgICA8cD5BcnRpY2xlIGNvbnRlbnQuLi48L3A+XHJcbiAqICAgPC9wZWNiLWNhcmQtYm9keT5cclxuICogPC9wZWNiLWNhcmQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItY2FyZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IHtcclxuICAvKipcclxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSBjYXJkIGVsZW1lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gZ2VuZXJhdGVVbmlxdWVJZCgnY2FyZCcpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZWxldmF0aW9uIGxldmVsIChzaGFkb3cgZGVwdGgpIG9mIHRoZSBjYXJkXHJcbiAgICovXHJcbiAgQElucHV0KCkgZWxldmF0aW9uOiBDYXJkRWxldmF0aW9uID0gJ21kJztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgY2FyZCBzaG91bGQgYmUgaG92ZXJhYmxlIHdpdGggZWxldmF0aW9uIGNoYW5nZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGhvdmVyYWJsZSA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIGFkZCBwYWRkaW5nIHRvIHRoZSBjYXJkXHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9QYWRkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIC0tLSBBUklBIEFjY2Vzc2liaWxpdHkgUHJvcGVydGllcyAtLS1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VtYW50aWMgcm9sZSBmb3IgdGhlIGNhcmQgKGFydGljbGUsIHJlZ2lvbiwgZ3JvdXAsIGxpc3RpdGVtLCBvciBub25lKVxyXG4gICAqIFVzZSAnYXJ0aWNsZScgZm9yIHNlbGYtY29udGFpbmVkIGNvbnRlbnQsICdyZWdpb24nIGZvciBzaWduaWZpY2FudCBzZWN0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJvbGU6IENhcmRSb2xlID0gJ25vbmUnO1xyXG5cclxuICAvKipcclxuICAgKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgY2FyZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFMYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSUQgb2YgZWxlbWVudCB0aGF0IGxhYmVscyB0aGlzIGNhcmRcclxuICAgKi9cclxuICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSUQgb2YgZWxlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGlzIGNhcmRcclxuICAgKi9cclxuICBASW5wdXQoKSBhcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNhcmRcclxuICAgKi9cclxuICBnZXQgY2FyZENsYXNzZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3BlY2ItY2FyZCcsXHJcbiAgICAgIGBwZWNiLWNhcmQtLWVsZXZhdGlvbi0ke3RoaXMuZWxldmF0aW9ufWAsXHJcbiAgICAgIHRoaXMuaG92ZXJhYmxlID8gJ3BlY2ItY2FyZC0taG92ZXJhYmxlJyA6ICcnLFxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA/ICdwZWNiLWNhcmQtLW5vLXBhZGRpbmcnIDogJydcclxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSByb2xlIGF0dHJpYnV0ZSB2YWx1ZVxyXG4gICAqL1xyXG4gIGdldCByb2xlQXR0cmlidXRlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucm9sZSAhPT0gJ25vbmUnID8gdGhpcy5yb2xlIDogbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYXJkIGhlYWRlciBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgdGl0bGUgYW5kIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItY2FyZC1oZWFkZXI+XHJcbiAqICAgPGgzPkNhcmQgVGl0bGU8L2gzPlxyXG4gKiA8L3BlY2ItY2FyZC1oZWFkZXI+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItY2FyZC1oZWFkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJwZWNiLWNhcmRfX2hlYWRlclwiIHJvbGU9XCJoZWFkaW5nXCIgW2F0dHIuYXJpYS1sZXZlbF09XCJoZWFkaW5nTGV2ZWxcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9jYXJkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRIZWFkZXJDb21wb25lbnQge1xyXG4gIC8qKlxyXG4gICAqIEhlYWRpbmcgbGV2ZWwgZm9yIGFjY2Vzc2liaWxpdHkgKDEtNilcclxuICAgKiBPbmx5IHVzZWQgaWYgdGhlIGhlYWRlciBjb250ZW50IGRvZXNuJ3QgY29udGFpbiBhIGhlYWRpbmcgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGhlYWRpbmdMZXZlbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYXJkIGJvZHkgY29tcG9uZW50IGZvciBtYWluIGNvbnRlbnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItY2FyZC1ib2R5PlxyXG4gKiAgIDxwPkNhcmQgY29udGVudCBnb2VzIGhlcmU8L3A+XHJcbiAqIDwvcGVjYi1jYXJkLWJvZHk+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItY2FyZC1ib2R5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBlY2ItY2FyZF9fYm9keVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj4nLFxyXG4gIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FyZEJvZHlDb21wb25lbnQge31cclxuXHJcbi8qKlxyXG4gKiBDYXJkIGZvb3RlciBjb21wb25lbnQgZm9yIGFjdGlvbnMgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItY2FyZC1mb290ZXI+XHJcbiAqICAgPGJ1dHRvbj5BY3Rpb248L2J1dHRvbj5cclxuICogPC9wZWNiLWNhcmQtZm9vdGVyPlxyXG4gKiBgYGBcclxuICpcclxuICogQHB1YmxpY0FwaVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwZWNiLWNhcmQtZm9vdGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBlY2ItY2FyZF9fZm9vdGVyXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PicsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkRm9vdGVyQ29tcG9uZW50IHt9XHJcbiIsIjxkaXZcclxuICBbaWRdPVwiaWRcIlxyXG4gIFtjbGFzc109XCJjYXJkQ2xhc3Nlcy5qb2luKCcgJylcIlxyXG4gIFthdHRyLnJvbGVdPVwicm9sZUF0dHJpYnV0ZVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXHJcbiAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnlcIlxyXG4+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuIl19
@@ -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 checkbox 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-checkbox
14
+ * label="Accept terms"
15
+ * description="I agree to the terms and conditions"
16
+ * [(ngModel)]="accepted"
17
+ * ></pecb-checkbox>
18
+ * ```
19
+ *
20
+ * @publicApi
21
+ */
22
+ export class CheckboxComponent {
23
+ constructor(cdr) {
24
+ this.cdr = cdr;
25
+ /**
26
+ * Unique ID for the checkbox element
27
+ */
28
+ this.id = generateUniqueId('checkbox');
29
+ /**
30
+ * Position of the label relative to the checkbox control.
31
+ * 'right' (default): [checkbox] Title Description
32
+ * 'left': Title Description [checkbox]
33
+ */
34
+ this.labelPosition = 'right';
35
+ /**
36
+ * Whether the checkbox is disabled
37
+ */
38
+ this.disabled = false;
39
+ /**
40
+ * Event emitted when checked state changes
41
+ */
42
+ this.checkedChange = 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 checkbox wrapper
51
+ */
52
+ get wrapperClasses() {
53
+ return [
54
+ 'pecb-checkbox',
55
+ this.disabled ? 'pecb-checkbox--disabled' : '',
56
+ this.checked ? 'pecb-checkbox--checked' : '',
57
+ this.labelPosition === 'left' ? 'pecb-checkbox--label-left' : ''
58
+ ].filter(Boolean);
59
+ }
60
+ /**
61
+ * Handle checkbox change
62
+ */
63
+ onCheckboxChange(event) {
64
+ if (this.disabled)
65
+ return;
66
+ const checked = event.target.checked;
67
+ this.checked = checked;
68
+ this.onChange(this.checked);
69
+ this.checkedChange.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: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CheckboxComponent, isStandalone: true, selector: "pecb-checkbox", inputs: { id: "id", name: "name", label: "label", description: "description", labelPosition: "labelPosition", disabled: "disabled" }, outputs: { checkedChange: "checkedChange" }, providers: [
95
+ {
96
+ provide: NG_VALUE_ACCESSOR,
97
+ useExisting: forwardRef(() => CheckboxComponent),
98
+ multi: true
99
+ }
100
+ ], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-checkbox__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n class=\"pecb-checkbox__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 (change)=\"onCheckboxChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-checkbox__control\">\r\n <svg class=\"pecb-checkbox__icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-checkbox{position:relative;display:inline-block}.pecb-checkbox__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-checkbox__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-checkbox__control{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-top:2px;border:2px solid #c2c2c2;border-radius:4px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-checkbox__icon{color:#fff;opacity:0;transform:scale(0);transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-checkbox__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-checkbox__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-checkbox__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-checkbox:not(.pecb-checkbox--disabled) .pecb-checkbox__label:hover .pecb-checkbox__control{border-color:#212427}.pecb-checkbox__input:focus-visible+.pecb-checkbox__control{outline:2px solid #212427;outline-offset:2px}.pecb-checkbox--checked .pecb-checkbox__control{border-color:#212427;background-color:#212427}.pecb-checkbox--checked .pecb-checkbox__icon{opacity:1;transform:scale(1)}.pecb-checkbox--disabled .pecb-checkbox__label{cursor:not-allowed}.pecb-checkbox--disabled .pecb-checkbox__control{border-color:#ececec;background-color:#f4f4f4}.pecb-checkbox--disabled.pecb-checkbox--checked .pecb-checkbox__control{background-color:#c2c2c2;border-color:#c2c2c2}.pecb-checkbox--disabled .pecb-checkbox__text{color:#c2c2c2}.pecb-checkbox--disabled .pecb-checkbox__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: CheckboxComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'pecb-checkbox', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
105
+ {
106
+ provide: NG_VALUE_ACCESSOR,
107
+ useExisting: forwardRef(() => CheckboxComponent),
108
+ multi: true
109
+ }
110
+ ], template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-checkbox__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n class=\"pecb-checkbox__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 (change)=\"onCheckboxChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-checkbox__control\">\r\n <svg class=\"pecb-checkbox__icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-checkbox{position:relative;display:inline-block}.pecb-checkbox__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-checkbox__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-checkbox__control{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-top:2px;border:2px solid #c2c2c2;border-radius:4px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-checkbox__icon{color:#fff;opacity:0;transform:scale(0);transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-checkbox__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-checkbox__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-checkbox__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-checkbox:not(.pecb-checkbox--disabled) .pecb-checkbox__label:hover .pecb-checkbox__control{border-color:#212427}.pecb-checkbox__input:focus-visible+.pecb-checkbox__control{outline:2px solid #212427;outline-offset:2px}.pecb-checkbox--checked .pecb-checkbox__control{border-color:#212427;background-color:#212427}.pecb-checkbox--checked .pecb-checkbox__icon{opacity:1;transform:scale(1)}.pecb-checkbox--disabled .pecb-checkbox__label{cursor:not-allowed}.pecb-checkbox--disabled .pecb-checkbox__control{border-color:#ececec;background-color:#f4f4f4}.pecb-checkbox--disabled.pecb-checkbox--checked .pecb-checkbox__control{background-color:#c2c2c2;border-color:#c2c2c2}.pecb-checkbox--disabled .pecb-checkbox__text{color:#c2c2c2}.pecb-checkbox--disabled .pecb-checkbox__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
+ }], checkedChange: [{
124
+ type: Output
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsVUFBVSxFQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUloRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQWdCSCxNQUFNLE9BQU8saUJBQWlCO0lBNkM1QixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVDMUM7O1dBRUc7UUFDTSxPQUFFLEdBQVcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFpQm5EOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUEwQixPQUFPLENBQUM7UUFFeEQ7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXRELGlCQUFpQjtRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLHVCQUF1QjtRQUNmLGFBQVEsR0FBNkIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlDLGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFSSxDQUFDO0lBRTlDOztPQUVHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU87WUFDTCxlQUFlO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2pFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQVk7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFMUIsTUFBTSxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBNEI7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0FoR1UsaUJBQWlCO21HQUFqQixpQkFBaUIsK09BUmpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQzNDSCx3K0NBNkJBLHVpRURJWSxZQUFZOzs0RkFZWCxpQkFBaUI7a0JBZjdCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtzRkFNUSxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBmb3J3YXJkUmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ2hlY2tib3hMYWJlbFBvc2l0aW9uID0gJ3JpZ2h0JyB8ICdsZWZ0JztcclxuXHJcbi8qKlxyXG4gKiBBIHByb2Zlc3Npb25hbCBjaGVja2JveCBjb21wb25lbnQgd2l0aCBsYWJlbCBhbmQgZGVzY3JpcHRpb24gc3VwcG9ydC5cclxuICogRnVsbHkgYWNjZXNzaWJsZSB3aXRoIFdDQUcgMi4xIEFBIGNvbXBsaWFuY2UgYW5kIHJlYWN0aXZlIGZvcm1zIHN1cHBvcnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItY2hlY2tib3hcclxuICogICBsYWJlbD1cIkFjY2VwdCB0ZXJtc1wiXHJcbiAqICAgZGVzY3JpcHRpb249XCJJIGFncmVlIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9uc1wiXHJcbiAqICAgWyhuZ01vZGVsKV09XCJhY2NlcHRlZFwiXHJcbiAqID48L3BlY2ItY2hlY2tib3g+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItY2hlY2tib3gnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIC8qKlxyXG4gICAqIFVuaXF1ZSBJRCBmb3IgdGhlIGNoZWNrYm94IGVsZW1lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gZ2VuZXJhdGVVbmlxdWVJZCgnY2hlY2tib3gnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBhdHRyaWJ1dGUgZm9yIHRoZSBjaGVja2JveFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIExhYmVsIHRleHQgdG8gZGlzcGxheVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBEZXNjcmlwdGlvbiB0ZXh0IHRvIGRpc3BsYXkgYmVsb3cgbGFiZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogUG9zaXRpb24gb2YgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSBjaGVja2JveCBjb250cm9sLlxyXG4gICAqICdyaWdodCcgKGRlZmF1bHQpOiBbY2hlY2tib3hdIFRpdGxlIERlc2NyaXB0aW9uXHJcbiAgICogJ2xlZnQnOiBUaXRsZSBEZXNjcmlwdGlvbiBbY2hlY2tib3hdXHJcbiAgICovXHJcbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogQ2hlY2tib3hMYWJlbFBvc2l0aW9uID0gJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggaXMgZGlzYWJsZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gY2hlY2tlZCBzdGF0ZSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNoZWNrZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIC8vIEludGVybmFsIHN0YXRlXHJcbiAgY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IENTUyBjbGFzc2VzIGZvciB0aGUgY2hlY2tib3ggd3JhcHBlclxyXG4gICAqL1xyXG4gIGdldCB3cmFwcGVyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncGVjYi1jaGVja2JveCcsXHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPyAncGVjYi1jaGVja2JveC0tZGlzYWJsZWQnIDogJycsXHJcbiAgICAgIHRoaXMuY2hlY2tlZCA/ICdwZWNiLWNoZWNrYm94LS1jaGVja2VkJyA6ICcnLFxyXG4gICAgICB0aGlzLmxhYmVsUG9zaXRpb24gPT09ICdsZWZ0JyA/ICdwZWNiLWNoZWNrYm94LS1sYWJlbC1sZWZ0JyA6ICcnXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBjaGVja2JveCBjaGFuZ2VcclxuICAgKi9cclxuICBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGVja2VkKTtcclxuICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KHRoaXMuY2hlY2tlZCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBibHVyIGV2ZW50XHJcbiAgICovXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5jaGVja2VkID0gISF2YWx1ZTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbY2xhc3NdPVwid3JhcHBlckNsYXNzZXMuam9pbignICcpXCI+XHJcbiAgPGxhYmVsIFthdHRyLmZvcl09XCJpZFwiIGNsYXNzPVwicGVjYi1jaGVja2JveF9fbGFiZWxcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICBjbGFzcz1cInBlY2ItY2hlY2tib3hfX2lucHV0XCJcclxuICAgICAgW25hbWVdPVwibmFtZVwiXHJcbiAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsXCJcclxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJkZXNjcmlwdGlvbiA/IGlkICsgJy1kZXNjcmlwdGlvbicgOiBudWxsXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAvPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJsYWJlbFBvc2l0aW9uID09PSAnbGVmdCcgJiYgKGxhYmVsIHx8IGRlc2NyaXB0aW9uKVwiIGNsYXNzPVwicGVjYi1jaGVja2JveF9fY29udGVudFwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJwZWNiLWNoZWNrYm94X190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi1jaGVja2JveF9fZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGVjYi1jaGVja2JveF9fY29udHJvbFwiPlxyXG4gICAgICA8c3ZnIGNsYXNzPVwicGVjYi1jaGVja2JveF9faWNvblwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMTAgM0w0LjUgOC41TDIgNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJsYWJlbFBvc2l0aW9uID09PSAncmlnaHQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItY2hlY2tib3hfX2NvbnRlbnRcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwicGVjYi1jaGVja2JveF9fdGV4dFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImRlc2NyaXB0aW9uXCIgW2lkXT1cImlkICsgJy1kZXNjcmlwdGlvbidcIiBjbGFzcz1cInBlY2ItY2hlY2tib3hfX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9sYWJlbD5cclxuPC9kaXY+XHJcbiJdfQ==