@tolle_/tolle-ui 0.0.30-beta → 0.0.31-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/accordion-item.component.mjs +60 -17
- package/esm2022/lib/accordion.component.mjs +17 -12
- package/esm2022/lib/alert.component.mjs +36 -24
- package/esm2022/lib/sidebar.component.mjs +433 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/tolle-ui.mjs +539 -50
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/accordion.component.d.ts +1 -0
- package/lib/alert.component.d.ts +2 -3
- package/lib/button.component.d.ts +1 -1
- package/lib/sidebar.component.d.ts +37 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
3
4
|
import { cn } from './utils/cn';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
6
|
export class AccordionItemComponent {
|
|
7
7
|
title = '';
|
|
8
8
|
class = '';
|
|
@@ -25,21 +25,42 @@ export class AccordionItemComponent {
|
|
|
25
25
|
<button
|
|
26
26
|
type="button"
|
|
27
27
|
(click)="toggle()"
|
|
28
|
-
|
|
28
|
+
[attr.aria-expanded]="isOpen"
|
|
29
29
|
[attr.data-state]="isOpen ? 'open' : 'closed'"
|
|
30
|
+
class="flex flex-1 items-center justify-between py-4 font-medium transition-all group [&[data-state=open]>i]:rotate-180"
|
|
30
31
|
>
|
|
31
|
-
<span class="text-left">{{ title }}</span>
|
|
32
|
-
<i class="ri-arrow-down-s-line text-muted-foreground transition-transform"></i>
|
|
32
|
+
<span class="text-left group-hover:underline">{{ title }}</span>
|
|
33
|
+
<i class="ri-arrow-down-s-line text-muted-foreground text-lg transition-transform duration-200 hover:no-underline"></i>
|
|
33
34
|
</button>
|
|
34
35
|
|
|
35
36
|
<div
|
|
36
|
-
|
|
37
|
-
class="
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
[@expandCollapse]="isOpen ? 'expanded' : 'collapsed'"
|
|
38
|
+
class="overflow-hidden">
|
|
39
|
+
<div class="pb-4 pt-0 text-sm text-muted-foreground">
|
|
40
|
+
<ng-content></ng-content>
|
|
41
|
+
</div>
|
|
40
42
|
</div>
|
|
41
43
|
</div>
|
|
42
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }
|
|
44
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], animations: [
|
|
45
|
+
trigger('expandCollapse', [
|
|
46
|
+
state('collapsed', style({
|
|
47
|
+
height: '0px',
|
|
48
|
+
opacity: '0',
|
|
49
|
+
overflow: 'hidden',
|
|
50
|
+
visibility: 'hidden'
|
|
51
|
+
})),
|
|
52
|
+
state('expanded', style({
|
|
53
|
+
height: '*', // "Star" means actual content height
|
|
54
|
+
opacity: '1',
|
|
55
|
+
overflow: 'hidden',
|
|
56
|
+
visibility: 'visible'
|
|
57
|
+
})),
|
|
58
|
+
// Use cubic-bezier to match Tailwind/shadcn-ui default ease
|
|
59
|
+
transition('collapsed <=> expanded', [
|
|
60
|
+
animate('300ms cubic-bezier(0.87, 0, 0.13, 1)')
|
|
61
|
+
])
|
|
62
|
+
])
|
|
63
|
+
] });
|
|
43
64
|
}
|
|
44
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionItemComponent, decorators: [{
|
|
45
66
|
type: Component,
|
|
@@ -47,23 +68,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
47
68
|
selector: 'tolle-accordion-item',
|
|
48
69
|
standalone: true,
|
|
49
70
|
imports: [CommonModule],
|
|
71
|
+
animations: [
|
|
72
|
+
trigger('expandCollapse', [
|
|
73
|
+
state('collapsed', style({
|
|
74
|
+
height: '0px',
|
|
75
|
+
opacity: '0',
|
|
76
|
+
overflow: 'hidden',
|
|
77
|
+
visibility: 'hidden'
|
|
78
|
+
})),
|
|
79
|
+
state('expanded', style({
|
|
80
|
+
height: '*', // "Star" means actual content height
|
|
81
|
+
opacity: '1',
|
|
82
|
+
overflow: 'hidden',
|
|
83
|
+
visibility: 'visible'
|
|
84
|
+
})),
|
|
85
|
+
// Use cubic-bezier to match Tailwind/shadcn-ui default ease
|
|
86
|
+
transition('collapsed <=> expanded', [
|
|
87
|
+
animate('300ms cubic-bezier(0.87, 0, 0.13, 1)')
|
|
88
|
+
])
|
|
89
|
+
])
|
|
90
|
+
],
|
|
50
91
|
template: `
|
|
51
92
|
<div [class]="cn('flex flex-col border-b border-border', class)">
|
|
52
93
|
<button
|
|
53
94
|
type="button"
|
|
54
95
|
(click)="toggle()"
|
|
55
|
-
|
|
96
|
+
[attr.aria-expanded]="isOpen"
|
|
56
97
|
[attr.data-state]="isOpen ? 'open' : 'closed'"
|
|
98
|
+
class="flex flex-1 items-center justify-between py-4 font-medium transition-all group [&[data-state=open]>i]:rotate-180"
|
|
57
99
|
>
|
|
58
|
-
<span class="text-left">{{ title }}</span>
|
|
59
|
-
<i class="ri-arrow-down-s-line text-muted-foreground transition-transform"></i>
|
|
100
|
+
<span class="text-left group-hover:underline">{{ title }}</span>
|
|
101
|
+
<i class="ri-arrow-down-s-line text-muted-foreground text-lg transition-transform duration-200 hover:no-underline"></i>
|
|
60
102
|
</button>
|
|
61
103
|
|
|
62
104
|
<div
|
|
63
|
-
|
|
64
|
-
class="
|
|
65
|
-
|
|
66
|
-
|
|
105
|
+
[@expandCollapse]="isOpen ? 'expanded' : 'collapsed'"
|
|
106
|
+
class="overflow-hidden">
|
|
107
|
+
<div class="pb-4 pt-0 text-sm text-muted-foreground">
|
|
108
|
+
<ng-content></ng-content>
|
|
109
|
+
</div>
|
|
67
110
|
</div>
|
|
68
111
|
</div>
|
|
69
112
|
`
|
|
@@ -75,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
75
118
|
}], id: [{
|
|
76
119
|
type: Input
|
|
77
120
|
}] } });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFpRGhDLE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLEVBQUUsQ0FBbUI7SUFFOUIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmLHFEQUFxRDtJQUNyRCxRQUFRLENBQWlDO0lBRXpDLE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRWtCLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBbEJoQixzQkFBc0I7NEZBQXRCLHNCQUFzQixzSUF2QnZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQsMkRBMUNTLFlBQVksaUJBQ1Y7WUFDVixPQUFPLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO29CQUN2QixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsR0FBRztvQkFDWixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsVUFBVSxFQUFFLFFBQVE7aUJBQ3JCLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztvQkFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxxQ0FBcUM7b0JBQ2xELE9BQU8sRUFBRSxHQUFHO29CQUNaLFFBQVEsRUFBRSxRQUFRO29CQUNsQixVQUFVLEVBQUUsU0FBUztpQkFDdEIsQ0FBQyxDQUFDO2dCQUNILDREQUE0RDtnQkFDNUQsVUFBVSxDQUFDLHdCQUF3QixFQUFFO29CQUNuQyxPQUFPLENBQUMsc0NBQXNDLENBQUM7aUJBQ2hELENBQUM7YUFDSCxDQUFDO1NBQ0g7OzRGQXdCVSxzQkFBc0I7a0JBL0NsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFVBQVUsRUFBRTt3QkFDVixPQUFPLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ3hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2dDQUN2QixNQUFNLEVBQUUsS0FBSztnQ0FDYixPQUFPLEVBQUUsR0FBRztnQ0FDWixRQUFRLEVBQUUsUUFBUTtnQ0FDbEIsVUFBVSxFQUFFLFFBQVE7NkJBQ3JCLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztnQ0FDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxxQ0FBcUM7Z0NBQ2xELE9BQU8sRUFBRSxHQUFHO2dDQUNaLFFBQVEsRUFBRSxRQUFRO2dDQUNsQixVQUFVLEVBQUUsU0FBUzs2QkFDdEIsQ0FBQyxDQUFDOzRCQUNILDREQUE0RDs0QkFDNUQsVUFBVSxDQUFDLHdCQUF3QixFQUFFO2dDQUNuQyxPQUFPLENBQUMsc0NBQXNDLENBQUM7NkJBQ2hELENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVDtpQkFDRjs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWFjY29yZGlvbi1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdleHBhbmRDb2xsYXBzZScsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQnLCBzdHlsZSh7XG4gICAgICAgIGhlaWdodDogJzBweCcsXG4gICAgICAgIG9wYWNpdHk6ICcwJyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICAgICAgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoe1xuICAgICAgICBoZWlnaHQ6ICcqJywgLy8gXCJTdGFyXCIgbWVhbnMgYWN0dWFsIGNvbnRlbnQgaGVpZ2h0XG4gICAgICAgIG9wYWNpdHk6ICcxJyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZSdcbiAgICAgIH0pKSxcbiAgICAgIC8vIFVzZSBjdWJpYy1iZXppZXIgdG8gbWF0Y2ggVGFpbHdpbmQvc2hhZGNuLXVpIGRlZmF1bHQgZWFzZVxuICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkIDw9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpJylcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjbignZmxleCBmbGV4LWNvbCBib3JkZXItYiBib3JkZXItYm9yZGVyJywgY2xhc3MpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgIFthdHRyLmRhdGEtc3RhdGVdPVwiaXNPcGVuID8gJ29wZW4nIDogJ2Nsb3NlZCdcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktNCBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBncm91cCBbJltkYXRhLXN0YXRlPW9wZW5dPmldOnJvdGF0ZS0xODBcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGVmdCBncm91cC1ob3Zlcjp1bmRlcmxpbmVcIj57eyB0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJyaS1hcnJvdy1kb3duLXMtbGluZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1sZyB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAgaG92ZXI6bm8tdW5kZXJsaW5lXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgW0BleHBhbmRDb2xsYXBzZV09XCJpc09wZW4gPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxuICAgICAgICBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGItNCBwdC0wIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkl0ZW1Db21wb25lbnQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaWQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgLy8gVGhpcyB3aWxsIGJlIHNldCBieSB0aGUgcGFyZW50IEFjY29yZGlvbiBjb21wb25lbnRcbiAgb25Ub2dnbGU/OiAoaWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZDtcblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMub25Ub2dnbGUpIHtcbiAgICAgIHRoaXMub25Ub2dnbGUodGhpcy5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbiA9IGNuO1xufVxuIl19
|
|
@@ -8,31 +8,36 @@ export class AccordionComponent {
|
|
|
8
8
|
class = '';
|
|
9
9
|
items;
|
|
10
10
|
ngAfterContentInit() {
|
|
11
|
+
// 1. Assign IDs and Listeners on load
|
|
12
|
+
this.initItems();
|
|
13
|
+
// 2. Re-init if items change dynamically (optional but good for robustness)
|
|
14
|
+
this.items.changes.subscribe(() => this.initItems());
|
|
15
|
+
}
|
|
16
|
+
initItems() {
|
|
11
17
|
this.items.forEach((item, index) => {
|
|
12
|
-
//
|
|
18
|
+
// Auto-assign ID if missing
|
|
13
19
|
if (item.id === undefined)
|
|
14
|
-
item.id = index
|
|
15
|
-
//
|
|
20
|
+
item.id = `accordion-item-${index}`;
|
|
21
|
+
// Set up the toggle bridge
|
|
16
22
|
item.onToggle = (id) => this.handleToggle(id);
|
|
17
23
|
});
|
|
18
24
|
}
|
|
19
25
|
handleToggle(selectedId) {
|
|
20
26
|
this.items.forEach(item => {
|
|
21
27
|
if (item.id === selectedId) {
|
|
28
|
+
// Toggle the clicked item
|
|
22
29
|
item.isOpen = !item.isOpen;
|
|
23
30
|
}
|
|
24
|
-
else {
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
item.isOpen = false;
|
|
28
|
-
}
|
|
31
|
+
else if (this.type === 'single') {
|
|
32
|
+
// Close others if in single mode
|
|
33
|
+
item.isOpen = false;
|
|
29
34
|
}
|
|
30
35
|
});
|
|
31
36
|
}
|
|
32
37
|
cn = cn;
|
|
33
38
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
34
39
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AccordionComponent, isStandalone: true, selector: "tolle-accordion", inputs: { type: "type", class: "class" }, queries: [{ propertyName: "items", predicate: AccordionItemComponent }], ngImport: i0, template: `
|
|
35
|
-
<div [class]="cn('w-full
|
|
40
|
+
<div [class]="cn('w-full', class)">
|
|
36
41
|
<ng-content></ng-content>
|
|
37
42
|
</div>
|
|
38
43
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
@@ -42,9 +47,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
42
47
|
args: [{
|
|
43
48
|
selector: 'tolle-accordion',
|
|
44
49
|
standalone: true,
|
|
45
|
-
imports: [CommonModule],
|
|
50
|
+
imports: [CommonModule], // No AccordionItemComponent import needed here if projected via ng-content
|
|
46
51
|
template: `
|
|
47
|
-
<div [class]="cn('w-full
|
|
52
|
+
<div [class]="cn('w-full', class)">
|
|
48
53
|
<ng-content></ng-content>
|
|
49
54
|
</div>
|
|
50
55
|
`
|
|
@@ -57,4 +62,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
57
62
|
type: ContentChildren,
|
|
58
63
|
args: [AccordionItemComponent]
|
|
59
64
|
}] } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvYWNjb3JkaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQVloQyxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLElBQUksR0FBMEIsUUFBUSxDQUFDO0lBQ3ZDLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFYSxLQUFLLENBQXFDO0lBRW5GLGtCQUFrQjtRQUNoQixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWpCLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqQyw0QkFBNEI7WUFDNUIsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7Z0JBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxrQkFBa0IsS0FBSyxFQUFFLENBQUM7WUFFL0QsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLFVBQTJCO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsaUNBQWlDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWtCLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBcENoQixrQkFBa0I7NEZBQWxCLGtCQUFrQiwySUFJWixzQkFBc0IsNkJBVjdCOzs7O0dBSVQsMkRBTFMsWUFBWTs7NEZBT1gsa0JBQWtCO2tCQVY5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSwyRUFBMkU7b0JBQ3BHLFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGOzhCQUVVLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRW1DLEtBQUs7c0JBQTdDLGVBQWU7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY2NvcmRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtYWNjb3JkaW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sIC8vIE5vIEFjY29yZGlvbkl0ZW1Db21wb25lbnQgaW1wb3J0IG5lZWRlZCBoZXJlIGlmIHByb2plY3RlZCB2aWEgbmctY29udGVudFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCd3LWZ1bGwnLCBjbGFzcylcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KCkgdHlwZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcblxuICBAQ29udGVudENoaWxkcmVuKEFjY29yZGlvbkl0ZW1Db21wb25lbnQpIGl0ZW1zITogUXVlcnlMaXN0PEFjY29yZGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyAxLiBBc3NpZ24gSURzIGFuZCBMaXN0ZW5lcnMgb24gbG9hZFxuICAgIHRoaXMuaW5pdEl0ZW1zKCk7XG5cbiAgICAvLyAyLiBSZS1pbml0IGlmIGl0ZW1zIGNoYW5nZSBkeW5hbWljYWxseSAob3B0aW9uYWwgYnV0IGdvb2QgZm9yIHJvYnVzdG5lc3MpXG4gICAgdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluaXRJdGVtcygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEl0ZW1zKCkge1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIEF1dG8tYXNzaWduIElEIGlmIG1pc3NpbmdcbiAgICAgIGlmIChpdGVtLmlkID09PSB1bmRlZmluZWQpIGl0ZW0uaWQgPSBgYWNjb3JkaW9uLWl0ZW0tJHtpbmRleH1gO1xuXG4gICAgICAvLyBTZXQgdXAgdGhlIHRvZ2dsZSBicmlkZ2VcbiAgICAgIGl0ZW0ub25Ub2dnbGUgPSAoaWQpID0+IHRoaXMuaGFuZGxlVG9nZ2xlKGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVG9nZ2xlKHNlbGVjdGVkSWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLmlkID09PSBzZWxlY3RlZElkKSB7XG4gICAgICAgIC8vIFRvZ2dsZSB0aGUgY2xpY2tlZCBpdGVtXG4gICAgICAgIGl0ZW0uaXNPcGVuID0gIWl0ZW0uaXNPcGVuO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIC8vIENsb3NlIG90aGVycyBpZiBpbiBzaW5nbGUgbW9kZVxuICAgICAgICBpdGVtLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNuID0gY247XG59XG4iXX0=
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { trigger, transition, style, animate } from '@angular/animations';
|
|
3
4
|
import { cva } from 'class-variance-authority';
|
|
4
5
|
import { cn } from './utils/cn';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/common";
|
|
7
|
-
const alertVariants = cva("relative w-full rounded-lg border p-4
|
|
8
|
+
const alertVariants = cva("relative w-full rounded-lg border p-4 [&>i+div]:translate-y-[-3px] [&>i]:absolute [&>i]:left-4 [&>i]:top-4 [&>i]:text-foreground [&>i~div]:pl-7", {
|
|
8
9
|
variants: {
|
|
9
10
|
variant: {
|
|
10
11
|
default: "bg-background text-foreground",
|
|
11
|
-
destructive: "border-
|
|
12
|
-
success: "border-emerald-500/50 text-emerald-700 dark:
|
|
13
|
-
warning: "border-amber-500/50 text-amber-700 dark:
|
|
12
|
+
destructive: "border-red-500/50 text-red-500 dark:border-red-500 [&>i]:text-red-500",
|
|
13
|
+
success: "border-emerald-500/50 text-emerald-700 dark:border-emerald-500 [&>i]:text-emerald-600 dark:text-emerald-400",
|
|
14
|
+
warning: "border-amber-500/50 text-amber-700 dark:border-amber-500 [&>i]:text-amber-600 dark:text-amber-400",
|
|
15
|
+
info: "border-blue-500/50 text-blue-700 dark:border-blue-500 [&>i]:text-blue-600 dark:text-blue-400",
|
|
14
16
|
},
|
|
15
17
|
},
|
|
16
18
|
defaultVariants: {
|
|
@@ -24,24 +26,18 @@ export class AlertComponent {
|
|
|
24
26
|
dismissible = false;
|
|
25
27
|
onClose = new EventEmitter();
|
|
26
28
|
dismissed = false;
|
|
27
|
-
isDismissing = false;
|
|
28
29
|
alertVariants = alertVariants;
|
|
29
30
|
cn = cn;
|
|
30
31
|
dismiss() {
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
setTimeout(() => {
|
|
34
|
-
this.dismissed = true;
|
|
35
|
-
this.onClose.emit();
|
|
36
|
-
}, 300);
|
|
32
|
+
this.dismissed = true;
|
|
33
|
+
this.onClose.emit();
|
|
37
34
|
}
|
|
38
35
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
36
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AlertComponent, isStandalone: true, selector: "tolle-alert", inputs: { variant: "variant", title: "title", class: "class", dismissible: "dismissible" }, outputs: { onClose: "onClose" }, ngImport: i0, template: `
|
|
40
37
|
<div
|
|
41
38
|
*ngIf="!dismissed"
|
|
39
|
+
@fade
|
|
42
40
|
[class]="cn(alertVariants({ variant }), class)"
|
|
43
|
-
[class.opacity-0]="isDismissing"
|
|
44
|
-
[class.scale-95]="isDismissing"
|
|
45
41
|
role="alert"
|
|
46
42
|
>
|
|
47
43
|
<ng-content select="[icon]"></ng-content>
|
|
@@ -49,22 +45,30 @@ export class AlertComponent {
|
|
|
49
45
|
<button
|
|
50
46
|
*ngIf="dismissible"
|
|
51
47
|
(click)="dismiss()"
|
|
52
|
-
class="absolute right-2 top-2 rounded-md p-1
|
|
53
|
-
|
|
48
|
+
class="absolute right-2 top-2 rounded-md p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
|
|
49
|
+
type="button"
|
|
54
50
|
>
|
|
55
51
|
<i class="ri-close-line text-lg"></i>
|
|
52
|
+
<span class="sr-only">Close</span>
|
|
56
53
|
</button>
|
|
57
54
|
|
|
58
55
|
<div>
|
|
59
56
|
<h5 *ngIf="title" class="mb-1 font-medium leading-none tracking-tight">
|
|
60
57
|
{{ title }}
|
|
61
58
|
</h5>
|
|
62
|
-
<div class="text-sm [&_p]:leading-relaxed">
|
|
59
|
+
<div class="text-sm [&_p]:leading-relaxed opacity-90">
|
|
63
60
|
<ng-content></ng-content>
|
|
64
61
|
</div>
|
|
65
62
|
</div>
|
|
66
63
|
</div>
|
|
67
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }]
|
|
64
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
|
|
65
|
+
trigger('fade', [
|
|
66
|
+
transition(':leave', [
|
|
67
|
+
style({ opacity: 1, transform: 'scale(1)' }),
|
|
68
|
+
animate('300ms ease-in-out', style({ opacity: 0, transform: 'scale(0.95)', height: 0, margin: 0, padding: 0 }))
|
|
69
|
+
])
|
|
70
|
+
])
|
|
71
|
+
] });
|
|
68
72
|
}
|
|
69
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, decorators: [{
|
|
70
74
|
type: Component,
|
|
@@ -72,12 +76,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
72
76
|
selector: 'tolle-alert',
|
|
73
77
|
standalone: true,
|
|
74
78
|
imports: [CommonModule],
|
|
79
|
+
animations: [
|
|
80
|
+
trigger('fade', [
|
|
81
|
+
transition(':leave', [
|
|
82
|
+
style({ opacity: 1, transform: 'scale(1)' }),
|
|
83
|
+
animate('300ms ease-in-out', style({ opacity: 0, transform: 'scale(0.95)', height: 0, margin: 0, padding: 0 }))
|
|
84
|
+
])
|
|
85
|
+
])
|
|
86
|
+
],
|
|
75
87
|
template: `
|
|
76
88
|
<div
|
|
77
89
|
*ngIf="!dismissed"
|
|
90
|
+
@fade
|
|
78
91
|
[class]="cn(alertVariants({ variant }), class)"
|
|
79
|
-
[class.opacity-0]="isDismissing"
|
|
80
|
-
[class.scale-95]="isDismissing"
|
|
81
92
|
role="alert"
|
|
82
93
|
>
|
|
83
94
|
<ng-content select="[icon]"></ng-content>
|
|
@@ -85,22 +96,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
85
96
|
<button
|
|
86
97
|
*ngIf="dismissible"
|
|
87
98
|
(click)="dismiss()"
|
|
88
|
-
class="absolute right-2 top-2 rounded-md p-1
|
|
89
|
-
|
|
99
|
+
class="absolute right-2 top-2 rounded-md p-1 opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
|
|
100
|
+
type="button"
|
|
90
101
|
>
|
|
91
102
|
<i class="ri-close-line text-lg"></i>
|
|
103
|
+
<span class="sr-only">Close</span>
|
|
92
104
|
</button>
|
|
93
105
|
|
|
94
106
|
<div>
|
|
95
107
|
<h5 *ngIf="title" class="mb-1 font-medium leading-none tracking-tight">
|
|
96
108
|
{{ title }}
|
|
97
109
|
</h5>
|
|
98
|
-
<div class="text-sm [&_p]:leading-relaxed">
|
|
110
|
+
<div class="text-sm [&_p]:leading-relaxed opacity-90">
|
|
99
111
|
<ng-content></ng-content>
|
|
100
112
|
</div>
|
|
101
113
|
</div>
|
|
102
114
|
</div>
|
|
103
|
-
|
|
115
|
+
`
|
|
104
116
|
}]
|
|
105
117
|
}], propDecorators: { variant: [{
|
|
106
118
|
type: Input
|
|
@@ -113,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
113
125
|
}], onClose: [{
|
|
114
126
|
type: Output
|
|
115
127
|
}] } });
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9hbGVydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxHQUFHLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBRWhDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FDdkIsaUpBQWlKLEVBQ2pKO0lBQ0UsUUFBUSxFQUFFO1FBQ1IsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxXQUFXLEVBQ1QsdUVBQXVFO1lBQ3pFLE9BQU8sRUFDTCw2R0FBNkc7WUFDL0csT0FBTyxFQUNMLG1HQUFtRztZQUNyRyxJQUFJLEVBQ0YsOEZBQThGO1NBQ2pHO0tBQ0Y7SUFDRCxlQUFlLEVBQUU7UUFDZixPQUFPLEVBQUUsU0FBUztLQUNuQjtDQUNGLENBQ0YsQ0FBQztBQThDRixNQUFNLE9BQU8sY0FBYztJQUNoQixPQUFPLEdBQTZCLFNBQVMsQ0FBQztJQUM5QyxLQUFLLENBQVU7SUFDZixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFNUIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFN0MsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNSLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDOUIsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUVsQixPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQWZVLGNBQWM7NEZBQWQsY0FBYyxvTUE5QmY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQsMkRBckNTLFlBQVkscUhBQ1Y7WUFDVixPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNkLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO29CQUM1QyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDaEgsQ0FBQzthQUNILENBQUM7U0FDSDs7NEZBK0JVLGNBQWM7a0JBMUMxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixVQUFVLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDZCxVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztnQ0FDNUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NkJBQ2hILENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7aUJBQ0Y7OEJBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0cmlnZ2VyLCB0cmFuc2l0aW9uLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5jb25zdCBhbGVydFZhcmlhbnRzID0gY3ZhKFxuICBcInJlbGF0aXZlIHctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBwLTQgWyY+aStkaXZdOnRyYW5zbGF0ZS15LVstM3B4XSBbJj5pXTphYnNvbHV0ZSBbJj5pXTpsZWZ0LTQgWyY+aV06dG9wLTQgWyY+aV06dGV4dC1mb3JlZ3JvdW5kIFsmPml+ZGl2XTpwbC03XCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OiBcImJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kXCIsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgIFwiYm9yZGVyLXJlZC01MDAvNTAgdGV4dC1yZWQtNTAwIGRhcms6Ym9yZGVyLXJlZC01MDAgWyY+aV06dGV4dC1yZWQtNTAwXCIsXG4gICAgICAgIHN1Y2Nlc3M6XG4gICAgICAgICAgXCJib3JkZXItZW1lcmFsZC01MDAvNTAgdGV4dC1lbWVyYWxkLTcwMCBkYXJrOmJvcmRlci1lbWVyYWxkLTUwMCBbJj5pXTp0ZXh0LWVtZXJhbGQtNjAwIGRhcms6dGV4dC1lbWVyYWxkLTQwMFwiLFxuICAgICAgICB3YXJuaW5nOlxuICAgICAgICAgIFwiYm9yZGVyLWFtYmVyLTUwMC81MCB0ZXh0LWFtYmVyLTcwMCBkYXJrOmJvcmRlci1hbWJlci01MDAgWyY+aV06dGV4dC1hbWJlci02MDAgZGFyazp0ZXh0LWFtYmVyLTQwMFwiLFxuICAgICAgICBpbmZvOlxuICAgICAgICAgIFwiYm9yZGVyLWJsdWUtNTAwLzUwIHRleHQtYmx1ZS03MDAgZGFyazpib3JkZXItYmx1ZS01MDAgWyY+aV06dGV4dC1ibHVlLTYwMCBkYXJrOnRleHQtYmx1ZS00MDBcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6IFwiZGVmYXVsdFwiLFxuICAgIH0sXG4gIH1cbik7XG5cbnR5cGUgQWxlcnRWYXJpYW50cyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgYWxlcnRWYXJpYW50cz47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWFsZXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdmYWRlJywgW1xuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAuOTUpJywgaGVpZ2h0OiAwLCBtYXJnaW46IDAsIHBhZGRpbmc6IDAgfSkpXG4gICAgICBdKVxuICAgIF0pXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhZGlzbWlzc2VkXCJcbiAgICAgIEBmYWRlXG4gICAgICBbY2xhc3NdPVwiY24oYWxlcnRWYXJpYW50cyh7IHZhcmlhbnQgfSksIGNsYXNzKVwiXG4gICAgICByb2xlPVwiYWxlcnRcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpY29uXVwiPjwvbmctY29udGVudD5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImRpc21pc3NpYmxlXCJcbiAgICAgICAgKGNsaWNrKT1cImRpc21pc3MoKVwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMiB0b3AtMiByb3VuZGVkLW1kIHAtMSBvcGFjaXR5LTcwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTJcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJyaS1jbG9zZS1saW5lIHRleHQtbGdcIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxoNSAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJtYi0xIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgIHt7IHRpdGxlIH19XG4gICAgICAgIDwvaDU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIFsmX3BdOmxlYWRpbmctcmVsYXhlZCBvcGFjaXR5LTkwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgdmFyaWFudDogQWxlcnRWYXJpYW50c1sndmFyaWFudCddID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBkaXNtaXNzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGRpc21pc3NlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWxlcnRWYXJpYW50cyA9IGFsZXJ0VmFyaWFudHM7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIGRpc21pc3MoKSB7XG4gICAgdGhpcy5kaXNtaXNzZWQgPSB0cnVlO1xuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==
|