@underlayerdev/ui 0.0.1

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.
@@ -0,0 +1,3320 @@
1
+ import * as i1 from '@angular/cdk/accordion';
2
+ import { CdkAccordionItem, CdkAccordion } from '@angular/cdk/accordion';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, ElementRef, ChangeDetectionStrategy, Component, input, DestroyRef, contentChildren, computed, ViewEncapsulation, signal, effect, Directive, output, model, booleanAttribute, viewChild, ViewChild, contentChild, HostListener, Pipe, SecurityContext, Injectable, HostBinding } from '@angular/core';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import * as i1$1 from '@angular/common';
7
+ import { CommonModule, NgTemplateOutlet, CurrencyPipe } from '@angular/common';
8
+ import { RouterLink } from '@angular/router';
9
+ import { CdkMenuTrigger, CdkMenu, CdkMenuItem } from '@angular/cdk/menu';
10
+ import Splide from '@splidejs/splide';
11
+ import { fromEvent } from 'rxjs';
12
+ import { debounceTime } from 'rxjs/operators';
13
+ import { CdkTrapFocus } from '@angular/cdk/a11y';
14
+ import { DomSanitizer } from '@angular/platform-browser';
15
+
16
+ /**
17
+ * AccordionItemComponent is a standalone Angular component that extends CdkAccordionItem.
18
+ * It represents an item within an accordion, providing configurable expansion behavior
19
+ * and accessibility features.
20
+ */
21
+ class AccordionItemComponent {
22
+ cdkAccordionItem = inject(CdkAccordionItem);
23
+ elementRef = inject((ElementRef));
24
+ /**
25
+ * Stable ID for the content region, used for aria-controls linkage.
26
+ */
27
+ contentId = `pe-accordion-content-${Math.random().toString(36).slice(2, 11)}`;
28
+ /**
29
+ * Stable ID for the trigger button, used for aria-labelledby linkage.
30
+ */
31
+ triggerId = `pe-accordion-trigger-${Math.random().toString(36).slice(2, 11)}`;
32
+ onToggle() {
33
+ if (this.cdkAccordionItem.disabled) {
34
+ return;
35
+ }
36
+ this.cdkAccordionItem.toggle();
37
+ }
38
+ onKeydown(event) {
39
+ if (this.cdkAccordionItem.disabled) {
40
+ return;
41
+ }
42
+ if (event.key === ' ' || event.key === 'Enter') {
43
+ event.preventDefault();
44
+ this.onToggle();
45
+ return;
46
+ }
47
+ // Handle Arrow keys, Home, and End for navigation between accordion items
48
+ const accordion = this.elementRef.nativeElement.closest('.pe-accordion');
49
+ if (!accordion) {
50
+ return;
51
+ }
52
+ const triggers = Array.from(accordion.querySelectorAll('.pe-accordion__trigger:not([disabled])'));
53
+ const currentIndex = triggers.findIndex((t) => t.id === this.triggerId);
54
+ if (currentIndex === -1) {
55
+ return;
56
+ }
57
+ let targetIndex = null;
58
+ switch (event.key) {
59
+ case 'ArrowDown':
60
+ event.preventDefault();
61
+ targetIndex = currentIndex < triggers.length - 1 ? currentIndex + 1 : 0;
62
+ break;
63
+ case 'ArrowUp':
64
+ event.preventDefault();
65
+ targetIndex = currentIndex > 0 ? currentIndex - 1 : triggers.length - 1;
66
+ break;
67
+ case 'Home':
68
+ event.preventDefault();
69
+ targetIndex = 0;
70
+ break;
71
+ case 'End':
72
+ event.preventDefault();
73
+ targetIndex = triggers.length - 1;
74
+ break;
75
+ }
76
+ if (targetIndex !== null && triggers[targetIndex]) {
77
+ triggers[targetIndex].focus();
78
+ }
79
+ }
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AccordionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.2", type: AccordionItemComponent, isStandalone: true, selector: "pe-accordion-item", hostDirectives: [{ directive: i1.CdkAccordionItem, inputs: ["expanded", "expanded", "disabled", "disabled"], outputs: ["closed", "closed", "opened", "opened", "destroyed", "destroyed", "expandedChange", "expandedChange"] }], ngImport: i0, template: `
82
+ <div
83
+ class="pe-accordion__item"
84
+ [class.pe-accordion__item--expanded]="cdkAccordionItem.expanded"
85
+ [class.pe-accordion__item--disabled]="cdkAccordionItem.disabled">
86
+ <button
87
+ (click)="onToggle()"
88
+ class="pe-accordion__trigger"
89
+ [id]="triggerId"
90
+ [attr.aria-expanded]="cdkAccordionItem.expanded"
91
+ [attr.aria-controls]="contentId"
92
+ [attr.aria-disabled]="cdkAccordionItem.disabled ? 'true' : null"
93
+ [disabled]="cdkAccordionItem.disabled"
94
+ (keydown)="onKeydown($event)"
95
+ type="button">
96
+ <div class="pe-accordion__icon">
97
+ <ng-content select="[pe-accordion-icon]"></ng-content>
98
+ </div>
99
+ <div class="pe-accordion__label">
100
+ <ng-content select="[pe-accordion-label]"></ng-content>
101
+ </div>
102
+ <div class="pe-accordion__status">
103
+ <ng-content select="[pe-accordion-status]"></ng-content>
104
+ </div>
105
+ <span class="pe-accordion__indicator">
106
+ <i class="pe-icon pe-icon-size-8 pe-icon-weight-bold pe-icon-chevron_down"></i>
107
+ </span>
108
+ </button>
109
+ <div
110
+ role="region"
111
+ class="pe-accordion__content"
112
+ [id]="contentId"
113
+ [attr.aria-labelledby]="triggerId"
114
+ [attr.aria-hidden]="!cdkAccordionItem.expanded">
115
+ <ng-content select="[pe-accordion-content]"></ng-content>
116
+ </div>
117
+ </div>
118
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-accordion{color:#fff;display:flex;flex-direction:column;gap:8px}.pe-accordion__item{min-height:48px;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px}.pe-accordion__item:first-child{padding-top:0}.pe-accordion__item:last-child{border-bottom:none}.pe-accordion__item--disabled{cursor:not-allowed}.pe-accordion__item--disabled .pe-accordion__trigger{cursor:not-allowed;color:#ffffff4d;background-color:#ffffff0d;pointer-events:none}.pe-accordion__item--disabled .pe-accordion__trigger:hover,.pe-accordion__item--disabled .pe-accordion__trigger:active{background-color:#ffffff0d}.pe-accordion__item--disabled .pe-accordion__indicator{color:#ffffff4d}.pe-accordion__item:after{content:\"\";display:block;width:calc(100% - 24px);border-bottom:1px solid transparent}.pe-accordion--divider ::ng-deep .pe-accordion__item:after{border-color:#ffffff1a}.pe-accordion__trigger{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;width:100%;min-height:48px;text-align:start;display:flex;align-items:center;gap:8px;border-radius:12px;padding:0 12px}.pe-accordion__trigger:hover{background-color:#fff3}.pe-accordion__trigger:active{background-color:#ffffff1a}.pe-accordion__trigger:selected{background-color:#fff3}.pe-accordion__trigger{background-color:#fff0;color:inherit}.pe-accordion__trigger:disabled,.pe-accordion__trigger[disabled]{background-color:#fff0}.pe-accordion__trigger:focus-visible,.pe-accordion__trigger:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-accordion__icon{display:flex;align-items:center;font-size:32px;line-height:32px}.pe-accordion__label{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;flex:1}.pe-accordion__status{display:flex;gap:8px}.pe-accordion__indicator{color:#ffffffb3;transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-accordion__item--expanded .pe-accordion__indicator{transform:rotate(180deg)}.pe-accordion__content{color:#ffffffb3;background-color:transparent;padding:12px;width:100%;display:none;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-accordion__item--expanded .pe-accordion__content{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AccordionItemComponent, decorators: [{
121
+ type: Component,
122
+ args: [{ selector: 'pe-accordion-item', standalone: true, template: `
123
+ <div
124
+ class="pe-accordion__item"
125
+ [class.pe-accordion__item--expanded]="cdkAccordionItem.expanded"
126
+ [class.pe-accordion__item--disabled]="cdkAccordionItem.disabled">
127
+ <button
128
+ (click)="onToggle()"
129
+ class="pe-accordion__trigger"
130
+ [id]="triggerId"
131
+ [attr.aria-expanded]="cdkAccordionItem.expanded"
132
+ [attr.aria-controls]="contentId"
133
+ [attr.aria-disabled]="cdkAccordionItem.disabled ? 'true' : null"
134
+ [disabled]="cdkAccordionItem.disabled"
135
+ (keydown)="onKeydown($event)"
136
+ type="button">
137
+ <div class="pe-accordion__icon">
138
+ <ng-content select="[pe-accordion-icon]"></ng-content>
139
+ </div>
140
+ <div class="pe-accordion__label">
141
+ <ng-content select="[pe-accordion-label]"></ng-content>
142
+ </div>
143
+ <div class="pe-accordion__status">
144
+ <ng-content select="[pe-accordion-status]"></ng-content>
145
+ </div>
146
+ <span class="pe-accordion__indicator">
147
+ <i class="pe-icon pe-icon-size-8 pe-icon-weight-bold pe-icon-chevron_down"></i>
148
+ </span>
149
+ </button>
150
+ <div
151
+ role="region"
152
+ class="pe-accordion__content"
153
+ [id]="contentId"
154
+ [attr.aria-labelledby]="triggerId"
155
+ [attr.aria-hidden]="!cdkAccordionItem.expanded">
156
+ <ng-content select="[pe-accordion-content]"></ng-content>
157
+ </div>
158
+ </div>
159
+ `, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [
160
+ {
161
+ directive: CdkAccordionItem,
162
+ inputs: ['expanded', 'disabled'],
163
+ outputs: ['closed', 'opened', 'destroyed', 'expandedChange'],
164
+ },
165
+ ], styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-accordion{color:#fff;display:flex;flex-direction:column;gap:8px}.pe-accordion__item{min-height:48px;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px}.pe-accordion__item:first-child{padding-top:0}.pe-accordion__item:last-child{border-bottom:none}.pe-accordion__item--disabled{cursor:not-allowed}.pe-accordion__item--disabled .pe-accordion__trigger{cursor:not-allowed;color:#ffffff4d;background-color:#ffffff0d;pointer-events:none}.pe-accordion__item--disabled .pe-accordion__trigger:hover,.pe-accordion__item--disabled .pe-accordion__trigger:active{background-color:#ffffff0d}.pe-accordion__item--disabled .pe-accordion__indicator{color:#ffffff4d}.pe-accordion__item:after{content:\"\";display:block;width:calc(100% - 24px);border-bottom:1px solid transparent}.pe-accordion--divider ::ng-deep .pe-accordion__item:after{border-color:#ffffff1a}.pe-accordion__trigger{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;width:100%;min-height:48px;text-align:start;display:flex;align-items:center;gap:8px;border-radius:12px;padding:0 12px}.pe-accordion__trigger:hover{background-color:#fff3}.pe-accordion__trigger:active{background-color:#ffffff1a}.pe-accordion__trigger:selected{background-color:#fff3}.pe-accordion__trigger{background-color:#fff0;color:inherit}.pe-accordion__trigger:disabled,.pe-accordion__trigger[disabled]{background-color:#fff0}.pe-accordion__trigger:focus-visible,.pe-accordion__trigger:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-accordion__icon{display:flex;align-items:center;font-size:32px;line-height:32px}.pe-accordion__label{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;flex:1}.pe-accordion__status{display:flex;gap:8px}.pe-accordion__indicator{color:#ffffffb3;transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-accordion__item--expanded .pe-accordion__indicator{transform:rotate(180deg)}.pe-accordion__content{color:#ffffffb3;background-color:transparent;padding:12px;width:100%;display:none;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-accordion__item--expanded .pe-accordion__content{display:block}\n"] }]
166
+ }] });
167
+ /**
168
+ * AccordionComponent is a standalone Angular component that acts as a container
169
+ * for multiple AccordionItemComponents. It provides configuration options for
170
+ * multi-expansion behavior and manages the state of its child accordion items.
171
+ */
172
+ class AccordionComponent {
173
+ showDivider = input(false, ...(ngDevMode ? [{ debugName: "showDivider" }] : []));
174
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : []));
175
+ destroyRef = inject(DestroyRef);
176
+ accordionItems = contentChildren(AccordionItemComponent, { ...(ngDevMode ? { debugName: "accordionItems" } : {}), read: CdkAccordionItem });
177
+ ngAfterViewInit() {
178
+ this.setupSingleExpansionLogic();
179
+ }
180
+ /**
181
+ * Sets up the single expansion logic to ensure only one item is expanded at a time
182
+ * when multi mode is disabled.
183
+ */
184
+ setupSingleExpansionLogic() {
185
+ const items = this.accordionItems();
186
+ // Early return if no items or multi mode is enabled
187
+ if (!items.length || this.multi()) {
188
+ return;
189
+ }
190
+ // Subscribe to expansion changes for all items
191
+ items.forEach((item) => {
192
+ item.expandedChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((expanded) => {
193
+ this.handleExpansionChange(item, expanded, items);
194
+ });
195
+ });
196
+ }
197
+ /**
198
+ * Handles expansion changes and manages single-expansion behavior.
199
+ * @param changedItem - The accordion item that changed
200
+ * @param expanded - Whether the item is now expanded
201
+ * @param allItems - Array of all accordion items
202
+ */
203
+ handleExpansionChange(changedItem, expanded, allItems) {
204
+ // Only handle expansion (not collapse) and only when multi mode is disabled
205
+ if (!expanded || this.multi()) {
206
+ return;
207
+ }
208
+ // Collapse all other items except the one that was just expanded
209
+ allItems.forEach((item) => {
210
+ if (item !== changedItem && item.expanded) {
211
+ item.expanded = false;
212
+ }
213
+ });
214
+ }
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.2", type: AccordionComponent, isStandalone: true, selector: "pe-accordion", inputs: { showDivider: { classPropertyName: "showDivider", publicName: "showDivider", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "accordionItems", predicate: AccordionItemComponent, read: CdkAccordionItem, isSignal: true }], ngImport: i0, template: `
217
+ <cdk-accordion #accordion [multi]="multi()" class="pe-accordion" [class.pe-accordion--divider]="showDivider()">
218
+ <ng-content />
219
+ </cdk-accordion>
220
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-accordion{color:#fff;display:flex;flex-direction:column;gap:8px}.pe-accordion__item{min-height:48px;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px}.pe-accordion__item:first-child{padding-top:0}.pe-accordion__item:last-child{border-bottom:none}.pe-accordion__item--disabled{cursor:not-allowed}.pe-accordion__item--disabled .pe-accordion__trigger{cursor:not-allowed;color:#ffffff4d;background-color:#ffffff0d;pointer-events:none}.pe-accordion__item--disabled .pe-accordion__trigger:hover,.pe-accordion__item--disabled .pe-accordion__trigger:active{background-color:#ffffff0d}.pe-accordion__item--disabled .pe-accordion__indicator{color:#ffffff4d}.pe-accordion__item:after{content:\"\";display:block;width:calc(100% - 24px);border-bottom:1px solid transparent}.pe-accordion--divider ::ng-deep .pe-accordion__item:after{border-color:#ffffff1a}.pe-accordion__trigger{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;width:100%;min-height:48px;text-align:start;display:flex;align-items:center;gap:8px;border-radius:12px;padding:0 12px}.pe-accordion__trigger:hover{background-color:#fff3}.pe-accordion__trigger:active{background-color:#ffffff1a}.pe-accordion__trigger:selected{background-color:#fff3}.pe-accordion__trigger{background-color:#fff0;color:inherit}.pe-accordion__trigger:disabled,.pe-accordion__trigger[disabled]{background-color:#fff0}.pe-accordion__trigger:focus-visible,.pe-accordion__trigger:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-accordion__icon{display:flex;align-items:center;font-size:32px;line-height:32px}.pe-accordion__label{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;flex:1}.pe-accordion__status{display:flex;gap:8px}.pe-accordion__indicator{color:#ffffffb3;transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-accordion__item--expanded .pe-accordion__indicator{transform:rotate(180deg)}.pe-accordion__content{color:#ffffffb3;background-color:transparent;padding:12px;width:100%;display:none;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-accordion__item--expanded .pe-accordion__content{display:block}\n"], dependencies: [{ kind: "directive", type: CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AccordionComponent, decorators: [{
223
+ type: Component,
224
+ args: [{ selector: 'pe-accordion', standalone: true, template: `
225
+ <cdk-accordion #accordion [multi]="multi()" class="pe-accordion" [class.pe-accordion--divider]="showDivider()">
226
+ <ng-content />
227
+ </cdk-accordion>
228
+ `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CdkAccordion], styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-accordion{color:#fff;display:flex;flex-direction:column;gap:8px}.pe-accordion__item{min-height:48px;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px}.pe-accordion__item:first-child{padding-top:0}.pe-accordion__item:last-child{border-bottom:none}.pe-accordion__item--disabled{cursor:not-allowed}.pe-accordion__item--disabled .pe-accordion__trigger{cursor:not-allowed;color:#ffffff4d;background-color:#ffffff0d;pointer-events:none}.pe-accordion__item--disabled .pe-accordion__trigger:hover,.pe-accordion__item--disabled .pe-accordion__trigger:active{background-color:#ffffff0d}.pe-accordion__item--disabled .pe-accordion__indicator{color:#ffffff4d}.pe-accordion__item:after{content:\"\";display:block;width:calc(100% - 24px);border-bottom:1px solid transparent}.pe-accordion--divider ::ng-deep .pe-accordion__item:after{border-color:#ffffff1a}.pe-accordion__trigger{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;width:100%;min-height:48px;text-align:start;display:flex;align-items:center;gap:8px;border-radius:12px;padding:0 12px}.pe-accordion__trigger:hover{background-color:#fff3}.pe-accordion__trigger:active{background-color:#ffffff1a}.pe-accordion__trigger:selected{background-color:#fff3}.pe-accordion__trigger{background-color:#fff0;color:inherit}.pe-accordion__trigger:disabled,.pe-accordion__trigger[disabled]{background-color:#fff0}.pe-accordion__trigger:focus-visible,.pe-accordion__trigger:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-accordion__icon{display:flex;align-items:center;font-size:32px;line-height:32px}.pe-accordion__label{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;flex:1}.pe-accordion__status{display:flex;gap:8px}.pe-accordion__indicator{color:#ffffffb3;transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-accordion__item--expanded .pe-accordion__indicator{transform:rotate(180deg)}.pe-accordion__content{color:#ffffffb3;background-color:transparent;padding:12px;width:100%;display:none;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-accordion__item--expanded .pe-accordion__content{display:block}\n"] }]
229
+ }], propDecorators: { showDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDivider", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], accordionItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AccordionItemComponent), { ...{
230
+ read: CdkAccordionItem,
231
+ }, isSignal: true }] }] } });
232
+
233
+ /**
234
+ * A code display component that shows code with automatic line numbering.
235
+ * Features a clean two-column layout following PE design guidelines.
236
+ *
237
+ * @example
238
+ * <pe-area-code
239
+ * [content]="codeContent"
240
+ * [showLineNumbers]="true"
241
+ * />
242
+ */
243
+ class AreaCodeComponent {
244
+ // Core inputs
245
+ content = input('', ...(ngDevMode ? [{ debugName: "content" }] : []));
246
+ showLineNumbers = input(true, ...(ngDevMode ? [{ debugName: "showLineNumbers" }] : []));
247
+ maxHeight = input(null, ...(ngDevMode ? [{ debugName: "maxHeight" }] : []));
248
+ // Computed properties
249
+ lines = computed(() => {
250
+ const content = this.content();
251
+ if (!content)
252
+ return [''];
253
+ return content.split('\n');
254
+ }, ...(ngDevMode ? [{ debugName: "lines" }] : []));
255
+ lineCount = computed(() => this.lines().length, ...(ngDevMode ? [{ debugName: "lineCount" }] : []));
256
+ lineNumbers = computed(() => {
257
+ const count = this.lineCount();
258
+ return Array.from({ length: count }, (_, i) => i + 1);
259
+ }, ...(ngDevMode ? [{ debugName: "lineNumbers" }] : []));
260
+ // Component properties
261
+ codeId = `pe-area-code-${Math.random().toString(36).slice(2, 11)}`;
262
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AreaCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
263
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: AreaCodeComponent, isStandalone: true, selector: "pe-area-code", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, showLineNumbers: { classPropertyName: "showLineNumbers", publicName: "showLineNumbers", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"pe-area-code\" [class.pe-area-code--no-line-numbers]=\"!showLineNumbers()\">\n <div class=\"pe-area-code__container pe-scrollable\" [style.max-height]=\"maxHeight()\">\n <!-- Code Display Area -->\n <div class=\"pe-area-code__display\">\n <!-- Line Numbers Column -->\n @if (showLineNumbers()) {\n <div class=\"pe-area-code__line-numbers\" role=\"presentation\" aria-hidden=\"true\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <span class=\"pe-area-code__line-number\">{{ lineNumber }}.</span>\n }\n </div>\n }\n <!-- Code Content Column -->\n <div class=\"pe-area-code__content\">\n <pre class=\"pe-area-code__code\" [id]=\"codeId\"><code>{{ content() }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-area-code{position:relative;display:block;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-area-code__container{position:relative;border-radius:16px;border:2px solid rgba(255,255,255,.1);background-color:#ffffff1a}.pe-area-code__display{display:flex;min-height:2rem;overflow-x:auto}.pe-area-code__line-numbers{flex-shrink:0;display:flex;flex-direction:column;padding:12px 8px;border-right:2px solid rgba(255,255,255,.1);color:#ffffff80;-webkit-user-select:none;user-select:none;min-width:3rem;text-align:right}.pe-area-code__line-number{display:block;white-space:nowrap;padding-right:4px}.pe-area-code__content{flex:1;overflow-x:auto}.pe-area-code__code{display:block;margin:0;padding:12px;background:transparent;color:#fff;white-space:pre;overflow-x:auto;overflow-y:visible;tab-size:2}.pe-area-code__code code{background:transparent;padding:0;font-size:inherit;line-height:inherit;font-family:inherit;color:inherit}.pe-area-code--no-line-numbers .pe-area-code__code{padding-left:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
264
+ }
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AreaCodeComponent, decorators: [{
266
+ type: Component,
267
+ args: [{ selector: 'pe-area-code', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"pe-area-code\" [class.pe-area-code--no-line-numbers]=\"!showLineNumbers()\">\n <div class=\"pe-area-code__container pe-scrollable\" [style.max-height]=\"maxHeight()\">\n <!-- Code Display Area -->\n <div class=\"pe-area-code__display\">\n <!-- Line Numbers Column -->\n @if (showLineNumbers()) {\n <div class=\"pe-area-code__line-numbers\" role=\"presentation\" aria-hidden=\"true\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <span class=\"pe-area-code__line-number\">{{ lineNumber }}.</span>\n }\n </div>\n }\n <!-- Code Content Column -->\n <div class=\"pe-area-code__content\">\n <pre class=\"pe-area-code__code\" [id]=\"codeId\"><code>{{ content() }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-area-code{position:relative;display:block;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-area-code__container{position:relative;border-radius:16px;border:2px solid rgba(255,255,255,.1);background-color:#ffffff1a}.pe-area-code__display{display:flex;min-height:2rem;overflow-x:auto}.pe-area-code__line-numbers{flex-shrink:0;display:flex;flex-direction:column;padding:12px 8px;border-right:2px solid rgba(255,255,255,.1);color:#ffffff80;-webkit-user-select:none;user-select:none;min-width:3rem;text-align:right}.pe-area-code__line-number{display:block;white-space:nowrap;padding-right:4px}.pe-area-code__content{flex:1;overflow-x:auto}.pe-area-code__code{display:block;margin:0;padding:12px;background:transparent;color:#fff;white-space:pre;overflow-x:auto;overflow-y:visible;tab-size:2}.pe-area-code__code code{background:transparent;padding:0;font-size:inherit;line-height:inherit;font-family:inherit;color:inherit}.pe-area-code--no-line-numbers .pe-area-code__code{padding-left:16px}\n"] }]
268
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], showLineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLineNumbers", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }] } });
269
+
270
+ // <pe-icon class="pe-icon pe-icon-size-${size} pe-icon-weight-${weight} pe-icon-${icon}" />
271
+ class IconComponent {
272
+ size = input('8', ...(ngDevMode ? [{ debugName: "size" }] : []));
273
+ weight = input('medium', ...(ngDevMode ? [{ debugName: "weight" }] : []));
274
+ icon = input.required(...(ngDevMode ? [{ debugName: "icon" }] : []));
275
+ hostClasses = computed(() => {
276
+ return `pe-icon pe-icon-size-${this.size()} pe-icon-weight-${this.weight()} pe-icon-${this.icon()}`;
277
+ }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : []));
278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: IconComponent, isStandalone: true, selector: "pe-icon", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, weight: { classPropertyName: "weight", publicName: "weight", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
280
+ }
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: IconComponent, decorators: [{
282
+ type: Component,
283
+ args: [{
284
+ selector: 'pe-icon',
285
+ standalone: true,
286
+ template: ``,
287
+ changeDetection: ChangeDetectionStrategy.OnPush,
288
+ encapsulation: ViewEncapsulation.None,
289
+ host: {
290
+ '[class]': 'hostClasses()'
291
+ }
292
+ }]
293
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], weight: [{ type: i0.Input, args: [{ isSignal: true, alias: "weight", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: true }] }] } });
294
+
295
+ class SkeletonComponent {
296
+ variant = input('rect', ...(ngDevMode ? [{ debugName: "variant" }] : []));
297
+ width = input(null, ...(ngDevMode ? [{ debugName: "width" }] : []));
298
+ height = input(null, ...(ngDevMode ? [{ debugName: "height" }] : []));
299
+ lines = input(3, ...(ngDevMode ? [{ debugName: "lines" }] : []));
300
+ borderRadius = input(null, ...(ngDevMode ? [{ debugName: "borderRadius" }] : []));
301
+ show = input(true, ...(ngDevMode ? [{ debugName: "show" }] : []));
302
+ hostStyles = computed(() => {
303
+ const width = this.width();
304
+ const height = this.height();
305
+ return {
306
+ width: width ?? null,
307
+ height: height ?? null,
308
+ };
309
+ }, ...(ngDevMode ? [{ debugName: "hostStyles" }] : []));
310
+ lineWidths = computed(() => {
311
+ const count = Math.max(1, this.lines());
312
+ const widths = [];
313
+ for (let index = 0; index < count; index += 1) {
314
+ const base = 100;
315
+ const step = 8;
316
+ const value = Math.max(40, base - index * step);
317
+ widths.push(`${value}%`);
318
+ }
319
+ return widths;
320
+ }, ...(ngDevMode ? [{ debugName: "lineWidths" }] : []));
321
+ radiusClass = computed(() => {
322
+ const radius = this.borderRadius();
323
+ return radius ? `pe-skeleton--radius-${radius}` : null;
324
+ }, ...(ngDevMode ? [{ debugName: "radiusClass" }] : []));
325
+ trackByIndex(index) {
326
+ return index;
327
+ }
328
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
329
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: SkeletonComponent, isStandalone: true, selector: "pe-skeleton", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, borderRadius: { classPropertyName: "borderRadius", publicName: "borderRadius", isSignal: true, isRequired: false, transformFunction: null }, show: { classPropertyName: "show", publicName: "show", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"pe-skeleton\"\n [class.pe-skeleton--active]=\"show()\"\n [class.pe-skeleton--rect]=\"variant() === 'rect'\"\n [class.pe-skeleton--text]=\"variant() === 'text'\"\n [class]=\"radiusClass() || ''\"\n [style.width]=\"hostStyles().width\"\n [style.height]=\"hostStyles().height\"\n>\n <div class=\"pe-skeleton__content\">\n <ng-content />\n </div>\n\n @if (show()) {\n @if (variant() === 'text') {\n <div class=\"pe-skeleton__overlay pe-skeleton__overlay--text\">\n @for (lineWidth of lineWidths(); track trackByIndex($index)) {\n <div class=\"pe-skeleton__block pe-skeleton__block--line\" [style.width]=\"lineWidth\"></div>\n }\n </div>\n } @else {\n <div class=\"pe-skeleton__overlay pe-skeleton__overlay--rect\">\n <div class=\"pe-skeleton__block pe-skeleton__block--rect\"></div>\n </div>\n }\n }\n</div>\n\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-skeleton{position:relative;display:block;overflow:hidden}.pe-skeleton__content{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-skeleton--active .pe-skeleton__content{opacity:0}.pe-skeleton__overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;gap:4px;pointer-events:none}.pe-skeleton__block{display:block;width:100%;height:100%;border-radius:8px;background-color:#3b3b3b;background-image:linear-gradient(90deg,#fff0,#ffffff24,#fff0);background-size:200% 100%;animation:pe-skeleton-shimmer 1.2s infinite linear}.pe-skeleton__block--line{height:12px}.pe-skeleton__overlay--text .pe-skeleton__block--line:last-child{width:60%}.pe-skeleton--radius-xs .pe-skeleton__block{border-radius:4px}.pe-skeleton--radius-sm .pe-skeleton__block{border-radius:8px}.pe-skeleton--radius-md .pe-skeleton__block{border-radius:12px}.pe-skeleton--radius-lg .pe-skeleton__block{border-radius:16px}.pe-skeleton--radius-full .pe-skeleton__block{border-radius:4096px}@keyframes pe-skeleton-shimmer{0%{background-position:-100% 0}to{background-position:100% 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
330
+ }
331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SkeletonComponent, decorators: [{
332
+ type: Component,
333
+ args: [{ selector: 'pe-skeleton', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-skeleton\"\n [class.pe-skeleton--active]=\"show()\"\n [class.pe-skeleton--rect]=\"variant() === 'rect'\"\n [class.pe-skeleton--text]=\"variant() === 'text'\"\n [class]=\"radiusClass() || ''\"\n [style.width]=\"hostStyles().width\"\n [style.height]=\"hostStyles().height\"\n>\n <div class=\"pe-skeleton__content\">\n <ng-content />\n </div>\n\n @if (show()) {\n @if (variant() === 'text') {\n <div class=\"pe-skeleton__overlay pe-skeleton__overlay--text\">\n @for (lineWidth of lineWidths(); track trackByIndex($index)) {\n <div class=\"pe-skeleton__block pe-skeleton__block--line\" [style.width]=\"lineWidth\"></div>\n }\n </div>\n } @else {\n <div class=\"pe-skeleton__overlay pe-skeleton__overlay--rect\">\n <div class=\"pe-skeleton__block pe-skeleton__block--rect\"></div>\n </div>\n }\n }\n</div>\n\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-skeleton{position:relative;display:block;overflow:hidden}.pe-skeleton__content{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-skeleton--active .pe-skeleton__content{opacity:0}.pe-skeleton__overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;gap:4px;pointer-events:none}.pe-skeleton__block{display:block;width:100%;height:100%;border-radius:8px;background-color:#3b3b3b;background-image:linear-gradient(90deg,#fff0,#ffffff24,#fff0);background-size:200% 100%;animation:pe-skeleton-shimmer 1.2s infinite linear}.pe-skeleton__block--line{height:12px}.pe-skeleton__overlay--text .pe-skeleton__block--line:last-child{width:60%}.pe-skeleton--radius-xs .pe-skeleton__block{border-radius:4px}.pe-skeleton--radius-sm .pe-skeleton__block{border-radius:8px}.pe-skeleton--radius-md .pe-skeleton__block{border-radius:12px}.pe-skeleton--radius-lg .pe-skeleton__block{border-radius:16px}.pe-skeleton--radius-full .pe-skeleton__block{border-radius:4096px}@keyframes pe-skeleton-shimmer{0%{background-position:-100% 0}to{background-position:100% 0}}\n"] }]
334
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], borderRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderRadius", required: false }] }], show: [{ type: i0.Input, args: [{ isSignal: true, alias: "show", required: false }] }] } });
335
+
336
+ /**
337
+ * A reusable avatar component that displays user images, initials, or icons.
338
+ * Supports multiple sizes and fallback options when an image is not available.
339
+ * @example
340
+ * <pe-avatar size="md" [src]="userImageUrl" [initials]="'JD'" />
341
+ */
342
+ class AvatarComponent {
343
+ /** The size of the avatar */
344
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
345
+ /** The image source URL */
346
+ src = input(undefined, ...(ngDevMode ? [{ debugName: "src" }] : []));
347
+ /** Fallback initials to display when image is not available */
348
+ initials = input(undefined, ...(ngDevMode ? [{ debugName: "initials" }] : []));
349
+ /** Fallback icon to display when image and initials are not available */
350
+ icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : []));
351
+ /** Alt text for the avatar image */
352
+ alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : []));
353
+ /** Show a skeleton placeholder instead of content while loading. */
354
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
355
+ /** Internal signal to track image loading errors */
356
+ imageError = signal(false, ...(ngDevMode ? [{ debugName: "imageError" }] : []));
357
+ /** Computed icon size based on avatar size */
358
+ iconSize = computed(() => {
359
+ const sizeMap = {
360
+ sm: '5',
361
+ md: '6',
362
+ lg: '7',
363
+ xl: '8',
364
+ };
365
+ return sizeMap[this.size()];
366
+ }, ...(ngDevMode ? [{ debugName: "iconSize" }] : []));
367
+ constructor() {
368
+ // Reset image error when src changes
369
+ effect(() => {
370
+ this.src();
371
+ this.imageError.set(false);
372
+ });
373
+ }
374
+ /** Handles image loading errors */
375
+ handleImageError() {
376
+ this.imageError.set(true);
377
+ }
378
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
379
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: AvatarComponent, isStandalone: true, selector: "pe-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
380
+ <pe-skeleton class="pe-avatar pe-avatar--{{ size() }}" [show]="loading()" variant="rect" borderRadius="full">
381
+ <div class="pe-avatar pe-avatar--{{ size() }}">
382
+ @if (src() && !imageError()) {
383
+ <img
384
+ [src]="src()"
385
+ [alt]="alt()"
386
+ (error)="handleImageError()"
387
+ class="pe-avatar__image"
388
+ />
389
+ } @else if (initials()) {
390
+ <span class="pe-avatar__initials">{{ initials() }}</span>
391
+ } @else if (icon()) {
392
+ <pe-icon [icon]="icon()!" [size]="iconSize()" />
393
+ }
394
+ </div>
395
+ </pe-skeleton>
396
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;border-radius:4096px;background-color:#ffffff1a;color:#fff}.pe-avatar--sm{width:32px;height:32px;min-width:32px}.pe-avatar--md{width:40px;height:40px;min-width:40px}.pe-avatar--lg{width:48px;height:48px;min-width:48px}.pe-avatar--xl{width:64px;height:64px;min-width:64px}.pe-avatar__image{width:100%;height:100%;object-fit:cover;object-position:center}.pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;text-transform:uppercase;-webkit-user-select:none;user-select:none;line-height:1}.pe-avatar--sm .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-avatar--md .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-avatar--lg .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-avatar--xl .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-avatar .pe-icon{color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: SkeletonComponent, selector: "pe-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
397
+ }
398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AvatarComponent, decorators: [{
399
+ type: Component,
400
+ args: [{ selector: 'pe-avatar', standalone: true, imports: [IconComponent, SkeletonComponent], template: `
401
+ <pe-skeleton class="pe-avatar pe-avatar--{{ size() }}" [show]="loading()" variant="rect" borderRadius="full">
402
+ <div class="pe-avatar pe-avatar--{{ size() }}">
403
+ @if (src() && !imageError()) {
404
+ <img
405
+ [src]="src()"
406
+ [alt]="alt()"
407
+ (error)="handleImageError()"
408
+ class="pe-avatar__image"
409
+ />
410
+ } @else if (initials()) {
411
+ <span class="pe-avatar__initials">{{ initials() }}</span>
412
+ } @else if (icon()) {
413
+ <pe-icon [icon]="icon()!" [size]="iconSize()" />
414
+ }
415
+ </div>
416
+ </pe-skeleton>
417
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;border-radius:4096px;background-color:#ffffff1a;color:#fff}.pe-avatar--sm{width:32px;height:32px;min-width:32px}.pe-avatar--md{width:40px;height:40px;min-width:40px}.pe-avatar--lg{width:48px;height:48px;min-width:48px}.pe-avatar--xl{width:64px;height:64px;min-width:64px}.pe-avatar__image{width:100%;height:100%;object-fit:cover;object-position:center}.pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;text-transform:uppercase;-webkit-user-select:none;user-select:none;line-height:1}.pe-avatar--sm .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-avatar--md .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-avatar--lg .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-avatar--xl .pe-avatar__initials{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-avatar .pe-icon{color:#ffffffb3}\n"] }]
418
+ }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], initials: [{ type: i0.Input, args: [{ isSignal: true, alias: "initials", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
419
+
420
+ /**
421
+ * A reusable avatar group component that displays multiple avatars with overflow handling.
422
+ * Supports maximum visible count and shows a "+X" indicator for remaining avatars.
423
+ * @example
424
+ * <pe-avatar-group [avatars]="userAvatars" [maxVisible]="3" size="md" />
425
+ */
426
+ class AvatarGroupComponent {
427
+ /** Array of avatar data to display */
428
+ avatars = input.required(...(ngDevMode ? [{ debugName: "avatars" }] : []));
429
+ /** The size of all avatars in the group */
430
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
431
+ /** Maximum number of avatars to display before showing overflow indicator */
432
+ maxVisible = input(null, ...(ngDevMode ? [{ debugName: "maxVisible" }] : []));
433
+ /** Whether avatars should overlap (stacked) or have spacing between them */
434
+ stacked = input(false, ...(ngDevMode ? [{ debugName: "stacked" }] : []));
435
+ /** Computed list of visible avatars */
436
+ visibleAvatars = computed(() => {
437
+ const max = this.maxVisible();
438
+ const avatars = this.avatars();
439
+ return max !== null && max > 0 ? avatars.slice(0, max) : avatars;
440
+ }, ...(ngDevMode ? [{ debugName: "visibleAvatars" }] : []));
441
+ /** Computed count of remaining avatars not shown */
442
+ remainingCount = computed(() => {
443
+ const max = this.maxVisible();
444
+ if (max === null || max <= 0)
445
+ return 0;
446
+ return Math.max(0, this.avatars().length - max);
447
+ }, ...(ngDevMode ? [{ debugName: "remainingCount" }] : []));
448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AvatarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
449
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: AvatarGroupComponent, isStandalone: true, selector: "pe-avatar-group", inputs: { avatars: { classPropertyName: "avatars", publicName: "avatars", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxVisible: { classPropertyName: "maxVisible", publicName: "maxVisible", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
450
+ <div class="pe-avatar-group pe-avatar-group--{{this.size()}}"
451
+ [class.pe-avatar-group--stacked]="stacked()"
452
+ >
453
+ @for (avatar of visibleAvatars(); track $index) {
454
+ <pe-avatar
455
+ [size]="size()"
456
+ [src]="avatar.src"
457
+ [initials]="avatar.initials"
458
+ [icon]="avatar.icon"
459
+ [alt]="avatar.alt || ''"
460
+ [class.pe-avatar-group__avatar]="!stacked() && $index > 0"
461
+ />
462
+ }
463
+ @if (remainingCount() > 0) {
464
+ <div class="pe-avatar-group__overflow pe-avatar-group__overflow--{{this.size()}}"
465
+ [class.pe-avatar-group__overflow-avatar]="!stacked()">
466
+ <span class="pe-avatar-group__overflow-text">+{{ remainingCount() }}</span>
467
+ </div>
468
+ }
469
+ </div>
470
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-avatar-group{display:inline-flex;align-items:center;flex-wrap:wrap}.pe-avatar-group__avatar{margin-left:-8px}.pe-avatar-group--sm .pe-avatar-group__avatar{margin-left:-4px}.pe-avatar-group--md .pe-avatar-group__avatar{margin-left:-8px}.pe-avatar-group--lg .pe-avatar-group__avatar,.pe-avatar-group--xl .pe-avatar-group__avatar{margin-left:-12px}.pe-avatar-group--stacked .pe-avatar{margin-left:0!important;border:2px solid #0a0a0a}.pe-avatar-group--stacked .pe-avatar:not(:first-child){margin-left:-8px}.pe-avatar-group--stacked.pe-avatar-group--sm .pe-avatar:not(:first-child){margin-left:-4px}.pe-avatar-group--stacked.pe-avatar-group--md .pe-avatar:not(:first-child){margin-left:-8px}.pe-avatar-group--stacked.pe-avatar-group--lg .pe-avatar:not(:first-child){margin-left:-12px}.pe-avatar-group--stacked.pe-avatar-group--xl .pe-avatar:not(:first-child){margin-left:-16px}.pe-avatar-group__overflow{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:4096px;background-color:#ffffff1a;color:#fff;border:2px solid #0a0a0a}.pe-avatar-group__overflow--sm{width:32px;height:32px;min-width:32px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-avatar-group__overflow--md{width:40px;height:40px;min-width:40px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-avatar-group__overflow--lg{width:48px;height:48px;min-width:48px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-avatar-group__overflow--xl{width:64px;height:64px;min-width:64px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-avatar-group__overflow-text{-webkit-user-select:none;user-select:none;line-height:1}\n"], dependencies: [{ kind: "component", type: AvatarComponent, selector: "pe-avatar", inputs: ["size", "src", "initials", "icon", "alt", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
471
+ }
472
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: AvatarGroupComponent, decorators: [{
473
+ type: Component,
474
+ args: [{ selector: 'pe-avatar-group', standalone: true, imports: [AvatarComponent], template: `
475
+ <div class="pe-avatar-group pe-avatar-group--{{this.size()}}"
476
+ [class.pe-avatar-group--stacked]="stacked()"
477
+ >
478
+ @for (avatar of visibleAvatars(); track $index) {
479
+ <pe-avatar
480
+ [size]="size()"
481
+ [src]="avatar.src"
482
+ [initials]="avatar.initials"
483
+ [icon]="avatar.icon"
484
+ [alt]="avatar.alt || ''"
485
+ [class.pe-avatar-group__avatar]="!stacked() && $index > 0"
486
+ />
487
+ }
488
+ @if (remainingCount() > 0) {
489
+ <div class="pe-avatar-group__overflow pe-avatar-group__overflow--{{this.size()}}"
490
+ [class.pe-avatar-group__overflow-avatar]="!stacked()">
491
+ <span class="pe-avatar-group__overflow-text">+{{ remainingCount() }}</span>
492
+ </div>
493
+ }
494
+ </div>
495
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-avatar-group{display:inline-flex;align-items:center;flex-wrap:wrap}.pe-avatar-group__avatar{margin-left:-8px}.pe-avatar-group--sm .pe-avatar-group__avatar{margin-left:-4px}.pe-avatar-group--md .pe-avatar-group__avatar{margin-left:-8px}.pe-avatar-group--lg .pe-avatar-group__avatar,.pe-avatar-group--xl .pe-avatar-group__avatar{margin-left:-12px}.pe-avatar-group--stacked .pe-avatar{margin-left:0!important;border:2px solid #0a0a0a}.pe-avatar-group--stacked .pe-avatar:not(:first-child){margin-left:-8px}.pe-avatar-group--stacked.pe-avatar-group--sm .pe-avatar:not(:first-child){margin-left:-4px}.pe-avatar-group--stacked.pe-avatar-group--md .pe-avatar:not(:first-child){margin-left:-8px}.pe-avatar-group--stacked.pe-avatar-group--lg .pe-avatar:not(:first-child){margin-left:-12px}.pe-avatar-group--stacked.pe-avatar-group--xl .pe-avatar:not(:first-child){margin-left:-16px}.pe-avatar-group__overflow{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:4096px;background-color:#ffffff1a;color:#fff;border:2px solid #0a0a0a}.pe-avatar-group__overflow--sm{width:32px;height:32px;min-width:32px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-avatar-group__overflow--md{width:40px;height:40px;min-width:40px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-avatar-group__overflow--lg{width:48px;height:48px;min-width:48px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-avatar-group__overflow--xl{width:64px;height:64px;min-width:64px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-avatar-group__overflow-text{-webkit-user-select:none;user-select:none;line-height:1}\n"] }]
496
+ }], propDecorators: { avatars: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatars", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], maxVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisible", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }] } });
497
+
498
+ /**
499
+ * Breadcrumb component for displaying navigation hierarchy.
500
+ * Supports responsive collapsing on mobile devices and customizable separators.
501
+ *
502
+ * @example
503
+ * ```html
504
+ * <pe-breadcrumb
505
+ * [items]="[
506
+ * { label: 'Home', href: '/' },
507
+ * { label: 'Products', href: '/products' },
508
+ * { label: 'Current Page' }
509
+ * ]"
510
+ * />
511
+ * ```
512
+ */
513
+ class BreadcrumbComponent {
514
+ /** Array of breadcrumb items to display */
515
+ items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
516
+ /** Separator type between breadcrumb items */
517
+ separator = input('chevron_right', ...(ngDevMode ? [{ debugName: "separator" }] : []));
518
+ /** Maximum number of items to show before collapsing (for responsive behavior) */
519
+ maxItems = input(undefined, ...(ngDevMode ? [{ debugName: "maxItems" }] : []));
520
+ /** Check if an item is the last item */
521
+ isLastItem(index) {
522
+ return index === this.items().length - 1;
523
+ }
524
+ /** Check if an item should be shown on mobile (first, last, or within maxItems) */
525
+ shouldShowOnMobile(index) {
526
+ const items = this.items();
527
+ const max = this.maxItems();
528
+ if (!max || items.length <= max)
529
+ return true;
530
+ if (index === 0)
531
+ return true; // Always show first
532
+ if (index >= items.length - 2)
533
+ return true; // Always show last 2
534
+ return false;
535
+ }
536
+ /** Check if ellipsis should be shown on mobile */
537
+ shouldShowEllipsisOnMobile() {
538
+ const items = this.items();
539
+ const max = this.maxItems();
540
+ if (!max || items.length <= max)
541
+ return false;
542
+ return items.length > max + 1; // Show ellipsis if we're hiding items
543
+ }
544
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
545
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: BreadcrumbComponent, isStandalone: true, selector: "pe-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<nav class=\"pe-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"pe-breadcrumb__list\">\n @for (item of items(); track $index) {\n <li\n class=\"pe-breadcrumb__item\"\n [class.pe-breadcrumb__item--current]=\"isLastItem($index)\"\n [class.pe-breadcrumb__item--with-icon]=\"item.icon\"\n [class.pe-breadcrumb__item--hidden-mobile]=\"maxItems() && !shouldShowOnMobile($index)\"\n >\n @if (isLastItem($index)) {\n <span class=\"pe-breadcrumb__text\" aria-current=\"page\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n } @else {\n @if (item.href) {\n <a [href]=\"item.href\" class=\"pe-breadcrumb__link\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else if (item.routerLink) {\n <a [routerLink]=\"item.routerLink\" class=\"pe-breadcrumb__link\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else {\n <span class=\"pe-breadcrumb__text\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n }\n }\n\n @if (!isLastItem($index)) {\n <span class=\"pe-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <pe-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"pe-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"pe-breadcrumb__separator-text\">\u00B7</span>\n }\n </span>\n }\n </li>\n }\n\n @if (shouldShowEllipsisOnMobile()) {\n <li class=\"pe-breadcrumb__item pe-breadcrumb__item--ellipsis\" aria-hidden=\"true\">\n <span class=\"pe-breadcrumb__ellipsis\">...</span>\n <span class=\"pe-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <pe-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"pe-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"pe-breadcrumb__separator-text\">\u00B7</span>\n }\n </span>\n </li>\n }\n </ol>\n</nav>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-breadcrumb{display:flex;align-items:center;width:100%}.pe-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;gap:4px;list-style:none;margin:0;padding:0}.pe-breadcrumb__item{display:flex;align-items:center;gap:4px}.pe-breadcrumb__item--current .pe-breadcrumb__text{color:#fff;font-weight:800}.pe-breadcrumb__item--with-icon .pe-breadcrumb__icon{flex-shrink:0}@media(max-width:1279px){.pe-breadcrumb__item--hidden-mobile{display:none}}@media(min-width:1024px){.pe-breadcrumb__item--ellipsis{display:none}}.pe-breadcrumb__link{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;display:inline-flex;align-items:center;gap:4px;color:#ffffffb3;text-decoration:none;transition:color .25s cubic-bezier(.4,0,.2,1)}.pe-breadcrumb__link:hover{color:#fff}.pe-breadcrumb__link:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px;border-radius:4px}.pe-breadcrumb__text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;display:inline-flex;align-items:center;gap:4px;color:#fff}.pe-breadcrumb__icon{flex-shrink:0;color:inherit}.pe-breadcrumb__separator{display:inline-flex;align-items:center;color:#ffffff4d;margin:0 4px;flex-shrink:0}.pe-breadcrumb__separator-text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;-webkit-user-select:none;user-select:none}.pe-breadcrumb__ellipsis{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;color:#ffffff4d;margin:0 4px;-webkit-user-select:none;user-select:none}@media(max-width:1279px){.pe-breadcrumb__list,.pe-breadcrumb__item{gap:4px}.pe-breadcrumb__link,.pe-breadcrumb__text{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:500}.pe-breadcrumb__separator{margin:0 4px}}@media(min-width:1024px)and (max-width:1279px){.pe-breadcrumb__list{gap:8px}.pe-breadcrumb__item{gap:4px}.pe-breadcrumb__separator{margin:0 8px}}@media(min-width:1280px){.pe-breadcrumb__list,.pe-breadcrumb__item{gap:8px}.pe-breadcrumb__separator{margin:0 8px}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
546
+ }
547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
548
+ type: Component,
549
+ args: [{ selector: 'pe-breadcrumb', standalone: true, imports: [IconComponent, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<nav class=\"pe-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"pe-breadcrumb__list\">\n @for (item of items(); track $index) {\n <li\n class=\"pe-breadcrumb__item\"\n [class.pe-breadcrumb__item--current]=\"isLastItem($index)\"\n [class.pe-breadcrumb__item--with-icon]=\"item.icon\"\n [class.pe-breadcrumb__item--hidden-mobile]=\"maxItems() && !shouldShowOnMobile($index)\"\n >\n @if (isLastItem($index)) {\n <span class=\"pe-breadcrumb__text\" aria-current=\"page\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n } @else {\n @if (item.href) {\n <a [href]=\"item.href\" class=\"pe-breadcrumb__link\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else if (item.routerLink) {\n <a [routerLink]=\"item.routerLink\" class=\"pe-breadcrumb__link\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else {\n <span class=\"pe-breadcrumb__text\">\n @if (item.icon) {\n <pe-icon [icon]=\"item.icon\" size=\"5\" class=\"pe-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n }\n }\n\n @if (!isLastItem($index)) {\n <span class=\"pe-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <pe-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"pe-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"pe-breadcrumb__separator-text\">\u00B7</span>\n }\n </span>\n }\n </li>\n }\n\n @if (shouldShowEllipsisOnMobile()) {\n <li class=\"pe-breadcrumb__item pe-breadcrumb__item--ellipsis\" aria-hidden=\"true\">\n <span class=\"pe-breadcrumb__ellipsis\">...</span>\n <span class=\"pe-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <pe-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"pe-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"pe-breadcrumb__separator-text\">\u00B7</span>\n }\n </span>\n </li>\n }\n </ol>\n</nav>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-breadcrumb{display:flex;align-items:center;width:100%}.pe-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;gap:4px;list-style:none;margin:0;padding:0}.pe-breadcrumb__item{display:flex;align-items:center;gap:4px}.pe-breadcrumb__item--current .pe-breadcrumb__text{color:#fff;font-weight:800}.pe-breadcrumb__item--with-icon .pe-breadcrumb__icon{flex-shrink:0}@media(max-width:1279px){.pe-breadcrumb__item--hidden-mobile{display:none}}@media(min-width:1024px){.pe-breadcrumb__item--ellipsis{display:none}}.pe-breadcrumb__link{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;display:inline-flex;align-items:center;gap:4px;color:#ffffffb3;text-decoration:none;transition:color .25s cubic-bezier(.4,0,.2,1)}.pe-breadcrumb__link:hover{color:#fff}.pe-breadcrumb__link:focus-visible{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px;border-radius:4px}.pe-breadcrumb__text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;display:inline-flex;align-items:center;gap:4px;color:#fff}.pe-breadcrumb__icon{flex-shrink:0;color:inherit}.pe-breadcrumb__separator{display:inline-flex;align-items:center;color:#ffffff4d;margin:0 4px;flex-shrink:0}.pe-breadcrumb__separator-text{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;-webkit-user-select:none;user-select:none}.pe-breadcrumb__ellipsis{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500;color:#ffffff4d;margin:0 4px;-webkit-user-select:none;user-select:none}@media(max-width:1279px){.pe-breadcrumb__list,.pe-breadcrumb__item{gap:4px}.pe-breadcrumb__link,.pe-breadcrumb__text{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:500}.pe-breadcrumb__separator{margin:0 4px}}@media(min-width:1024px)and (max-width:1279px){.pe-breadcrumb__list{gap:8px}.pe-breadcrumb__item{gap:4px}.pe-breadcrumb__separator{margin:0 8px}}@media(min-width:1280px){.pe-breadcrumb__list,.pe-breadcrumb__item{gap:8px}.pe-breadcrumb__separator{margin:0 8px}}\n"] }]
550
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], maxItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxItems", required: false }] }] } });
551
+
552
+ const CSS_PREFIX = 'pe-';
553
+
554
+ /**
555
+ * Directive that applies styling and behavior to button elements.
556
+ * @example
557
+ * <button udsButton size="md" theme="fill-purple">Click me</button>
558
+ */
559
+ class ButtonDirective {
560
+ baseClass = `${CSS_PREFIX}btn`;
561
+ /** The size variant of the button */
562
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
563
+ /** The theme variant of the button */
564
+ theme = input('fill-purple', ...(ngDevMode ? [{ debugName: "theme" }] : []));
565
+ /** Whether the button only contains an icon */
566
+ iconOnly = input(false, ...(ngDevMode ? [{ debugName: "iconOnly" }] : []));
567
+ /** Whether the content should be stacked vertically */
568
+ vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
569
+ /** Computed property for vertical state */
570
+ shouldBeVertical = computed(() => this.vertical() && this.size() === 'lg', ...(ngDevMode ? [{ debugName: "shouldBeVertical" }] : []));
571
+ /** All computed classes based on current state */
572
+ allClasses = computed(() => {
573
+ const classes = [this.baseClass]; // Base class
574
+ classes.push(`${this.baseClass}--${this.size()}`); // Size variant
575
+ classes.push(`${this.baseClass}--${this.theme()}`); // Theme variant
576
+ if (this.iconOnly()) {
577
+ classes.push(`${this.baseClass}--icon-only`); // Icon only state
578
+ }
579
+ if (this.shouldBeVertical()) {
580
+ classes.push(`${this.baseClass}--vertical`);
581
+ }
582
+ return classes;
583
+ }, ...(ngDevMode ? [{ debugName: "allClasses" }] : []));
584
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
585
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: ButtonDirective, isStandalone: true, selector: "[peButton]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "\"button\"", "class": "allClasses()" } }, ngImport: i0 });
586
+ }
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ButtonDirective, decorators: [{
588
+ type: Directive,
589
+ args: [{
590
+ selector: '[peButton]',
591
+ standalone: true,
592
+ host: {
593
+ '[attr.role]': '"button"',
594
+ '[class]': 'allClasses()',
595
+ },
596
+ }]
597
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }] } });
598
+
599
+ /**
600
+ * A reusable button component that supports various themes, sizes, and states.
601
+ * @example
602
+ * <uds-button size="md" theme="fill-purple">Click me</uds-button>
603
+ */
604
+ class ButtonComponent {
605
+ /** The size of the button */
606
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
607
+ /** The visual theme of the button */
608
+ theme = input('fill-purple', ...(ngDevMode ? [{ debugName: "theme" }] : []));
609
+ /** Whether the button only contains an icon */
610
+ iconOnly = input(false, ...(ngDevMode ? [{ debugName: "iconOnly" }] : []));
611
+ /** Whether the button content should be stacked vertically (only applies to lg size) */
612
+ vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
613
+ /** Whether the button is disabled */
614
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
615
+ /** The button type attribute */
616
+ type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : []));
617
+ /** Optional aria-label for accessibility */
618
+ ariaLabel = input(undefined, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
619
+ /** Click event emitter with proper type safety */
620
+ buttonClick = output();
621
+ /** Handles the click event and prevents it if button is disabled */
622
+ handleClick(event) {
623
+ if (this.disabled()) {
624
+ event.preventDefault();
625
+ event.stopPropagation();
626
+ return;
627
+ }
628
+ this.buttonClick.emit(event);
629
+ }
630
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
631
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: ButtonComponent, isStandalone: true, selector: "pe-button", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: `
632
+ <button
633
+ peButton
634
+ [attr.type]="type()"
635
+ [attr.aria-label]="ariaLabel()"
636
+ [attr.aria-disabled]="disabled()"
637
+ [size]="size()"
638
+ [theme]="theme()"
639
+ [iconOnly]="iconOnly()"
640
+ [vertical]="vertical()"
641
+ [disabled]="disabled()"
642
+ (click)="handleClick($event)">
643
+ <ng-content />
644
+ </button>
645
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-btn{border:none;cursor:pointer;padding:0;text-decoration-line:none;overflow:visible;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;box-sizing:border-box;width:100%;color:#fff}.pe-btn:focus-visible,.pe-btn:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-btn{transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1)}.pe-btn[disabled],.pe-btn:disabled{cursor:not-allowed;color:#ffffff4d}.pe-btn--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800;height:32px;min-width:96px;padding:8px 12px;border-radius:8px;gap:4px}.pe-btn--sm.pe-btn--icon-only{min-width:32px}.pe-btn--sm .pe-icon{font-size:20px;line-height:20px}.pe-btn--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;height:40px;min-width:112px;padding:8px 16px;border-radius:12px;gap:8px}.pe-btn--md.pe-btn--icon-only{min-width:40px}.pe-btn--md .pe-icon{font-size:24px;line-height:24px}.pe-btn--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;height:48px;min-width:144px;padding:8px 32px;border-radius:16px;gap:12px}.pe-btn--lg.pe-btn--icon-only{min-width:48px}.pe-btn--lg .pe-icon{font-size:28px;line-height:28px}.pe-btn--lg.pe-btn--vertical{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;flex-direction:column;height:auto;width:164px;padding:16px 32px;border-radius:24px;gap:8px}.pe-btn--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;height:64px;min-width:144px;padding:8px 16px;border-radius:16px;gap:12px}.pe-btn--xl.pe-btn--icon-only{min-width:48px}.pe-btn--xl .pe-icon{font-size:32px;line-height:32px}.pe-btn--icon-only{padding:0}.pe-btn--fill-purple{background-color:#6f3de0;color:inherit}.pe-btn--fill-purple:hover{background-color:#7e4af7}.pe-btn--fill-purple:active{background-color:#5935af}.pe-btn--fill-purple:selected{background-color:#7e4af7}.pe-btn--fill-purple:disabled,.pe-btn--fill-purple[disabled]{background-color:#232323}.pe-btn--fill-purple{color:#fff}.pe-btn--fill-white{background-color:#fff;color:inherit}.pe-btn--fill-white:hover{background-color:#e7e7e7}.pe-btn--fill-white:active{background-color:#fff}.pe-btn--fill-white:selected{background-color:#fff}.pe-btn--fill-white:disabled,.pe-btn--fill-white[disabled]{background-color:#232323}.pe-btn--fill-white{color:#000}.pe-btn--fill-yellow{background-color:#ffe9a3;color:inherit}.pe-btn--fill-yellow:hover{background-color:#fff1c1}.pe-btn--fill-yellow:active{background-color:#ffe58f}.pe-btn--fill-yellow:selected{background-color:#fff1c1}.pe-btn--fill-yellow:disabled,.pe-btn--fill-yellow[disabled]{background-color:#232323}.pe-btn--fill-yellow{color:#000}.pe-btn--fill-red{background-color:#c33a3a;color:inherit}.pe-btn--fill-red:hover{background-color:#d64040}.pe-btn--fill-red:active{background-color:#982d2d}.pe-btn--fill-red:selected{background-color:#d64040}.pe-btn--fill-red:disabled,.pe-btn--fill-red[disabled]{background-color:#232323}.pe-btn--fill-red{color:#fff}.pe-btn--transparent-purple{background-color:#a781ff33;color:inherit}.pe-btn--transparent-purple:hover{background-color:#a781ff4d}.pe-btn--transparent-purple:active{background-color:#a781ff33}.pe-btn--transparent-purple:selected{background-color:#a781ff4d}.pe-btn--transparent-purple:disabled,.pe-btn--transparent-purple[disabled]{background-color:#ffffff0d}.pe-btn--transparent-purple{color:#c2a8ff}.pe-btn--transparent-white{background-color:#ffffff1a;color:inherit}.pe-btn--transparent-white:hover{background-color:#fff3}.pe-btn--transparent-white:active{background-color:#ffffff1a}.pe-btn--transparent-white:selected{background-color:#fff3}.pe-btn--transparent-white:disabled,.pe-btn--transparent-white[disabled]{background-color:#ffffff0d}.pe-btn--transparent-white{color:#fff}.pe-btn--transparent-red{background-color:#f3707033;color:inherit}.pe-btn--transparent-red:hover{background-color:#f370704d}.pe-btn--transparent-red:active{background-color:#f3707033}.pe-btn--transparent-red:selected{background-color:#f370704d}.pe-btn--transparent-red:disabled,.pe-btn--transparent-red[disabled]{background-color:#ffffff0d}.pe-btn--transparent-red{color:#f69d9d}.pe-btn--transparent-black{background-color:#0000004d;color:inherit}.pe-btn--transparent-black:hover{background-color:#00000080}.pe-btn--transparent-black:active{background-color:#000000b3}.pe-btn--transparent-black:selected{background-color:#00000080}.pe-btn--transparent-black:disabled,.pe-btn--transparent-black[disabled]{background-color:#ffffff0d}.pe-btn--transparent-black{color:#fff}.pe-btn--ghost-purple:hover{background-color:#a781ff4d}.pe-btn--ghost-purple:active{background-color:#a781ff33}.pe-btn--ghost-purple:selected{background-color:#a781ff4d}.pe-btn--ghost-purple{background-color:#a781ff00;color:inherit}.pe-btn--ghost-purple:disabled,.pe-btn--ghost-purple[disabled]{background-color:#a781ff00}.pe-btn--ghost-purple{color:#c2a8ff}.pe-btn--ghost-white:hover{background-color:#fff3}.pe-btn--ghost-white:active{background-color:#ffffff1a}.pe-btn--ghost-white:selected{background-color:#fff3}.pe-btn--ghost-white{background-color:#fff0;color:inherit}.pe-btn--ghost-white:disabled,.pe-btn--ghost-white[disabled]{background-color:#fff0}.pe-btn--ghost-white{color:#ffffffb3}.pe-btn--ghost-white:active,.pe-btn--ghost-white:hover{color:#fff}.pe-btn--ghost-red:hover{background-color:#f370704d}.pe-btn--ghost-red:active{background-color:#f3707033}.pe-btn--ghost-red:selected{background-color:#f370704d}.pe-btn--ghost-red{background-color:#f3707000;color:inherit}.pe-btn--ghost-red:disabled,.pe-btn--ghost-red[disabled]{background-color:#f3707000}.pe-btn--ghost-red{color:#f69d9d}.pe-btn--ghost-green:hover{background-color:#50c06c4d}.pe-btn--ghost-green:active{background-color:#50c06c33}.pe-btn--ghost-green:selected{background-color:#50c06c4d}.pe-btn--ghost-green{background-color:#50c06c00;color:inherit}.pe-btn--ghost-green:disabled,.pe-btn--ghost-green[disabled]{background-color:#50c06c00}.pe-btn--ghost-green{color:#7edc96}.pe-btn--outline-white,.pe-btn--outline-purple,.pe-btn--outline-red,.pe-btn--outline-green{transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1)}.pe-btn--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-btn--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-btn--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-btn--outline-white:disabled,.pe-btn--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-btn--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-btn--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-btn--outline-purple:disabled,.pe-btn--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-btn--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-btn--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-btn--outline-red:disabled,.pe-btn--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-btn--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-btn--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-btn--outline-green:disabled,.pe-btn--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}\n"], dependencies: [{ kind: "directive", type: ButtonDirective, selector: "[peButton]", inputs: ["size", "theme", "iconOnly", "vertical"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
646
+ }
647
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ButtonComponent, decorators: [{
648
+ type: Component,
649
+ args: [{ selector: 'pe-button', standalone: true, imports: [ButtonDirective], template: `
650
+ <button
651
+ peButton
652
+ [attr.type]="type()"
653
+ [attr.aria-label]="ariaLabel()"
654
+ [attr.aria-disabled]="disabled()"
655
+ [size]="size()"
656
+ [theme]="theme()"
657
+ [iconOnly]="iconOnly()"
658
+ [vertical]="vertical()"
659
+ [disabled]="disabled()"
660
+ (click)="handleClick($event)">
661
+ <ng-content />
662
+ </button>
663
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-btn{border:none;cursor:pointer;padding:0;text-decoration-line:none;overflow:visible;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;box-sizing:border-box;width:100%;color:#fff}.pe-btn:focus-visible,.pe-btn:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-btn{transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1)}.pe-btn[disabled],.pe-btn:disabled{cursor:not-allowed;color:#ffffff4d}.pe-btn--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800;height:32px;min-width:96px;padding:8px 12px;border-radius:8px;gap:4px}.pe-btn--sm.pe-btn--icon-only{min-width:32px}.pe-btn--sm .pe-icon{font-size:20px;line-height:20px}.pe-btn--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;height:40px;min-width:112px;padding:8px 16px;border-radius:12px;gap:8px}.pe-btn--md.pe-btn--icon-only{min-width:40px}.pe-btn--md .pe-icon{font-size:24px;line-height:24px}.pe-btn--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;height:48px;min-width:144px;padding:8px 32px;border-radius:16px;gap:12px}.pe-btn--lg.pe-btn--icon-only{min-width:48px}.pe-btn--lg .pe-icon{font-size:28px;line-height:28px}.pe-btn--lg.pe-btn--vertical{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;flex-direction:column;height:auto;width:164px;padding:16px 32px;border-radius:24px;gap:8px}.pe-btn--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;height:64px;min-width:144px;padding:8px 16px;border-radius:16px;gap:12px}.pe-btn--xl.pe-btn--icon-only{min-width:48px}.pe-btn--xl .pe-icon{font-size:32px;line-height:32px}.pe-btn--icon-only{padding:0}.pe-btn--fill-purple{background-color:#6f3de0;color:inherit}.pe-btn--fill-purple:hover{background-color:#7e4af7}.pe-btn--fill-purple:active{background-color:#5935af}.pe-btn--fill-purple:selected{background-color:#7e4af7}.pe-btn--fill-purple:disabled,.pe-btn--fill-purple[disabled]{background-color:#232323}.pe-btn--fill-purple{color:#fff}.pe-btn--fill-white{background-color:#fff;color:inherit}.pe-btn--fill-white:hover{background-color:#e7e7e7}.pe-btn--fill-white:active{background-color:#fff}.pe-btn--fill-white:selected{background-color:#fff}.pe-btn--fill-white:disabled,.pe-btn--fill-white[disabled]{background-color:#232323}.pe-btn--fill-white{color:#000}.pe-btn--fill-yellow{background-color:#ffe9a3;color:inherit}.pe-btn--fill-yellow:hover{background-color:#fff1c1}.pe-btn--fill-yellow:active{background-color:#ffe58f}.pe-btn--fill-yellow:selected{background-color:#fff1c1}.pe-btn--fill-yellow:disabled,.pe-btn--fill-yellow[disabled]{background-color:#232323}.pe-btn--fill-yellow{color:#000}.pe-btn--fill-red{background-color:#c33a3a;color:inherit}.pe-btn--fill-red:hover{background-color:#d64040}.pe-btn--fill-red:active{background-color:#982d2d}.pe-btn--fill-red:selected{background-color:#d64040}.pe-btn--fill-red:disabled,.pe-btn--fill-red[disabled]{background-color:#232323}.pe-btn--fill-red{color:#fff}.pe-btn--transparent-purple{background-color:#a781ff33;color:inherit}.pe-btn--transparent-purple:hover{background-color:#a781ff4d}.pe-btn--transparent-purple:active{background-color:#a781ff33}.pe-btn--transparent-purple:selected{background-color:#a781ff4d}.pe-btn--transparent-purple:disabled,.pe-btn--transparent-purple[disabled]{background-color:#ffffff0d}.pe-btn--transparent-purple{color:#c2a8ff}.pe-btn--transparent-white{background-color:#ffffff1a;color:inherit}.pe-btn--transparent-white:hover{background-color:#fff3}.pe-btn--transparent-white:active{background-color:#ffffff1a}.pe-btn--transparent-white:selected{background-color:#fff3}.pe-btn--transparent-white:disabled,.pe-btn--transparent-white[disabled]{background-color:#ffffff0d}.pe-btn--transparent-white{color:#fff}.pe-btn--transparent-red{background-color:#f3707033;color:inherit}.pe-btn--transparent-red:hover{background-color:#f370704d}.pe-btn--transparent-red:active{background-color:#f3707033}.pe-btn--transparent-red:selected{background-color:#f370704d}.pe-btn--transparent-red:disabled,.pe-btn--transparent-red[disabled]{background-color:#ffffff0d}.pe-btn--transparent-red{color:#f69d9d}.pe-btn--transparent-black{background-color:#0000004d;color:inherit}.pe-btn--transparent-black:hover{background-color:#00000080}.pe-btn--transparent-black:active{background-color:#000000b3}.pe-btn--transparent-black:selected{background-color:#00000080}.pe-btn--transparent-black:disabled,.pe-btn--transparent-black[disabled]{background-color:#ffffff0d}.pe-btn--transparent-black{color:#fff}.pe-btn--ghost-purple:hover{background-color:#a781ff4d}.pe-btn--ghost-purple:active{background-color:#a781ff33}.pe-btn--ghost-purple:selected{background-color:#a781ff4d}.pe-btn--ghost-purple{background-color:#a781ff00;color:inherit}.pe-btn--ghost-purple:disabled,.pe-btn--ghost-purple[disabled]{background-color:#a781ff00}.pe-btn--ghost-purple{color:#c2a8ff}.pe-btn--ghost-white:hover{background-color:#fff3}.pe-btn--ghost-white:active{background-color:#ffffff1a}.pe-btn--ghost-white:selected{background-color:#fff3}.pe-btn--ghost-white{background-color:#fff0;color:inherit}.pe-btn--ghost-white:disabled,.pe-btn--ghost-white[disabled]{background-color:#fff0}.pe-btn--ghost-white{color:#ffffffb3}.pe-btn--ghost-white:active,.pe-btn--ghost-white:hover{color:#fff}.pe-btn--ghost-red:hover{background-color:#f370704d}.pe-btn--ghost-red:active{background-color:#f3707033}.pe-btn--ghost-red:selected{background-color:#f370704d}.pe-btn--ghost-red{background-color:#f3707000;color:inherit}.pe-btn--ghost-red:disabled,.pe-btn--ghost-red[disabled]{background-color:#f3707000}.pe-btn--ghost-red{color:#f69d9d}.pe-btn--ghost-green:hover{background-color:#50c06c4d}.pe-btn--ghost-green:active{background-color:#50c06c33}.pe-btn--ghost-green:selected{background-color:#50c06c4d}.pe-btn--ghost-green{background-color:#50c06c00;color:inherit}.pe-btn--ghost-green:disabled,.pe-btn--ghost-green[disabled]{background-color:#50c06c00}.pe-btn--ghost-green{color:#7edc96}.pe-btn--outline-white,.pe-btn--outline-purple,.pe-btn--outline-red,.pe-btn--outline-green{transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1)}.pe-btn--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-btn--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-btn--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-btn--outline-white:disabled,.pe-btn--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-btn--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-btn--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-btn--outline-purple:disabled,.pe-btn--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-btn--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-btn--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-btn--outline-red:disabled,.pe-btn--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-btn--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-btn--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-btn--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-btn--outline-green:disabled,.pe-btn--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}\n"] }]
664
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], buttonClick: [{ type: i0.Output, args: ["buttonClick"] }] } });
665
+
666
+ /**
667
+ * Generates unique IDs for form field elements (control, helper, error).
668
+ * Use this so label `for`, helper `id`, and `aria-describedby` stay in sync.
669
+ */
670
+ function createFormFieldIds(prefix) {
671
+ const id = `${prefix}-${Math.random().toString(36).slice(2, 11)}`;
672
+ return {
673
+ controlId: id,
674
+ helperId: `${id}-helper`,
675
+ errorId: `${id}-error`,
676
+ };
677
+ }
678
+ /**
679
+ * Builds the value for `aria-describedby` from helper and error IDs.
680
+ */
681
+ function getFormFieldDescribedBy(helperId, errorId, hasHelperText, hasError, hasErrorText) {
682
+ const ids = [];
683
+ if (hasHelperText)
684
+ ids.push(helperId);
685
+ if (hasError && hasErrorText)
686
+ ids.push(errorId);
687
+ return ids.length > 0 ? ids.join(' ') : undefined;
688
+ }
689
+
690
+ /**
691
+ * Shared label for form fields (input, select, textarea).
692
+ * Renders label text and optional required indicator.
693
+ */
694
+ class FormFieldLabelComponent {
695
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
696
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
697
+ for = input('', ...(ngDevMode ? [{ debugName: "for" }] : []));
698
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
699
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FormFieldLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
700
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: FormFieldLabelComponent, isStandalone: true, selector: "pe-form-field-label", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, for: { classPropertyName: "for", publicName: "for", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
701
+ @if (label()) {
702
+ <label
703
+ [attr.for]="for()"
704
+ class="pe-form-field__label pe-form-field__label--{{size()}}"
705
+ [class.pe-form-field__label--required]="required()"
706
+ >
707
+ {{ label() }}
708
+ @if (required()) {
709
+ <span class="pe-form-field__required-indicator" aria-hidden="true" title="Required"> * </span>
710
+ }
711
+ </label>
712
+ }
713
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-form-field__label{color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-form-field__label--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-form-field__label--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-form-field__helper-text{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-form-field__helper-text--error{color:#f69d9d}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
714
+ }
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FormFieldLabelComponent, decorators: [{
716
+ type: Component,
717
+ args: [{ selector: 'pe-form-field-label', standalone: true, template: `
718
+ @if (label()) {
719
+ <label
720
+ [attr.for]="for()"
721
+ class="pe-form-field__label pe-form-field__label--{{size()}}"
722
+ [class.pe-form-field__label--required]="required()"
723
+ >
724
+ {{ label() }}
725
+ @if (required()) {
726
+ <span class="pe-form-field__required-indicator" aria-hidden="true" title="Required"> * </span>
727
+ }
728
+ </label>
729
+ }
730
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-form-field__label{color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-form-field__label--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-form-field__label--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-form-field__helper-text{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-form-field__helper-text--error{color:#f69d9d}\n"] }]
731
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], for: [{ type: i0.Input, args: [{ isSignal: true, alias: "for", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
732
+
733
+ /**
734
+ * Shared helper/error text for form fields (input, select, textarea).
735
+ * Shows error text when in error state, otherwise helper text.
736
+ */
737
+ class FormFieldHelperComponent {
738
+ id = input.required(...(ngDevMode ? [{ debugName: "id" }] : []));
739
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
740
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
741
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
742
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FormFieldHelperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
743
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: FormFieldHelperComponent, isStandalone: true, selector: "pe-form-field-helper", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
744
+ <span
745
+ [id]="id()"
746
+ class="pe-form-field__helper-text"
747
+ [class.pe-form-field__helper-text--error]="error()"
748
+ >
749
+ @if (error() && errorText()) {
750
+ {{ errorText() }}
751
+ } @else {
752
+ {{ helperText() }}
753
+ }
754
+ </span>
755
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-form-field__label{color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-form-field__label--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-form-field__label--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-form-field__helper-text{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-form-field__helper-text--error{color:#f69d9d}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
756
+ }
757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FormFieldHelperComponent, decorators: [{
758
+ type: Component,
759
+ args: [{ selector: 'pe-form-field-helper', standalone: true, template: `
760
+ <span
761
+ [id]="id()"
762
+ class="pe-form-field__helper-text"
763
+ [class.pe-form-field__helper-text--error]="error()"
764
+ >
765
+ @if (error() && errorText()) {
766
+ {{ errorText() }}
767
+ } @else {
768
+ {{ helperText() }}
769
+ }
770
+ </span>
771
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-form-field__label{color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--sm{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800}.pe-form-field__label--md{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800}.pe-form-field__label--lg{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800}.pe-form-field__label--xl{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-form-field__helper-text{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-form-field__helper-text--error{color:#f69d9d}\n"] }]
772
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }] } });
773
+
774
+ /**
775
+ * Calendar component. Implements FormValueControl&lt;Date | null&gt; for Signal Forms [formField].
776
+ * Use [(value)] or [formField]="myForm().date". Form model field should be Date | null.
777
+ */
778
+ class CalendarComponent {
779
+ mode = input('date', ...(ngDevMode ? [{ debugName: "mode" }] : []));
780
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
781
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
782
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
783
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
784
+ readOnly = input(false, ...(ngDevMode ? [{ debugName: "readOnly" }] : []));
785
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
786
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
787
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
788
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
789
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
790
+ minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : []));
791
+ maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : []));
792
+ minTime = input(null, ...(ngDevMode ? [{ debugName: "minTime" }] : []));
793
+ maxTime = input(null, ...(ngDevMode ? [{ debugName: "maxTime" }] : []));
794
+ locale = input('en-US', ...(ngDevMode ? [{ debugName: "locale" }] : []));
795
+ showCalendarIcon = input(true, ...(ngDevMode ? [{ debugName: "showCalendarIcon" }] : []));
796
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
797
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
798
+ ids = createFormFieldIds('pe-calendar');
799
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
800
+ currentMonth = signal(new Date(), ...(ngDevMode ? [{ debugName: "currentMonth" }] : []));
801
+ selectedTime = signal(null, ...(ngDevMode ? [{ debugName: "selectedTime" }] : []));
802
+ buttonSize = computed(() => {
803
+ const size = this.size();
804
+ if (size === 'sm')
805
+ return 'sm';
806
+ if (size === 'md')
807
+ return 'md';
808
+ if (size === 'lg')
809
+ return 'lg';
810
+ if (size === 'xl')
811
+ return 'xl';
812
+ return 'md';
813
+ }, ...(ngDevMode ? [{ debugName: "buttonSize" }] : []));
814
+ iconSize = computed(() => {
815
+ const size = this.size();
816
+ if (size === 'sm')
817
+ return '6';
818
+ if (size === 'md')
819
+ return '7';
820
+ if (size === 'lg')
821
+ return '8';
822
+ // xl calendar uses a slightly larger icon
823
+ return '10';
824
+ }, ...(ngDevMode ? [{ debugName: "iconSize" }] : []));
825
+ defaultPlaceholder = computed(() => {
826
+ const mode = this.mode();
827
+ if (this.placeholder())
828
+ return this.placeholder();
829
+ if (mode === 'date')
830
+ return 'Select date';
831
+ if (mode === 'time')
832
+ return 'Select time';
833
+ return 'Select date and time';
834
+ }, ...(ngDevMode ? [{ debugName: "defaultPlaceholder" }] : []));
835
+ displayValue = computed(() => {
836
+ const val = this.value();
837
+ if (!val)
838
+ return '';
839
+ const mode = this.mode();
840
+ const locale = this.locale();
841
+ if (mode === 'date') {
842
+ return new Intl.DateTimeFormat(locale, {
843
+ year: 'numeric',
844
+ month: '2-digit',
845
+ day: '2-digit',
846
+ }).format(val);
847
+ }
848
+ if (mode === 'time') {
849
+ return new Intl.DateTimeFormat(locale, {
850
+ hour: '2-digit',
851
+ minute: '2-digit',
852
+ hour12: false,
853
+ }).format(val);
854
+ }
855
+ return new Intl.DateTimeFormat(locale, {
856
+ year: 'numeric',
857
+ month: '2-digit',
858
+ day: '2-digit',
859
+ hour: '2-digit',
860
+ minute: '2-digit',
861
+ hour12: false,
862
+ }).format(val);
863
+ }, ...(ngDevMode ? [{ debugName: "displayValue" }] : []));
864
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
865
+ resolvedErrorText = computed(() => this.errorText() ||
866
+ (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null), ...(ngDevMode ? [{ debugName: "resolvedErrorText" }] : []));
867
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.resolvedErrorText()), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
868
+ calendarDays = computed(() => {
869
+ const month = this.currentMonth();
870
+ const selected = this.value();
871
+ const today = new Date();
872
+ today.setHours(0, 0, 0, 0);
873
+ const firstDay = new Date(month.getFullYear(), month.getMonth(), 1);
874
+ const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);
875
+ const startDate = new Date(firstDay);
876
+ startDate.setDate(startDate.getDate() - startDate.getDay());
877
+ const days = [];
878
+ const current = new Date(startDate);
879
+ for (let i = 0; i < 42; i++) {
880
+ const date = new Date(current);
881
+ date.setHours(0, 0, 0, 0);
882
+ const isCurrentMonth = date.getMonth() === month.getMonth();
883
+ const isToday = date.getTime() === today.getTime();
884
+ const isSelected = selected !== null &&
885
+ date.getTime() === new Date(selected).setHours(0, 0, 0, 0);
886
+ const isDisabled = this.isDateDisabled(date);
887
+ days.push({
888
+ date,
889
+ isCurrentMonth,
890
+ isToday,
891
+ isSelected,
892
+ isDisabled,
893
+ });
894
+ current.setDate(current.getDate() + 1);
895
+ }
896
+ return days;
897
+ }, ...(ngDevMode ? [{ debugName: "calendarDays" }] : []));
898
+ monthYearLabel = computed(() => {
899
+ const month = this.currentMonth();
900
+ return new Intl.DateTimeFormat(this.locale(), {
901
+ month: 'long',
902
+ year: 'numeric',
903
+ }).format(month);
904
+ }, ...(ngDevMode ? [{ debugName: "monthYearLabel" }] : []));
905
+ hourOptions = computed(() => {
906
+ const hours = [];
907
+ for (let i = 0; i < 24; i++) {
908
+ hours.push(i);
909
+ }
910
+ return hours;
911
+ }, ...(ngDevMode ? [{ debugName: "hourOptions" }] : []));
912
+ minuteOptions = computed(() => {
913
+ const minutes = [];
914
+ for (let i = 0; i < 60; i += 5) {
915
+ minutes.push(i);
916
+ }
917
+ return minutes;
918
+ }, ...(ngDevMode ? [{ debugName: "minuteOptions" }] : []));
919
+ selectedHour = computed(() => {
920
+ const val = this.value();
921
+ if (!val)
922
+ return this.selectedTime()?.hour ?? 0;
923
+ return val.getHours();
924
+ }, ...(ngDevMode ? [{ debugName: "selectedHour" }] : []));
925
+ selectedMinute = computed(() => {
926
+ const val = this.value();
927
+ if (!val)
928
+ return this.selectedTime()?.minute ?? 0;
929
+ return val.getMinutes();
930
+ }, ...(ngDevMode ? [{ debugName: "selectedMinute" }] : []));
931
+ valueChange = output();
932
+ opened = output();
933
+ closed = output();
934
+ constructor() {
935
+ // Keep currentMonth and selectedTime in sync with the external value
936
+ effect(() => {
937
+ const val = this.value();
938
+ if (val) {
939
+ this.currentMonth.set(new Date(val.getFullYear(), val.getMonth(), 1));
940
+ if (this.mode() !== 'date') {
941
+ this.selectedTime.set({
942
+ hour: val.getHours(),
943
+ minute: val.getMinutes(),
944
+ });
945
+ }
946
+ }
947
+ });
948
+ }
949
+ /**
950
+ * Closes the CDK menu by simulating an Escape key press.
951
+ * This lets the CDK handle all focus and cleanup logic.
952
+ */
953
+ closeMenuViaEscape() {
954
+ const escapeEvent = new KeyboardEvent('keydown', {
955
+ key: 'Escape',
956
+ code: 'Escape',
957
+ keyCode: 27,
958
+ bubbles: true,
959
+ cancelable: true,
960
+ });
961
+ document.dispatchEvent(escapeEvent);
962
+ this.isOpen.set(false);
963
+ this.closed.emit();
964
+ }
965
+ isDateDisabled(date) {
966
+ const min = this.minDate();
967
+ const max = this.maxDate();
968
+ const dateOnly = new Date(date);
969
+ dateOnly.setHours(0, 0, 0, 0);
970
+ if (min) {
971
+ const minOnly = new Date(min);
972
+ minOnly.setHours(0, 0, 0, 0);
973
+ if (dateOnly < minOnly)
974
+ return true;
975
+ }
976
+ if (max) {
977
+ const maxOnly = new Date(max);
978
+ maxOnly.setHours(0, 0, 0, 0);
979
+ if (dateOnly > maxOnly)
980
+ return true;
981
+ }
982
+ return false;
983
+ }
984
+ isTimeDisabled(hour, minute) {
985
+ const min = this.minTime();
986
+ const max = this.maxTime();
987
+ if (!min && !max)
988
+ return false;
989
+ const testDate = new Date();
990
+ testDate.setHours(hour, minute, 0, 0);
991
+ if (min) {
992
+ const minHour = min.getHours();
993
+ const minMinute = min.getMinutes();
994
+ if (hour < minHour || (hour === minHour && minute < minMinute)) {
995
+ return true;
996
+ }
997
+ }
998
+ if (max) {
999
+ const maxHour = max.getHours();
1000
+ const maxMinute = max.getMinutes();
1001
+ if (hour > maxHour || (hour === maxHour && minute > maxMinute)) {
1002
+ return true;
1003
+ }
1004
+ }
1005
+ return false;
1006
+ }
1007
+ selectDate(date) {
1008
+ if (this.isDateDisabled(date))
1009
+ return;
1010
+ const mode = this.mode();
1011
+ const currentValue = this.value();
1012
+ let newDate;
1013
+ if (mode === 'date') {
1014
+ newDate = new Date(date);
1015
+ newDate.setHours(0, 0, 0, 0);
1016
+ }
1017
+ else if (mode === 'time') {
1018
+ const time = this.selectedTime();
1019
+ newDate = new Date(date);
1020
+ if (time) {
1021
+ newDate.setHours(time.hour, time.minute, 0, 0);
1022
+ }
1023
+ else {
1024
+ newDate.setHours(0, 0, 0, 0);
1025
+ }
1026
+ }
1027
+ else {
1028
+ const time = this.selectedTime() ?? {
1029
+ hour: currentValue?.getHours() ?? 0,
1030
+ minute: currentValue?.getMinutes() ?? 0,
1031
+ };
1032
+ newDate = new Date(date);
1033
+ newDate.setHours(time.hour, time.minute, 0, 0);
1034
+ }
1035
+ this.value.set(newDate);
1036
+ this.valueChange.emit(newDate);
1037
+ if (mode === 'date') {
1038
+ this.closeMenuViaEscape();
1039
+ }
1040
+ }
1041
+ selectTime(hour, minute) {
1042
+ if (this.isTimeDisabled(hour, minute))
1043
+ return;
1044
+ this.selectedTime.set({ hour, minute });
1045
+ const mode = this.mode();
1046
+ const currentValue = this.value();
1047
+ let newDate;
1048
+ if (mode === 'time') {
1049
+ newDate = new Date();
1050
+ newDate.setHours(hour, minute, 0, 0);
1051
+ }
1052
+ else {
1053
+ const baseDate = currentValue ?? new Date();
1054
+ newDate = new Date(baseDate);
1055
+ newDate.setHours(hour, minute, 0, 0);
1056
+ }
1057
+ this.value.set(newDate);
1058
+ this.valueChange.emit(newDate);
1059
+ if (mode === 'time' || mode === 'datetime') {
1060
+ this.closeMenuViaEscape();
1061
+ }
1062
+ }
1063
+ previousMonth() {
1064
+ const current = this.currentMonth();
1065
+ const newMonth = new Date(current.getFullYear(), current.getMonth() - 1, 1);
1066
+ this.currentMonth.set(newMonth);
1067
+ }
1068
+ nextMonth() {
1069
+ const current = this.currentMonth();
1070
+ const newMonth = new Date(current.getFullYear(), current.getMonth() + 1, 1);
1071
+ this.currentMonth.set(newMonth);
1072
+ }
1073
+ selectToday() {
1074
+ const today = new Date();
1075
+ today.setHours(0, 0, 0, 0);
1076
+ this.selectDate(today);
1077
+ }
1078
+ clear() {
1079
+ this.value.set(null);
1080
+ this.valueChange.emit(null);
1081
+ this.selectedTime.set(null);
1082
+ }
1083
+ open() {
1084
+ if (this.disabled() || this.readOnly())
1085
+ return;
1086
+ this.isOpen.set(true);
1087
+ this.opened.emit();
1088
+ }
1089
+ close() {
1090
+ this.isOpen.set(false);
1091
+ this.closed.emit();
1092
+ }
1093
+ onMenuOpened() {
1094
+ this.isOpen.set(true);
1095
+ this.opened.emit();
1096
+ }
1097
+ onMenuClosed() {
1098
+ this.isOpen.set(false);
1099
+ this.closed.emit();
1100
+ }
1101
+ focus() {
1102
+ const trigger = document.getElementById(this.ids.controlId);
1103
+ trigger?.focus();
1104
+ }
1105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: CalendarComponent, isStandalone: true, selector: "pe-calendar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minTime: { classPropertyName: "minTime", publicName: "minTime", isSignal: true, isRequired: false, transformFunction: null }, maxTime: { classPropertyName: "maxTime", publicName: "maxTime", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, showCalendarIcon: { classPropertyName: "showCalendarIcon", publicName: "showCalendarIcon", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", opened: "opened", closed: "closed" }, ngImport: i0, template: "<div\n class=\"pe-calendar pe-calendar--{{ mode() }} pe-calendar--{{ size() }}\"\n [class.pe-calendar--error]=\"hasError()\"\n [class.pe-calendar--disabled]=\"disabled()\"\n [class.pe-calendar--read-only]=\"readOnly()\"\n [class.pe-calendar--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-calendar__trigger-group\" [class.pe-calendar__trigger-group--focused]=\"isOpen()\">\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"pe-calendar__trigger\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"ids.controlId + '-menu'\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <span\n class=\"pe-calendar__trigger-text\"\n [class.pe-calendar__trigger-text--placeholder]=\"!displayValue()\"\n >\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n {{ defaultPlaceholder() }}\n }\n </span>\n </button>\n\n @if (showCalendarIcon()) {\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [size]=\"buttonSize()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n class=\"pe-calendar__icon-button\"\n ariaLabel=\"Open calendar\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <pe-icon icon=\"calendar\" [size]=\"iconSize()\" />\n </pe-button>\n }\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n\n <ng-template #calendarMenu>\n <div cdkMenu class=\"pe-calendar__popup\" [id]=\"ids.controlId + '-menu'\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <div class=\"pe-calendar__date-picker\">\n <div class=\"pe-calendar__header\">\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Previous month\"\n (buttonClick)=\"previousMonth()\"\n >\n <pe-icon icon=\"chevron_left\" size=\"6\" />\n </pe-button>\n <div class=\"pe-calendar__month-year\">{{ monthYearLabel() }}</div>\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Next month\"\n (buttonClick)=\"nextMonth()\"\n >\n <pe-icon icon=\"chevron_right\" size=\"6\" />\n </pe-button>\n </div>\n\n <div class=\"pe-calendar__weekdays\">\n @for (day of ['S', 'M', 'T', 'W', 'T', 'F', 'S']; track $index) {\n <div class=\"pe-calendar__weekday\">{{ day }}</div>\n }\n </div>\n\n <div class=\"pe-calendar__days\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"pe-calendar__day\"\n [class.pe-calendar__day--current-month]=\"day.isCurrentMonth\"\n [class.pe-calendar__day--today]=\"day.isToday\"\n [class.pe-calendar__day--selected]=\"day.isSelected\"\n [class.pe-calendar__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n </div>\n }\n\n @if (mode() === 'time' || mode() === 'datetime') {\n <div class=\"pe-calendar__time-picker\">\n <div class=\"pe-calendar__time-controls\">\n <select\n class=\"pe-calendar__time-select\"\n [value]=\"selectedHour()\"\n (change)=\"selectTime(+$any($event.target).value, selectedMinute())\"\n >\n @for (hour of hourOptions(); track hour) {\n <option [value]=\"hour\" [disabled]=\"isTimeDisabled(hour, selectedMinute())\">\n {{ hour.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n <span class=\"pe-calendar__time-separator\">:</span>\n <select\n class=\"pe-calendar__time-select\"\n [value]=\"selectedMinute()\"\n (change)=\"selectTime(selectedHour(), +$any($event.target).value)\"\n >\n @for (minute of minuteOptions(); track minute) {\n <option [value]=\"minute\" [disabled]=\"isTimeDisabled(selectedHour(), minute)\">\n {{ minute.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n </div>\n </div>\n }\n\n <div class=\"pe-calendar__actions\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <pe-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"selectToday()\">\n Today\n </pe-button>\n }\n @if (value()) {\n <pe-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"clear()\">\n Clear\n </pe-button>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-calendar{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-calendar__trigger-group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-calendar__trigger-group--focused{border-color:#ffffff80}.pe-calendar:not(.pe-calendar--disabled) .pe-calendar__trigger-group:hover{border-color:#ffffff4d}.pe-calendar__trigger{all:unset;flex:1;cursor:pointer;text-align:left;background:transparent;border:none;padding:0}.pe-calendar__trigger-text{display:block;color:#fff}.pe-calendar__trigger-text--placeholder{color:#ffffff80}.pe-calendar__trigger:disabled .pe-calendar__trigger-text{color:#ffffff4d;cursor:not-allowed}.pe-calendar__icon-button{flex-shrink:0}.pe-calendar__trigger-group--focused .pe-btn:focus-visible,.pe-calendar__trigger-group--focused .pe-btn:focus{outline:none}.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus-visible,.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus-within,.pe-calendar__trigger-group--focused .pe-calendar__trigger:hover,.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus{outline:none}.pe-calendar__popup{display:flex;flex-direction:column;gap:16px;background-color:#232323;border:2px solid rgba(255,255,255,.1);border-radius:16px;padding:16px;min-width:160px;max-width:512px}.pe-calendar__date-picker{display:flex;flex-direction:column;gap:12px}.pe-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.pe-calendar__month-year{flex:1;text-align:center;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-calendar__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.pe-calendar__weekday{text-align:center;color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800;padding:4px}.pe-calendar__days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.pe-calendar__day{all:unset;aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),color .25s cubic-bezier(.4,0,.2,1);min-height:32px}.pe-calendar__day--current-month{color:#fff}.pe-calendar__day:not(.pe-calendar__day--current-month){color:#ffffff80}.pe-calendar__day--today{border:2px solid #c2a8ff}.pe-calendar__day--selected{background-color:#6f3de0;border-color:#6f3de0;color:#fff}.pe-calendar__day--disabled{color:#ffffff4d;cursor:not-allowed;pointer-events:none}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover{background-color:#ffffff1a;color:inherit}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:hover{background-color:#fff3}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:active{background-color:#ffffff1a}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:selected{background-color:#fff3}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:disabled,.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover[disabled]{background-color:#ffffff0d}.pe-calendar__time-picker{display:flex;flex-direction:column;gap:8px}.pe-calendar__time-controls{display:flex;align-items:center;justify-content:center;gap:8px}.pe-calendar__time-select{appearance:none;background-color:transparent;border:2px solid rgba(255,255,255,.1);border-radius:8px;min-width:48px;height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;cursor:pointer;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-calendar__time-select:hover:not(:disabled){border-color:#ffffff4d}.pe-calendar__time-select:focus{outline:none;border-color:#ffffff80}.pe-calendar__time-select:disabled{color:#ffffff4d;cursor:not-allowed;border-color:#ffffff1a;background-color:transparent}.pe-calendar__time-select option{background-color:#232323;color:#fff}.pe-calendar__time-select option:disabled{color:#ffffff4d}.pe-calendar__time-separator{color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-calendar__actions{display:flex;gap:8px;justify-content:flex-end;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.pe-calendar--sm .pe-calendar__trigger-group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-calendar--sm .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;min-height:24px}.pe-calendar--md .pe-calendar__trigger-group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-calendar--md .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;min-height:32px}.pe-calendar--lg .pe-calendar__trigger-group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-calendar--lg .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;min-height:40px}.pe-calendar--xl .pe-calendar__trigger-group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-calendar--xl .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400;min-height:48px}.pe-calendar--error .pe-calendar__trigger-group{border:2px solid #f69d9d}.pe-calendar--disabled .pe-calendar__trigger-group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-calendar--disabled .pe-calendar__trigger,.pe-calendar--disabled .pe-calendar__trigger:disabled::placeholder{color:#ffffff4d}.pe-calendar--read-only .pe-calendar__trigger-group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-calendar--read-only .pe-calendar__trigger,.pe-calendar--read-only .pe-calendar__trigger:read-only::placeholder{color:#ffffffb3}@media(max-width:767px){.pe-calendar__popup{min-width:auto;width:calc(100vw - 32px);max-width:calc(100vw - 32px);box-sizing:border-box;overflow-x:hidden;position:relative}.pe-calendar__day{min-height:24px}}@media(max-width:1023px){.pe-calendar :host ::ng-deep .cdk-overlay-pane{max-width:calc(100vw - 32px)!important;margin-left:16px!important;margin-right:16px!important}}\n"], dependencies: [{ kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1107
+ }
1108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CalendarComponent, decorators: [{
1109
+ type: Component,
1110
+ args: [{ selector: 'pe-calendar', standalone: true, imports: [
1111
+ CdkMenuTrigger,
1112
+ CdkMenu,
1113
+ ButtonComponent,
1114
+ IconComponent,
1115
+ FormFieldLabelComponent,
1116
+ FormFieldHelperComponent,
1117
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"pe-calendar pe-calendar--{{ mode() }} pe-calendar--{{ size() }}\"\n [class.pe-calendar--error]=\"hasError()\"\n [class.pe-calendar--disabled]=\"disabled()\"\n [class.pe-calendar--read-only]=\"readOnly()\"\n [class.pe-calendar--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-calendar__trigger-group\" [class.pe-calendar__trigger-group--focused]=\"isOpen()\">\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"pe-calendar__trigger\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"ids.controlId + '-menu'\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <span\n class=\"pe-calendar__trigger-text\"\n [class.pe-calendar__trigger-text--placeholder]=\"!displayValue()\"\n >\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n {{ defaultPlaceholder() }}\n }\n </span>\n </button>\n\n @if (showCalendarIcon()) {\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [size]=\"buttonSize()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n class=\"pe-calendar__icon-button\"\n ariaLabel=\"Open calendar\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <pe-icon icon=\"calendar\" [size]=\"iconSize()\" />\n </pe-button>\n }\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n\n <ng-template #calendarMenu>\n <div cdkMenu class=\"pe-calendar__popup\" [id]=\"ids.controlId + '-menu'\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <div class=\"pe-calendar__date-picker\">\n <div class=\"pe-calendar__header\">\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Previous month\"\n (buttonClick)=\"previousMonth()\"\n >\n <pe-icon icon=\"chevron_left\" size=\"6\" />\n </pe-button>\n <div class=\"pe-calendar__month-year\">{{ monthYearLabel() }}</div>\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Next month\"\n (buttonClick)=\"nextMonth()\"\n >\n <pe-icon icon=\"chevron_right\" size=\"6\" />\n </pe-button>\n </div>\n\n <div class=\"pe-calendar__weekdays\">\n @for (day of ['S', 'M', 'T', 'W', 'T', 'F', 'S']; track $index) {\n <div class=\"pe-calendar__weekday\">{{ day }}</div>\n }\n </div>\n\n <div class=\"pe-calendar__days\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"pe-calendar__day\"\n [class.pe-calendar__day--current-month]=\"day.isCurrentMonth\"\n [class.pe-calendar__day--today]=\"day.isToday\"\n [class.pe-calendar__day--selected]=\"day.isSelected\"\n [class.pe-calendar__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n </div>\n }\n\n @if (mode() === 'time' || mode() === 'datetime') {\n <div class=\"pe-calendar__time-picker\">\n <div class=\"pe-calendar__time-controls\">\n <select\n class=\"pe-calendar__time-select\"\n [value]=\"selectedHour()\"\n (change)=\"selectTime(+$any($event.target).value, selectedMinute())\"\n >\n @for (hour of hourOptions(); track hour) {\n <option [value]=\"hour\" [disabled]=\"isTimeDisabled(hour, selectedMinute())\">\n {{ hour.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n <span class=\"pe-calendar__time-separator\">:</span>\n <select\n class=\"pe-calendar__time-select\"\n [value]=\"selectedMinute()\"\n (change)=\"selectTime(selectedHour(), +$any($event.target).value)\"\n >\n @for (minute of minuteOptions(); track minute) {\n <option [value]=\"minute\" [disabled]=\"isTimeDisabled(selectedHour(), minute)\">\n {{ minute.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n </div>\n </div>\n }\n\n <div class=\"pe-calendar__actions\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <pe-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"selectToday()\">\n Today\n </pe-button>\n }\n @if (value()) {\n <pe-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"clear()\">\n Clear\n </pe-button>\n }\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-calendar{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-calendar__trigger-group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-calendar__trigger-group--focused{border-color:#ffffff80}.pe-calendar:not(.pe-calendar--disabled) .pe-calendar__trigger-group:hover{border-color:#ffffff4d}.pe-calendar__trigger{all:unset;flex:1;cursor:pointer;text-align:left;background:transparent;border:none;padding:0}.pe-calendar__trigger-text{display:block;color:#fff}.pe-calendar__trigger-text--placeholder{color:#ffffff80}.pe-calendar__trigger:disabled .pe-calendar__trigger-text{color:#ffffff4d;cursor:not-allowed}.pe-calendar__icon-button{flex-shrink:0}.pe-calendar__trigger-group--focused .pe-btn:focus-visible,.pe-calendar__trigger-group--focused .pe-btn:focus{outline:none}.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus-visible,.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus-within,.pe-calendar__trigger-group--focused .pe-calendar__trigger:hover,.pe-calendar__trigger-group--focused .pe-calendar__trigger:focus{outline:none}.pe-calendar__popup{display:flex;flex-direction:column;gap:16px;background-color:#232323;border:2px solid rgba(255,255,255,.1);border-radius:16px;padding:16px;min-width:160px;max-width:512px}.pe-calendar__date-picker{display:flex;flex-direction:column;gap:12px}.pe-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.pe-calendar__month-year{flex:1;text-align:center;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-calendar__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.pe-calendar__weekday{text-align:center;color:#ffffff80;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:800;padding:4px}.pe-calendar__days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.pe-calendar__day{all:unset;aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;color:#fff;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),color .25s cubic-bezier(.4,0,.2,1);min-height:32px}.pe-calendar__day--current-month{color:#fff}.pe-calendar__day:not(.pe-calendar__day--current-month){color:#ffffff80}.pe-calendar__day--today{border:2px solid #c2a8ff}.pe-calendar__day--selected{background-color:#6f3de0;border-color:#6f3de0;color:#fff}.pe-calendar__day--disabled{color:#ffffff4d;cursor:not-allowed;pointer-events:none}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover{background-color:#ffffff1a;color:inherit}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:hover{background-color:#fff3}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:active{background-color:#ffffff1a}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:selected{background-color:#fff3}.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover:disabled,.pe-calendar__day:not(.pe-calendar__day--disabled):not(.pe-calendar__day--selected):hover[disabled]{background-color:#ffffff0d}.pe-calendar__time-picker{display:flex;flex-direction:column;gap:8px}.pe-calendar__time-controls{display:flex;align-items:center;justify-content:center;gap:8px}.pe-calendar__time-select{appearance:none;background-color:transparent;border:2px solid rgba(255,255,255,.1);border-radius:8px;min-width:48px;height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;cursor:pointer;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-calendar__time-select:hover:not(:disabled){border-color:#ffffff4d}.pe-calendar__time-select:focus{outline:none;border-color:#ffffff80}.pe-calendar__time-select:disabled{color:#ffffff4d;cursor:not-allowed;border-color:#ffffff1a;background-color:transparent}.pe-calendar__time-select option{background-color:#232323;color:#fff}.pe-calendar__time-select option:disabled{color:#ffffff4d}.pe-calendar__time-separator{color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800}.pe-calendar__actions{display:flex;gap:8px;justify-content:flex-end;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}.pe-calendar--sm .pe-calendar__trigger-group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-calendar--sm .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;min-height:24px}.pe-calendar--md .pe-calendar__trigger-group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-calendar--md .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;min-height:32px}.pe-calendar--lg .pe-calendar__trigger-group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-calendar--lg .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;min-height:40px}.pe-calendar--xl .pe-calendar__trigger-group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-calendar--xl .pe-calendar__day{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400;min-height:48px}.pe-calendar--error .pe-calendar__trigger-group{border:2px solid #f69d9d}.pe-calendar--disabled .pe-calendar__trigger-group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-calendar--disabled .pe-calendar__trigger,.pe-calendar--disabled .pe-calendar__trigger:disabled::placeholder{color:#ffffff4d}.pe-calendar--read-only .pe-calendar__trigger-group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-calendar--read-only .pe-calendar__trigger,.pe-calendar--read-only .pe-calendar__trigger:read-only::placeholder{color:#ffffffb3}@media(max-width:767px){.pe-calendar__popup{min-width:auto;width:calc(100vw - 32px);max-width:calc(100vw - 32px);box-sizing:border-box;overflow-x:hidden;position:relative}.pe-calendar__day{min-height:24px}}@media(max-width:1023px){.pe-calendar :host ::ng-deep .cdk-overlay-pane{max-width:calc(100vw - 32px)!important;margin-left:16px!important;margin-right:16px!important}}\n"] }]
1118
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], minTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "minTime", required: false }] }], maxTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxTime", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], showCalendarIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCalendarIcon", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
1119
+
1120
+ class CardComponent {
1121
+ // State inputs
1122
+ focused = input(false, { ...(ngDevMode ? { debugName: "focused" } : {}), transform: booleanAttribute });
1123
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
1124
+ // Layout inputs
1125
+ cardDirection = input('vertical', ...(ngDevMode ? [{ debugName: "cardDirection" }] : []));
1126
+ cardCaptionSize = input('default', ...(ngDevMode ? [{ debugName: "cardCaptionSize" }] : []));
1127
+ footerDist = input('default', ...(ngDevMode ? [{ debugName: "footerDist" }] : []));
1128
+ // Media inputs
1129
+ mediaAspectRatio = input('default', ...(ngDevMode ? [{ debugName: "mediaAspectRatio" }] : []));
1130
+ mediaBlur = input(false, { ...(ngDevMode ? { debugName: "mediaBlur" } : {}), transform: booleanAttribute });
1131
+ mediaGrayscale = input(false, { ...(ngDevMode ? { debugName: "mediaGrayscale" } : {}), transform: booleanAttribute });
1132
+ // Content inputs
1133
+ cardCaption = input('', ...(ngDevMode ? [{ debugName: "cardCaption" }] : []));
1134
+ cardTitle = input('', ...(ngDevMode ? [{ debugName: "cardTitle" }] : []));
1135
+ cardTitleSingleLine = input(false, { ...(ngDevMode ? { debugName: "cardTitleSingleLine" } : {}), transform: booleanAttribute });
1136
+ cardSubtitle = input('', ...(ngDevMode ? [{ debugName: "cardSubtitle" }] : []));
1137
+ cardSubtitleSingleLine = input(false, { ...(ngDevMode ? { debugName: "cardSubtitleSingleLine" } : {}), transform: booleanAttribute });
1138
+ // Loading state
1139
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: booleanAttribute });
1140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1141
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: CardComponent, isStandalone: true, selector: "pe-card", inputs: { focused: { classPropertyName: "focused", publicName: "focused", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, cardDirection: { classPropertyName: "cardDirection", publicName: "cardDirection", isSignal: true, isRequired: false, transformFunction: null }, cardCaptionSize: { classPropertyName: "cardCaptionSize", publicName: "cardCaptionSize", isSignal: true, isRequired: false, transformFunction: null }, footerDist: { classPropertyName: "footerDist", publicName: "footerDist", isSignal: true, isRequired: false, transformFunction: null }, mediaAspectRatio: { classPropertyName: "mediaAspectRatio", publicName: "mediaAspectRatio", isSignal: true, isRequired: false, transformFunction: null }, mediaBlur: { classPropertyName: "mediaBlur", publicName: "mediaBlur", isSignal: true, isRequired: false, transformFunction: null }, mediaGrayscale: { classPropertyName: "mediaGrayscale", publicName: "mediaGrayscale", isSignal: true, isRequired: false, transformFunction: null }, cardCaption: { classPropertyName: "cardCaption", publicName: "cardCaption", isSignal: true, isRequired: false, transformFunction: null }, cardTitle: { classPropertyName: "cardTitle", publicName: "cardTitle", isSignal: true, isRequired: false, transformFunction: null }, cardTitleSingleLine: { classPropertyName: "cardTitleSingleLine", publicName: "cardTitleSingleLine", isSignal: true, isRequired: false, transformFunction: null }, cardSubtitle: { classPropertyName: "cardSubtitle", publicName: "cardSubtitle", isSignal: true, isRequired: false, transformFunction: null }, cardSubtitleSingleLine: { classPropertyName: "cardSubtitleSingleLine", publicName: "cardSubtitleSingleLine", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-disabled": "disabled() ? \"true\" : null", "class.pe-card--focused": "focused()", "class.pe-card--disabled": "disabled()", "class.pe-card--horizontal": "cardDirection() === \"horizontal\"", "class.pe-card--caption-sm": "cardCaptionSize() === \"sm\"", "class.pe-card--footer-equal": "footerDist() === \"equal\"", "class.pe-card--media-square": "mediaAspectRatio() === \"square\"", "class.pe-card--media-portrait": "mediaAspectRatio() === \"portrait\"", "class.pe-card--media-grayscale": "mediaGrayscale()", "class.pe-card--loading": "loading()", "class.pe-card--media-blurred": "mediaBlur()" }, classAttribute: "pe-card" }, ngImport: i0, template: "@if (loading()) {\n <div class=\"pe-card__skeleton\">\n <div class=\"pe-card__media\">\n <pe-skeleton variant=\"rect\" borderRadius=\"lg\" [show]=\"true\" />\n </div>\n <div class=\"pe-card__content\">\n <div class=\"pe-card__content-title pe-card__content-title--single-line\">\n <pe-skeleton variant=\"text\" [lines]=\"2\" borderRadius=\"sm\" />\n </div>\n <div class=\"pe-card__content-subtitle pe-card__content-subtitle--single-line\">\n <pe-skeleton variant=\"text\" [lines]=\"1\" borderRadius=\"sm\" />\n </div>\n </div>\n </div>\n} @else {\n <div class=\"pe-card__media\">\n <ng-content select=\"[udsCardMedia]\" />\n <ng-content select=\"[udsCardMediaOverlay]\" />\n </div>\n <div class=\"pe-card__media-action\">\n <ng-content select=\"[udsCardMediaAction]\" />\n </div>\n\n <div class=\"pe-card__content\">\n @if (cardCaption()) {\n <div class=\"pe-card__content-caption\">\n {{ cardCaption() }}\n </div>\n }\n @if (cardTitle()) {\n <div\n class=\"pe-card__content-title\"\n [class.pe-card__content-title--single-line]=\"cardTitleSingleLine()\"\n >\n {{ cardTitle() }}\n </div>\n }\n @if (cardSubtitle()) {\n <div\n class=\"pe-card__content-subtitle\"\n [class.pe-card__content-subtitle--single-line]=\"cardSubtitleSingleLine()\"\n >\n {{ cardSubtitle() }}\n </div>\n }\n </div>\n\n <div class=\"pe-card__footer\">\n <ng-content select=\"[udsCardFooter]\" />\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-card{display:flex;position:relative;flex-direction:column;overflow:visible;width:100%;color:#ffffff80;border-radius:8px;gap:12px;outline:8px solid transparent;background-color:transparent;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;transition:background-color .25s cubic-bezier(.4,0,.2,1),outline .25s cubic-bezier(.4,0,.2,1)}@media(min-width:0px){.pe-card{min-width:140px}}@media(min-width:768px){.pe-card{min-width:208px}}@media(min-width:1280px){.pe-card{min-width:232px}}.pe-card:hover,.pe-card:focus,.pe-card:focus-within,.pe-card--focused{outline-color:#ffffff1a;background-color:#ffffff1a}.pe-card__media{position:relative;overflow:hidden;width:100%;background-color:#ffffff1a;border-radius:8px}@media(min-width:0px){.pe-card__media{min-height:140px}}@media(min-width:768px){.pe-card__media{min-height:208px}}@media(min-width:1280px){.pe-card__media{min-height:232px}}.pe-card__media>:first-child{width:100%;height:100%;display:block;object-fit:cover;filter:blur(var(--pe-card__media-blur, 0)) grayscale(var(--pe-card__media-grayscale, 0))}.pe-card__media>:nth-child(2){position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.pe-card__media-action{opacity:0;position:absolute;top:8px;right:8px;z-index:2;transition:opacity .15s cubic-bezier(.4,0,.2,1)}@media(max-width:1023px){.pe-card__media-action{opacity:1}}.pe-card:hover .pe-card__media-action,.pe-card:focus .pe-card__media-action,.pe-card:focus-within .pe-card__media-action{opacity:1}.pe-card__content{flex:1}.pe-card__content-caption{color:#ffffff80;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__content-title{color:#fff;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pe-card__content-title--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__content-subtitle{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pe-card__content-subtitle--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__footer{display:flex;gap:8px}.pe-card--disabled{cursor:not-allowed;pointer-events:none;opacity:.5}.pe-card--caption-sm .pe-card__content-caption{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-card--footer-equal .pe-card__footer>*{flex:1}.pe-card--media-square .pe-card__media{aspect-ratio:1/1}.pe-card--media-portrait .pe-card__media{aspect-ratio:3/4}.pe-card__media img{width:100%;height:100%;object-fit:cover}.pe-card--media-blurred{--pe-card__media-blur: 16px}.pe-card--media-blurred .pe-card__media>:first-child{fill:#0000004d}.pe-card--media-grayscale{--pe-card__media-grayscale: 1}.pe-card--media-grayscale .pe-card__media>:first-child{opacity:.5;mix-blend-mode:luminosity}.pe-card__skeleton{display:flex;flex-direction:column;gap:12px;min-height:100px}.pe-card__skeleton>.pe-skeleton:first-child{width:100%;aspect-ratio:16/9}.pe-card__skeleton-body{margin-top:12px;display:flex;flex-direction:column;gap:8px}\n"], dependencies: [{ kind: "component", type: SkeletonComponent, selector: "pe-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1142
+ }
1143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CardComponent, decorators: [{
1144
+ type: Component,
1145
+ args: [{ selector: 'pe-card', standalone: true, imports: [SkeletonComponent], host: {
1146
+ class: 'pe-card',
1147
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
1148
+ '[class.pe-card--focused]': 'focused()',
1149
+ '[class.pe-card--disabled]': 'disabled()',
1150
+ '[class.pe-card--horizontal]': 'cardDirection() === "horizontal"',
1151
+ '[class.pe-card--caption-sm]': 'cardCaptionSize() === "sm"',
1152
+ '[class.pe-card--footer-equal]': 'footerDist() === "equal"',
1153
+ '[class.pe-card--media-square]': 'mediaAspectRatio() === "square"',
1154
+ '[class.pe-card--media-portrait]': 'mediaAspectRatio() === "portrait"',
1155
+ '[class.pe-card--media-grayscale]': 'mediaGrayscale()',
1156
+ '[class.pe-card--loading]': 'loading()',
1157
+ '[class.pe-card--media-blurred]': 'mediaBlur()',
1158
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (loading()) {\n <div class=\"pe-card__skeleton\">\n <div class=\"pe-card__media\">\n <pe-skeleton variant=\"rect\" borderRadius=\"lg\" [show]=\"true\" />\n </div>\n <div class=\"pe-card__content\">\n <div class=\"pe-card__content-title pe-card__content-title--single-line\">\n <pe-skeleton variant=\"text\" [lines]=\"2\" borderRadius=\"sm\" />\n </div>\n <div class=\"pe-card__content-subtitle pe-card__content-subtitle--single-line\">\n <pe-skeleton variant=\"text\" [lines]=\"1\" borderRadius=\"sm\" />\n </div>\n </div>\n </div>\n} @else {\n <div class=\"pe-card__media\">\n <ng-content select=\"[udsCardMedia]\" />\n <ng-content select=\"[udsCardMediaOverlay]\" />\n </div>\n <div class=\"pe-card__media-action\">\n <ng-content select=\"[udsCardMediaAction]\" />\n </div>\n\n <div class=\"pe-card__content\">\n @if (cardCaption()) {\n <div class=\"pe-card__content-caption\">\n {{ cardCaption() }}\n </div>\n }\n @if (cardTitle()) {\n <div\n class=\"pe-card__content-title\"\n [class.pe-card__content-title--single-line]=\"cardTitleSingleLine()\"\n >\n {{ cardTitle() }}\n </div>\n }\n @if (cardSubtitle()) {\n <div\n class=\"pe-card__content-subtitle\"\n [class.pe-card__content-subtitle--single-line]=\"cardSubtitleSingleLine()\"\n >\n {{ cardSubtitle() }}\n </div>\n }\n </div>\n\n <div class=\"pe-card__footer\">\n <ng-content select=\"[udsCardFooter]\" />\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-card{display:flex;position:relative;flex-direction:column;overflow:visible;width:100%;color:#ffffff80;border-radius:8px;gap:12px;outline:8px solid transparent;background-color:transparent;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;transition:background-color .25s cubic-bezier(.4,0,.2,1),outline .25s cubic-bezier(.4,0,.2,1)}@media(min-width:0px){.pe-card{min-width:140px}}@media(min-width:768px){.pe-card{min-width:208px}}@media(min-width:1280px){.pe-card{min-width:232px}}.pe-card:hover,.pe-card:focus,.pe-card:focus-within,.pe-card--focused{outline-color:#ffffff1a;background-color:#ffffff1a}.pe-card__media{position:relative;overflow:hidden;width:100%;background-color:#ffffff1a;border-radius:8px}@media(min-width:0px){.pe-card__media{min-height:140px}}@media(min-width:768px){.pe-card__media{min-height:208px}}@media(min-width:1280px){.pe-card__media{min-height:232px}}.pe-card__media>:first-child{width:100%;height:100%;display:block;object-fit:cover;filter:blur(var(--pe-card__media-blur, 0)) grayscale(var(--pe-card__media-grayscale, 0))}.pe-card__media>:nth-child(2){position:absolute;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.pe-card__media-action{opacity:0;position:absolute;top:8px;right:8px;z-index:2;transition:opacity .15s cubic-bezier(.4,0,.2,1)}@media(max-width:1023px){.pe-card__media-action{opacity:1}}.pe-card:hover .pe-card__media-action,.pe-card:focus .pe-card__media-action,.pe-card:focus-within .pe-card__media-action{opacity:1}.pe-card__content{flex:1}.pe-card__content-caption{color:#ffffff80;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__content-title{color:#fff;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pe-card__content-title--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__content-subtitle{color:#ffffff80;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:800;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.pe-card__content-subtitle--single-line{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.pe-card__footer{display:flex;gap:8px}.pe-card--disabled{cursor:not-allowed;pointer-events:none;opacity:.5}.pe-card--caption-sm .pe-card__content-caption{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-card--footer-equal .pe-card__footer>*{flex:1}.pe-card--media-square .pe-card__media{aspect-ratio:1/1}.pe-card--media-portrait .pe-card__media{aspect-ratio:3/4}.pe-card__media img{width:100%;height:100%;object-fit:cover}.pe-card--media-blurred{--pe-card__media-blur: 16px}.pe-card--media-blurred .pe-card__media>:first-child{fill:#0000004d}.pe-card--media-grayscale{--pe-card__media-grayscale: 1}.pe-card--media-grayscale .pe-card__media>:first-child{opacity:.5;mix-blend-mode:luminosity}.pe-card__skeleton{display:flex;flex-direction:column;gap:12px;min-height:100px}.pe-card__skeleton>.pe-skeleton:first-child{width:100%;aspect-ratio:16/9}.pe-card__skeleton-body{margin-top:12px;display:flex;flex-direction:column;gap:8px}\n"] }]
1159
+ }], propDecorators: { focused: [{ type: i0.Input, args: [{ isSignal: true, alias: "focused", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], cardDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardDirection", required: false }] }], cardCaptionSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardCaptionSize", required: false }] }], footerDist: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerDist", required: false }] }], mediaAspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "mediaAspectRatio", required: false }] }], mediaBlur: [{ type: i0.Input, args: [{ isSignal: true, alias: "mediaBlur", required: false }] }], mediaGrayscale: [{ type: i0.Input, args: [{ isSignal: true, alias: "mediaGrayscale", required: false }] }], cardCaption: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardCaption", required: false }] }], cardTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardTitle", required: false }] }], cardTitleSingleLine: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardTitleSingleLine", required: false }] }], cardSubtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardSubtitle", required: false }] }], cardSubtitleSingleLine: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardSubtitleSingleLine", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
1160
+
1161
+ class CarouselItemComponent {
1162
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CarouselItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.2", type: CarouselItemComponent, isStandalone: true, selector: "pe-carousel-item", host: { classAttribute: "splide__slide pe-carousel__item" }, ngImport: i0, template: ` <ng-content /> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1164
+ }
1165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CarouselItemComponent, decorators: [{
1166
+ type: Component,
1167
+ args: [{
1168
+ selector: 'pe-carousel-item',
1169
+ standalone: true,
1170
+ template: ` <ng-content /> `,
1171
+ encapsulation: ViewEncapsulation.None,
1172
+ changeDetection: ChangeDetectionStrategy.OnPush,
1173
+ host: {
1174
+ class: 'splide__slide pe-carousel__item',
1175
+ },
1176
+ }]
1177
+ }] });
1178
+ class CarouselComponent {
1179
+ options = input({
1180
+ autoplay: true,
1181
+ }, ...(ngDevMode ? [{ debugName: "options" }] : []));
1182
+ autoMount = input(true, ...(ngDevMode ? [{ debugName: "autoMount" }] : []));
1183
+ mounted = output();
1184
+ carousel = viewChild('carousel', ...(ngDevMode ? [{ debugName: "carousel" }] : []));
1185
+ items = contentChildren(CarouselItemComponent, ...(ngDevMode ? [{ debugName: "items" }] : []));
1186
+ instance = null;
1187
+ constructor() {
1188
+ effect(() => {
1189
+ this.items(); // trigger change detection
1190
+ this.updateCarouselOnItemsChange();
1191
+ });
1192
+ }
1193
+ ngAfterViewInit() {
1194
+ this.init();
1195
+ }
1196
+ ngOnDestroy() {
1197
+ this.instance?.destroy();
1198
+ }
1199
+ // Get the Splide instance
1200
+ getInstance() {
1201
+ return this.instance;
1202
+ }
1203
+ // Methods to control the carousel
1204
+ goNext() {
1205
+ this.instance?.go('>');
1206
+ }
1207
+ goPrev() {
1208
+ this.instance?.go('<');
1209
+ }
1210
+ goTo(index) {
1211
+ this.instance?.go(index);
1212
+ }
1213
+ // Mount the carousel
1214
+ mount() {
1215
+ if (!this.instance) {
1216
+ throw new Error('Carousel instance not found');
1217
+ }
1218
+ this.instance.mount();
1219
+ this.mounted.emit(this.instance);
1220
+ }
1221
+ init() {
1222
+ const carousel = this.carousel();
1223
+ if (!carousel) {
1224
+ throw new Error('Carousel element not found');
1225
+ }
1226
+ // initialize the carousel
1227
+ this.instance = new Splide(carousel.nativeElement, {
1228
+ arrows: false,
1229
+ classes: {
1230
+ page: 'splide__pagination__page pe-carousel__pagination-dot',
1231
+ },
1232
+ ...this.options(),
1233
+ });
1234
+ // mount the carousel
1235
+ if (this.autoMount()) {
1236
+ this.mount();
1237
+ }
1238
+ }
1239
+ updateCarouselOnItemsChange() {
1240
+ this.instance?.refresh();
1241
+ }
1242
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1243
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.2", type: CarouselComponent, isStandalone: true, selector: "pe-carousel", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, autoMount: { classPropertyName: "autoMount", publicName: "autoMount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mounted: "mounted" }, queries: [{ propertyName: "items", predicate: CarouselItemComponent, isSignal: true }], viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true, isSignal: true }], ngImport: i0, template: `
1244
+ <div class="splide pe-carousel" #carousel role="region" aria-roledescription="carousel">
1245
+ <div class="splide__track pe-carousel__track">
1246
+ <div class="splide__list">
1247
+ <ng-content />
1248
+ </div>
1249
+ </div>
1250
+ </div>
1251
+ `, isInline: true, styles: ["@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;contain:strict;display:inline-block;height:20px;inset:0;margin:auto;position:absolute;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}.pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-carousel{display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr}.pe-carousel__pagination-dot{border:0;border-radius:50%;margin:1rem .2rem 0;padding:0;height:6px;width:6px;background-color:#ffffff80}.pe-carousel__pagination-dot.is-active{background-color:#fff}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1252
+ }
1253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CarouselComponent, decorators: [{
1254
+ type: Component,
1255
+ args: [{ selector: 'pe-carousel', standalone: true, template: `
1256
+ <div class="splide pe-carousel" #carousel role="region" aria-roledescription="carousel">
1257
+ <div class="splide__track pe-carousel__track">
1258
+ <div class="splide__list">
1259
+ <ng-content />
1260
+ </div>
1261
+ </div>
1262
+ </div>
1263
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;contain:strict;display:inline-block;height:20px;inset:0;margin:auto;position:absolute;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}.pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-carousel{display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr}.pe-carousel__pagination-dot{border:0;border-radius:50%;margin:1rem .2rem 0;padding:0;height:6px;width:6px;background-color:#ffffff80}.pe-carousel__pagination-dot.is-active{background-color:#fff}\n"] }]
1264
+ }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], autoMount: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoMount", required: false }] }], mounted: [{ type: i0.Output, args: ["mounted"] }], carousel: [{ type: i0.ViewChild, args: ['carousel', { isSignal: true }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CarouselItemComponent), { isSignal: true }] }] } });
1265
+
1266
+ /**
1267
+ * Checkbox component. Implements FormCheckboxControl for Signal Forms [formField].
1268
+ * Use [(checked)] or [formField]="myForm().acceptTerms". No value property.
1269
+ * Uses shared form field label and helper for alignment with input, textarea, radio-group.
1270
+ */
1271
+ class CheckboxComponent {
1272
+ checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
1273
+ disabled = model(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1274
+ indeterminate = model(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : []));
1275
+ zone = input('none', ...(ngDevMode ? [{ debugName: "zone" }] : []));
1276
+ size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : []));
1277
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
1278
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
1279
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
1280
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
1281
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
1282
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
1283
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
1284
+ ids = createFormFieldIds('pe-checkbox');
1285
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
1286
+ resolvedErrorText = computed(() => this.errorText() ||
1287
+ (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null), ...(ngDevMode ? [{ debugName: "resolvedErrorText" }] : []));
1288
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.resolvedErrorText()), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
1289
+ onChange(event) {
1290
+ const input = event.target;
1291
+ this.checked.set(input.checked);
1292
+ }
1293
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1294
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: CheckboxComponent, isStandalone: true, selector: "pe-checkbox", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, zone: { classPropertyName: "zone", publicName: "zone", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", disabled: "disabledChange", indeterminate: "indeterminateChange" }, ngImport: i0, template: `
1295
+ <div
1296
+ class="pe-checkbox pe-checkbox--{{ size() }}"
1297
+ [class.pe-checkbox--accessible-zone]="zone() === 'accessible'"
1298
+ [class.pe-checkbox--visible-zone]="zone() === 'visible'"
1299
+ [class.pe-checkbox--checked-visible-zone]="zone() === 'checked-visible'"
1300
+ [class.pe-checkbox--error]="hasError()"
1301
+ [class.pe-checkbox--disabled]="disabled()"
1302
+ [class.pe-checkbox--required]="required()"
1303
+ [attr.aria-invalid]="hasError()"
1304
+ [attr.aria-required]="required()"
1305
+ [attr.aria-describedby]="describedBy()"
1306
+ >
1307
+ <pe-form-field-label
1308
+ [label]="label()"
1309
+ [required]="required()"
1310
+ [for]="ids.controlId"
1311
+ [size]="size() === 'sm' ? 'sm' : 'md'"
1312
+ />
1313
+
1314
+ <label
1315
+ class="pe-checkbox__row"
1316
+ [class.pe-checkbox__row--accessible-zone]="zone() === 'accessible'"
1317
+ [class.pe-checkbox__row--visible-zone]="zone() === 'visible'"
1318
+ [class.pe-checkbox__row--checked-visible-zone]="zone() === 'checked-visible'"
1319
+ [class.pe-checkbox__row--sm]="size() === 'sm'"
1320
+ [class.pe-checkbox__row--error]="hasError()"
1321
+ [attr.for]="ids.controlId"
1322
+ >
1323
+ <input
1324
+ type="checkbox"
1325
+ class="pe-checkbox__input"
1326
+ [id]="ids.controlId"
1327
+ [checked]="checked()"
1328
+ [disabled]="disabled()"
1329
+ [indeterminate]="indeterminate()"
1330
+ [attr.aria-describedby]="describedBy()"
1331
+ [attr.aria-invalid]="hasError()"
1332
+ [attr.aria-required]="required()"
1333
+ (change)="onChange($event)"
1334
+ />
1335
+ <span class="pe-checkbox__pseudo-input"></span>
1336
+ <span class="pe-checkbox__label">
1337
+ <ng-content />
1338
+ </span>
1339
+ </label>
1340
+
1341
+ <pe-form-field-helper
1342
+ [id]="ids.helperId"
1343
+ [helperText]="helperText()"
1344
+ [errorText]="resolvedErrorText()"
1345
+ [error]="hasError()"
1346
+ />
1347
+ </div>
1348
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-checkbox{display:flex;flex-direction:column;align-items:flex-start}.pe-checkbox__row{display:inline-flex;align-items:flex-start;cursor:pointer}.pe-checkbox__row:has(.pe-checkbox__input:disabled){cursor:not-allowed}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled])+.pe-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#fff}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input,.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):indeterminate:active+.pe-checkbox__pseudo-input,.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):checked:active+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__row:has(.pe-checkbox__input:indeterminate) .pe-checkbox__pseudo-input:before{opacity:1}.pe-checkbox__row--accessible-zone{padding:12px}.pe-checkbox__row--visible-zone{padding:12px;background:#fff3;border-radius:12px}.pe-checkbox__row--checked-visible-zone{padding:12px;border-radius:12px;transition:background-color .25s cubic-bezier(.4,0,.2,1)}.pe-checkbox__row--checked-visible-zone:has(.pe-checkbox__input:checked){background:#fff3}.pe-checkbox__row--error .pe-checkbox__pseudo-input{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:focus-visible+.pe-checkbox__pseudo-input{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):active+.pe-checkbox__pseudo-input[class]{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input,.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled])+.pe-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#f69d9d}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input,.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):indeterminate:active+.pe-checkbox__pseudo-input,.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):checked:active+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__input{position:absolute;opacity:0}.pe-checkbox__input:focus-visible+.pe-checkbox__pseudo-input{border-color:#ffffff80}.pe-checkbox__input:not([disabled]):active+.pe-checkbox__pseudo-input[class]{border-color:#fff;box-shadow:none}.pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input:before{opacity:1}.pe-checkbox__input:disabled+.pe-checkbox__pseudo-input{border-color:#ffffff1a}.pe-checkbox__input:disabled~.pe-checkbox__label{color:#ffffff4d}.pe-checkbox__input:disabled:checked+.pe-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.pe-checkbox__input:disabled:checked+.pe-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.pe-checkbox__input:indeterminate+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__input:indeterminate+.pe-checkbox__pseudo-input:before{content:\"minus_small\";opacity:1}.pe-checkbox__input[disabled]:indeterminate+.pe-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.pe-checkbox__input[disabled]:indeterminate+.pe-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.pe-checkbox__pseudo-input{margin:2px;border-radius:4px;border:1px solid rgba(255,255,255,.5);width:16px;height:16px;position:relative;flex-shrink:0;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-checkbox__pseudo-input:before{content:\"check_small\";font-family:Ultra Icons;top:-1px;left:-1px;width:16px;height:16px;position:absolute;color:#fff;line-height:16px;opacity:0;text-align:center;font-size:16px}.pe-checkbox__label{margin-left:8px;color:#fff;transition:color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-checkbox--sm .pe-checkbox__label{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-checkbox:not(.pe-checkbox--sm) .pe-checkbox__label{margin-top:-2px;margin-bottom:-2px}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1349
+ }
1350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CheckboxComponent, decorators: [{
1351
+ type: Component,
1352
+ args: [{ selector: 'pe-checkbox', standalone: true, imports: [FormFieldLabelComponent, FormFieldHelperComponent], template: `
1353
+ <div
1354
+ class="pe-checkbox pe-checkbox--{{ size() }}"
1355
+ [class.pe-checkbox--accessible-zone]="zone() === 'accessible'"
1356
+ [class.pe-checkbox--visible-zone]="zone() === 'visible'"
1357
+ [class.pe-checkbox--checked-visible-zone]="zone() === 'checked-visible'"
1358
+ [class.pe-checkbox--error]="hasError()"
1359
+ [class.pe-checkbox--disabled]="disabled()"
1360
+ [class.pe-checkbox--required]="required()"
1361
+ [attr.aria-invalid]="hasError()"
1362
+ [attr.aria-required]="required()"
1363
+ [attr.aria-describedby]="describedBy()"
1364
+ >
1365
+ <pe-form-field-label
1366
+ [label]="label()"
1367
+ [required]="required()"
1368
+ [for]="ids.controlId"
1369
+ [size]="size() === 'sm' ? 'sm' : 'md'"
1370
+ />
1371
+
1372
+ <label
1373
+ class="pe-checkbox__row"
1374
+ [class.pe-checkbox__row--accessible-zone]="zone() === 'accessible'"
1375
+ [class.pe-checkbox__row--visible-zone]="zone() === 'visible'"
1376
+ [class.pe-checkbox__row--checked-visible-zone]="zone() === 'checked-visible'"
1377
+ [class.pe-checkbox__row--sm]="size() === 'sm'"
1378
+ [class.pe-checkbox__row--error]="hasError()"
1379
+ [attr.for]="ids.controlId"
1380
+ >
1381
+ <input
1382
+ type="checkbox"
1383
+ class="pe-checkbox__input"
1384
+ [id]="ids.controlId"
1385
+ [checked]="checked()"
1386
+ [disabled]="disabled()"
1387
+ [indeterminate]="indeterminate()"
1388
+ [attr.aria-describedby]="describedBy()"
1389
+ [attr.aria-invalid]="hasError()"
1390
+ [attr.aria-required]="required()"
1391
+ (change)="onChange($event)"
1392
+ />
1393
+ <span class="pe-checkbox__pseudo-input"></span>
1394
+ <span class="pe-checkbox__label">
1395
+ <ng-content />
1396
+ </span>
1397
+ </label>
1398
+
1399
+ <pe-form-field-helper
1400
+ [id]="ids.helperId"
1401
+ [helperText]="helperText()"
1402
+ [errorText]="resolvedErrorText()"
1403
+ [error]="hasError()"
1404
+ />
1405
+ </div>
1406
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-checkbox{display:flex;flex-direction:column;align-items:flex-start}.pe-checkbox__row{display:inline-flex;align-items:flex-start;cursor:pointer}.pe-checkbox__row:has(.pe-checkbox__input:disabled){cursor:not-allowed}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled])+.pe-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#fff}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input,.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):indeterminate:active+.pe-checkbox__pseudo-input,.pe-checkbox__row:hover .pe-checkbox__input:not([disabled]):checked:active+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__row:has(.pe-checkbox__input:indeterminate) .pe-checkbox__pseudo-input:before{opacity:1}.pe-checkbox__row--accessible-zone{padding:12px}.pe-checkbox__row--visible-zone{padding:12px;background:#fff3;border-radius:12px}.pe-checkbox__row--checked-visible-zone{padding:12px;border-radius:12px;transition:background-color .25s cubic-bezier(.4,0,.2,1)}.pe-checkbox__row--checked-visible-zone:has(.pe-checkbox__input:checked){background:#fff3}.pe-checkbox__row--error .pe-checkbox__pseudo-input{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:focus-visible+.pe-checkbox__pseudo-input{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):active+.pe-checkbox__pseudo-input[class]{border-color:#f69d9d}.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input,.pe-checkbox__row--error .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled])+.pe-checkbox__pseudo-input{box-shadow:0 0 0 2px #ffffff1a;border-color:#f69d9d}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):indeterminate+.pe-checkbox__pseudo-input,.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):indeterminate:active+.pe-checkbox__pseudo-input,.pe-checkbox__row--error:hover .pe-checkbox__input:not([disabled]):checked:active+.pe-checkbox__pseudo-input{background-color:#c33a3a;border-color:#c33a3a}.pe-checkbox__input{position:absolute;opacity:0}.pe-checkbox__input:focus-visible+.pe-checkbox__pseudo-input{border-color:#ffffff80}.pe-checkbox__input:not([disabled]):active+.pe-checkbox__pseudo-input[class]{border-color:#fff;box-shadow:none}.pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__input:not([disabled]):checked+.pe-checkbox__pseudo-input:before{opacity:1}.pe-checkbox__input:disabled+.pe-checkbox__pseudo-input{border-color:#ffffff1a}.pe-checkbox__input:disabled~.pe-checkbox__label{color:#ffffff4d}.pe-checkbox__input:disabled:checked+.pe-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.pe-checkbox__input:disabled:checked+.pe-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.pe-checkbox__input:indeterminate+.pe-checkbox__pseudo-input{background-color:#6f3de0;border-color:#6f3de0}.pe-checkbox__input:indeterminate+.pe-checkbox__pseudo-input:before{content:\"minus_small\";opacity:1}.pe-checkbox__input[disabled]:indeterminate+.pe-checkbox__pseudo-input{background-color:#ffffff0d;border-color:transparent}.pe-checkbox__input[disabled]:indeterminate+.pe-checkbox__pseudo-input:before{opacity:1;color:#ffffff4d}.pe-checkbox__pseudo-input{margin:2px;border-radius:4px;border:1px solid rgba(255,255,255,.5);width:16px;height:16px;position:relative;flex-shrink:0;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-checkbox__pseudo-input:before{content:\"check_small\";font-family:Ultra Icons;top:-1px;left:-1px;width:16px;height:16px;position:absolute;color:#fff;line-height:16px;opacity:0;text-align:center;font-size:16px}.pe-checkbox__label{margin-left:8px;color:#fff;transition:color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-checkbox--sm .pe-checkbox__label{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-checkbox:not(.pe-checkbox--sm) .pe-checkbox__label{margin-top:-2px;margin-bottom:-2px}\n"] }]
1407
+ }], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }, { type: i0.Output, args: ["indeterminateChange"] }], zone: [{ type: i0.Input, args: [{ isSignal: true, alias: "zone", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }] } });
1408
+
1409
+ /**
1410
+ * A collapsible content component that supports both text and icon variants.
1411
+ * Uses CSS transitions for smooth animations and provides accessibility features.
1412
+ *
1413
+ * @example
1414
+ * ```html
1415
+ * <pe-collapse [maxHeight]="300" variant="text">
1416
+ * <div>Collapsible content here</div>
1417
+ * </pe-collapse>
1418
+ * ```
1419
+ */
1420
+ class CollapseComponent {
1421
+ destroyRef = inject(DestroyRef);
1422
+ content;
1423
+ /**
1424
+ * The visual variant of the collapse toggle.
1425
+ * @default 'text'
1426
+ */
1427
+ variant = input('text', ...(ngDevMode ? [{ debugName: "variant" }] : []));
1428
+ /**
1429
+ * Controls the collapsed state of the component.
1430
+ * @default true
1431
+ */
1432
+ collapsed = model(true, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
1433
+ /**
1434
+ * Maximum height of the content when collapsed.
1435
+ * @default 200
1436
+ */
1437
+ maxHeight = input.required(...(ngDevMode ? [{ debugName: "maxHeight" }] : []));
1438
+ /**
1439
+ * Custom label for the expand action.
1440
+ * @default 'See more'
1441
+ */
1442
+ expandLabel = input('See more', ...(ngDevMode ? [{ debugName: "expandLabel" }] : []));
1443
+ /**
1444
+ * Custom label for the collapse action.
1445
+ * @default 'See less'
1446
+ */
1447
+ collapseLabel = input('See less', ...(ngDevMode ? [{ debugName: "collapseLabel" }] : []));
1448
+ /** Current full height of the content */
1449
+ fullHeight = signal(0, ...(ngDevMode ? [{ debugName: "fullHeight" }] : []));
1450
+ /** Whether the content is collapsible based on its height */
1451
+ isCollapsible = computed(() => {
1452
+ const max = Math.max(0, this.maxHeight());
1453
+ return this.fullHeight() > max;
1454
+ }, ...(ngDevMode ? [{ debugName: "isCollapsible" }] : []));
1455
+ ngAfterViewInit() {
1456
+ // Initial height calculation
1457
+ this.updateFullHeight();
1458
+ // Listen for window resize events to recalculate height
1459
+ const resizeSubscription = fromEvent(window, 'resize')
1460
+ .pipe(debounceTime(100))
1461
+ .subscribe(() => this.updateFullHeight());
1462
+ this.destroyRef.onDestroy(() => resizeSubscription.unsubscribe());
1463
+ }
1464
+ /** Updates the full height of the content */
1465
+ updateFullHeight() {
1466
+ if (this.content?.nativeElement) {
1467
+ this.fullHeight.set(this.content.nativeElement.scrollHeight);
1468
+ }
1469
+ }
1470
+ /** Toggles the collapsed state */
1471
+ toggle() {
1472
+ this.collapsed.set(!this.collapsed());
1473
+ }
1474
+ onToggleKeydown(event) {
1475
+ if (event.key === ' ' || event.key === 'Enter') {
1476
+ event.preventDefault();
1477
+ this.toggle();
1478
+ }
1479
+ }
1480
+ computedClasses = computed(() => {
1481
+ return {
1482
+ 'pe-collapse': true,
1483
+ 'pe-collapse--collapsed': this.isCollapsible() && this.collapsed(),
1484
+ };
1485
+ }, ...(ngDevMode ? [{ debugName: "computedClasses" }] : []));
1486
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CollapseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1487
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: CollapseComponent, isStandalone: true, selector: "pe-collapse", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: true, transformFunction: null }, expandLabel: { classPropertyName: "expandLabel", publicName: "expandLabel", isSignal: true, isRequired: false, transformFunction: null }, collapseLabel: { classPropertyName: "collapseLabel", publicName: "collapseLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange" }, host: { attributes: { "role": "region" }, properties: { "style.--pe-collapse-max-height.px": "maxHeight()", "style.--pe-collapse-full-height.px": "fullHeight()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: `
1488
+ <div [class]="computedClasses()">
1489
+ <div class="pe-collapse__content" #content [attr.aria-expanded]="!collapsed()" [attr.aria-hidden]="collapsed()">
1490
+ <ng-content />
1491
+ </div>
1492
+ @if (isCollapsible()) {
1493
+ <div class="pe-collapse__toggle">
1494
+ <pe-button
1495
+ theme="ghost-white"
1496
+ [iconOnly]="variant() === 'icon'"
1497
+ class="pe-collapse__toggle-button"
1498
+ (click)="toggle()"
1499
+ (keydown)="onToggleKeydown($event)"
1500
+ [attr.aria-label]="collapsed() ? expandLabel() : collapseLabel()">
1501
+ @if (variant() === 'text') {
1502
+ <span>
1503
+ {{ collapsed() ? expandLabel() : collapseLabel() }}
1504
+ </span>
1505
+ } @else if (variant() === 'icon') {
1506
+ <pe-icon size="6" icon="chevron_up" />
1507
+ }
1508
+ </pe-button>
1509
+ </div>
1510
+ }
1511
+ </div>
1512
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-collapse__content{position:relative;overflow:hidden;height:var(--pe-collapse-full-height);transition:height .25s cubic-bezier(.4,0,.2,1)}.pe-collapse__toggle{display:flex;align-items:center;justify-content:center;width:100%;padding:4px 0;gap:8px}.pe-collapse__toggle:before,.pe-collapse__toggle:after{content:\"\";display:block;width:100%;height:1px;border-bottom:1px solid rgba(255,255,255,.1)}.pe-collapse__toggle-button .pe-icon{transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-collapse--collapsed .pe-collapse__content{-webkit-mask-image:linear-gradient(to bottom,black calc(100% - 48px),transparent 100%);mask-image:linear-gradient(to bottom,black calc(100% - 48px),transparent 100%);height:var(--pe-collapse-max-height)}.pe-collapse--collapsed .pe-collapse__toggle-button .pe-icon{transform:rotate(180deg)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1513
+ }
1514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CollapseComponent, decorators: [{
1515
+ type: Component,
1516
+ args: [{ selector: 'pe-collapse', standalone: true, imports: [ButtonComponent, IconComponent], template: `
1517
+ <div [class]="computedClasses()">
1518
+ <div class="pe-collapse__content" #content [attr.aria-expanded]="!collapsed()" [attr.aria-hidden]="collapsed()">
1519
+ <ng-content />
1520
+ </div>
1521
+ @if (isCollapsible()) {
1522
+ <div class="pe-collapse__toggle">
1523
+ <pe-button
1524
+ theme="ghost-white"
1525
+ [iconOnly]="variant() === 'icon'"
1526
+ class="pe-collapse__toggle-button"
1527
+ (click)="toggle()"
1528
+ (keydown)="onToggleKeydown($event)"
1529
+ [attr.aria-label]="collapsed() ? expandLabel() : collapseLabel()">
1530
+ @if (variant() === 'text') {
1531
+ <span>
1532
+ {{ collapsed() ? expandLabel() : collapseLabel() }}
1533
+ </span>
1534
+ } @else if (variant() === 'icon') {
1535
+ <pe-icon size="6" icon="chevron_up" />
1536
+ }
1537
+ </pe-button>
1538
+ </div>
1539
+ }
1540
+ </div>
1541
+ `, host: {
1542
+ '[style.--pe-collapse-max-height.px]': 'maxHeight()',
1543
+ '[style.--pe-collapse-full-height.px]': 'fullHeight()',
1544
+ role: 'region',
1545
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-collapse__content{position:relative;overflow:hidden;height:var(--pe-collapse-full-height);transition:height .25s cubic-bezier(.4,0,.2,1)}.pe-collapse__toggle{display:flex;align-items:center;justify-content:center;width:100%;padding:4px 0;gap:8px}.pe-collapse__toggle:before,.pe-collapse__toggle:after{content:\"\";display:block;width:100%;height:1px;border-bottom:1px solid rgba(255,255,255,.1)}.pe-collapse__toggle-button .pe-icon{transition:transform .25s cubic-bezier(.4,0,.2,1)}.pe-collapse--collapsed .pe-collapse__content{-webkit-mask-image:linear-gradient(to bottom,black calc(100% - 48px),transparent 100%);mask-image:linear-gradient(to bottom,black calc(100% - 48px),transparent 100%);height:var(--pe-collapse-max-height)}.pe-collapse--collapsed .pe-collapse__toggle-button .pe-icon{transform:rotate(180deg)}\n"] }]
1546
+ }], propDecorators: { content: [{
1547
+ type: ViewChild,
1548
+ args: ['content']
1549
+ }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: true }] }], expandLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandLabel", required: false }] }], collapseLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseLabel", required: false }] }] } });
1550
+
1551
+ class ListItemComponent {
1552
+ checkbox = contentChild(CheckboxComponent, ...(ngDevMode ? [{ debugName: "checkbox" }] : []));
1553
+ theme = input('ghost-white', ...(ngDevMode ? [{ debugName: "theme" }] : []));
1554
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1555
+ hideFocusOutline = input(false, ...(ngDevMode ? [{ debugName: "hideFocusOutline" }] : []));
1556
+ selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : []));
1557
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1558
+ clickHandler() {
1559
+ if (this.disabled() || this.loading()) {
1560
+ return;
1561
+ }
1562
+ if (!this.disabled()) {
1563
+ this.checkbox()?.checked.update((value) => !value);
1564
+ }
1565
+ }
1566
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1567
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.2", type: ListItemComponent, isStandalone: true, selector: "pe-list-item", inputs: { theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hideFocusOutline: { classPropertyName: "hideFocusOutline", publicName: "hideFocusOutline", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "checkbox", first: true, predicate: CheckboxComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
1568
+ <pe-skeleton [show]="loading()" variant="rect">
1569
+ <button
1570
+ class="pe-list-item pe-list-item--{{ theme() }}"
1571
+ [class.pe-list-item--no-focus-outline]="hideFocusOutline()"
1572
+ [class.pe-list-item--selected]="selected() || !!checkbox()?.checked"
1573
+ (click)="clickHandler()"
1574
+ [disabled]="disabled() || loading()">
1575
+ <div class="pe-list-item__before-label">
1576
+ <ng-content select="[pe-list-item-before-label]"></ng-content>
1577
+ </div>
1578
+ <div class="pe-list-item__label">
1579
+ <ng-content select="[pe-list-item-label]"></ng-content>
1580
+ </div>
1581
+ <div class="pe-list-item__after-label">
1582
+ <ng-content select="[pe-list-item-after-label]"></ng-content>
1583
+ </div>
1584
+ </button>
1585
+ </pe-skeleton>
1586
+ `, isInline: true, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-list-item{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;text-align:start;display:flex;align-items:center;width:100%;gap:8px;border-radius:8px;padding:8px 12px;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-list-item:hover{background-color:#fff3}.pe-list-item:active{background-color:#ffffff1a}.pe-list-item:selected{background-color:#fff3}.pe-list-item{background-color:#fff0;color:inherit}.pe-list-item:disabled,.pe-list-item[disabled]{background-color:#fff0}.pe-list-item:focus-visible,.pe-list-item:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-list-item--no-focus-outline:focus-visible,.pe-list-item--no-focus-outline:focus{outline:none;outline-offset:0}.pe-list-item--selected{background-color:#fff3}.pe-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.pe-list-item--transparent-white:hover{background-color:#fff3}.pe-list-item--transparent-white:active{background-color:#ffffff1a}.pe-list-item--transparent-white:selected{background-color:#fff3}.pe-list-item--transparent-white:disabled,.pe-list-item--transparent-white[disabled]{background-color:#ffffff0d}.pe-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-list-item--outline-white:disabled,.pe-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-list-item--outline-purple:disabled,.pe-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-list-item--transparent-white.pe-list-item--selected{background-color:#fff3}.pe-list-item__label{flex:1;color:#fff}.pe-list-item__before-label,.pe-list-item__after-label{display:flex;align-items:center;gap:8px}.pe-list-item .pe--icon{color:#fff}.pe-list-item:disabled,.pe-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.pe-list-item:disabled .pe-list-item__label,.pe-list-item[disabled] .pe-list-item__label{color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: SkeletonComponent, selector: "pe-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1587
+ }
1588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ListItemComponent, decorators: [{
1589
+ type: Component,
1590
+ args: [{ selector: 'pe-list-item', standalone: true, imports: [SkeletonComponent], template: `
1591
+ <pe-skeleton [show]="loading()" variant="rect">
1592
+ <button
1593
+ class="pe-list-item pe-list-item--{{ theme() }}"
1594
+ [class.pe-list-item--no-focus-outline]="hideFocusOutline()"
1595
+ [class.pe-list-item--selected]="selected() || !!checkbox()?.checked"
1596
+ (click)="clickHandler()"
1597
+ [disabled]="disabled() || loading()">
1598
+ <div class="pe-list-item__before-label">
1599
+ <ng-content select="[pe-list-item-before-label]"></ng-content>
1600
+ </div>
1601
+ <div class="pe-list-item__label">
1602
+ <ng-content select="[pe-list-item-label]"></ng-content>
1603
+ </div>
1604
+ <div class="pe-list-item__after-label">
1605
+ <ng-content select="[pe-list-item-after-label]"></ng-content>
1606
+ </div>
1607
+ </button>
1608
+ </pe-skeleton>
1609
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-list-item{cursor:pointer;border:none;white-space:nowrap;box-sizing:border-box;text-align:start;display:flex;align-items:center;width:100%;gap:8px;border-radius:8px;padding:8px 12px;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-list-item:hover{background-color:#fff3}.pe-list-item:active{background-color:#ffffff1a}.pe-list-item:selected{background-color:#fff3}.pe-list-item{background-color:#fff0;color:inherit}.pe-list-item:disabled,.pe-list-item[disabled]{background-color:#fff0}.pe-list-item:focus-visible,.pe-list-item:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-list-item--no-focus-outline:focus-visible,.pe-list-item--no-focus-outline:focus{outline:none;outline-offset:0}.pe-list-item--selected{background-color:#fff3}.pe-list-item--transparent-white{background-color:#ffffff1a;color:inherit}.pe-list-item--transparent-white:hover{background-color:#fff3}.pe-list-item--transparent-white:active{background-color:#ffffff1a}.pe-list-item--transparent-white:selected{background-color:#fff3}.pe-list-item--transparent-white:disabled,.pe-list-item--transparent-white[disabled]{background-color:#ffffff0d}.pe-list-item--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-list-item--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-list-item--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-list-item--outline-white:disabled,.pe-list-item--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-list-item--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-list-item--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-list-item--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-list-item--outline-purple:disabled,.pe-list-item--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-list-item--transparent-white.pe-list-item--selected{background-color:#fff3}.pe-list-item__label{flex:1;color:#fff}.pe-list-item__before-label,.pe-list-item__after-label{display:flex;align-items:center;gap:8px}.pe-list-item .pe--icon{color:#fff}.pe-list-item:disabled,.pe-list-item[disabled]{cursor:not-allowed;color:#ffffff4d}.pe-list-item:disabled .pe-list-item__label,.pe-list-item[disabled] .pe-list-item__label{color:#ffffff4d}\n"] }]
1610
+ }], propDecorators: { checkbox: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CheckboxComponent), { isSignal: true }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hideFocusOutline: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideFocusOutline", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
1611
+
1612
+ /**
1613
+ * A customizable dropdown component that displays a list of selectable items.
1614
+ *
1615
+ * Features:
1616
+ * - Configurable themes (ghost-white, transparent-white)
1617
+ * - Icon support for items and trigger button
1618
+ * - Customizable trigger appearance
1619
+ * - Disabled item support
1620
+ * - Two-way binding for selected item
1621
+ *
1622
+ * @example
1623
+ * ```html
1624
+ * <!-- Basic usage -->
1625
+ * <uds-dropdown
1626
+ * [items]="dropdownItems"
1627
+ * [theme]="'transparent-white'"
1628
+ * (selectedItemChange)="onItemSelected($event)">
1629
+ * </uds-dropdown>
1630
+ *
1631
+ * <!-- More options menu -->
1632
+ * <uds-dropdown
1633
+ * [items]="actionItems"
1634
+ * [onlyMenuTriggerIcon]="'more_options'">
1635
+ * </uds-dropdown>
1636
+ * ```
1637
+ */
1638
+ class DropdownComponent {
1639
+ /**
1640
+ * The visual theme for the dropdown.
1641
+ * @default 'ghost-white'
1642
+ */
1643
+ theme = input('ghost-white', ...(ngDevMode ? [{ debugName: "theme" }] : []));
1644
+ /**
1645
+ * Array of items to display in the dropdown menu.
1646
+ * @default []
1647
+ */
1648
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
1649
+ /**
1650
+ * Whether the dropdown is disabled.
1651
+ * @default false
1652
+ */
1653
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1654
+ /**
1655
+ * Overrides the icons of the selected item in the trigger button.
1656
+ * Can override leftIcons, rightIcons, or both.
1657
+ * @default {}
1658
+ *
1659
+ * @example
1660
+ * ```typescript
1661
+ * menuTriggerIcons = {
1662
+ * chevron_down
1663
+ * }
1664
+ * ```
1665
+ */
1666
+ menuTriggerIcons = input({
1667
+ rightIcons: ['chevron_down'],
1668
+ }, ...(ngDevMode ? [{ debugName: "menuTriggerIcons" }] : []));
1669
+ /**
1670
+ * Shows only a single icon in the trigger button, hiding the selected item's label and icons.
1671
+ * Commonly used with 'more_options' for action menus.
1672
+ * @default undefined
1673
+ *
1674
+ * @example
1675
+ * ```typescript
1676
+ * triggerIconOnly = 'more_options'
1677
+ * ```
1678
+ */
1679
+ triggerIconOnly = input(...(ngDevMode ? [undefined, { debugName: "triggerIconOnly" }] : []));
1680
+ /**
1681
+ * Accessible label for the icon-only trigger button.
1682
+ * @default 'Open menu'
1683
+ */
1684
+ iconOnlyLabel = input('Open menu', ...(ngDevMode ? [{ debugName: "iconOnlyLabel" }] : []));
1685
+ /**
1686
+ * The index of the currently selected item.
1687
+ * Supports two-way binding with [(selectedIndex)].
1688
+ * @default 0
1689
+ */
1690
+ selectedIndex = model(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
1691
+ /**
1692
+ * The currently selected item with any trigger icon overrides applied.
1693
+ */
1694
+ selectedItem = computed(() => {
1695
+ const items = this.items();
1696
+ const index = this.selectedIndex();
1697
+ const fallback = {
1698
+ label: '',
1699
+ value: undefined,
1700
+ leftIcons: [],
1701
+ rightIcons: [],
1702
+ disabled: false,
1703
+ };
1704
+ const item = items[index] ?? items[0] ?? fallback;
1705
+ return {
1706
+ ...item,
1707
+ ...this.menuTriggerIcons(),
1708
+ };
1709
+ }, ...(ngDevMode ? [{ debugName: "selectedItem" }] : []));
1710
+ /**
1711
+ * Right icons for the trigger: when default is chevron_down, shows chevron_down when closed
1712
+ * and chevron_up when open. Otherwise uses selectedItem().rightIcons as-is.
1713
+ */
1714
+ triggerRightIcons = computed(() => {
1715
+ const right = this.selectedItem().rightIcons ?? [];
1716
+ const open = this.isOpen();
1717
+ if (right.length === 1 && right[0] === 'chevron_down') {
1718
+ return open ? ['chevron_up'] : ['chevron_down'];
1719
+ }
1720
+ return right;
1721
+ }, ...(ngDevMode ? [{ debugName: "triggerRightIcons" }] : []));
1722
+ /**
1723
+ * Tracks whether the menu is currently open for ARIA.
1724
+ */
1725
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
1726
+ /**
1727
+ * Stable id used to link the trigger to the menu container.
1728
+ */
1729
+ menuId = `pe-dropdown-menu-${Math.random().toString(36).slice(2, 11)}`;
1730
+ /**
1731
+ * Emitted when a new item is selected from the dropdown.
1732
+ */
1733
+ selectedItemChange = output();
1734
+ /**
1735
+ * Handles the selection of a dropdown item.
1736
+ * @param index - The index of the selected item
1737
+ */
1738
+ handleItemTriggered(index) {
1739
+ this.selectedIndex.set(index);
1740
+ this.selectedItemChange.emit(this.items()[index]);
1741
+ }
1742
+ onMenuOpened() {
1743
+ this.isOpen.set(true);
1744
+ }
1745
+ onMenuClosed() {
1746
+ this.isOpen.set(false);
1747
+ }
1748
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1749
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: DropdownComponent, isStandalone: true, selector: "pe-dropdown", inputs: { theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, menuTriggerIcons: { classPropertyName: "menuTriggerIcons", publicName: "menuTriggerIcons", isSignal: true, isRequired: false, transformFunction: null }, triggerIconOnly: { classPropertyName: "triggerIconOnly", publicName: "triggerIconOnly", isSignal: true, isRequired: false, transformFunction: null }, iconOnlyLabel: { classPropertyName: "iconOnlyLabel", publicName: "iconOnlyLabel", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", selectedItemChange: "selectedItemChange" }, ngImport: i0, template: "<div class=\"pe-dropdown\">\n <!-- Template for rendering icon arrays -->\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @if (triggerIconOnly(); as iconName) {\n <pe-button\n [theme]=\"theme()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menu\"\n class=\"pe-dropdown__trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n [attr.aria-label]=\"iconOnlyLabel()\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <pe-icon [icon]=\"iconName\" />\n </pe-button>\n } @else {\n <pe-list-item\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menu\"\n class=\"pe-dropdown__trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <ng-container pe-list-item-before-label>\n @if (selectedItem().leftIcons) {\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: selectedItem().leftIcons }\"\n />\n }\n </ng-container>\n <ng-container pe-list-item-label>\n {{ selectedItem().label }}\n </ng-container>\n <ng-container pe-list-item-after-label>\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: triggerRightIcons() }\"\n />\n </ng-container>\n </pe-list-item>\n }\n\n <ng-template #menu>\n <div cdkMenu class=\"pe-dropdown__content pe-scrollable\" [id]=\"menuId\">\n @for (item of items(); track $index) {\n <pe-list-item\n cdkMenuItem\n (cdkMenuItemTriggered)=\"handleItemTriggered($index)\"\n [disabled]=\"!!item.disabled\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"selectedIndex() === $index ? 'true' : 'false'\"\n >\n <ng-container pe-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.leftIcons }\" />\n </ng-container>\n <ng-container pe-list-item-label>{{ item.label }}</ng-container>\n <ng-container pe-list-item-after-label>\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.rightIcons }\"\n />\n @if (selectedIndex() === $index) {\n <pe-icon size=\"5\" icon=\"check\" />\n }\n </ng-container>\n </pe-list-item>\n }\n </div>\n </ng-template>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.pe-dropdown__content{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;max-height:316px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ListItemComponent, selector: "pe-list-item", inputs: ["theme", "disabled", "hideFocusOutline", "selected", "loading"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1750
+ }
1751
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: DropdownComponent, decorators: [{
1752
+ type: Component,
1753
+ args: [{ selector: 'pe-dropdown', standalone: true, imports: [CdkMenuTrigger, CdkMenu, CdkMenuItem, NgTemplateOutlet, ListItemComponent, IconComponent, ButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"pe-dropdown\">\n <!-- Template for rendering icon arrays -->\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @if (triggerIconOnly(); as iconName) {\n <pe-button\n [theme]=\"theme()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menu\"\n class=\"pe-dropdown__trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n [attr.aria-label]=\"iconOnlyLabel()\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <pe-icon [icon]=\"iconName\" />\n </pe-button>\n } @else {\n <pe-list-item\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menu\"\n class=\"pe-dropdown__trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <ng-container pe-list-item-before-label>\n @if (selectedItem().leftIcons) {\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: selectedItem().leftIcons }\"\n />\n }\n </ng-container>\n <ng-container pe-list-item-label>\n {{ selectedItem().label }}\n </ng-container>\n <ng-container pe-list-item-after-label>\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: triggerRightIcons() }\"\n />\n </ng-container>\n </pe-list-item>\n }\n\n <ng-template #menu>\n <div cdkMenu class=\"pe-dropdown__content pe-scrollable\" [id]=\"menuId\">\n @for (item of items(); track $index) {\n <pe-list-item\n cdkMenuItem\n (cdkMenuItemTriggered)=\"handleItemTriggered($index)\"\n [disabled]=\"!!item.disabled\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"selectedIndex() === $index ? 'true' : 'false'\"\n >\n <ng-container pe-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.leftIcons }\" />\n </ng-container>\n <ng-container pe-list-item-label>{{ item.label }}</ng-container>\n <ng-container pe-list-item-after-label>\n <ng-container\n *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.rightIcons }\"\n />\n @if (selectedIndex() === $index) {\n <pe-icon size=\"5\" icon=\"check\" />\n }\n </ng-container>\n </pe-list-item>\n }\n </div>\n </ng-template>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-dropdown{display:inline-flex;flex-direction:column;width:100%;gap:4px}.pe-dropdown__content{display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin:4px 0;max-height:316px;overflow-y:auto}\n"] }]
1754
+ }], propDecorators: { theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], menuTriggerIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuTriggerIcons", required: false }] }], triggerIconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerIconOnly", required: false }] }], iconOnlyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnlyLabel", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], selectedItemChange: [{ type: i0.Output, args: ["selectedItemChange"] }] } });
1755
+
1756
+ /**
1757
+ * File input component with label, helper/error text, and optional slots.
1758
+ * Implements FormValueControl<FileList | null> for use with Signal Forms [formField].
1759
+ *
1760
+ * Uses hidden native file input + visible trigger + selected file label.
1761
+ * Content projection: [pe-file-input-left-elements], [pe-file-input-right-elements].
1762
+ */
1763
+ class FileInputComponent {
1764
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
1765
+ appearance = input('border-only', ...(ngDevMode ? [{ debugName: "appearance" }] : []));
1766
+ accept = input('', ...(ngDevMode ? [{ debugName: "accept" }] : []));
1767
+ multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
1768
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1769
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
1770
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
1771
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
1772
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
1773
+ /** Placeholder when no file is selected (e.g. "Choose file" or "No file chosen"). */
1774
+ placeholderText = input('No file chosen', ...(ngDevMode ? [{ debugName: "placeholderText" }] : []));
1775
+ controlId = input(...(ngDevMode ? [undefined, { debugName: "controlId" }] : []));
1776
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
1777
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
1778
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
1779
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
1780
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
1781
+ fileInputRef = viewChild('fileInput', ...(ngDevMode ? [{ debugName: "fileInputRef" }] : []));
1782
+ ids = createFormFieldIds('pe-file-input');
1783
+ effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId, ...(ngDevMode ? [{ debugName: "effectiveControlId" }] : []));
1784
+ effectiveHelperId = computed(() => this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId, ...(ngDevMode ? [{ debugName: "effectiveHelperId" }] : []));
1785
+ effectiveErrorId = computed(() => this.controlId() ? `${this.controlId()}-error` : this.ids.errorId, ...(ngDevMode ? [{ debugName: "effectiveErrorId" }] : []));
1786
+ isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
1787
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
1788
+ describedBy = computed(() => getFormFieldDescribedBy(this.effectiveHelperId(), this.effectiveErrorId(), !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
1789
+ /** Display text for selected file(s). */
1790
+ selectedLabel = computed(() => {
1791
+ const files = this.value();
1792
+ if (!files?.length)
1793
+ return this.placeholderText();
1794
+ if (files.length === 1)
1795
+ return files[0].name;
1796
+ return `${files.length} files selected`;
1797
+ }, ...(ngDevMode ? [{ debugName: "selectedLabel" }] : []));
1798
+ inputBlur = output();
1799
+ inputFocus = output();
1800
+ valueChange = output();
1801
+ constructor() {
1802
+ effect(() => {
1803
+ const current = this.value();
1804
+ if (current !== undefined) {
1805
+ this.valueChange.emit(current);
1806
+ }
1807
+ });
1808
+ effect(() => {
1809
+ if (this.value() === null) {
1810
+ const el = this.fileInputRef()?.nativeElement;
1811
+ if (el)
1812
+ el.value = '';
1813
+ }
1814
+ });
1815
+ }
1816
+ onFileChange(event) {
1817
+ const inputEl = event.target;
1818
+ const fileList = inputEl.files;
1819
+ const next = fileList && fileList.length > 0 ? fileList : null;
1820
+ this.value.set(next);
1821
+ this.valueChange.emit(next);
1822
+ }
1823
+ onBlur(event) {
1824
+ this.isFocused.set(false);
1825
+ this.touched.set(true);
1826
+ this.inputBlur.emit(event);
1827
+ }
1828
+ onFocus(event) {
1829
+ this.isFocused.set(true);
1830
+ this.inputFocus.emit(event);
1831
+ }
1832
+ triggerClick() {
1833
+ if (this.disabled())
1834
+ return;
1835
+ this.fileInputRef()?.nativeElement?.click();
1836
+ }
1837
+ focus() {
1838
+ const el = document.getElementById(this.effectiveControlId());
1839
+ if (el instanceof HTMLInputElement)
1840
+ el.focus();
1841
+ }
1842
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1843
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.2", type: FileInputComponent, isStandalone: true, selector: "pe-file-input", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, placeholderText: { classPropertyName: "placeholderText", publicName: "placeholderText", isSignal: true, isRequired: false, transformFunction: null }, controlId: { classPropertyName: "controlId", publicName: "controlId", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange", value: "valueChange", inputBlur: "inputBlur", inputFocus: "inputFocus", valueChange: "valueChange" }, viewQueries: [{ propertyName: "fileInputRef", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"pe-file-input pe-file-input--{{ size() }} pe-file-input--appearance-{{ appearance() }}\"\n [class.pe-file-input--error]=\"hasError()\"\n [class.pe-file-input--disabled]=\"disabled()\"\n [class.pe-file-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-file-input__group\" [class.pe-file-input__group--focused]=\"isFocused()\">\n <div class=\"pe-file-input__left-elements\">\n <ng-content select=\"[pe-file-input-left-elements]\" />\n </div>\n\n <input\n #fileInput\n [id]=\"effectiveControlId()\"\n type=\"file\"\n class=\"pe-file-input__native\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n (change)=\"onFileChange($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <button\n type=\"button\"\n class=\"pe-file-input__trigger\"\n [disabled]=\"disabled()\"\n (click)=\"triggerClick()\"\n >\n Choose file\n </button>\n <span class=\"pe-file-input__label\">{{ selectedLabel() }}</span>\n\n <div class=\"pe-file-input__right-elements\">\n <ng-content select=\"[pe-file-input-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-file-input{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-file-input__group{position:relative;display:flex;align-items:center;height:40px;gap:0;padding:0;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-file-input__group--focused{border-color:#ffffff80}.pe-file-input--appearance-border-only:not(.pe-file-input--disabled) .pe-file-input__group:hover{border-color:#ffffff4d}.pe-file-input--appearance-subtle-tint:not(.pe-file-input--disabled) .pe-file-input__group:hover{border-color:#ffffff4d;background-color:#ffffff0d}.pe-file-input__native{position:absolute;width:0;height:0;opacity:0;overflow:hidden;clip:rect(0,0,0,0)}.pe-file-input__trigger{flex-shrink:0;margin:0 8px 0 0;height:100%;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:4px;background-color:#232323;padding:0 12px;color:#fff;cursor:pointer;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;transition:background-color .25s cubic-bezier(.4,0,.2,1),color .25s cubic-bezier(.4,0,.2,1)}.pe-file-input__trigger:hover:not(:disabled){background-color:#ffffff1a}.pe-file-input__trigger:disabled{cursor:not-allowed;color:#ffffff4d;background-color:transparent}.pe-file-input__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.pe-file-input__left-elements,.pe-file-input__right-elements{display:flex;gap:8px}.pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-file-input--sm .pe-file-input__group{height:32px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-file-input--sm .pe-file-input__left-elements,.pe-file-input--sm .pe-file-input__right-elements{gap:4px}.pe-file-input--sm .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--sm .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-file-input--md .pe-file-input__group{height:40px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-file-input--md .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--md .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-file-input--lg .pe-file-input__group{height:48px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-file-input--lg .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--lg .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-file-input--xl .pe-file-input__group{height:64px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-file-input--xl .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--xl .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-file-input--error .pe-file-input__group{border:2px solid #f69d9d}.pe-file-input--disabled .pe-file-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-file-input--disabled .pe-file-input__label{color:#ffffff4d}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1844
+ }
1845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FileInputComponent, decorators: [{
1846
+ type: Component,
1847
+ args: [{ selector: 'pe-file-input', standalone: true, imports: [FormFieldLabelComponent, FormFieldHelperComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-file-input pe-file-input--{{ size() }} pe-file-input--appearance-{{ appearance() }}\"\n [class.pe-file-input--error]=\"hasError()\"\n [class.pe-file-input--disabled]=\"disabled()\"\n [class.pe-file-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-file-input__group\" [class.pe-file-input__group--focused]=\"isFocused()\">\n <div class=\"pe-file-input__left-elements\">\n <ng-content select=\"[pe-file-input-left-elements]\" />\n </div>\n\n <input\n #fileInput\n [id]=\"effectiveControlId()\"\n type=\"file\"\n class=\"pe-file-input__native\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n (change)=\"onFileChange($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <button\n type=\"button\"\n class=\"pe-file-input__trigger\"\n [disabled]=\"disabled()\"\n (click)=\"triggerClick()\"\n >\n Choose file\n </button>\n <span class=\"pe-file-input__label\">{{ selectedLabel() }}</span>\n\n <div class=\"pe-file-input__right-elements\">\n <ng-content select=\"[pe-file-input-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-file-input{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-file-input__group{position:relative;display:flex;align-items:center;height:40px;gap:0;padding:0;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-file-input__group--focused{border-color:#ffffff80}.pe-file-input--appearance-border-only:not(.pe-file-input--disabled) .pe-file-input__group:hover{border-color:#ffffff4d}.pe-file-input--appearance-subtle-tint:not(.pe-file-input--disabled) .pe-file-input__group:hover{border-color:#ffffff4d;background-color:#ffffff0d}.pe-file-input__native{position:absolute;width:0;height:0;opacity:0;overflow:hidden;clip:rect(0,0,0,0)}.pe-file-input__trigger{flex-shrink:0;margin:0 8px 0 0;height:100%;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:4px;background-color:#232323;padding:0 12px;color:#fff;cursor:pointer;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;transition:background-color .25s cubic-bezier(.4,0,.2,1),color .25s cubic-bezier(.4,0,.2,1)}.pe-file-input__trigger:hover:not(:disabled){background-color:#ffffff1a}.pe-file-input__trigger:disabled{cursor:not-allowed;color:#ffffff4d;background-color:transparent}.pe-file-input__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#ffffff80}.pe-file-input__left-elements,.pe-file-input__right-elements{display:flex;gap:8px}.pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-file-input--sm .pe-file-input__group{height:32px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-file-input--sm .pe-file-input__left-elements,.pe-file-input--sm .pe-file-input__right-elements{gap:4px}.pe-file-input--sm .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--sm .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-file-input--md .pe-file-input__group{height:40px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-file-input--md .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--md .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-file-input--lg .pe-file-input__group{height:48px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-file-input--lg .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--lg .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-file-input--xl .pe-file-input__group{height:64px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-file-input--xl .pe-file-input__left-elements ::ng-deep .pe-icon,.pe-file-input--xl .pe-file-input__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-file-input--error .pe-file-input__group{border:2px solid #f69d9d}.pe-file-input--disabled .pe-file-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-file-input--disabled .pe-file-input__label{color:#ffffff4d}\n"] }]
1848
+ }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], placeholderText: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderText", required: false }] }], controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], fileInputRef: [{ type: i0.ViewChild, args: ['fileInput', { isSignal: true }] }], inputBlur: [{ type: i0.Output, args: ["inputBlur"] }], inputFocus: [{ type: i0.Output, args: ["inputFocus"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
1849
+
1850
+ class FooterComponent {
1851
+ copyrightText = input('', ...(ngDevMode ? [{ debugName: "copyrightText" }] : []));
1852
+ socialLinks = input([], ...(ngDevMode ? [{ debugName: "socialLinks" }] : []));
1853
+ links = input([], ...(ngDevMode ? [{ debugName: "links" }] : []));
1854
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1855
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: FooterComponent, isStandalone: true, selector: "pe-footer", inputs: { copyrightText: { classPropertyName: "copyrightText", publicName: "copyrightText", isSignal: true, isRequired: false, transformFunction: null }, socialLinks: { classPropertyName: "socialLinks", publicName: "socialLinks", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"pe-footer\">\n <p class=\"pe-footer__copyright\">\n {{ copyrightText() }}\n </p>\n @if (socialLinks()) {\n <ul class=\"pe-footer__social-links\">\n @for (link of socialLinks(); track link.url) {\n <li>\n <pe-button [theme]=\"'ghost-white'\" [iconOnly]=\"true\" [disabled]=\"false\">\n <pe-icon [icon]=\"link.icon\" />\n </pe-button>\n </li>\n }\n </ul>\n }\n @for (link of links(); track link.url) {\n <a [href]=\"link.url\" class=\"pe-link pe-body-m--medium\">{{ link.text }}</a>\n }\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-footer{padding:32px;display:flex;flex-wrap:wrap;gap:16px;align-items:center}.pe-footer__copyright{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;margin:0 auto 0 0;color:#ffffff80}.pe-footer__social-links{display:flex;gap:4px;list-style:none;padding:0;margin:0}.pe-footer__social-links__social-link{display:flex}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }] });
1856
+ }
1857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: FooterComponent, decorators: [{
1858
+ type: Component,
1859
+ args: [{ selector: 'pe-footer', imports: [ButtonComponent, IconComponent], standalone: true, template: "<div class=\"pe-footer\">\n <p class=\"pe-footer__copyright\">\n {{ copyrightText() }}\n </p>\n @if (socialLinks()) {\n <ul class=\"pe-footer__social-links\">\n @for (link of socialLinks(); track link.url) {\n <li>\n <pe-button [theme]=\"'ghost-white'\" [iconOnly]=\"true\" [disabled]=\"false\">\n <pe-icon [icon]=\"link.icon\" />\n </pe-button>\n </li>\n }\n </ul>\n }\n @for (link of links(); track link.url) {\n <a [href]=\"link.url\" class=\"pe-link pe-body-m--medium\">{{ link.text }}</a>\n }\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-footer{padding:32px;display:flex;flex-wrap:wrap;gap:16px;align-items:center}.pe-footer__copyright{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;margin:0 auto 0 0;color:#ffffff80}.pe-footer__social-links{display:flex;gap:4px;list-style:none;padding:0;margin:0}.pe-footer__social-links__social-link{display:flex}\n"] }]
1860
+ }], propDecorators: { copyrightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyrightText", required: false }] }], socialLinks: [{ type: i0.Input, args: [{ isSignal: true, alias: "socialLinks", required: false }] }], links: [{ type: i0.Input, args: [{ isSignal: true, alias: "links", required: false }] }] } });
1861
+
1862
+ class PillComponent {
1863
+ variant = input('interactive', ...(ngDevMode ? [{ debugName: "variant" }] : []));
1864
+ theme = input('transparent-white', ...(ngDevMode ? [{ debugName: "theme" }] : []));
1865
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
1866
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
1867
+ dismiss = output();
1868
+ dismissibleButtonTheme = computed(() => {
1869
+ const t = this.theme();
1870
+ if (t === 'transparent-purple' || t === 'outline-purple')
1871
+ return 'ghost-purple';
1872
+ if (t === 'outline-red')
1873
+ return 'ghost-red';
1874
+ if (t === 'outline-green')
1875
+ return 'ghost-green';
1876
+ return 'ghost-white';
1877
+ }, ...(ngDevMode ? [{ debugName: "dismissibleButtonTheme" }] : []));
1878
+ modifierClass = computed(() => {
1879
+ const classes = ['pe-pill', `pe-pill--${this.variant()}`, `pe-pill--${this.theme()}`, `pe-pill--${this.size()}`];
1880
+ if (this.disabled()) {
1881
+ classes.push('pe-pill--disabled');
1882
+ }
1883
+ return classes;
1884
+ }, ...(ngDevMode ? [{ debugName: "modifierClass" }] : []));
1885
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1886
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: PillComponent, isStandalone: true, selector: "pe-pill", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "@if (variant() === 'selectable') {\n <label [class]=\"modifierClass()\" [class.pe-pill--disabled]=\"disabled()\">\n <input type=\"checkbox\" class=\"pe-pill__checkbox\" />\n <ng-container *ngTemplateOutlet=\"content\" />\n </label>\n} @else if (['dismissible', 'read-only'].includes(variant())) {\n <div [class]=\"modifierClass()\" [class.pe-pill--disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n @if (variant() === 'dismissible') {\n <pe-button\n [theme]=\"dismissibleButtonTheme()\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"dismiss.emit()\"\n >\n <pe-icon icon=\"close\" />\n </pe-button>\n }\n </div>\n} @else if (['interactive', 'interactive-rounded'].includes(variant())) {\n <button [class]=\"modifierClass()\" [disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n}\n\n<ng-template #content>\n <ng-content />\n</ng-template>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-pill{border:none;cursor:pointer;text-decoration-line:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;white-space:nowrap;box-sizing:border-box;background-color:transparent;gap:8px;color:#fff;border-radius:8px;padding:4px 12px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1)}.pe-pill--md{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:500}.pe-pill--lg{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500}.pe-pill--interactive,.pe-pill--interactive-rounded,.pe-pill--selectable{cursor:pointer}.pe-pill--interactive:focus-visible,.pe-pill--interactive:focus,.pe-pill--interactive-rounded:focus-visible,.pe-pill--interactive-rounded:focus,.pe-pill--selectable:focus-visible,.pe-pill--selectable:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-pill--interactive-rounded{cursor:pointer;border-radius:4096px}.pe-pill--read-only,.pe-pill--dismissible.pe-pill{cursor:default}.pe-pill--dismissible.pe-pill .pe-btn--sm:last-child .pe-icon{font-size:16px;line-height:16px}.pe-pill--dismissible.pe-pill--md{padding:4px 4px 4px 12px;border-radius:8px}.pe-pill--dismissible.pe-pill--md .pe-btn--sm:last-child{min-width:24px;height:24px}.pe-pill--dismissible.pe-pill--lg{padding:8px 4px 8px 16px;border-radius:12px}.pe-pill--interactive.pe-pill--fill-white,.pe-pill--interactive-rounded.pe-pill--fill-white{background-color:#fff;color:inherit}.pe-pill--interactive.pe-pill--fill-white:hover,.pe-pill--interactive-rounded.pe-pill--fill-white:hover{background-color:#e7e7e7}.pe-pill--interactive.pe-pill--fill-white:active,.pe-pill--interactive-rounded.pe-pill--fill-white:active{background-color:#fff}.pe-pill--interactive.pe-pill--fill-white:selected,.pe-pill--interactive-rounded.pe-pill--fill-white:selected{background-color:#fff}.pe-pill--interactive.pe-pill--fill-white:disabled,.pe-pill--interactive.pe-pill--fill-white[disabled],.pe-pill--interactive-rounded.pe-pill--fill-white:disabled,.pe-pill--interactive-rounded.pe-pill--fill-white[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-white,.pe-pill--interactive-rounded.pe-pill--fill-white{color:#000}.pe-pill--interactive.pe-pill--fill-black:hover,.pe-pill--interactive-rounded.pe-pill--fill-black:hover{background-color:#3b3b3b}.pe-pill--interactive.pe-pill--fill-black:active,.pe-pill--interactive-rounded.pe-pill--fill-black:active{background-color:#232323}.pe-pill--interactive.pe-pill--fill-black:selected,.pe-pill--interactive-rounded.pe-pill--fill-black:selected{background-color:#3b3b3b}.pe-pill--interactive.pe-pill--fill-black:disabled,.pe-pill--interactive.pe-pill--fill-black[disabled],.pe-pill--interactive-rounded.pe-pill--fill-black:disabled,.pe-pill--interactive-rounded.pe-pill--fill-black[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-black,.pe-pill--interactive-rounded.pe-pill--fill-black{background-color:#232323;color:inherit;color:#fff}.pe-pill--interactive.pe-pill--fill-purple,.pe-pill--interactive-rounded.pe-pill--fill-purple{background-color:#6f3de0;color:inherit}.pe-pill--interactive.pe-pill--fill-purple:hover,.pe-pill--interactive-rounded.pe-pill--fill-purple:hover{background-color:#7e4af7}.pe-pill--interactive.pe-pill--fill-purple:active,.pe-pill--interactive-rounded.pe-pill--fill-purple:active{background-color:#5935af}.pe-pill--interactive.pe-pill--fill-purple:selected,.pe-pill--interactive-rounded.pe-pill--fill-purple:selected{background-color:#7e4af7}.pe-pill--interactive.pe-pill--fill-purple:disabled,.pe-pill--interactive.pe-pill--fill-purple[disabled],.pe-pill--interactive-rounded.pe-pill--fill-purple:disabled,.pe-pill--interactive-rounded.pe-pill--fill-purple[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-purple,.pe-pill--interactive-rounded.pe-pill--fill-purple{color:#fff}.pe-pill--interactive.pe-pill--fill-red,.pe-pill--interactive-rounded.pe-pill--fill-red{background-color:#c33a3a;color:inherit}.pe-pill--interactive.pe-pill--fill-red:hover,.pe-pill--interactive-rounded.pe-pill--fill-red:hover{background-color:#d64040}.pe-pill--interactive.pe-pill--fill-red:active,.pe-pill--interactive-rounded.pe-pill--fill-red:active{background-color:#982d2d}.pe-pill--interactive.pe-pill--fill-red:selected,.pe-pill--interactive-rounded.pe-pill--fill-red:selected{background-color:#d64040}.pe-pill--interactive.pe-pill--fill-red:disabled,.pe-pill--interactive.pe-pill--fill-red[disabled],.pe-pill--interactive-rounded.pe-pill--fill-red:disabled,.pe-pill--interactive-rounded.pe-pill--fill-red[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-red,.pe-pill--interactive-rounded.pe-pill--fill-red{color:#fff}.pe-pill--interactive.pe-pill--fill-green,.pe-pill--interactive-rounded.pe-pill--fill-green{background-color:#0b7a27;color:inherit}.pe-pill--interactive.pe-pill--fill-green:hover,.pe-pill--interactive-rounded.pe-pill--fill-green:hover{background-color:#0e892d}.pe-pill--interactive.pe-pill--fill-green:active,.pe-pill--interactive-rounded.pe-pill--fill-green:active{background-color:#096620}.pe-pill--interactive.pe-pill--fill-green:selected,.pe-pill--interactive-rounded.pe-pill--fill-green:selected{background-color:#0e892d}.pe-pill--interactive.pe-pill--fill-green:disabled,.pe-pill--interactive.pe-pill--fill-green[disabled],.pe-pill--interactive-rounded.pe-pill--fill-green:disabled,.pe-pill--interactive-rounded.pe-pill--fill-green[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-green,.pe-pill--interactive-rounded.pe-pill--fill-green{color:#fff}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white{background-color:#ffffff1a;color:inherit}.pe-pill--interactive.pe-pill--transparent-white:hover,.pe-pill--interactive-rounded.pe-pill--transparent-white:hover{background-color:#fff3}.pe-pill--interactive.pe-pill--transparent-white:active,.pe-pill--interactive-rounded.pe-pill--transparent-white:active{background-color:#ffffff1a}.pe-pill--interactive.pe-pill--transparent-white:selected,.pe-pill--interactive-rounded.pe-pill--transparent-white:selected{background-color:#fff3}.pe-pill--interactive.pe-pill--transparent-white:disabled,.pe-pill--interactive.pe-pill--transparent-white[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-white:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-white[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white{color:#fff}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple{background-color:#a781ff33;color:inherit}.pe-pill--interactive.pe-pill--transparent-purple:hover,.pe-pill--interactive-rounded.pe-pill--transparent-purple:hover{background-color:#a781ff4d}.pe-pill--interactive.pe-pill--transparent-purple:active,.pe-pill--interactive-rounded.pe-pill--transparent-purple:active{background-color:#a781ff33}.pe-pill--interactive.pe-pill--transparent-purple:selected,.pe-pill--interactive-rounded.pe-pill--transparent-purple:selected{background-color:#a781ff4d}.pe-pill--interactive.pe-pill--transparent-purple:disabled,.pe-pill--interactive.pe-pill--transparent-purple[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-purple:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-purple[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple{color:#c2a8ff}.pe-pill--interactive.pe-pill--transparent-red,.pe-pill--interactive-rounded.pe-pill--transparent-red{background-color:#f3707033;color:inherit}.pe-pill--interactive.pe-pill--transparent-red:hover,.pe-pill--interactive-rounded.pe-pill--transparent-red:hover{background-color:#f370704d}.pe-pill--interactive.pe-pill--transparent-red:active,.pe-pill--interactive-rounded.pe-pill--transparent-red:active{background-color:#f3707033}.pe-pill--interactive.pe-pill--transparent-red:selected,.pe-pill--interactive-rounded.pe-pill--transparent-red:selected{background-color:#f370704d}.pe-pill--interactive.pe-pill--transparent-red:disabled,.pe-pill--interactive.pe-pill--transparent-red[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-red:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-red[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-red,.pe-pill--interactive-rounded.pe-pill--transparent-red{color:#f69d9d}.pe-pill--interactive.pe-pill--transparent-green,.pe-pill--interactive-rounded.pe-pill--transparent-green{background-color:#50c06c33;color:inherit}.pe-pill--interactive.pe-pill--transparent-green:hover,.pe-pill--interactive-rounded.pe-pill--transparent-green:hover{background-color:#50c06c4d}.pe-pill--interactive.pe-pill--transparent-green:active,.pe-pill--interactive-rounded.pe-pill--transparent-green:active{background-color:#50c06c33}.pe-pill--interactive.pe-pill--transparent-green:selected,.pe-pill--interactive-rounded.pe-pill--transparent-green:selected{background-color:#50c06c4d}.pe-pill--interactive.pe-pill--transparent-green:disabled,.pe-pill--interactive.pe-pill--transparent-green[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-green:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-green[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-green,.pe-pill--interactive-rounded.pe-pill--transparent-green{color:#7edc96}.pe-pill--interactive.pe-pill--stroke-white,.pe-pill--interactive.pe-pill--outline-white,.pe-pill--interactive-rounded.pe-pill--stroke-white,.pe-pill--interactive-rounded.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--interactive.pe-pill--stroke-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--stroke-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--interactive.pe-pill--stroke-white:active:not(:disabled):not([disabled]),.pe-pill--interactive.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--stroke-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--interactive.pe-pill--stroke-white:disabled,.pe-pill--interactive.pe-pill--stroke-white[disabled],.pe-pill--interactive.pe-pill--outline-white:disabled,.pe-pill--interactive.pe-pill--outline-white[disabled],.pe-pill--interactive-rounded.pe-pill--stroke-white:disabled,.pe-pill--interactive-rounded.pe-pill--stroke-white[disabled],.pe-pill--interactive-rounded.pe-pill--outline-white:disabled,.pe-pill--interactive-rounded.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-purple,.pe-pill--interactive-rounded.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:disabled,.pe-pill--interactive.pe-pill--outline-purple[disabled],.pe-pill--interactive-rounded.pe-pill--outline-purple:disabled,.pe-pill--interactive-rounded.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-red,.pe-pill--interactive-rounded.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:disabled,.pe-pill--interactive.pe-pill--outline-red[disabled],.pe-pill--interactive-rounded.pe-pill--outline-red:disabled,.pe-pill--interactive-rounded.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-green,.pe-pill--interactive-rounded.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:disabled,.pe-pill--interactive.pe-pill--outline-green[disabled],.pe-pill--interactive-rounded.pe-pill--outline-green:disabled,.pe-pill--interactive-rounded.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white,.pe-pill--dismissible.pe-pill--transparent-white{background-color:#ffffff1a;color:inherit}.pe-pill--interactive.pe-pill--transparent-white:disabled,.pe-pill--interactive.pe-pill--transparent-white[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-white:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-white[disabled],.pe-pill--dismissible.pe-pill--transparent-white:disabled,.pe-pill--dismissible.pe-pill--transparent-white[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white,.pe-pill--dismissible.pe-pill--transparent-white{color:#fff}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple,.pe-pill--dismissible.pe-pill--transparent-purple{background-color:#a781ff33;color:inherit}.pe-pill--interactive.pe-pill--transparent-purple:disabled,.pe-pill--interactive.pe-pill--transparent-purple[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-purple:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-purple[disabled],.pe-pill--dismissible.pe-pill--transparent-purple:disabled,.pe-pill--dismissible.pe-pill--transparent-purple[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple,.pe-pill--dismissible.pe-pill--transparent-purple{color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-white,.pe-pill--interactive-rounded.pe-pill--outline-white,.pe-pill--dismissible.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--interactive.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--interactive.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--interactive.pe-pill--outline-white:disabled,.pe-pill--interactive.pe-pill--outline-white[disabled],.pe-pill--interactive-rounded.pe-pill--outline-white:disabled,.pe-pill--interactive-rounded.pe-pill--outline-white[disabled],.pe-pill--dismissible.pe-pill--outline-white:disabled,.pe-pill--dismissible.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-purple,.pe-pill--interactive-rounded.pe-pill--outline-purple,.pe-pill--dismissible.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:disabled,.pe-pill--interactive.pe-pill--outline-purple[disabled],.pe-pill--interactive-rounded.pe-pill--outline-purple:disabled,.pe-pill--interactive-rounded.pe-pill--outline-purple[disabled],.pe-pill--dismissible.pe-pill--outline-purple:disabled,.pe-pill--dismissible.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-red,.pe-pill--interactive-rounded.pe-pill--outline-red,.pe-pill--dismissible.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:disabled,.pe-pill--interactive.pe-pill--outline-red[disabled],.pe-pill--interactive-rounded.pe-pill--outline-red:disabled,.pe-pill--interactive-rounded.pe-pill--outline-red[disabled],.pe-pill--dismissible.pe-pill--outline-red:disabled,.pe-pill--dismissible.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-green,.pe-pill--interactive-rounded.pe-pill--outline-green,.pe-pill--dismissible.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:disabled,.pe-pill--interactive.pe-pill--outline-green[disabled],.pe-pill--interactive-rounded.pe-pill--outline-green:disabled,.pe-pill--interactive-rounded.pe-pill--outline-green[disabled],.pe-pill--dismissible.pe-pill--outline-green:disabled,.pe-pill--dismissible.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--read-only.pe-pill--transparent-white{color:#ffffffb3;border:1px solid rgba(255,255,255,.3)}.pe-pill--read-only.pe-pill--transparent-purple{color:#c2a8ff;border:1px solid #c2a8ff}.pe-pill--read-only.pe-pill--transparent-red{color:#f69d9d;border:1px solid #f69d9d}.pe-pill--read-only.pe-pill--transparent-green{color:#7edc96;border:1px solid #7edc96}.pe-pill--read-only.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--read-only.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--read-only.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--read-only.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--selectable{position:relative}.pe-pill--selectable.pe-pill--transparent-white{color:#ffffffb3;border:1px solid rgba(255,255,255,.3)}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#ffffff1a;color:inherit}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):hover{background-color:#fff3}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):active{background-color:#ffffff1a}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):selected{background-color:#fff3}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--transparent-purple{color:#c2a8ff;border:1px solid #c2a8ff}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#a781ff33;color:inherit}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):hover{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):active{background-color:#a781ff33}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):selected{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--selectable.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--selectable.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--selectable.pe-pill--outline-white:disabled,.pe-pill--selectable.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#ffffff1a;color:inherit}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):hover{background-color:#fff3}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):active{background-color:#ffffff1a}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):selected{background-color:#fff3}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:disabled,.pe-pill--selectable.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#a781ff33;color:inherit}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):hover{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):active{background-color:#a781ff33}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):selected{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:disabled,.pe-pill--selectable.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#f3707033;color:inherit}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):hover{background-color:#f370704d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):active{background-color:#f3707033}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):selected{background-color:#f370704d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:disabled,.pe-pill--selectable.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#50c06c33;color:inherit}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):hover{background-color:#50c06c4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):active{background-color:#50c06c33}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):selected{background-color:#50c06c4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable .pe-pill__checkbox{position:absolute;visibility:hidden;height:0;width:0;top:0;left:0}.pe-pill--disabled,.pe-pill[disabled],.pe-pill:disabled{cursor:not-allowed;color:#ffffff4d}.pe-pill--disabled.pe-pill--outline-white,.pe-pill--disabled.pe-pill--outline-purple,.pe-pill--disabled.pe-pill--outline-red,.pe-pill--disabled.pe-pill--outline-green,.pe-pill--disabled.pe-pill--stroke-white,.pe-pill[disabled].pe-pill--outline-white,.pe-pill[disabled].pe-pill--outline-purple,.pe-pill[disabled].pe-pill--outline-red,.pe-pill[disabled].pe-pill--outline-green,.pe-pill[disabled].pe-pill--stroke-white,.pe-pill:disabled.pe-pill--outline-white,.pe-pill:disabled.pe-pill--outline-purple,.pe-pill:disabled.pe-pill--outline-red,.pe-pill:disabled.pe-pill--outline-green,.pe-pill:disabled.pe-pill--stroke-white{border-color:#6c6c6c}.pe-pill .pe-icon{font-size:20px;line-height:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1887
+ }
1888
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PillComponent, decorators: [{
1889
+ type: Component,
1890
+ args: [{ selector: 'pe-pill', standalone: true, imports: [CommonModule, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (variant() === 'selectable') {\n <label [class]=\"modifierClass()\" [class.pe-pill--disabled]=\"disabled()\">\n <input type=\"checkbox\" class=\"pe-pill__checkbox\" />\n <ng-container *ngTemplateOutlet=\"content\" />\n </label>\n} @else if (['dismissible', 'read-only'].includes(variant())) {\n <div [class]=\"modifierClass()\" [class.pe-pill--disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n @if (variant() === 'dismissible') {\n <pe-button\n [theme]=\"dismissibleButtonTheme()\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"dismiss.emit()\"\n >\n <pe-icon icon=\"close\" />\n </pe-button>\n }\n </div>\n} @else if (['interactive', 'interactive-rounded'].includes(variant())) {\n <button [class]=\"modifierClass()\" [disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n}\n\n<ng-template #content>\n <ng-content />\n</ng-template>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-pill{border:none;cursor:pointer;text-decoration-line:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;white-space:nowrap;box-sizing:border-box;background-color:transparent;gap:8px;color:#fff;border-radius:8px;padding:4px 12px;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1)}.pe-pill--md{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:500}.pe-pill--lg{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:500}.pe-pill--interactive,.pe-pill--interactive-rounded,.pe-pill--selectable{cursor:pointer}.pe-pill--interactive:focus-visible,.pe-pill--interactive:focus,.pe-pill--interactive-rounded:focus-visible,.pe-pill--interactive-rounded:focus,.pe-pill--selectable:focus-visible,.pe-pill--selectable:focus{outline-offset:2px;outline:rgba(255,255,255,.3) solid 2px}.pe-pill--interactive-rounded{cursor:pointer;border-radius:4096px}.pe-pill--read-only,.pe-pill--dismissible.pe-pill{cursor:default}.pe-pill--dismissible.pe-pill .pe-btn--sm:last-child .pe-icon{font-size:16px;line-height:16px}.pe-pill--dismissible.pe-pill--md{padding:4px 4px 4px 12px;border-radius:8px}.pe-pill--dismissible.pe-pill--md .pe-btn--sm:last-child{min-width:24px;height:24px}.pe-pill--dismissible.pe-pill--lg{padding:8px 4px 8px 16px;border-radius:12px}.pe-pill--interactive.pe-pill--fill-white,.pe-pill--interactive-rounded.pe-pill--fill-white{background-color:#fff;color:inherit}.pe-pill--interactive.pe-pill--fill-white:hover,.pe-pill--interactive-rounded.pe-pill--fill-white:hover{background-color:#e7e7e7}.pe-pill--interactive.pe-pill--fill-white:active,.pe-pill--interactive-rounded.pe-pill--fill-white:active{background-color:#fff}.pe-pill--interactive.pe-pill--fill-white:selected,.pe-pill--interactive-rounded.pe-pill--fill-white:selected{background-color:#fff}.pe-pill--interactive.pe-pill--fill-white:disabled,.pe-pill--interactive.pe-pill--fill-white[disabled],.pe-pill--interactive-rounded.pe-pill--fill-white:disabled,.pe-pill--interactive-rounded.pe-pill--fill-white[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-white,.pe-pill--interactive-rounded.pe-pill--fill-white{color:#000}.pe-pill--interactive.pe-pill--fill-black:hover,.pe-pill--interactive-rounded.pe-pill--fill-black:hover{background-color:#3b3b3b}.pe-pill--interactive.pe-pill--fill-black:active,.pe-pill--interactive-rounded.pe-pill--fill-black:active{background-color:#232323}.pe-pill--interactive.pe-pill--fill-black:selected,.pe-pill--interactive-rounded.pe-pill--fill-black:selected{background-color:#3b3b3b}.pe-pill--interactive.pe-pill--fill-black:disabled,.pe-pill--interactive.pe-pill--fill-black[disabled],.pe-pill--interactive-rounded.pe-pill--fill-black:disabled,.pe-pill--interactive-rounded.pe-pill--fill-black[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-black,.pe-pill--interactive-rounded.pe-pill--fill-black{background-color:#232323;color:inherit;color:#fff}.pe-pill--interactive.pe-pill--fill-purple,.pe-pill--interactive-rounded.pe-pill--fill-purple{background-color:#6f3de0;color:inherit}.pe-pill--interactive.pe-pill--fill-purple:hover,.pe-pill--interactive-rounded.pe-pill--fill-purple:hover{background-color:#7e4af7}.pe-pill--interactive.pe-pill--fill-purple:active,.pe-pill--interactive-rounded.pe-pill--fill-purple:active{background-color:#5935af}.pe-pill--interactive.pe-pill--fill-purple:selected,.pe-pill--interactive-rounded.pe-pill--fill-purple:selected{background-color:#7e4af7}.pe-pill--interactive.pe-pill--fill-purple:disabled,.pe-pill--interactive.pe-pill--fill-purple[disabled],.pe-pill--interactive-rounded.pe-pill--fill-purple:disabled,.pe-pill--interactive-rounded.pe-pill--fill-purple[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-purple,.pe-pill--interactive-rounded.pe-pill--fill-purple{color:#fff}.pe-pill--interactive.pe-pill--fill-red,.pe-pill--interactive-rounded.pe-pill--fill-red{background-color:#c33a3a;color:inherit}.pe-pill--interactive.pe-pill--fill-red:hover,.pe-pill--interactive-rounded.pe-pill--fill-red:hover{background-color:#d64040}.pe-pill--interactive.pe-pill--fill-red:active,.pe-pill--interactive-rounded.pe-pill--fill-red:active{background-color:#982d2d}.pe-pill--interactive.pe-pill--fill-red:selected,.pe-pill--interactive-rounded.pe-pill--fill-red:selected{background-color:#d64040}.pe-pill--interactive.pe-pill--fill-red:disabled,.pe-pill--interactive.pe-pill--fill-red[disabled],.pe-pill--interactive-rounded.pe-pill--fill-red:disabled,.pe-pill--interactive-rounded.pe-pill--fill-red[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-red,.pe-pill--interactive-rounded.pe-pill--fill-red{color:#fff}.pe-pill--interactive.pe-pill--fill-green,.pe-pill--interactive-rounded.pe-pill--fill-green{background-color:#0b7a27;color:inherit}.pe-pill--interactive.pe-pill--fill-green:hover,.pe-pill--interactive-rounded.pe-pill--fill-green:hover{background-color:#0e892d}.pe-pill--interactive.pe-pill--fill-green:active,.pe-pill--interactive-rounded.pe-pill--fill-green:active{background-color:#096620}.pe-pill--interactive.pe-pill--fill-green:selected,.pe-pill--interactive-rounded.pe-pill--fill-green:selected{background-color:#0e892d}.pe-pill--interactive.pe-pill--fill-green:disabled,.pe-pill--interactive.pe-pill--fill-green[disabled],.pe-pill--interactive-rounded.pe-pill--fill-green:disabled,.pe-pill--interactive-rounded.pe-pill--fill-green[disabled]{background-color:#232323}.pe-pill--interactive.pe-pill--fill-green,.pe-pill--interactive-rounded.pe-pill--fill-green{color:#fff}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white{background-color:#ffffff1a;color:inherit}.pe-pill--interactive.pe-pill--transparent-white:hover,.pe-pill--interactive-rounded.pe-pill--transparent-white:hover{background-color:#fff3}.pe-pill--interactive.pe-pill--transparent-white:active,.pe-pill--interactive-rounded.pe-pill--transparent-white:active{background-color:#ffffff1a}.pe-pill--interactive.pe-pill--transparent-white:selected,.pe-pill--interactive-rounded.pe-pill--transparent-white:selected{background-color:#fff3}.pe-pill--interactive.pe-pill--transparent-white:disabled,.pe-pill--interactive.pe-pill--transparent-white[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-white:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-white[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white{color:#fff}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple{background-color:#a781ff33;color:inherit}.pe-pill--interactive.pe-pill--transparent-purple:hover,.pe-pill--interactive-rounded.pe-pill--transparent-purple:hover{background-color:#a781ff4d}.pe-pill--interactive.pe-pill--transparent-purple:active,.pe-pill--interactive-rounded.pe-pill--transparent-purple:active{background-color:#a781ff33}.pe-pill--interactive.pe-pill--transparent-purple:selected,.pe-pill--interactive-rounded.pe-pill--transparent-purple:selected{background-color:#a781ff4d}.pe-pill--interactive.pe-pill--transparent-purple:disabled,.pe-pill--interactive.pe-pill--transparent-purple[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-purple:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-purple[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple{color:#c2a8ff}.pe-pill--interactive.pe-pill--transparent-red,.pe-pill--interactive-rounded.pe-pill--transparent-red{background-color:#f3707033;color:inherit}.pe-pill--interactive.pe-pill--transparent-red:hover,.pe-pill--interactive-rounded.pe-pill--transparent-red:hover{background-color:#f370704d}.pe-pill--interactive.pe-pill--transparent-red:active,.pe-pill--interactive-rounded.pe-pill--transparent-red:active{background-color:#f3707033}.pe-pill--interactive.pe-pill--transparent-red:selected,.pe-pill--interactive-rounded.pe-pill--transparent-red:selected{background-color:#f370704d}.pe-pill--interactive.pe-pill--transparent-red:disabled,.pe-pill--interactive.pe-pill--transparent-red[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-red:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-red[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-red,.pe-pill--interactive-rounded.pe-pill--transparent-red{color:#f69d9d}.pe-pill--interactive.pe-pill--transparent-green,.pe-pill--interactive-rounded.pe-pill--transparent-green{background-color:#50c06c33;color:inherit}.pe-pill--interactive.pe-pill--transparent-green:hover,.pe-pill--interactive-rounded.pe-pill--transparent-green:hover{background-color:#50c06c4d}.pe-pill--interactive.pe-pill--transparent-green:active,.pe-pill--interactive-rounded.pe-pill--transparent-green:active{background-color:#50c06c33}.pe-pill--interactive.pe-pill--transparent-green:selected,.pe-pill--interactive-rounded.pe-pill--transparent-green:selected{background-color:#50c06c4d}.pe-pill--interactive.pe-pill--transparent-green:disabled,.pe-pill--interactive.pe-pill--transparent-green[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-green:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-green[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-green,.pe-pill--interactive-rounded.pe-pill--transparent-green{color:#7edc96}.pe-pill--interactive.pe-pill--stroke-white,.pe-pill--interactive.pe-pill--outline-white,.pe-pill--interactive-rounded.pe-pill--stroke-white,.pe-pill--interactive-rounded.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--interactive.pe-pill--stroke-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--stroke-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--interactive.pe-pill--stroke-white:active:not(:disabled):not([disabled]),.pe-pill--interactive.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--stroke-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--interactive.pe-pill--stroke-white:disabled,.pe-pill--interactive.pe-pill--stroke-white[disabled],.pe-pill--interactive.pe-pill--outline-white:disabled,.pe-pill--interactive.pe-pill--outline-white[disabled],.pe-pill--interactive-rounded.pe-pill--stroke-white:disabled,.pe-pill--interactive-rounded.pe-pill--stroke-white[disabled],.pe-pill--interactive-rounded.pe-pill--outline-white:disabled,.pe-pill--interactive-rounded.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-purple,.pe-pill--interactive-rounded.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:disabled,.pe-pill--interactive.pe-pill--outline-purple[disabled],.pe-pill--interactive-rounded.pe-pill--outline-purple:disabled,.pe-pill--interactive-rounded.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-red,.pe-pill--interactive-rounded.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:disabled,.pe-pill--interactive.pe-pill--outline-red[disabled],.pe-pill--interactive-rounded.pe-pill--outline-red:disabled,.pe-pill--interactive-rounded.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-green,.pe-pill--interactive-rounded.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:disabled,.pe-pill--interactive.pe-pill--outline-green[disabled],.pe-pill--interactive-rounded.pe-pill--outline-green:disabled,.pe-pill--interactive-rounded.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white,.pe-pill--dismissible.pe-pill--transparent-white{background-color:#ffffff1a;color:inherit}.pe-pill--interactive.pe-pill--transparent-white:disabled,.pe-pill--interactive.pe-pill--transparent-white[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-white:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-white[disabled],.pe-pill--dismissible.pe-pill--transparent-white:disabled,.pe-pill--dismissible.pe-pill--transparent-white[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-white,.pe-pill--interactive-rounded.pe-pill--transparent-white,.pe-pill--dismissible.pe-pill--transparent-white{color:#fff}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple,.pe-pill--dismissible.pe-pill--transparent-purple{background-color:#a781ff33;color:inherit}.pe-pill--interactive.pe-pill--transparent-purple:disabled,.pe-pill--interactive.pe-pill--transparent-purple[disabled],.pe-pill--interactive-rounded.pe-pill--transparent-purple:disabled,.pe-pill--interactive-rounded.pe-pill--transparent-purple[disabled],.pe-pill--dismissible.pe-pill--transparent-purple:disabled,.pe-pill--dismissible.pe-pill--transparent-purple[disabled]{background-color:#ffffff0d}.pe-pill--interactive.pe-pill--transparent-purple,.pe-pill--interactive-rounded.pe-pill--transparent-purple,.pe-pill--dismissible.pe-pill--transparent-purple{color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-white,.pe-pill--interactive-rounded.pe-pill--outline-white,.pe-pill--dismissible.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--interactive.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--interactive.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-white:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--interactive.pe-pill--outline-white:disabled,.pe-pill--interactive.pe-pill--outline-white[disabled],.pe-pill--interactive-rounded.pe-pill--outline-white:disabled,.pe-pill--interactive-rounded.pe-pill--outline-white[disabled],.pe-pill--dismissible.pe-pill--outline-white:disabled,.pe-pill--dismissible.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-purple,.pe-pill--interactive-rounded.pe-pill--outline-purple,.pe-pill--dismissible.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-purple:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--interactive.pe-pill--outline-purple:disabled,.pe-pill--interactive.pe-pill--outline-purple[disabled],.pe-pill--interactive-rounded.pe-pill--outline-purple:disabled,.pe-pill--interactive-rounded.pe-pill--outline-purple[disabled],.pe-pill--dismissible.pe-pill--outline-purple:disabled,.pe-pill--dismissible.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-red,.pe-pill--interactive-rounded.pe-pill--outline-red,.pe-pill--dismissible.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-red:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--interactive.pe-pill--outline-red:disabled,.pe-pill--interactive.pe-pill--outline-red[disabled],.pe-pill--interactive-rounded.pe-pill--outline-red:disabled,.pe-pill--interactive-rounded.pe-pill--outline-red[disabled],.pe-pill--dismissible.pe-pill--outline-red:disabled,.pe-pill--dismissible.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--interactive.pe-pill--outline-green,.pe-pill--interactive-rounded.pe-pill--outline-green,.pe-pill--dismissible.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:hover:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--interactive-rounded.pe-pill--outline-green:active:not(:disabled):not([disabled]),.pe-pill--dismissible.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--interactive.pe-pill--outline-green:disabled,.pe-pill--interactive.pe-pill--outline-green[disabled],.pe-pill--interactive-rounded.pe-pill--outline-green:disabled,.pe-pill--interactive-rounded.pe-pill--outline-green[disabled],.pe-pill--dismissible.pe-pill--outline-green:disabled,.pe-pill--dismissible.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--read-only.pe-pill--transparent-white{color:#ffffffb3;border:1px solid rgba(255,255,255,.3)}.pe-pill--read-only.pe-pill--transparent-purple{color:#c2a8ff;border:1px solid #c2a8ff}.pe-pill--read-only.pe-pill--transparent-red{color:#f69d9d;border:1px solid #f69d9d}.pe-pill--read-only.pe-pill--transparent-green{color:#7edc96;border:1px solid #7edc96}.pe-pill--read-only.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--read-only.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--read-only.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--read-only.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--selectable{position:relative}.pe-pill--selectable.pe-pill--transparent-white{color:#ffffffb3;border:1px solid rgba(255,255,255,.3)}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#ffffff1a;color:inherit}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):hover{background-color:#fff3}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):active{background-color:#ffffff1a}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):selected{background-color:#fff3}.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--transparent-white:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--transparent-purple{color:#c2a8ff;border:1px solid #c2a8ff}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#a781ff33;color:inherit}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):hover{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):active{background-color:#a781ff33}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):selected{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--transparent-purple:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-white{background-color:transparent;border:1px solid rgba(255,255,255,.3);color:#fff}.pe-pill--selectable.pe-pill--outline-white:hover:not(:disabled):not([disabled]){border-color:#fff}.pe-pill--selectable.pe-pill--outline-white:active:not(:disabled):not([disabled]){border-color:#ffffff80}.pe-pill--selectable.pe-pill--outline-white:disabled,.pe-pill--selectable.pe-pill--outline-white[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#ffffff1a;color:inherit}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):hover{background-color:#fff3}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):active{background-color:#ffffff1a}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):selected{background-color:#fff3}.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-white:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-purple{background-color:transparent;border:1px solid #c2a8ff;color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:hover:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:active:not(:disabled):not([disabled]){border-color:#c2a8ff}.pe-pill--selectable.pe-pill--outline-purple:disabled,.pe-pill--selectable.pe-pill--outline-purple[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#a781ff33;color:inherit}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):hover{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):active{background-color:#a781ff33}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):selected{background-color:#a781ff4d}.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-purple:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-red{background-color:transparent;border:1px solid #f69d9d;color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:hover:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:active:not(:disabled):not([disabled]){border-color:#f69d9d}.pe-pill--selectable.pe-pill--outline-red:disabled,.pe-pill--selectable.pe-pill--outline-red[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#f3707033;color:inherit}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):hover{background-color:#f370704d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):active{background-color:#f3707033}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):selected{background-color:#f370704d}.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-red:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable.pe-pill--outline-green{background-color:transparent;border:1px solid #7edc96;color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:hover:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:active:not(:disabled):not([disabled]){border-color:#7edc96}.pe-pill--selectable.pe-pill--outline-green:disabled,.pe-pill--selectable.pe-pill--outline-green[disabled]{border-color:#6c6c6c;color:#ffffff4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked){border-color:transparent;background-color:#50c06c33;color:inherit}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):hover{background-color:#50c06c4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):active{background-color:#50c06c33}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):selected{background-color:#50c06c4d}.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked):disabled,.pe-pill--selectable.pe-pill--outline-green:has(.pe-pill__checkbox:checked)[disabled]{background-color:#ffffff0d}.pe-pill--selectable .pe-pill__checkbox{position:absolute;visibility:hidden;height:0;width:0;top:0;left:0}.pe-pill--disabled,.pe-pill[disabled],.pe-pill:disabled{cursor:not-allowed;color:#ffffff4d}.pe-pill--disabled.pe-pill--outline-white,.pe-pill--disabled.pe-pill--outline-purple,.pe-pill--disabled.pe-pill--outline-red,.pe-pill--disabled.pe-pill--outline-green,.pe-pill--disabled.pe-pill--stroke-white,.pe-pill[disabled].pe-pill--outline-white,.pe-pill[disabled].pe-pill--outline-purple,.pe-pill[disabled].pe-pill--outline-red,.pe-pill[disabled].pe-pill--outline-green,.pe-pill[disabled].pe-pill--stroke-white,.pe-pill:disabled.pe-pill--outline-white,.pe-pill:disabled.pe-pill--outline-purple,.pe-pill:disabled.pe-pill--outline-red,.pe-pill:disabled.pe-pill--outline-green,.pe-pill:disabled.pe-pill--stroke-white{border-color:#6c6c6c}.pe-pill .pe-icon{font-size:20px;line-height:20px}\n"] }]
1891
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }] } });
1892
+
1893
+ /** Place on the element projected into [pe-hero-badges] so the hero can detect custom badges content. */
1894
+ class PeHeroBadgesSlotDirective {
1895
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroBadgesSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1896
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PeHeroBadgesSlotDirective, isStandalone: true, selector: "[pe-hero-badges]", ngImport: i0 });
1897
+ }
1898
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroBadgesSlotDirective, decorators: [{
1899
+ type: Directive,
1900
+ args: [{
1901
+ selector: '[pe-hero-badges]',
1902
+ standalone: true,
1903
+ }]
1904
+ }] });
1905
+ /** Place on the element projected into [pe-hero-title] so the hero can detect custom title content. */
1906
+ class PeHeroTitleSlotDirective {
1907
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroTitleSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1908
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PeHeroTitleSlotDirective, isStandalone: true, selector: "[pe-hero-title]", ngImport: i0 });
1909
+ }
1910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroTitleSlotDirective, decorators: [{
1911
+ type: Directive,
1912
+ args: [{
1913
+ selector: '[pe-hero-title]',
1914
+ standalone: true,
1915
+ }]
1916
+ }] });
1917
+ /** Place on the element projected into [pe-hero-subtitle] so the hero can detect custom subtitle content. */
1918
+ class PeHeroSubtitleSlotDirective {
1919
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroSubtitleSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1920
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PeHeroSubtitleSlotDirective, isStandalone: true, selector: "[pe-hero-subtitle]", ngImport: i0 });
1921
+ }
1922
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroSubtitleSlotDirective, decorators: [{
1923
+ type: Directive,
1924
+ args: [{
1925
+ selector: '[pe-hero-subtitle]',
1926
+ standalone: true,
1927
+ }]
1928
+ }] });
1929
+ /** Place on the element projected into [pe-hero-actions] so the hero can detect custom actions content. */
1930
+ class PeHeroActionsSlotDirective {
1931
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroActionsSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1932
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PeHeroActionsSlotDirective, isStandalone: true, selector: "[pe-hero-actions]", ngImport: i0 });
1933
+ }
1934
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroActionsSlotDirective, decorators: [{
1935
+ type: Directive,
1936
+ args: [{
1937
+ selector: '[pe-hero-actions]',
1938
+ standalone: true,
1939
+ }]
1940
+ }] });
1941
+ /** Place on the element projected into [pe-hero-content] for optional extra content (e.g. between subtitle and actions). */
1942
+ class PeHeroContentSlotDirective {
1943
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroContentSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1944
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: PeHeroContentSlotDirective, isStandalone: true, selector: "[pe-hero-content]", ngImport: i0 });
1945
+ }
1946
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PeHeroContentSlotDirective, decorators: [{
1947
+ type: Directive,
1948
+ args: [{
1949
+ selector: '[pe-hero-content]',
1950
+ standalone: true,
1951
+ }]
1952
+ }] });
1953
+
1954
+ /**
1955
+ * Hero component for displaying prominent hero sections with title, description,
1956
+ * call-to-action buttons, optional badges, and background image support.
1957
+ * Fully responsive across mobile, tablet, and desktop.
1958
+ *
1959
+ * When slots are not projected, inputs are used (title, subtitle, badges, primaryAction, secondaryAction).
1960
+ * Content projection slots: pe-hero-badges, pe-hero-title, pe-hero-subtitle, pe-hero-actions, pe-hero-content.
1961
+ *
1962
+ * @example
1963
+ * ```html
1964
+ * <pe-hero
1965
+ * title="Welcome"
1966
+ * subtitle="Build amazing experiences"
1967
+ * [primaryAction]="{ label: 'Get Started', href: '/signup' }"
1968
+ * [badges]="['New', 'Featured']"
1969
+ * />
1970
+ * ```
1971
+ */
1972
+ class HeroComponent {
1973
+ /** Main headline text */
1974
+ title = input.required(...(ngDevMode ? [{ debugName: "title" }] : []));
1975
+ /** Supporting description text */
1976
+ subtitle = input(undefined, ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
1977
+ /** Primary call-to-action button */
1978
+ primaryAction = input(undefined, ...(ngDevMode ? [{ debugName: "primaryAction" }] : []));
1979
+ /** Secondary call-to-action button */
1980
+ secondaryAction = input(undefined, ...(ngDevMode ? [{ debugName: "secondaryAction" }] : []));
1981
+ /** Badge/pill labels to display above the title */
1982
+ badges = input([], ...(ngDevMode ? [{ debugName: "badges" }] : []));
1983
+ /** Background image URL */
1984
+ backgroundImage = input(undefined, ...(ngDevMode ? [{ debugName: "backgroundImage" }] : []));
1985
+ /**
1986
+ * CSS gradient or color for the overlay on top of the background image.
1987
+ * E.g. "linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.7) 100%)" or "rgba(0,0,0,0.5)".
1988
+ * When unset, a default dark overlay is used when a background image is present.
1989
+ */
1990
+ backgroundOverlayGradient = input(undefined, ...(ngDevMode ? [{ debugName: "backgroundOverlayGradient" }] : []));
1991
+ /**
1992
+ * CSS filter applied to the background image (e.g. "brightness(0.8)", "blur(2px)", "grayscale(0.3)").
1993
+ * Combine multiple: "brightness(0.7) contrast(1.1)".
1994
+ */
1995
+ backgroundFilter = input(undefined, ...(ngDevMode ? [{ debugName: "backgroundFilter" }] : []));
1996
+ /** Text and content alignment */
1997
+ alignment = input('center', ...(ngDevMode ? [{ debugName: "alignment" }] : []));
1998
+ /** Hero section size variant */
1999
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
2000
+ /** Whether hero takes full viewport height */
2001
+ fullHeight = input(false, ...(ngDevMode ? [{ debugName: "fullHeight" }] : []));
2002
+ badgesSlot = contentChild(PeHeroBadgesSlotDirective, ...(ngDevMode ? [{ debugName: "badgesSlot" }] : []));
2003
+ titleSlot = contentChild(PeHeroTitleSlotDirective, ...(ngDevMode ? [{ debugName: "titleSlot" }] : []));
2004
+ subtitleSlot = contentChild(PeHeroSubtitleSlotDirective, ...(ngDevMode ? [{ debugName: "subtitleSlot" }] : []));
2005
+ actionsSlot = contentChild(PeHeroActionsSlotDirective, ...(ngDevMode ? [{ debugName: "actionsSlot" }] : []));
2006
+ contentSlot = contentChild(PeHeroContentSlotDirective, ...(ngDevMode ? [{ debugName: "contentSlot" }] : []));
2007
+ hasBadgesSlot = computed(() => !!this.badgesSlot(), ...(ngDevMode ? [{ debugName: "hasBadgesSlot" }] : []));
2008
+ hasTitleSlot = computed(() => !!this.titleSlot(), ...(ngDevMode ? [{ debugName: "hasTitleSlot" }] : []));
2009
+ hasSubtitleSlot = computed(() => !!this.subtitleSlot(), ...(ngDevMode ? [{ debugName: "hasSubtitleSlot" }] : []));
2010
+ hasActionsSlot = computed(() => !!this.actionsSlot(), ...(ngDevMode ? [{ debugName: "hasActionsSlot" }] : []));
2011
+ hasContentSlot = computed(() => !!this.contentSlot(), ...(ngDevMode ? [{ debugName: "hasContentSlot" }] : []));
2012
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: HeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2013
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: HeroComponent, isStandalone: true, selector: "pe-hero", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, primaryAction: { classPropertyName: "primaryAction", publicName: "primaryAction", isSignal: true, isRequired: false, transformFunction: null }, secondaryAction: { classPropertyName: "secondaryAction", publicName: "secondaryAction", isSignal: true, isRequired: false, transformFunction: null }, badges: { classPropertyName: "badges", publicName: "badges", isSignal: true, isRequired: false, transformFunction: null }, backgroundImage: { classPropertyName: "backgroundImage", publicName: "backgroundImage", isSignal: true, isRequired: false, transformFunction: null }, backgroundOverlayGradient: { classPropertyName: "backgroundOverlayGradient", publicName: "backgroundOverlayGradient", isSignal: true, isRequired: false, transformFunction: null }, backgroundFilter: { classPropertyName: "backgroundFilter", publicName: "backgroundFilter", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullHeight: { classPropertyName: "fullHeight", publicName: "fullHeight", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "badgesSlot", first: true, predicate: PeHeroBadgesSlotDirective, descendants: true, isSignal: true }, { propertyName: "titleSlot", first: true, predicate: PeHeroTitleSlotDirective, descendants: true, isSignal: true }, { propertyName: "subtitleSlot", first: true, predicate: PeHeroSubtitleSlotDirective, descendants: true, isSignal: true }, { propertyName: "actionsSlot", first: true, predicate: PeHeroActionsSlotDirective, descendants: true, isSignal: true }, { propertyName: "contentSlot", first: true, predicate: PeHeroContentSlotDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<section\n class=\"pe-hero pe-hero-alignment-{{ alignment() }} pe-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.pe-hero--full-height]=\"fullHeight()\"\n [class.pe-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"pe-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"pe-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"pe-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"pe-hero__badges\">\n <ng-content select=\"[pe-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"pe-hero__badges\">\n @for (badge of badges(); track badge) {\n <pe-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </pe-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"pe-hero__title\">\n <ng-content select=\"[pe-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"pe-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"pe-hero__subtitle\">\n <ng-content select=\"[pe-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"pe-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"pe-hero__extra\">\n <ng-content select=\"[pe-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"pe-hero__actions\">\n <ng-content select=\"[pe-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"pe-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n </a>\n } @else {\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"pe-hero__action-link\">\n <pe-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n </a>\n } @else {\n <pe-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.pe-hero--full-height{min-height:100vh}.pe-hero--has-background .pe-hero__content{position:relative;z-index:1}.pe-hero--alignment-left .pe-hero__content{align-items:flex-start;text-align:left}.pe-hero--alignment-left .pe-hero__badges,.pe-hero--alignment-left .pe-hero__actions{justify-content:flex-start}.pe-hero--alignment-center .pe-hero__content{align-items:center;text-align:center}.pe-hero--alignment-center .pe-hero__badges,.pe-hero--alignment-center .pe-hero__actions{justify-content:center}.pe-hero--alignment-right .pe-hero__content{align-items:flex-end;text-align:right}.pe-hero--alignment-right .pe-hero__badges,.pe-hero--alignment-right .pe-hero__actions{justify-content:flex-end}.pe-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.pe-hero__overlay{position:absolute;inset:0;pointer-events:none}.pe-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.pe-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.pe-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero__subtitle{margin:0;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;max-width:100%}.pe-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.pe-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.pe-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.pe-hero--size-sm{padding:24px 16px}.pe-hero--size-sm .pe-hero__content{gap:12px}.pe-hero--size-sm .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-hero--size-sm .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-hero--size-md .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero--size-md .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-hero--size-lg{padding:48px 16px}.pe-hero--size-lg .pe-hero__content{gap:24px}.pe-hero--size-lg .pe-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-hero--size-lg .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.pe-hero{padding:24px 16px}.pe-hero--size-sm{padding:16px}.pe-hero--size-lg{padding:32px 16px}.pe-hero .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-hero .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-hero .pe-hero__actions{flex-direction:column;width:100%;max-width:100%}.pe-hero .pe-hero__action-link,.pe-hero .pe-hero__actions>pe-button{width:100%}.pe-hero .pe-hero__action-link pe-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.pe-hero{padding:32px 24px}.pe-hero--size-lg{padding:40px 24px}.pe-hero .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-hero .pe-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.pe-hero{padding:40px 32px}.pe-hero--size-sm{padding:24px 32px}.pe-hero--size-lg{padding:64px 32px}.pe-hero .pe-hero__content{max-width:800px}.pe-hero .pe-hero__actions{flex-direction:row}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: PillComponent, selector: "pe-pill", inputs: ["variant", "theme", "size", "disabled"], outputs: ["dismiss"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2014
+ }
2015
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: HeroComponent, decorators: [{
2016
+ type: Component,
2017
+ args: [{ selector: 'pe-hero', standalone: true, imports: [ButtonComponent, IconComponent, PillComponent, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<section\n class=\"pe-hero pe-hero-alignment-{{ alignment() }} pe-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.pe-hero--full-height]=\"fullHeight()\"\n [class.pe-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"pe-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"pe-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"pe-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"pe-hero__badges\">\n <ng-content select=\"[pe-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"pe-hero__badges\">\n @for (badge of badges(); track badge) {\n <pe-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </pe-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"pe-hero__title\">\n <ng-content select=\"[pe-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"pe-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"pe-hero__subtitle\">\n <ng-content select=\"[pe-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"pe-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"pe-hero__extra\">\n <ng-content select=\"[pe-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"pe-hero__actions\">\n <ng-content select=\"[pe-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"pe-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n </a>\n } @else {\n <pe-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <pe-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </pe-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"pe-hero__action-link\">\n <pe-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"pe-hero__action-link\">\n <pe-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n </a>\n } @else {\n <pe-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <pe-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </pe-button>\n }\n }\n </div>\n }\n </div>\n</section>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-hero{position:relative;display:flex;align-items:center;justify-content:center;width:100%;min-height:0;padding:32px 16px;color:#fff}.pe-hero--full-height{min-height:100vh}.pe-hero--has-background .pe-hero__content{position:relative;z-index:1}.pe-hero--alignment-left .pe-hero__content{align-items:flex-start;text-align:left}.pe-hero--alignment-left .pe-hero__badges,.pe-hero--alignment-left .pe-hero__actions{justify-content:flex-start}.pe-hero--alignment-center .pe-hero__content{align-items:center;text-align:center}.pe-hero--alignment-center .pe-hero__badges,.pe-hero--alignment-center .pe-hero__actions{justify-content:center}.pe-hero--alignment-right .pe-hero__content{align-items:flex-end;text-align:right}.pe-hero--alignment-right .pe-hero__badges,.pe-hero--alignment-right .pe-hero__actions{justify-content:flex-end}.pe-hero__background{position:absolute;inset:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#232323}.pe-hero__overlay{position:absolute;inset:0;pointer-events:none}.pe-hero__content{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:100%}.pe-hero__badges{display:flex;flex-wrap:wrap;gap:8px}.pe-hero__title{margin:0;color:#fff;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero__subtitle{margin:0;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;max-width:100%}.pe-hero__extra{display:flex;flex-direction:column;gap:16px;width:100%}.pe-hero__actions{display:flex;flex-wrap:wrap;gap:12px;flex-direction:column}.pe-hero__action-link{color:inherit;text-decoration:none;display:inline-flex}.pe-hero--size-sm{padding:24px 16px}.pe-hero--size-sm .pe-hero__content{gap:12px}.pe-hero--size-sm .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-hero--size-sm .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-hero--size-md .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero--size-md .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-hero--size-lg{padding:48px 16px}.pe-hero--size-lg .pe-hero__content{gap:24px}.pe-hero--size-lg .pe-hero__title{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-hero--size-lg .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(max-width:1279px){.pe-hero{padding:24px 16px}.pe-hero--size-sm{padding:16px}.pe-hero--size-lg{padding:32px 16px}.pe-hero .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-hero .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-hero .pe-hero__actions{flex-direction:column;width:100%;max-width:100%}.pe-hero .pe-hero__action-link,.pe-hero .pe-hero__actions>pe-button{width:100%}.pe-hero .pe-hero__action-link pe-button{width:100%}}@media(min-width:1024px)and (max-width:1279px){.pe-hero{padding:32px 24px}.pe-hero--size-lg{padding:40px 24px}.pe-hero .pe-hero__title{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-hero .pe-hero__subtitle{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-hero .pe-hero__actions{flex-direction:row;flex-wrap:wrap}}@media(min-width:1280px){.pe-hero{padding:40px 32px}.pe-hero--size-sm{padding:24px 32px}.pe-hero--size-lg{padding:64px 32px}.pe-hero .pe-hero__content{max-width:800px}.pe-hero .pe-hero__actions{flex-direction:row}}\n"] }]
2018
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], primaryAction: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryAction", required: false }] }], secondaryAction: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondaryAction", required: false }] }], badges: [{ type: i0.Input, args: [{ isSignal: true, alias: "badges", required: false }] }], backgroundImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundImage", required: false }] }], backgroundOverlayGradient: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundOverlayGradient", required: false }] }], backgroundFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundFilter", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullHeight", required: false }] }], badgesSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PeHeroBadgesSlotDirective), { isSignal: true }] }], titleSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PeHeroTitleSlotDirective), { isSignal: true }] }], subtitleSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PeHeroSubtitleSlotDirective), { isSignal: true }] }], actionsSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PeHeroActionsSlotDirective), { isSignal: true }] }], contentSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PeHeroContentSlotDirective), { isSignal: true }] }] } });
2019
+
2020
+ /**
2021
+ * Directive to handle image loading errors and display placeholders
2022
+ */
2023
+ class ImageNotFoundDirective {
2024
+ // Controls whether to show a placeholder when image fails to load
2025
+ showPlaceholder = input(true, ...(ngDevMode ? [{ debugName: "showPlaceholder" }] : []));
2026
+ // Signal to track if image failed to load
2027
+ imageNotFound = signal(false, ...(ngDevMode ? [{ debugName: "imageNotFound" }] : []));
2028
+ // Signal to control alt and icon visibility of broken images.
2029
+ visibility = signal('hidden', ...(ngDevMode ? [{ debugName: "visibility" }] : []));
2030
+ /**
2031
+ * Handles image loading errors
2032
+ * Hides the image and optionally shows placeholder
2033
+ */
2034
+ handleError() {
2035
+ this.visibility.set('hidden');
2036
+ if (this.showPlaceholder()) {
2037
+ this.imageNotFound.set(true);
2038
+ }
2039
+ }
2040
+ /**
2041
+ * Handles successful image load
2042
+ * Shows the image and removes placeholder
2043
+ */
2044
+ handleLoad() {
2045
+ this.imageNotFound.set(false);
2046
+ this.visibility.set('visible');
2047
+ }
2048
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ImageNotFoundDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2049
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: ImageNotFoundDirective, isStandalone: true, selector: "[peCatchImageNotFound]", inputs: { showPlaceholder: { classPropertyName: "showPlaceholder", publicName: "showPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "load": "handleLoad()", "error": "handleError()" }, properties: { "class.pe-image--not-found": "imageNotFound()", "style.visibility": "visibility()" } }, ngImport: i0 });
2050
+ }
2051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ImageNotFoundDirective, decorators: [{
2052
+ type: Directive,
2053
+ args: [{
2054
+ selector: '[peCatchImageNotFound]',
2055
+ host: {
2056
+ '(load)': 'handleLoad()',
2057
+ '(error)': 'handleError()',
2058
+ '[class.pe-image--not-found]': 'imageNotFound()',
2059
+ '[style.visibility]': 'visibility()',
2060
+ },
2061
+ }]
2062
+ }], propDecorators: { showPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPlaceholder", required: false }] }] } });
2063
+
2064
+ /**
2065
+ * A reusable input component that follows UDS design system guidelines.
2066
+ * Implements FormValueControl for use with Signal Forms [formField] directive.
2067
+ *
2068
+ * Use [(value)] for two-way binding, or bind with [formField]="myForm().email" for Signal Forms.
2069
+ *
2070
+ * Content projection: [pe-input-left-elements], [pe-input-right-elements].
2071
+ */
2072
+ class InputComponent {
2073
+ type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : []));
2074
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
2075
+ /** Border/hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */
2076
+ appearance = input('border-only', ...(ngDevMode ? [{ debugName: "appearance" }] : []));
2077
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
2078
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2079
+ readOnly = input(false, ...(ngDevMode ? [{ debugName: "readOnly" }] : []));
2080
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
2081
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
2082
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
2083
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
2084
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
2085
+ maxLength = input(...(ngDevMode ? [undefined, { debugName: "maxLength" }] : []));
2086
+ minLength = input(...(ngDevMode ? [undefined, { debugName: "minLength" }] : []));
2087
+ pattern = input([], ...(ngDevMode ? [{ debugName: "pattern" }] : []));
2088
+ autocomplete = input('off', ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
2089
+ /** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */
2090
+ controlId = input(...(ngDevMode ? [undefined, { debugName: "controlId" }] : []));
2091
+ /** FormUiControl optional: bound by [formField] when invalid */
2092
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
2093
+ /** FormUiControl optional: bound by [formField] for validation errors */
2094
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
2095
+ /** FormUiControl optional: control sets on blur */
2096
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
2097
+ value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
2098
+ ids = createFormFieldIds('pe-input');
2099
+ effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId, ...(ngDevMode ? [{ debugName: "effectiveControlId" }] : []));
2100
+ effectiveHelperId = computed(() => (this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId), ...(ngDevMode ? [{ debugName: "effectiveHelperId" }] : []));
2101
+ effectiveErrorId = computed(() => (this.controlId() ? `${this.controlId()}-error` : this.ids.errorId), ...(ngDevMode ? [{ debugName: "effectiveErrorId" }] : []));
2102
+ isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
2103
+ isDirty = signal(false, ...(ngDevMode ? [{ debugName: "isDirty" }] : []));
2104
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
2105
+ describedBy = computed(() => getFormFieldDescribedBy(this.effectiveHelperId(), this.effectiveErrorId(), !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
2106
+ // Outputs
2107
+ inputBlur = output();
2108
+ inputFocus = output();
2109
+ valueChange = output();
2110
+ constructor() {
2111
+ // Effect to emit value changes
2112
+ effect(() => {
2113
+ const currentValue = this.value();
2114
+ if (this.isDirty()) {
2115
+ this.valueChange.emit(currentValue);
2116
+ }
2117
+ });
2118
+ }
2119
+ onInput(event) {
2120
+ const value = event.target.value;
2121
+ this.isDirty.set(true);
2122
+ this.value.set(value);
2123
+ }
2124
+ onBlur(event) {
2125
+ this.isFocused.set(false);
2126
+ this.touched.set(true);
2127
+ this.inputBlur.emit(event);
2128
+ }
2129
+ onFocus(event) {
2130
+ this.isFocused.set(true);
2131
+ this.inputFocus.emit(event);
2132
+ }
2133
+ /**
2134
+ * Programmatically focuses the input element
2135
+ */
2136
+ focus() {
2137
+ const inputEl = document.getElementById(this.effectiveControlId());
2138
+ inputEl?.focus();
2139
+ }
2140
+ select() {
2141
+ const inputEl = document.getElementById(this.effectiveControlId());
2142
+ inputEl?.select();
2143
+ }
2144
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2145
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: InputComponent, isStandalone: true, selector: "pe-input", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, controlId: { classPropertyName: "controlId", publicName: "controlId", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange", value: "valueChange", inputBlur: "inputBlur", inputFocus: "inputFocus", valueChange: "valueChange" }, ngImport: i0, template: "<div\n class=\"pe-input pe-input--{{ size() }} pe-input--appearance-{{ appearance() }}\"\n [class.pe-input--error]=\"hasError()\"\n [class.pe-input--disabled]=\"disabled()\"\n [class.pe-input--read-only]=\"readOnly()\"\n [class.pe-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-input__group\" [class.pe-input__group--focused]=\"isFocused()\">\n <div class=\"pe-input__left-elements\">\n <ng-content select=\"[pe-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"type()\"\n class=\"pe-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"pattern()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"pe-input__right-elements\">\n <ng-content select=\"[pe-input-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-input__group--focused{border-color:#ffffff80}.pe-input--appearance-border-only:not(.pe-input--disabled) .pe-input__group:hover{border-color:#ffffff4d}.pe-input--appearance-subtle-tint:not(.pe-input--disabled) .pe-input__group:hover{border-color:#ffffff4d;background-color:#ffffff0d}.pe-input__field{all:unset;flex:1}.pe-input__field::placeholder{color:#ffffff80}.pe-input__field:hover::placeholder{color:#fff}.pe-input__left-elements,.pe-input__right-elements{display:flex;gap:8px}.pe-input__left-elements ::ng-deep .pe-icon,.pe-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-input--sm .pe-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-input--sm .pe-input__left-elements,.pe-input--sm .pe-input__right-elements{gap:4px}.pe-input--sm .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--sm .pe-input__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-input--md .pe-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-input--md .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--md .pe-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-input--lg .pe-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-input--lg .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--lg .pe-input__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-input--xl .pe-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-input--xl .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--xl .pe-input__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-input--error .pe-input__group{border:2px solid #f69d9d}.pe-input--disabled .pe-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-input--disabled .pe-input__field,.pe-input--disabled .pe-input__field:disabled::placeholder{color:#ffffff4d}.pe-input--read-only .pe-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-input--read-only .pe-input__field,.pe-input--read-only .pe-input__field:read-only::placeholder{color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2146
+ }
2147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: InputComponent, decorators: [{
2148
+ type: Component,
2149
+ args: [{ selector: 'pe-input', standalone: true, imports: [FormFieldLabelComponent, FormFieldHelperComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-input pe-input--{{ size() }} pe-input--appearance-{{ appearance() }}\"\n [class.pe-input--error]=\"hasError()\"\n [class.pe-input--disabled]=\"disabled()\"\n [class.pe-input--read-only]=\"readOnly()\"\n [class.pe-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n />\n\n <div class=\"pe-input__group\" [class.pe-input__group--focused]=\"isFocused()\">\n <div class=\"pe-input__left-elements\">\n <ng-content select=\"[pe-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"type()\"\n class=\"pe-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"pattern()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"pe-input__right-elements\">\n <ng-content select=\"[pe-input-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-input{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-input__group{display:flex;align-items:center;height:40px;padding:0 12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1);font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-input__group--focused{border-color:#ffffff80}.pe-input--appearance-border-only:not(.pe-input--disabled) .pe-input__group:hover{border-color:#ffffff4d}.pe-input--appearance-subtle-tint:not(.pe-input--disabled) .pe-input__group:hover{border-color:#ffffff4d;background-color:#ffffff0d}.pe-input__field{all:unset;flex:1}.pe-input__field::placeholder{color:#ffffff80}.pe-input__field:hover::placeholder{color:#fff}.pe-input__left-elements,.pe-input__right-elements{display:flex;gap:8px}.pe-input__left-elements ::ng-deep .pe-icon,.pe-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-input--sm .pe-input__group{height:32px;padding:0 8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-input--sm .pe-input__left-elements,.pe-input--sm .pe-input__right-elements{gap:4px}.pe-input--sm .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--sm .pe-input__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-input--md .pe-input__group{height:40px;padding:0 12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-input--md .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--md .pe-input__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-input--lg .pe-input__group{height:48px;padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-input--lg .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--lg .pe-input__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-input--xl .pe-input__group{height:64px;padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-input--xl .pe-input__left-elements ::ng-deep .pe-icon,.pe-input--xl .pe-input__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-input--error .pe-input__group{border:2px solid #f69d9d}.pe-input--disabled .pe-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-input--disabled .pe-input__field,.pe-input--disabled .pe-input__field:disabled::placeholder{color:#ffffff4d}.pe-input--read-only .pe-input__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-input--read-only .pe-input__field,.pe-input--read-only .pe-input__field:read-only::placeholder{color:#ffffffb3}\n"] }]
2150
+ }], ctorParameters: () => [], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], pattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "pattern", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], inputBlur: [{ type: i0.Output, args: ["inputBlur"] }], inputFocus: [{ type: i0.Output, args: ["inputFocus"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
2151
+
2152
+ class ModalComponent {
2153
+ /** Whether the modal is open. Supports two-way binding with [(open)]. */
2154
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
2155
+ /** Visual variant: default, success, error, custom, or bottom-sheet (mobile-only layout). */
2156
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : []));
2157
+ /** Optional title shown in the header. */
2158
+ title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : []));
2159
+ /** Whether clicking the backdrop closes the modal. */
2160
+ closeOnBackdropClick = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : []));
2161
+ /** Whether to show the close button in the header. */
2162
+ showCloseButton = input(true, ...(ngDevMode ? [{ debugName: "showCloseButton" }] : []));
2163
+ /** Label for the primary confirm action in the confirmation variant. */
2164
+ confirmLabel = input('Confirm', ...(ngDevMode ? [{ debugName: "confirmLabel" }] : []));
2165
+ /** Label for the secondary cancel action in the confirmation variant. */
2166
+ cancelLabel = input('Cancel', ...(ngDevMode ? [{ debugName: "cancelLabel" }] : []));
2167
+ /** Optional CSS class for the panel (e.g. for custom variant). */
2168
+ customClass = input(undefined, ...(ngDevMode ? [{ debugName: "customClass" }] : []));
2169
+ /** Emitted when the modal is closed (button, backdrop, or escape). */
2170
+ closed = output();
2171
+ /** Emitted when the user confirms in the confirmation variant. */
2172
+ confirmed = output();
2173
+ /** Emitted when the user cancels in the confirmation variant. */
2174
+ cancelled = output();
2175
+ panelClass = computed(() => {
2176
+ const variant = this.variant();
2177
+ const custom = this.customClass();
2178
+ const classes = ['pe-modal__panel', `pe-modal__panel--${variant}`];
2179
+ if (custom) {
2180
+ classes.push(custom);
2181
+ }
2182
+ return classes.join(' ');
2183
+ }, ...(ngDevMode ? [{ debugName: "panelClass" }] : []));
2184
+ isConfirmation = computed(() => this.variant() === 'confirmation', ...(ngDevMode ? [{ debugName: "isConfirmation" }] : []));
2185
+ isSuccess = computed(() => this.variant() === 'success', ...(ngDevMode ? [{ debugName: "isSuccess" }] : []));
2186
+ isError = computed(() => this.variant() === 'error', ...(ngDevMode ? [{ debugName: "isError" }] : []));
2187
+ modalTitle = computed(() => (this.isSuccess() || this.isError()) ? '' : this.title(), ...(ngDevMode ? [{ debugName: "modalTitle" }] : []));
2188
+ titleId = `pe-modal-title-${Math.random().toString(36).slice(2, 11)}`;
2189
+ bodyId = `pe-modal-body-${Math.random().toString(36).slice(2, 11)}`;
2190
+ close() {
2191
+ this.open.set(false);
2192
+ this.closed.emit();
2193
+ }
2194
+ onConfirm() {
2195
+ if (!this.isConfirmation()) {
2196
+ return;
2197
+ }
2198
+ this.confirmed.emit();
2199
+ this.close();
2200
+ }
2201
+ onCancel() {
2202
+ if (!this.isConfirmation()) {
2203
+ return;
2204
+ }
2205
+ this.cancelled.emit();
2206
+ this.close();
2207
+ }
2208
+ onBackdropClick(event) {
2209
+ if (this.closeOnBackdropClick() && event.target === event.currentTarget) {
2210
+ this.close();
2211
+ }
2212
+ }
2213
+ onEscape() {
2214
+ if (this.open()) {
2215
+ this.close();
2216
+ }
2217
+ }
2218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ModalComponent, isStandalone: true, selector: "pe-modal", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdropClick: { classPropertyName: "closeOnBackdropClick", publicName: "closeOnBackdropClick", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, confirmLabel: { classPropertyName: "confirmLabel", publicName: "confirmLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, customClass: { classPropertyName: "customClass", publicName: "customClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", closed: "closed", confirmed: "confirmed", cancelled: "cancelled" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "attr.aria-hidden": "!open()" } }, ngImport: i0, template: "@if (open()) {\n <div\n class=\"pe-modal pe-modal--backdrop\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-describedby]=\"bodyId\"\n (click)=\"onBackdropClick($event)\"\n >\n <div [class]=\"panelClass()\" cdkTrapFocus (click)=\"$event.stopPropagation()\">\n @if (modalTitle() || showCloseButton()) {\n <header class=\"pe-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"pe-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"pe-modal__close\"\n (buttonClick)=\"close()\"\n >\n <pe-icon icon=\"close\" size=\"6\" />\n </pe-button>\n }\n </header>\n }\n <div class=\"pe-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"pe-modal__status\" aria-hidden=\"true\">\n <pe-icon\n class=\"pe-modal__status-icon\"\n [icon]=\"isSuccess() ? 'check_circle' : 'cross_circle'\"\n size=\"16\"\n />\n </div>\n }\n <ng-content />\n </div>\n <div class=\"pe-modal__footer\">\n @if (isConfirmation()) {\n <pe-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </pe-button>\n <pe-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </pe-button>\n } @else {\n <ng-content select=\"[pe-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-modal--backdrop{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center;padding:16px;background-color:#000000b3;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-modal__panel{position:relative;display:flex;flex-direction:column;max-height:calc(100% - 32px);overflow:auto;border-radius:16px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;transition:opacity .25s cubic-bezier(.4,0,.2,1),transform .25s cubic-bezier(.4,0,.2,1);background-color:#232323;padding:24px;border:1px solid rgba(255,255,255,.1)}.pe-modal__panel--confirmation{border:1px solid rgba(255,255,255,.1)}@media(max-width:767px){.pe-modal__panel--success{border:1px solid #7edc96}.pe-modal__panel--error{border:1px solid #f69d9d}}.pe-modal__panel--custom,.pe-modal__panel--bottom-sheet{border:1px solid rgba(255,255,255,.1)}.pe-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-shrink:0}.pe-modal__title{margin:0;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;color:#fff}.pe-modal__status{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:12px}.pe-modal__status-icon{flex-shrink:0}.pe-modal__close{flex-shrink:0;margin-left:auto}.pe-modal__body{flex:1 1 auto;min-height:0;color:#ffffffb3}.pe-modal__panel--success .pe-modal__status-icon{color:#7edc96}.pe-modal__panel--error .pe-modal__status-icon{color:#f69d9d}.pe-modal__panel--success .pe-modal__body,.pe-modal__panel--error .pe-modal__body{text-align:center;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(min-width:768px){.pe-modal--backdrop{padding:24px}.pe-modal__panel{width:100%;max-width:512px}}@media(max-width:767px){.pe-modal--backdrop{align-items:flex-end;padding:0}.pe-modal__panel{width:100%;max-width:100%;border-radius:24px 24px 0 0;max-height:calc(100dvh - 32px);margin-top:auto;border-bottom:none}.pe-modal__panel--bottom-sheet{border-bottom:none}}.pe-modal__footer{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:16px;flex-shrink:0;justify-content:flex-end}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2220
+ }
2221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ModalComponent, decorators: [{
2222
+ type: Component,
2223
+ args: [{ selector: 'pe-modal', standalone: true, imports: [CdkTrapFocus, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2224
+ '[attr.aria-hidden]': '!open()',
2225
+ }, template: "@if (open()) {\n <div\n class=\"pe-modal pe-modal--backdrop\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-describedby]=\"bodyId\"\n (click)=\"onBackdropClick($event)\"\n >\n <div [class]=\"panelClass()\" cdkTrapFocus (click)=\"$event.stopPropagation()\">\n @if (modalTitle() || showCloseButton()) {\n <header class=\"pe-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"pe-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <pe-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"pe-modal__close\"\n (buttonClick)=\"close()\"\n >\n <pe-icon icon=\"close\" size=\"6\" />\n </pe-button>\n }\n </header>\n }\n <div class=\"pe-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"pe-modal__status\" aria-hidden=\"true\">\n <pe-icon\n class=\"pe-modal__status-icon\"\n [icon]=\"isSuccess() ? 'check_circle' : 'cross_circle'\"\n size=\"16\"\n />\n </div>\n }\n <ng-content />\n </div>\n <div class=\"pe-modal__footer\">\n @if (isConfirmation()) {\n <pe-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </pe-button>\n <pe-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </pe-button>\n } @else {\n <ng-content select=\"[pe-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-modal--backdrop{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center;padding:16px;background-color:#000000b3;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-modal__panel{position:relative;display:flex;flex-direction:column;max-height:calc(100% - 32px);overflow:auto;border-radius:16px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#fff;transition:opacity .25s cubic-bezier(.4,0,.2,1),transform .25s cubic-bezier(.4,0,.2,1);background-color:#232323;padding:24px;border:1px solid rgba(255,255,255,.1)}.pe-modal__panel--confirmation{border:1px solid rgba(255,255,255,.1)}@media(max-width:767px){.pe-modal__panel--success{border:1px solid #7edc96}.pe-modal__panel--error{border:1px solid #f69d9d}}.pe-modal__panel--custom,.pe-modal__panel--bottom-sheet{border:1px solid rgba(255,255,255,.1)}.pe-modal__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-shrink:0}.pe-modal__title{margin:0;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:800;color:#fff}.pe-modal__status{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:12px}.pe-modal__status-icon{flex-shrink:0}.pe-modal__close{flex-shrink:0;margin-left:auto}.pe-modal__body{flex:1 1 auto;min-height:0;color:#ffffffb3}.pe-modal__panel--success .pe-modal__status-icon{color:#7edc96}.pe-modal__panel--error .pe-modal__status-icon{color:#f69d9d}.pe-modal__panel--success .pe-modal__body,.pe-modal__panel--error .pe-modal__body{text-align:center;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}@media(min-width:768px){.pe-modal--backdrop{padding:24px}.pe-modal__panel{width:100%;max-width:512px}}@media(max-width:767px){.pe-modal--backdrop{align-items:flex-end;padding:0}.pe-modal__panel{width:100%;max-width:100%;border-radius:24px 24px 0 0;max-height:calc(100dvh - 32px);margin-top:auto;border-bottom:none}.pe-modal__panel--bottom-sheet{border-bottom:none}}.pe-modal__footer{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:16px;flex-shrink:0;justify-content:flex-end}\n"] }]
2226
+ }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], closeOnBackdropClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdropClick", required: false }] }], showCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCloseButton", required: false }] }], confirmLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmLabel", required: false }] }], cancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelLabel", required: false }] }], customClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "customClass", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], confirmed: [{ type: i0.Output, args: ["confirmed"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], onEscape: [{
2227
+ type: HostListener,
2228
+ args: ['document:keydown.escape']
2229
+ }] } });
2230
+
2231
+ /** Place on the element projected into [pe-navbar-logo] so the navbar can detect logo content. */
2232
+ class NavbarLogoSlotDirective {
2233
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarLogoSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2234
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NavbarLogoSlotDirective, isStandalone: true, selector: "[pe-navbar-logo]", ngImport: i0 });
2235
+ }
2236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarLogoSlotDirective, decorators: [{
2237
+ type: Directive,
2238
+ args: [{
2239
+ selector: '[pe-navbar-logo]',
2240
+ standalone: true,
2241
+ }]
2242
+ }] });
2243
+ /** Place on the element projected into [pe-navbar-search] so the navbar can show the mobile search toggle. */
2244
+ class NavbarSearchSlotDirective {
2245
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarSearchSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2246
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NavbarSearchSlotDirective, isStandalone: true, selector: "[pe-navbar-search]", ngImport: i0 });
2247
+ }
2248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarSearchSlotDirective, decorators: [{
2249
+ type: Directive,
2250
+ args: [{
2251
+ selector: '[pe-navbar-search]',
2252
+ standalone: true,
2253
+ }]
2254
+ }] });
2255
+ /** Place on the element projected into [pe-navbar-avatar] so the navbar can detect avatar content. */
2256
+ class NavbarAvatarSlotDirective {
2257
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarAvatarSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2258
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NavbarAvatarSlotDirective, isStandalone: true, selector: "[pe-navbar-avatar]", ngImport: i0 });
2259
+ }
2260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarAvatarSlotDirective, decorators: [{
2261
+ type: Directive,
2262
+ args: [{
2263
+ selector: '[pe-navbar-avatar]',
2264
+ standalone: true,
2265
+ }]
2266
+ }] });
2267
+
2268
+ class NavbarComponent {
2269
+ /** Default logo link href when logo slot is not projected. */
2270
+ logoHref = input('/', ...(ngDevMode ? [{ debugName: "logoHref" }] : []));
2271
+ /** Default logo image src when logo slot is not projected. */
2272
+ logoSrc = input(undefined, ...(ngDevMode ? [{ debugName: "logoSrc" }] : []));
2273
+ /** Default logo image alt when logo slot is not projected. */
2274
+ logoAlt = input('', ...(ngDevMode ? [{ debugName: "logoAlt" }] : []));
2275
+ /** Default avatar image src when avatar slot is not projected. */
2276
+ avatarSrc = input(undefined, ...(ngDevMode ? [{ debugName: "avatarSrc" }] : []));
2277
+ /** Default avatar initials when avatar slot is not projected and no image. */
2278
+ avatarInitials = input(undefined, ...(ngDevMode ? [{ debugName: "avatarInitials" }] : []));
2279
+ /** Default avatar image alt when avatar slot is not projected. */
2280
+ avatarAlt = input('', ...(ngDevMode ? [{ debugName: "avatarAlt" }] : []));
2281
+ /** For aria-expanded on the toggle button */
2282
+ sidebarOpen = input(false, ...(ngDevMode ? [{ debugName: "sidebarOpen" }] : []));
2283
+ /** When true, show the sidebar toggle button even when a logo slot is projected. */
2284
+ showSidebarToggle = input(false, ...(ngDevMode ? [{ debugName: "showSidebarToggle" }] : []));
2285
+ /** Emitted when the user clicks the sidebar toggle. Parent should flip the open state. */
2286
+ sidebarToggle = output();
2287
+ logoSlot = contentChild(NavbarLogoSlotDirective, ...(ngDevMode ? [{ debugName: "logoSlot" }] : []));
2288
+ searchSlot = contentChild(NavbarSearchSlotDirective, ...(ngDevMode ? [{ debugName: "searchSlot" }] : []));
2289
+ avatarSlot = contentChild(NavbarAvatarSlotDirective, ...(ngDevMode ? [{ debugName: "avatarSlot" }] : []));
2290
+ hasLogoSlot = computed(() => !!this.logoSlot(), ...(ngDevMode ? [{ debugName: "hasLogoSlot" }] : []));
2291
+ hasSearchSlot = computed(() => !!this.searchSlot(), ...(ngDevMode ? [{ debugName: "hasSearchSlot" }] : []));
2292
+ hasAvatarSlot = computed(() => !!this.avatarSlot(), ...(ngDevMode ? [{ debugName: "hasAvatarSlot" }] : []));
2293
+ showToggle = computed(() => !this.hasLogoSlot() || this.showSidebarToggle(), ...(ngDevMode ? [{ debugName: "showToggle" }] : []));
2294
+ searchExpanded = signal(false, ...(ngDevMode ? [{ debugName: "searchExpanded" }] : []));
2295
+ toggleSearch() {
2296
+ this.searchExpanded.update((v) => !v);
2297
+ }
2298
+ toggleSidebar() {
2299
+ this.sidebarToggle.emit();
2300
+ }
2301
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: NavbarComponent, isStandalone: true, selector: "pe-navbar", inputs: { logoHref: { classPropertyName: "logoHref", publicName: "logoHref", isSignal: true, isRequired: false, transformFunction: null }, logoSrc: { classPropertyName: "logoSrc", publicName: "logoSrc", isSignal: true, isRequired: false, transformFunction: null }, logoAlt: { classPropertyName: "logoAlt", publicName: "logoAlt", isSignal: true, isRequired: false, transformFunction: null }, avatarSrc: { classPropertyName: "avatarSrc", publicName: "avatarSrc", isSignal: true, isRequired: false, transformFunction: null }, avatarInitials: { classPropertyName: "avatarInitials", publicName: "avatarInitials", isSignal: true, isRequired: false, transformFunction: null }, avatarAlt: { classPropertyName: "avatarAlt", publicName: "avatarAlt", isSignal: true, isRequired: false, transformFunction: null }, sidebarOpen: { classPropertyName: "sidebarOpen", publicName: "sidebarOpen", isSignal: true, isRequired: false, transformFunction: null }, showSidebarToggle: { classPropertyName: "showSidebarToggle", publicName: "showSidebarToggle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sidebarToggle: "sidebarToggle" }, queries: [{ propertyName: "logoSlot", first: true, predicate: NavbarLogoSlotDirective, descendants: true, isSignal: true }, { propertyName: "searchSlot", first: true, predicate: NavbarSearchSlotDirective, descendants: true, isSignal: true }, { propertyName: "avatarSlot", first: true, predicate: NavbarAvatarSlotDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<nav class=\"pe-navbar\" role=\"navigation\">\n <div class=\"pe-navbar__bar\">\n <div class=\"pe-navbar__logo\">\n @if (showToggle()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n size=\"sm\"\n class=\"pe-navbar__sidebar_toggle\"\n ariaLabel=\"Open menu\"\n [attr.aria-expanded]=\"sidebarOpen()\"\n (buttonClick)=\"toggleSidebar()\"\n >\n <pe-icon icon=\"menu\" size=\"6\" />\n </pe-button>\n }\n @if (hasLogoSlot()) {\n <ng-content select=\"[pe-navbar-logo]\" />\n } @else {\n <img [src]=\"logoSrc()\" [alt]=\"logoAlt()\" class=\"pe-navbar__logo-img\" height=\"32\" />\n <a [href]=\"logoHref()\" class=\"pe-navbar__logo-link pe-navbar__logo-text\">Pinake</a>\n }\n </div>\n\n @if (hasSearchSlot()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"pe-navbar__search-toggle\"\n ariaLabel=\"Toggle search\"\n [attr.aria-expanded]=\"searchExpanded()\"\n (buttonClick)=\"toggleSearch()\"\n >\n <pe-icon icon=\"search\" size=\"6\" />\n </pe-button>\n }\n\n <div\n class=\"pe-navbar__search-wrapper\"\n [class.pe-navbar__search-wrapper--expanded]=\"searchExpanded()\"\n >\n <ng-content select=\"[pe-navbar-search]\" />\n </div>\n\n <div class=\"pe-navbar__avatar\">\n @if (hasAvatarSlot()) {\n <ng-content select=\"[pe-navbar-avatar]\" />\n } @else if (avatarSrc() || avatarInitials()) {\n <pe-avatar\n [src]=\"avatarSrc()\"\n [initials]=\"avatarInitials()\"\n [alt]=\"avatarAlt()\"\n size=\"md\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-navbar{width:100%}.pe-navbar__bar{min-height:48px;display:flex;align-items:center;gap:16px;padding:8px 16px;background-color:#0a0a0a;border-bottom:1px solid rgba(255,255,255,.1)}@media(min-width:1024px){.pe-navbar__bar{padding:12px 24px;gap:24px}}@media(min-width:1280px){.pe-navbar__bar{padding:12px 32px}}.pe-navbar__bar{flex-wrap:wrap}@media(max-width:1279px){.pe-navbar__bar{position:relative;z-index:100}}@media(max-width:1279px){.pe-navbar__sidebar_toggle{display:inline-flex}}.pe-navbar__sidebar_toggle .pe-icon,.pe-navbar__sidebar_toggle .pe-icon:before{background-color:transparent}.pe-navbar__sidebar_toggle :focus-visible{outline:none;box-shadow:0 0 0 2px #ffffff1a}@media(min-width:1024px){.pe-navbar__sidebar_toggle{display:none}}.pe-navbar__logo{display:flex;align-items:center;flex-shrink:0;margin-right:auto;gap:8px}.pe-navbar__logo-link{display:flex;align-items:center;color:inherit;text-decoration:none}.pe-navbar__logo-text{font-family:Ultra Brand;line-height:36px;font-size:24px;letter-spacing:2.4px;font-weight:1000;text-transform:uppercase;color:inherit}@media(min-width:1024px){.pe-navbar__logo-text{display:none}}.pe-navbar__logo-img{display:block;max-height:40px;width:auto;object-fit:contain}@media(max-width:1279px){.pe-navbar__search-toggle{display:inline-flex}}@media(min-width:1024px){.pe-navbar__search-toggle{display:none}}.pe-navbar__search-wrapper{flex:1;min-width:0;display:flex;align-items:center}@media(max-width:1279px){.pe-navbar__search-wrapper{flex-basis:100%;order:10;max-height:0;overflow:hidden;opacity:0;transition:max-height .25s cubic-bezier(.4,0,.2,1),opacity .25s cubic-bezier(.4,0,.2,1)}.pe-navbar__search-wrapper--expanded{max-height:80px;opacity:1}}@media(min-width:1024px){.pe-navbar__search-wrapper{flex-basis:auto;order:0;max-height:none;opacity:1}}.pe-navbar__avatar{display:flex;align-items:center;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: AvatarComponent, selector: "pe-avatar", inputs: ["size", "src", "initials", "icon", "alt", "loading"] }, { kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2303
+ }
2304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NavbarComponent, decorators: [{
2305
+ type: Component,
2306
+ args: [{ selector: 'pe-navbar', standalone: true, imports: [AvatarComponent, ButtonComponent, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<nav class=\"pe-navbar\" role=\"navigation\">\n <div class=\"pe-navbar__bar\">\n <div class=\"pe-navbar__logo\">\n @if (showToggle()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n size=\"sm\"\n class=\"pe-navbar__sidebar_toggle\"\n ariaLabel=\"Open menu\"\n [attr.aria-expanded]=\"sidebarOpen()\"\n (buttonClick)=\"toggleSidebar()\"\n >\n <pe-icon icon=\"menu\" size=\"6\" />\n </pe-button>\n }\n @if (hasLogoSlot()) {\n <ng-content select=\"[pe-navbar-logo]\" />\n } @else {\n <img [src]=\"logoSrc()\" [alt]=\"logoAlt()\" class=\"pe-navbar__logo-img\" height=\"32\" />\n <a [href]=\"logoHref()\" class=\"pe-navbar__logo-link pe-navbar__logo-text\">Pinake</a>\n }\n </div>\n\n @if (hasSearchSlot()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"pe-navbar__search-toggle\"\n ariaLabel=\"Toggle search\"\n [attr.aria-expanded]=\"searchExpanded()\"\n (buttonClick)=\"toggleSearch()\"\n >\n <pe-icon icon=\"search\" size=\"6\" />\n </pe-button>\n }\n\n <div\n class=\"pe-navbar__search-wrapper\"\n [class.pe-navbar__search-wrapper--expanded]=\"searchExpanded()\"\n >\n <ng-content select=\"[pe-navbar-search]\" />\n </div>\n\n <div class=\"pe-navbar__avatar\">\n @if (hasAvatarSlot()) {\n <ng-content select=\"[pe-navbar-avatar]\" />\n } @else if (avatarSrc() || avatarInitials()) {\n <pe-avatar\n [src]=\"avatarSrc()\"\n [initials]=\"avatarInitials()\"\n [alt]=\"avatarAlt()\"\n size=\"md\"\n />\n }\n </div>\n </div>\n</nav>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-navbar{width:100%}.pe-navbar__bar{min-height:48px;display:flex;align-items:center;gap:16px;padding:8px 16px;background-color:#0a0a0a;border-bottom:1px solid rgba(255,255,255,.1)}@media(min-width:1024px){.pe-navbar__bar{padding:12px 24px;gap:24px}}@media(min-width:1280px){.pe-navbar__bar{padding:12px 32px}}.pe-navbar__bar{flex-wrap:wrap}@media(max-width:1279px){.pe-navbar__bar{position:relative;z-index:100}}@media(max-width:1279px){.pe-navbar__sidebar_toggle{display:inline-flex}}.pe-navbar__sidebar_toggle .pe-icon,.pe-navbar__sidebar_toggle .pe-icon:before{background-color:transparent}.pe-navbar__sidebar_toggle :focus-visible{outline:none;box-shadow:0 0 0 2px #ffffff1a}@media(min-width:1024px){.pe-navbar__sidebar_toggle{display:none}}.pe-navbar__logo{display:flex;align-items:center;flex-shrink:0;margin-right:auto;gap:8px}.pe-navbar__logo-link{display:flex;align-items:center;color:inherit;text-decoration:none}.pe-navbar__logo-text{font-family:Ultra Brand;line-height:36px;font-size:24px;letter-spacing:2.4px;font-weight:1000;text-transform:uppercase;color:inherit}@media(min-width:1024px){.pe-navbar__logo-text{display:none}}.pe-navbar__logo-img{display:block;max-height:40px;width:auto;object-fit:contain}@media(max-width:1279px){.pe-navbar__search-toggle{display:inline-flex}}@media(min-width:1024px){.pe-navbar__search-toggle{display:none}}.pe-navbar__search-wrapper{flex:1;min-width:0;display:flex;align-items:center}@media(max-width:1279px){.pe-navbar__search-wrapper{flex-basis:100%;order:10;max-height:0;overflow:hidden;opacity:0;transition:max-height .25s cubic-bezier(.4,0,.2,1),opacity .25s cubic-bezier(.4,0,.2,1)}.pe-navbar__search-wrapper--expanded{max-height:80px;opacity:1}}@media(min-width:1024px){.pe-navbar__search-wrapper{flex-basis:auto;order:0;max-height:none;opacity:1}}.pe-navbar__avatar{display:flex;align-items:center;flex-shrink:0}\n"] }]
2307
+ }], propDecorators: { logoHref: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoHref", required: false }] }], logoSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoSrc", required: false }] }], logoAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoAlt", required: false }] }], avatarSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarSrc", required: false }] }], avatarInitials: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarInitials", required: false }] }], avatarAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarAlt", required: false }] }], sidebarOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarOpen", required: false }] }], showSidebarToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSidebarToggle", required: false }] }], sidebarToggle: [{ type: i0.Output, args: ["sidebarToggle"] }], logoSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NavbarLogoSlotDirective), { isSignal: true }] }], searchSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NavbarSearchSlotDirective), { isSignal: true }] }], avatarSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NavbarAvatarSlotDirective), { isSignal: true }] }] } });
2308
+
2309
+ /**
2310
+ * Extends Angular's CurrencyPipe to use the custom symbol 'ᕫ' for 'UOS' currency code.
2311
+ * For all other codes, behaves exactly like CurrencyPipe.
2312
+ */
2313
+ class CustomCurrencyPipe extends CurrencyPipe {
2314
+ static UOS_SYMBOL = 'ᕫ';
2315
+ transform(value, currencyCode, display, digitsInfo, locale) {
2316
+ const customDisplay = currencyCode === 'UOS' ? CustomCurrencyPipe.UOS_SYMBOL : display;
2317
+ return this.separateCurrencyAndPrice(super.transform(value, currencyCode, customDisplay, digitsInfo, locale));
2318
+ }
2319
+ separateCurrencyAndPrice(input) {
2320
+ // Match non-digits at the start (currency), then the number
2321
+ const match = input?.match(/^(\D+)?(\d+(\.\d+)?)/);
2322
+ if (match) {
2323
+ const symbol = match[1] ? match[1].trim() : '';
2324
+ const price = match[2];
2325
+ // Join with a space if symbol exists
2326
+ return symbol ? `${symbol} ${price}` : price;
2327
+ }
2328
+ // Return input if no match
2329
+ return input;
2330
+ }
2331
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CustomCurrencyPipe, deps: null, target: i0.ɵɵFactoryTarget.Pipe });
2332
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.2", ngImport: i0, type: CustomCurrencyPipe, isStandalone: true, name: "peCurrency" });
2333
+ }
2334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: CustomCurrencyPipe, decorators: [{
2335
+ type: Pipe,
2336
+ args: [{
2337
+ name: 'peCurrency',
2338
+ standalone: true,
2339
+ }]
2340
+ }] });
2341
+
2342
+ class PriceButtonComponent {
2343
+ // Inputs
2344
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : [])); // Button label
2345
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : [])); // Button size
2346
+ theme = input('transparent-white', ...(ngDevMode ? [{ debugName: "theme" }] : [])); // Button theme
2347
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : [])); // Disabled state
2348
+ salePosition = input('right', ...(ngDevMode ? [{ debugName: "salePosition" }] : [])); // Sale badge position
2349
+ price = input(0, ...(ngDevMode ? [{ debugName: "price" }] : [])); // Price (0 = free)
2350
+ originalPrice = input(0, ...(ngDevMode ? [{ debugName: "originalPrice" }] : [])); // Original price
2351
+ discountBasis = input(0, ...(ngDevMode ? [{ debugName: "discountBasis" }] : [])); // Discount basis
2352
+ currency = input('USD', ...(ngDevMode ? [{ debugName: "currency" }] : [])); // Currency
2353
+ // Outputs
2354
+ buttonClick = output(); // Click event
2355
+ // Methods
2356
+ handleClick(event) {
2357
+ // Handle click
2358
+ if (this.disabled()) {
2359
+ event.preventDefault();
2360
+ event.stopPropagation();
2361
+ return;
2362
+ }
2363
+ this.buttonClick.emit(event);
2364
+ }
2365
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PriceButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2366
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: PriceButtonComponent, isStandalone: true, selector: "pe-price-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, salePosition: { classPropertyName: "salePosition", publicName: "salePosition", isSignal: true, isRequired: false, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: false, transformFunction: null }, originalPrice: { classPropertyName: "originalPrice", publicName: "originalPrice", isSignal: true, isRequired: false, transformFunction: null }, discountBasis: { classPropertyName: "discountBasis", publicName: "discountBasis", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick" }, host: { properties: { "class.pe-price-button--sale-left": "salePosition() === \"left\"" }, classAttribute: "pe-price-button" }, ngImport: i0, template: "<pe-button [size]=\"size()\" [theme]=\"theme()\" [disabled]=\"disabled()\" (click)=\"handleClick($event)\">\n @if (label()) {\n {{ label() }}\n } @else if (price() > 0) {\n {{ price() | peCurrency: currency() }}\n } @else {\n Free\n }\n</pe-button>\n@if (price() !== originalPrice() && discountBasis() > 0) {\n <div class=\"pe-price-button__sale\">\n <div\n class=\"pe-price-button__discount\"\n [attr.aria-label]=\"'Discount ' + discountBasis() + '% off original price'\"\n >\n -{{ discountBasis() }}%\n </div>\n <div class=\"pe-price-button__original-price\" aria-hidden=\"true\">\n {{ originalPrice() | peCurrency: currency() }}\n </div>\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-price-button{display:flex;align-items:center;gap:12px}.pe-price-button--sale-left{flex-direction:row-reverse}.pe-price-button__sale{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.pe-price-button__discount{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;color:#ffe9a3}.pe-price-button__original-price{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#ffffff80;text-decoration:line-through}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "pipe", type: CustomCurrencyPipe, name: "peCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2367
+ }
2368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PriceButtonComponent, decorators: [{
2369
+ type: Component,
2370
+ args: [{ selector: 'pe-price-button', standalone: true, imports: [ButtonComponent, CustomCurrencyPipe], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
2371
+ class: 'pe-price-button',
2372
+ '[class.pe-price-button--sale-left]': 'salePosition() === "left"',
2373
+ }, template: "<pe-button [size]=\"size()\" [theme]=\"theme()\" [disabled]=\"disabled()\" (click)=\"handleClick($event)\">\n @if (label()) {\n {{ label() }}\n } @else if (price() > 0) {\n {{ price() | peCurrency: currency() }}\n } @else {\n Free\n }\n</pe-button>\n@if (price() !== originalPrice() && discountBasis() > 0) {\n <div class=\"pe-price-button__sale\">\n <div\n class=\"pe-price-button__discount\"\n [attr.aria-label]=\"'Discount ' + discountBasis() + '% off original price'\"\n >\n -{{ discountBasis() }}%\n </div>\n <div class=\"pe-price-button__original-price\" aria-hidden=\"true\">\n {{ originalPrice() | peCurrency: currency() }}\n </div>\n </div>\n}\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-price-button{display:flex;align-items:center;gap:12px}.pe-price-button--sale-left{flex-direction:row-reverse}.pe-price-button__sale{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.pe-price-button__discount{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;color:#ffe9a3}.pe-price-button__original-price{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#ffffff80;text-decoration:line-through}\n"] }]
2374
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], salePosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "salePosition", required: false }] }], price: [{ type: i0.Input, args: [{ isSignal: true, alias: "price", required: false }] }], originalPrice: [{ type: i0.Input, args: [{ isSignal: true, alias: "originalPrice", required: false }] }], discountBasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "discountBasis", required: false }] }], currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], buttonClick: [{ type: i0.Output, args: ["buttonClick"] }] } });
2375
+
2376
+ /**
2377
+ * Radio button for use inside a group. For Signal Forms use pe-radio-group with [formField].
2378
+ * Use [(checked)] when controlling each radio manually, or place inside pe-radio-group for [formField] binding.
2379
+ *
2380
+ * @example
2381
+ * <pe-radio value="option1" name="my-group" [checked]="isSelected">Option 1</pe-radio>
2382
+ */
2383
+ class RadioComponent {
2384
+ /**
2385
+ * The value associated with this radio button.
2386
+ * This value identifies the radio button within its group.
2387
+ */
2388
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
2389
+ /**
2390
+ * The name attribute for the radio button group.
2391
+ * All radio buttons in the same group should share the same name.
2392
+ */
2393
+ name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
2394
+ /**
2395
+ * Whether the radio button is disabled.
2396
+ * @default false
2397
+ */
2398
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
2399
+ /**
2400
+ * Whether the radio button is currently checked/selected.
2401
+ * This is a two-way binding that can be used with [(checked)].
2402
+ */
2403
+ checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
2404
+ /**
2405
+ * Unique identifier for the radio button.
2406
+ * If not provided, one will be auto-generated.
2407
+ */
2408
+ id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
2409
+ /**
2410
+ * Event emitted when the radio button is clicked.
2411
+ * Useful for additional click handling beyond the default radio behavior.
2412
+ */
2413
+ click = output();
2414
+ /**
2415
+ * Emitted when this radio is selected (checked becomes true).
2416
+ * Used by pe-radio-group to sync the group value.
2417
+ */
2418
+ selected = output();
2419
+ /**
2420
+ * Internal signal for the unique ID
2421
+ */
2422
+ uniqueId = signal(`pe-radio-${Math.random().toString(36).substr(2, 9)}`, ...(ngDevMode ? [{ debugName: "uniqueId" }] : []));
2423
+ /**
2424
+ * Computed ID that uses provided ID or falls back to generated unique ID
2425
+ */
2426
+ radioId = computed(() => this.id() || this.uniqueId(), ...(ngDevMode ? [{ debugName: "radioId" }] : []));
2427
+ /**
2428
+ * Computed ARIA attributes for accessibility
2429
+ */
2430
+ ariaAttributes = computed(() => ({
2431
+ 'aria-checked': this.checked(),
2432
+ 'aria-disabled': this.disabled(),
2433
+ role: 'radio',
2434
+ }), ...(ngDevMode ? [{ debugName: "ariaAttributes" }] : []));
2435
+ /**
2436
+ * Handles the radio button change event.
2437
+ * Updates the checked state.
2438
+ *
2439
+ * @param event - The change event from the input element
2440
+ */
2441
+ onRadioChange(event) {
2442
+ if (this.disabled()) {
2443
+ return;
2444
+ }
2445
+ const input = event.target;
2446
+ this.checked.set(input.checked);
2447
+ if (input.checked) {
2448
+ this.selected.emit(this.value());
2449
+ }
2450
+ }
2451
+ /**
2452
+ * Handles click events on the radio button.
2453
+ * Useful for additional click handling beyond the default radio behavior.
2454
+ *
2455
+ * @param event - The click event
2456
+ */
2457
+ onRadioClick(event) {
2458
+ if (this.disabled()) {
2459
+ event.preventDefault();
2460
+ return;
2461
+ }
2462
+ this.click.emit(event);
2463
+ }
2464
+ /**
2465
+ * Handles keyboard events for accessibility.
2466
+ * Supports Space and Enter keys for selection.
2467
+ *
2468
+ * @param event - The keyboard event
2469
+ */
2470
+ onKeyDown(event) {
2471
+ if (this.disabled()) {
2472
+ return;
2473
+ }
2474
+ if (event.key === ' ' || event.key === 'Enter') {
2475
+ event.preventDefault();
2476
+ this.checked.set(true);
2477
+ }
2478
+ }
2479
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2480
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: RadioComponent, isStandalone: true, selector: "pe-radio", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", click: "click", selected: "selected" }, ngImport: i0, template: "<label class=\"pe-radio-container\" [for]=\"radioId()\" [class.pe-radio-disabled]=\"disabled()\">\n <input\n type=\"radio\"\n [id]=\"radioId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"ariaAttributes()['aria-checked']\"\n [attr.aria-disabled]=\"ariaAttributes()['aria-disabled']\"\n [attr.role]=\"ariaAttributes()['role']\"\n (change)=\"onRadioChange($event)\"\n (click)=\"onRadioClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n class=\"pe-radio-input\"\n />\n <span class=\"pe-radio-label\">\n <ng-content />\n </span>\n</label>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-radio-container{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}.pe-radio-container.pe-radio-disabled{cursor:not-allowed;opacity:.6}.pe-radio-container:has(.pe-radio-input:focus-visible){outline:2px solid rgba(255,255,255,.3);outline-offset:2px;border-radius:4px}.pe-radio-input{appearance:none;width:16px;height:16px;border:2px solid rgba(255,255,255,.5);border-radius:50%;margin:0;cursor:pointer;position:relative;transition:all .15s cubic-bezier(.4,0,.2,1);outline:solid 2px transparent;flex-shrink:0}.pe-radio-input:focus-visible,.pe-radio-input:focus,.pe-radio-input:hover{outline-color:#ffffff4d;border-color:#fff}.pe-radio-input:checked{border-color:transparent;background-color:#6f3de0;color:inherit}.pe-radio-input:checked:hover{background-color:#7e4af7}.pe-radio-input:checked:active{background-color:#5935af}.pe-radio-input:checked:selected{background-color:#7e4af7}.pe-radio-input:checked:disabled,.pe-radio-input:checked[disabled]{background-color:#232323}.pe-radio-input:checked:after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:4px;background-color:#fff;border-radius:50%}.pe-radio-input:disabled{cursor:not-allowed;outline-color:transparent;background-color:transparent;border-color:#ffffff4d}.pe-radio-input:disabled:after{background-color:#ffffff4d}.pe-radio-input:disabled+.pe-radio-label{cursor:not-allowed;color:#ffffff4d}.pe-radio-label{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;cursor:pointer}.pe-radio-labelpe-radio-disabled .pe-radio-label{cursor:not-allowed;color:#ffffff4d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
2481
+ }
2482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadioComponent, decorators: [{
2483
+ type: Component,
2484
+ args: [{ selector: 'pe-radio', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<label class=\"pe-radio-container\" [for]=\"radioId()\" [class.pe-radio-disabled]=\"disabled()\">\n <input\n type=\"radio\"\n [id]=\"radioId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"ariaAttributes()['aria-checked']\"\n [attr.aria-disabled]=\"ariaAttributes()['aria-disabled']\"\n [attr.role]=\"ariaAttributes()['role']\"\n (change)=\"onRadioChange($event)\"\n (click)=\"onRadioClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n class=\"pe-radio-input\"\n />\n <span class=\"pe-radio-label\">\n <ng-content />\n </span>\n</label>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-radio-container{display:flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}.pe-radio-container.pe-radio-disabled{cursor:not-allowed;opacity:.6}.pe-radio-container:has(.pe-radio-input:focus-visible){outline:2px solid rgba(255,255,255,.3);outline-offset:2px;border-radius:4px}.pe-radio-input{appearance:none;width:16px;height:16px;border:2px solid rgba(255,255,255,.5);border-radius:50%;margin:0;cursor:pointer;position:relative;transition:all .15s cubic-bezier(.4,0,.2,1);outline:solid 2px transparent;flex-shrink:0}.pe-radio-input:focus-visible,.pe-radio-input:focus,.pe-radio-input:hover{outline-color:#ffffff4d;border-color:#fff}.pe-radio-input:checked{border-color:transparent;background-color:#6f3de0;color:inherit}.pe-radio-input:checked:hover{background-color:#7e4af7}.pe-radio-input:checked:active{background-color:#5935af}.pe-radio-input:checked:selected{background-color:#7e4af7}.pe-radio-input:checked:disabled,.pe-radio-input:checked[disabled]{background-color:#232323}.pe-radio-input:checked:after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:4px;background-color:#fff;border-radius:50%}.pe-radio-input:disabled{cursor:not-allowed;outline-color:transparent;background-color:transparent;border-color:#ffffff4d}.pe-radio-input:disabled:after{background-color:#ffffff4d}.pe-radio-input:disabled+.pe-radio-label{cursor:not-allowed;color:#ffffff4d}.pe-radio-label{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;cursor:pointer}.pe-radio-labelpe-radio-disabled .pe-radio-label{cursor:not-allowed;color:#ffffff4d}\n"] }]
2485
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], click: [{ type: i0.Output, args: ["click"] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
2486
+
2487
+ /**
2488
+ * Radio group that holds the selected option value. Implements FormValueControl for Signal Forms [formField].
2489
+ * Use [(value)] or [formField]="myForm().choice". Renders pe-radio per option; value is the selected option's value.
2490
+ */
2491
+ class RadioGroupComponent {
2492
+ name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
2493
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
2494
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
2495
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
2496
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
2497
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
2498
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2499
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
2500
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
2501
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
2502
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
2503
+ ids = createFormFieldIds('pe-radio-group');
2504
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
2505
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
2506
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2507
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: RadioGroupComponent, isStandalone: true, selector: "pe-radio-group", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
2508
+ <div
2509
+ class="pe-radio-group"
2510
+ [attr.aria-invalid]="hasError()"
2511
+ [attr.aria-required]="required()"
2512
+ [attr.aria-describedby]="describedBy()"
2513
+ role="radiogroup"
2514
+ [attr.aria-label]="label()"
2515
+ >
2516
+ <pe-form-field-label
2517
+ [label]="label()"
2518
+ [required]="required()"
2519
+ [for]="ids.controlId"
2520
+ size="md"
2521
+ />
2522
+ <div class="pe-radio-group__radios" [id]="ids.controlId">
2523
+ @for (opt of options(); track opt.value) {
2524
+ <pe-radio
2525
+ [name]="name()"
2526
+ [value]="opt.value"
2527
+ [checked]="value() === opt.value"
2528
+ [disabled]="disabled()"
2529
+ (selected)="value.set(opt.value)"
2530
+ >
2531
+ {{ opt.label }}
2532
+ </pe-radio>
2533
+ }
2534
+ </div>
2535
+ <pe-form-field-helper
2536
+ [id]="ids.helperId"
2537
+ [helperText]="helperText()"
2538
+ [errorText]="errorText() || (hasError() && errors().length ? (errors()[0].message ?? null) : null)"
2539
+ [error]="hasError()"
2540
+ />
2541
+ </div>
2542
+ `, isInline: true, styles: [".pe-radio-group{display:flex;flex-direction:column;gap:.5rem}.pe-radio-group__radios{display:flex;flex-direction:column;gap:.25rem}\n"], dependencies: [{ kind: "component", type: RadioComponent, selector: "pe-radio", inputs: ["value", "name", "disabled", "checked", "id"], outputs: ["checkedChange", "click", "selected"] }, { kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2543
+ }
2544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadioGroupComponent, decorators: [{
2545
+ type: Component,
2546
+ args: [{ selector: 'pe-radio-group', standalone: true, imports: [RadioComponent, FormFieldLabelComponent, FormFieldHelperComponent], template: `
2547
+ <div
2548
+ class="pe-radio-group"
2549
+ [attr.aria-invalid]="hasError()"
2550
+ [attr.aria-required]="required()"
2551
+ [attr.aria-describedby]="describedBy()"
2552
+ role="radiogroup"
2553
+ [attr.aria-label]="label()"
2554
+ >
2555
+ <pe-form-field-label
2556
+ [label]="label()"
2557
+ [required]="required()"
2558
+ [for]="ids.controlId"
2559
+ size="md"
2560
+ />
2561
+ <div class="pe-radio-group__radios" [id]="ids.controlId">
2562
+ @for (opt of options(); track opt.value) {
2563
+ <pe-radio
2564
+ [name]="name()"
2565
+ [value]="opt.value"
2566
+ [checked]="value() === opt.value"
2567
+ [disabled]="disabled()"
2568
+ (selected)="value.set(opt.value)"
2569
+ >
2570
+ {{ opt.label }}
2571
+ </pe-radio>
2572
+ }
2573
+ </div>
2574
+ <pe-form-field-helper
2575
+ [id]="ids.helperId"
2576
+ [helperText]="helperText()"
2577
+ [errorText]="errorText() || (hasError() && errors().length ? (errors()[0].message ?? null) : null)"
2578
+ [error]="hasError()"
2579
+ />
2580
+ </div>
2581
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".pe-radio-group{display:flex;flex-direction:column;gap:.5rem}.pe-radio-group__radios{display:flex;flex-direction:column;gap:.25rem}\n"] }]
2582
+ }], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
2583
+
2584
+ const lineWidths = {
2585
+ 96: 6,
2586
+ 64: 6,
2587
+ 48: 5,
2588
+ 32: 4,
2589
+ 24: 4,
2590
+ 20: 3,
2591
+ 16: 3,
2592
+ };
2593
+ class RadialComponent {
2594
+ // size of the radial component in px
2595
+ size = input(96, ...(ngDevMode ? [{ debugName: "size" }] : []));
2596
+ // if true, the radial will rotate indefinitely
2597
+ infinite = input(false, { ...(ngDevMode ? { debugName: "infinite" } : {}), transform: booleanAttribute });
2598
+ // percentage of the radial that is filled
2599
+ percentage = input(0, ...(ngDevMode ? [{ debugName: "percentage" }] : []));
2600
+ // optional accessible label for the radial
2601
+ ariaLabel = input(null, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
2602
+ lineWidth = computed(() => lineWidths[this.size()], ...(ngDevMode ? [{ debugName: "lineWidth" }] : []));
2603
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadialComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2604
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: RadialComponent, isStandalone: true, selector: "pe-radial", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, infinite: { classPropertyName: "infinite", publicName: "infinite", isSignal: true, isRequired: false, transformFunction: null }, percentage: { classPropertyName: "percentage", publicName: "percentage", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"pe-radial\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [class.pe-radial--infinite]=\"infinite()\"\n [style.width.px]=\"size()\"\n [style.padding.px]=\"lineWidth()\"\n [style.--pe-radial-percentage]=\"percentage() + '%'\"\n></div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-radial{width:96px;padding:6px;aspect-ratio:1;border-radius:50%;background:#fff}.pe-radial--infinite{--pe-radial-mask: conic-gradient(#0000 10%, #000), linear-gradient(#000 0 0) content-box;animation:pe-radial-rotation 1s infinite linear}.pe-radial:not(.pe-radial--infinite){--pe-radial-percentage: 25%;--pe-radial-mask: conic-gradient( #fff var(--pe-radial-percentage), transparent var(--pe-radial-percentage) ), linear-gradient(#000 0 0) content-box}.pe-radial{-webkit-mask:var(--pe-radial-mask);mask:var(--pe-radial-mask);-webkit-mask-composite:source-out;mask-composite:subtract}@keyframes pe-radial-rotation{to{transform:rotate(1turn)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2605
+ }
2606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RadialComponent, decorators: [{
2607
+ type: Component,
2608
+ args: [{ selector: 'pe-radial', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-radial\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [class.pe-radial--infinite]=\"infinite()\"\n [style.width.px]=\"size()\"\n [style.padding.px]=\"lineWidth()\"\n [style.--pe-radial-percentage]=\"percentage() + '%'\"\n></div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-radial{width:96px;padding:6px;aspect-ratio:1;border-radius:50%;background:#fff}.pe-radial--infinite{--pe-radial-mask: conic-gradient(#0000 10%, #000), linear-gradient(#000 0 0) content-box;animation:pe-radial-rotation 1s infinite linear}.pe-radial:not(.pe-radial--infinite){--pe-radial-percentage: 25%;--pe-radial-mask: conic-gradient( #fff var(--pe-radial-percentage), transparent var(--pe-radial-percentage) ), linear-gradient(#000 0 0) content-box}.pe-radial{-webkit-mask:var(--pe-radial-mask);mask:var(--pe-radial-mask);-webkit-mask-composite:source-out;mask-composite:subtract}@keyframes pe-radial-rotation{to{transform:rotate(1turn)}}\n"] }]
2609
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], infinite: [{ type: i0.Input, args: [{ isSignal: true, alias: "infinite", required: false }] }], percentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "percentage", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
2610
+
2611
+ /**
2612
+ * Display-only rich text component. Renders sanitized HTML from the API (or from
2613
+ * pe-rich-text-editor) with no Quill dependency. HTML is sanitized before rendering.
2614
+ *
2615
+ * Use [content] for HTML strings (e.g. from API or editor), or project markup via
2616
+ * ng-content when content is empty.
2617
+ */
2618
+ class RichTextComponent {
2619
+ content = input(null, ...(ngDevMode ? [{ debugName: "content" }] : []));
2620
+ size = input('body-l', ...(ngDevMode ? [{ debugName: "size" }] : []));
2621
+ domSanitizer = inject(DomSanitizer);
2622
+ sanitizedContent = computed(() => {
2623
+ const html = this.content() ?? '';
2624
+ return this.domSanitizer.sanitize(SecurityContext.HTML, html) ?? '';
2625
+ }, ...(ngDevMode ? [{ debugName: "sanitizedContent" }] : []));
2626
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RichTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2627
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: RichTextComponent, isStandalone: true, selector: "pe-rich-text", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "pe-rich-text-host" }, ngImport: i0, template: `
2628
+ @if (content()) {
2629
+ <div
2630
+ class="pe-rich-text"
2631
+ [class.pe-rich-text--body-m]="size() === 'body-m'"
2632
+ [innerHTML]="sanitizedContent()"
2633
+ ></div>
2634
+ } @else {
2635
+ <div
2636
+ class="pe-rich-text"
2637
+ [class.pe-rich-text--body-m]="size() === 'body-m'"
2638
+ >
2639
+ <ng-content />
2640
+ </div>
2641
+ }`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2642
+ }
2643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: RichTextComponent, decorators: [{
2644
+ type: Component,
2645
+ args: [{
2646
+ selector: 'pe-rich-text',
2647
+ template: `
2648
+ @if (content()) {
2649
+ <div
2650
+ class="pe-rich-text"
2651
+ [class.pe-rich-text--body-m]="size() === 'body-m'"
2652
+ [innerHTML]="sanitizedContent()"
2653
+ ></div>
2654
+ } @else {
2655
+ <div
2656
+ class="pe-rich-text"
2657
+ [class.pe-rich-text--body-m]="size() === 'body-m'"
2658
+ >
2659
+ <ng-content />
2660
+ </div>
2661
+ }`,
2662
+ host: {
2663
+ class: 'pe-rich-text-host',
2664
+ },
2665
+ encapsulation: ViewEncapsulation.None,
2666
+ changeDetection: ChangeDetectionStrategy.OnPush,
2667
+ }]
2668
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
2669
+
2670
+ const toastIcon = (kind) => {
2671
+ switch (kind) {
2672
+ case 'success':
2673
+ return 'check_circle';
2674
+ case 'warning':
2675
+ return 'alert';
2676
+ case 'error':
2677
+ return 'cross_circle';
2678
+ case 'info':
2679
+ return 'info';
2680
+ }
2681
+ };
2682
+ class ToastService {
2683
+ toastsSignal = signal([], ...(ngDevMode ? [{ debugName: "toastsSignal" }] : []));
2684
+ toasts = computed(() => this.toastsSignal().map((toast) => ({
2685
+ id: toast.id,
2686
+ title: toast.title,
2687
+ message: toast.message,
2688
+ kind: toast.kind,
2689
+ dismissible: toast.dismissible,
2690
+ role: toast.kind === 'error' || toast.kind === 'warning' ? 'alert' : 'status',
2691
+ icon: toastIcon(toast.kind),
2692
+ showIcon: toast.showIcon,
2693
+ })), ...(ngDevMode ? [{ debugName: "toasts" }] : []));
2694
+ show(message, config) {
2695
+ const id = this.createId();
2696
+ const merged = {
2697
+ id,
2698
+ message,
2699
+ title: config?.title,
2700
+ kind: config?.kind ?? 'info',
2701
+ dismissible: config?.dismissible ?? true,
2702
+ durationMs: config?.durationMs ?? 5000,
2703
+ showIcon: config?.showIcon ?? false,
2704
+ };
2705
+ this.toastsSignal.update((current) => [...current, merged]);
2706
+ if (merged.durationMs && merged.durationMs > 0) {
2707
+ window.setTimeout(() => {
2708
+ this.dismiss(id);
2709
+ }, merged.durationMs);
2710
+ }
2711
+ return id;
2712
+ }
2713
+ info(message, config) {
2714
+ return this.show(message, { ...config, kind: 'info' });
2715
+ }
2716
+ success(message, config) {
2717
+ return this.show(message, { ...config, kind: 'success' });
2718
+ }
2719
+ warning(message, config) {
2720
+ return this.show(message, { ...config, kind: 'warning' });
2721
+ }
2722
+ error(message, config) {
2723
+ return this.show(message, { ...config, kind: 'error' });
2724
+ }
2725
+ dismiss(id) {
2726
+ this.toastsSignal.update((current) => current.filter((toast) => toast.id !== id));
2727
+ }
2728
+ clear() {
2729
+ this.toastsSignal.set([]);
2730
+ }
2731
+ createId() {
2732
+ if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {
2733
+ // eslint-disable-next-line no-restricted-globals
2734
+ return crypto.randomUUID();
2735
+ }
2736
+ return `pe-toast-${Math.random().toString(36).slice(2, 11)}`;
2737
+ }
2738
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2739
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ToastService, providedIn: 'root' });
2740
+ }
2741
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ToastService, decorators: [{
2742
+ type: Injectable,
2743
+ args: [{
2744
+ providedIn: 'root',
2745
+ }]
2746
+ }] });
2747
+
2748
+ class ToastContainerComponent {
2749
+ toastService = inject(ToastService);
2750
+ toasts = this.toastService.toasts;
2751
+ trackById(_, toast) {
2752
+ return toast.id;
2753
+ }
2754
+ dismiss(id) {
2755
+ this.toastService.dismiss(id);
2756
+ }
2757
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2758
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ToastContainerComponent, isStandalone: true, selector: "pe-toast-container", ngImport: i0, template: "<div class=\"pe-toast-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasts(); track trackById($index, toast)) {\n <section class=\"pe-toast pe-toast--{{ toast.kind }}\" [attr.role]=\"toast.role\">\n <div class=\"pe-toast__icon\">\n @if (toast.showIcon) {\n <pe-icon [icon]=\"toast.icon\" size=\"6\" iconWeight=\"bold\" />\n }\n </div>\n\n <div class=\"pe-toast__body\">\n @if (toast.title) {\n <h3 class=\"pe-toast__title\">\n {{ toast.title }}\n </h3>\n }\n <p class=\"pe-toast__message\">\n {{ toast.message }}\n </p>\n </div>\n\n @if (toast.dismissible) {\n <pe-button\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n class=\"pe-toast__close\"\n ariaLabel=\"Dismiss notification\"\n (buttonClick)=\"dismiss(toast.id)\"\n >\n <pe-icon icon=\"cross\" size=\"5\" />\n </pe-button>\n }\n </section>\n }\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-toast-container{position:fixed;inset-inline-end:16px;inset-block-end:16px;z-index:1200;display:flex;flex-direction:column;gap:12px;pointer-events:none}@media(max-width:767px){.pe-toast-container{inset-inline:12px;inset-block-end:12px}}.pe-toast{display:flex;align-items:flex-start;gap:12px;min-width:280px;max-width:360px;padding:12px 16px;border-radius:12px;background-color:#232323;color:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 12px 30px #0006;pointer-events:auto;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}@media(max-width:767px){.pe-toast{min-width:0;width:100%}}.pe-toast__icon{display:flex;align-items:center;justify-content:center;margin-top:4px;color:#fff}.pe-toast__body{flex:1 1 auto}.pe-toast__title{margin:0 0 4px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;color:#fff}.pe-toast__message{margin:0;color:#ffffffb3}.pe-toast__close{margin-inline-start:8px;flex-shrink:0}.pe-toast__close .pe-icon{font-size:12px;line-height:16px}.pe-toast--success{border-color:#7edc96}.pe-toast--warning{border-color:#ffd9af}.pe-toast--error{border-color:#f69d9d}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2759
+ }
2760
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ToastContainerComponent, decorators: [{
2761
+ type: Component,
2762
+ args: [{ selector: 'pe-toast-container', standalone: true, imports: [ButtonComponent, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"pe-toast-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasts(); track trackById($index, toast)) {\n <section class=\"pe-toast pe-toast--{{ toast.kind }}\" [attr.role]=\"toast.role\">\n <div class=\"pe-toast__icon\">\n @if (toast.showIcon) {\n <pe-icon [icon]=\"toast.icon\" size=\"6\" iconWeight=\"bold\" />\n }\n </div>\n\n <div class=\"pe-toast__body\">\n @if (toast.title) {\n <h3 class=\"pe-toast__title\">\n {{ toast.title }}\n </h3>\n }\n <p class=\"pe-toast__message\">\n {{ toast.message }}\n </p>\n </div>\n\n @if (toast.dismissible) {\n <pe-button\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n class=\"pe-toast__close\"\n ariaLabel=\"Dismiss notification\"\n (buttonClick)=\"dismiss(toast.id)\"\n >\n <pe-icon icon=\"cross\" size=\"5\" />\n </pe-button>\n }\n </section>\n }\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-toast-container{position:fixed;inset-inline-end:16px;inset-block-end:16px;z-index:1200;display:flex;flex-direction:column;gap:12px;pointer-events:none}@media(max-width:767px){.pe-toast-container{inset-inline:12px;inset-block-end:12px}}.pe-toast{display:flex;align-items:flex-start;gap:12px;min-width:280px;max-width:360px;padding:12px 16px;border-radius:12px;background-color:#232323;color:#fff;border:1px solid rgba(255,255,255,.1);box-shadow:0 12px 30px #0006;pointer-events:auto;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}@media(max-width:767px){.pe-toast{min-width:0;width:100%}}.pe-toast__icon{display:flex;align-items:center;justify-content:center;margin-top:4px;color:#fff}.pe-toast__body{flex:1 1 auto}.pe-toast__title{margin:0 0 4px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:800;color:#fff}.pe-toast__message{margin:0;color:#ffffffb3}.pe-toast__close{margin-inline-start:8px;flex-shrink:0}.pe-toast__close .pe-icon{font-size:12px;line-height:16px}.pe-toast--success{border-color:#7edc96}.pe-toast--warning{border-color:#ffd9af}.pe-toast--error{border-color:#f69d9d}\n"] }]
2763
+ }] });
2764
+
2765
+ class TooltipComponent {
2766
+ text = input('', ...(ngDevMode ? [{ debugName: "text" }] : []));
2767
+ position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : []));
2768
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2769
+ showDelay = input(150, ...(ngDevMode ? [{ debugName: "showDelay" }] : []));
2770
+ hideDelay = input(100, ...(ngDevMode ? [{ debugName: "hideDelay" }] : []));
2771
+ visible = signal(false, ...(ngDevMode ? [{ debugName: "visible" }] : []));
2772
+ showTimeoutId = null;
2773
+ hideTimeoutId = null;
2774
+ tooltipId = `pe-tooltip-${Math.random().toString(36).slice(2, 11)}`;
2775
+ get ariaDescribedBy() {
2776
+ return this.visible() && !!this.text() ? this.tooltipId : null;
2777
+ }
2778
+ handlePointerEnter() {
2779
+ if (this.disabled() || !this.text())
2780
+ return;
2781
+ this.scheduleShow();
2782
+ }
2783
+ handlePointerLeave() {
2784
+ this.scheduleHide();
2785
+ }
2786
+ isVisible = this.visible.asReadonly();
2787
+ scheduleShow() {
2788
+ this.cancelHide();
2789
+ if (this.visible())
2790
+ return;
2791
+ const delay = this.showDelay();
2792
+ if (delay <= 0) {
2793
+ this.visible.set(true);
2794
+ return;
2795
+ }
2796
+ this.showTimeoutId = window.setTimeout(() => {
2797
+ this.visible.set(true);
2798
+ }, delay);
2799
+ }
2800
+ scheduleHide() {
2801
+ this.cancelShow();
2802
+ if (!this.visible())
2803
+ return;
2804
+ const delay = this.hideDelay();
2805
+ if (delay <= 0) {
2806
+ this.visible.set(false);
2807
+ return;
2808
+ }
2809
+ this.hideTimeoutId = window.setTimeout(() => {
2810
+ this.visible.set(false);
2811
+ }, delay);
2812
+ }
2813
+ cancelShow() {
2814
+ if (this.showTimeoutId !== null) {
2815
+ window.clearTimeout(this.showTimeoutId);
2816
+ this.showTimeoutId = null;
2817
+ }
2818
+ }
2819
+ cancelHide() {
2820
+ if (this.hideTimeoutId !== null) {
2821
+ window.clearTimeout(this.hideTimeoutId);
2822
+ this.hideTimeoutId = null;
2823
+ }
2824
+ }
2825
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2826
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: TooltipComponent, isStandalone: true, selector: "pe-tooltip", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "showDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handlePointerEnter()", "focusin": "handlePointerEnter()", "mouseleave": "handlePointerLeave()", "focusout": "handlePointerLeave()" }, properties: { "attr.aria-describedby": "this.ariaDescribedBy" } }, ngImport: i0, template: "<span class=\"pe-tooltip-wrapper\">\n <ng-content />\n\n @if (isVisible() && text()) {\n <span\n class=\"pe-tooltip pe-tooltip--{{ position() }}\"\n role=\"tooltip\"\n [attr.id]=\"tooltipId\"\n >\n {{ text() }}\n </span>\n }\n</span>\n\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-tooltip-wrapper{position:relative;display:inline-flex;align-items:center}.pe-tooltip{position:absolute;z-index:200;padding:8px 16px;border-radius:8px;background-color:#232323;font-weight:400;white-space:nowrap;pointer-events:none}.pe-tooltip--top{inset-block-end:100%;inset-inline-start:50%;margin-block-end:4px;transform:translate(-50%)}.pe-tooltip--bottom{inset-block-start:100%;inset-inline-start:50%;margin-block-start:4px;transform:translate(-50%)}.pe-tooltip--left{inset-inline-end:100%;inset-block-start:50%;margin-inline-end:4px;transform:translateY(-50%)}.pe-tooltip--right{inset-inline-start:100%;inset-block-start:50%;margin-inline-start:4px;transform:translateY(-50%)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2827
+ }
2828
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TooltipComponent, decorators: [{
2829
+ type: Component,
2830
+ args: [{ selector: 'pe-tooltip', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"pe-tooltip-wrapper\">\n <ng-content />\n\n @if (isVisible() && text()) {\n <span\n class=\"pe-tooltip pe-tooltip--{{ position() }}\"\n role=\"tooltip\"\n [attr.id]=\"tooltipId\"\n >\n {{ text() }}\n </span>\n }\n</span>\n\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-tooltip-wrapper{position:relative;display:inline-flex;align-items:center}.pe-tooltip{position:absolute;z-index:200;padding:8px 16px;border-radius:8px;background-color:#232323;font-weight:400;white-space:nowrap;pointer-events:none}.pe-tooltip--top{inset-block-end:100%;inset-inline-start:50%;margin-block-end:4px;transform:translate(-50%)}.pe-tooltip--bottom{inset-block-start:100%;inset-inline-start:50%;margin-block-start:4px;transform:translate(-50%)}.pe-tooltip--left{inset-inline-end:100%;inset-block-start:50%;margin-inline-end:4px;transform:translateY(-50%)}.pe-tooltip--right{inset-inline-start:100%;inset-block-start:50%;margin-inline-start:4px;transform:translateY(-50%)}\n"] }]
2831
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideDelay", required: false }] }], ariaDescribedBy: [{
2832
+ type: HostBinding,
2833
+ args: ['attr.aria-describedby']
2834
+ }], handlePointerEnter: [{
2835
+ type: HostListener,
2836
+ args: ['mouseenter']
2837
+ }, {
2838
+ type: HostListener,
2839
+ args: ['focusin']
2840
+ }], handlePointerLeave: [{
2841
+ type: HostListener,
2842
+ args: ['mouseleave']
2843
+ }, {
2844
+ type: HostListener,
2845
+ args: ['focusout']
2846
+ }] } });
2847
+
2848
+ /**
2849
+ * Combobox: search input with filterable dropdown. User types to filter options and selects a result.
2850
+ * Implements FormValueControl for use with Signal Forms [formField]. Use [(value)] for two-way binding.
2851
+ */
2852
+ class SearchSelectComponent {
2853
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
2854
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
2855
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
2856
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
2857
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
2858
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
2859
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
2860
+ placeholder = input('Search...', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
2861
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
2862
+ minCharsToOpen = input(0, ...(ngDevMode ? [{ debugName: "minCharsToOpen" }] : []));
2863
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
2864
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
2865
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
2866
+ valueChange = output();
2867
+ ids = createFormFieldIds('pe-search-select');
2868
+ query = signal('', ...(ngDevMode ? [{ debugName: "query" }] : []));
2869
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
2870
+ isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
2871
+ highlightedIndex = signal(0, ...(ngDevMode ? [{ debugName: "highlightedIndex" }] : []));
2872
+ blurCloseTimeout = null;
2873
+ listId = `${this.ids.controlId}-list`;
2874
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
2875
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
2876
+ selectedOption = computed(() => {
2877
+ const v = this.value();
2878
+ if (v == null)
2879
+ return null;
2880
+ return this.options().find((opt) => opt.value === v) ?? null;
2881
+ }, ...(ngDevMode ? [{ debugName: "selectedOption" }] : []));
2882
+ selectedLabel = computed(() => this.selectedOption()?.label ?? '', ...(ngDevMode ? [{ debugName: "selectedLabel" }] : []));
2883
+ filteredOptions = computed(() => {
2884
+ const q = this.query().trim().toLowerCase();
2885
+ const opts = this.options();
2886
+ if (!q)
2887
+ return opts;
2888
+ return opts.filter((opt) => opt.label.toLowerCase().includes(q));
2889
+ }, ...(ngDevMode ? [{ debugName: "filteredOptions" }] : []));
2890
+ displayText = computed(() => {
2891
+ if (this.isOpen())
2892
+ return this.query();
2893
+ if (this.value() != null)
2894
+ return this.selectedLabel();
2895
+ return this.query();
2896
+ }, ...(ngDevMode ? [{ debugName: "displayText" }] : []));
2897
+ shouldShowPanel = computed(() => {
2898
+ if (!this.isOpen())
2899
+ return false;
2900
+ const min = this.minCharsToOpen();
2901
+ return this.query().trim().length >= min;
2902
+ }, ...(ngDevMode ? [{ debugName: "shouldShowPanel" }] : []));
2903
+ hasNoResults = computed(() => this.shouldShowPanel() && this.filteredOptions().length === 0, ...(ngDevMode ? [{ debugName: "hasNoResults" }] : []));
2904
+ optionId = (index) => `${this.ids.controlId}-option-${index}`;
2905
+ activeDescendantId = computed(() => {
2906
+ const list = this.filteredOptions();
2907
+ const idx = this.highlightedIndex();
2908
+ if (list.length === 0)
2909
+ return undefined;
2910
+ const safeIdx = Math.min(Math.max(0, idx), list.length - 1);
2911
+ return this.optionId(safeIdx);
2912
+ }, ...(ngDevMode ? [{ debugName: "activeDescendantId" }] : []));
2913
+ onInputValueChange(text) {
2914
+ this.query.set(text);
2915
+ this.isOpen.set(true);
2916
+ this.highlightedIndex.set(0);
2917
+ if (this.value() != null && text !== this.selectedLabel()) {
2918
+ this.value.set(null);
2919
+ this.valueChange.emit(null);
2920
+ }
2921
+ }
2922
+ onInputFocus() {
2923
+ this.cancelBlurClose();
2924
+ this.isFocused.set(true);
2925
+ if (this.value() != null)
2926
+ this.query.set(this.selectedLabel());
2927
+ this.isOpen.set(true);
2928
+ this.highlightedIndex.set(0);
2929
+ }
2930
+ onInputBlur() {
2931
+ this.isFocused.set(false);
2932
+ this.blurCloseTimeout = setTimeout(() => {
2933
+ this.blurCloseTimeout = null;
2934
+ this.isOpen.set(false);
2935
+ if (this.value() != null)
2936
+ this.query.set(this.selectedLabel());
2937
+ }, 150);
2938
+ }
2939
+ onKeydown(event) {
2940
+ if (!this.shouldShowPanel())
2941
+ return;
2942
+ const list = this.filteredOptions();
2943
+ if (list.length === 0)
2944
+ return;
2945
+ switch (event.key) {
2946
+ case 'ArrowDown':
2947
+ event.preventDefault();
2948
+ this.highlightedIndex.set((this.highlightedIndex() + 1) % list.length);
2949
+ break;
2950
+ case 'ArrowUp':
2951
+ event.preventDefault();
2952
+ this.highlightedIndex.set(this.highlightedIndex() <= 0 ? list.length - 1 : this.highlightedIndex() - 1);
2953
+ break;
2954
+ case 'Enter':
2955
+ event.preventDefault();
2956
+ this.selectOption(list[this.highlightedIndex()]);
2957
+ break;
2958
+ case 'Escape':
2959
+ event.preventDefault();
2960
+ this.isOpen.set(false);
2961
+ break;
2962
+ default:
2963
+ break;
2964
+ }
2965
+ }
2966
+ selectOption(opt) {
2967
+ this.cancelBlurClose();
2968
+ this.value.set(opt.value);
2969
+ this.valueChange.emit(opt.value);
2970
+ this.query.set(opt.label);
2971
+ this.isOpen.set(false);
2972
+ }
2973
+ cancelBlurClose() {
2974
+ if (this.blurCloseTimeout != null) {
2975
+ clearTimeout(this.blurCloseTimeout);
2976
+ this.blurCloseTimeout = null;
2977
+ }
2978
+ }
2979
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SearchSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2980
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: SearchSelectComponent, isStandalone: true, selector: "pe-search-select", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, minCharsToOpen: { classPropertyName: "minCharsToOpen", publicName: "minCharsToOpen", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, ngImport: i0, template: "<div\n class=\"pe-search-select pe-search-select--{{ size() }}\"\n [class.pe-search-select--open]=\"isOpen()\"\n [class.pe-search-select--error]=\"hasError()\"\n [class.pe-search-select--disabled]=\"disabled()\"\n [class.pe-search-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-search-select__control\"\n [class.pe-search-select__control--focused]=\"isFocused()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <pe-input\n [controlId]=\"ids.controlId\"\n [value]=\"displayText()\"\n (valueChange)=\"onInputValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container pe-input-right-elements>\n <pe-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </pe-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"pe-search-select__list pe-scrollable\"\n [class.pe-search-select__list--empty]=\"hasNoResults()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (hasNoResults()) {\n <div class=\"pe-search-select__empty\" role=\"status\">No results</div>\n } @else {\n @for (opt of filteredOptions(); track opt.value; let i = $index) {\n <div\n class=\"pe-search-select__option\"\n [class.pe-search-select__option--highlighted]=\"highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === opt.value\"\n (mousedown)=\"selectOption(opt)\"\n >\n <pe-list-item\n theme=\"ghost-white\"\n [selected]=\"value() === opt.value\"\n [hideFocusOutline]=\"true\"\n >\n <ng-container pe-list-item-label>{{ opt.label }}</ng-container>\n </pe-list-item>\n </div>\n }\n }\n </div>\n }\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-search-select{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px;width:100%}.pe-search-select__control{position:relative;display:flex;flex-direction:column;width:100%}.pe-search-select__control .pe-list-item:focus-visible,.pe-search-select__control .pe-list-item:focus{outline:none}.pe-search-select__list{position:absolute;top:100%;left:0;right:0;z-index:1;display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin-top:4px;max-height:316px;overflow-y:auto;border:2px solid rgba(255,255,255,.1)}.pe-search-select__list--empty{padding:12px}.pe-search-select__option{cursor:pointer;border-radius:8px}.pe-search-select__option--highlighted .pe-list-item{background-color:#fff3}.pe-search-select__empty{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#ffffffb3}.pe-search-select--disabled .pe-search-select__control{opacity:.6;cursor:not-allowed}.pe-search-select--error .pe-input__group{border-color:#f69d9d}@media(max-width:1023px){.pe-search-select__list{max-height:316px}}@media(min-width:1024px){.pe-search-select__control{max-width:100%}}\n"], dependencies: [{ kind: "component", type: InputComponent, selector: "pe-input", inputs: ["type", "size", "appearance", "error", "disabled", "readOnly", "required", "placeholder", "label", "helperText", "errorText", "maxLength", "minLength", "pattern", "autocomplete", "controlId", "invalid", "errors", "touched", "value"], outputs: ["touchedChange", "valueChange", "inputBlur", "inputFocus"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: ListItemComponent, selector: "pe-list-item", inputs: ["theme", "disabled", "hideFocusOutline", "selected", "loading"] }, { kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2981
+ }
2982
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SearchSelectComponent, decorators: [{
2983
+ type: Component,
2984
+ args: [{ selector: 'pe-search-select', standalone: true, imports: [
2985
+ InputComponent,
2986
+ IconComponent,
2987
+ ListItemComponent,
2988
+ FormFieldLabelComponent,
2989
+ FormFieldHelperComponent,
2990
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-search-select pe-search-select--{{ size() }}\"\n [class.pe-search-select--open]=\"isOpen()\"\n [class.pe-search-select--error]=\"hasError()\"\n [class.pe-search-select--disabled]=\"disabled()\"\n [class.pe-search-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-search-select__control\"\n [class.pe-search-select__control--focused]=\"isFocused()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <pe-input\n [controlId]=\"ids.controlId\"\n [value]=\"displayText()\"\n (valueChange)=\"onInputValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container pe-input-right-elements>\n <pe-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </pe-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"pe-search-select__list pe-scrollable\"\n [class.pe-search-select__list--empty]=\"hasNoResults()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (hasNoResults()) {\n <div class=\"pe-search-select__empty\" role=\"status\">No results</div>\n } @else {\n @for (opt of filteredOptions(); track opt.value; let i = $index) {\n <div\n class=\"pe-search-select__option\"\n [class.pe-search-select__option--highlighted]=\"highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === opt.value\"\n (mousedown)=\"selectOption(opt)\"\n >\n <pe-list-item\n theme=\"ghost-white\"\n [selected]=\"value() === opt.value\"\n [hideFocusOutline]=\"true\"\n >\n <ng-container pe-list-item-label>{{ opt.label }}</ng-container>\n </pe-list-item>\n </div>\n }\n }\n </div>\n }\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-search-select{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px;width:100%}.pe-search-select__control{position:relative;display:flex;flex-direction:column;width:100%}.pe-search-select__control .pe-list-item:focus-visible,.pe-search-select__control .pe-list-item:focus{outline:none}.pe-search-select__list{position:absolute;top:100%;left:0;right:0;z-index:1;display:flex;flex-direction:column;gap:4px;background-color:#232323;border-radius:16px;padding:4px;margin-top:4px;max-height:316px;overflow-y:auto;border:2px solid rgba(255,255,255,.1)}.pe-search-select__list--empty{padding:12px}.pe-search-select__option{cursor:pointer;border-radius:8px}.pe-search-select__option--highlighted .pe-list-item{background-color:#fff3}.pe-search-select__empty{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400;color:#ffffffb3}.pe-search-select--disabled .pe-search-select__control{opacity:.6;cursor:not-allowed}.pe-search-select--error .pe-input__group{border-color:#f69d9d}@media(max-width:1023px){.pe-search-select__list{max-height:316px}}@media(min-width:1024px){.pe-search-select__control{max-width:100%}}\n"] }]
2991
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], minCharsToOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "minCharsToOpen", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
2992
+
2993
+ /**
2994
+ * Form-friendly select built on the dropdown. Implements FormValueControl for Signal Forms [formField].
2995
+ * Use [(value)] or [formField]="myForm().country".
2996
+ *
2997
+ * @example
2998
+ * <pe-select label="Sort by" [options]="options" [(value)]="selected" />
2999
+ */
3000
+ class SelectComponent {
3001
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
3002
+ theme = input('transparent-white', ...(ngDevMode ? [{ debugName: "theme" }] : []));
3003
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
3004
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
3005
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
3006
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
3007
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3008
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
3009
+ placeholder = input('Select an option', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
3010
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
3011
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
3012
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
3013
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
3014
+ selectedIndex = model(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
3015
+ ids = createFormFieldIds('pe-select');
3016
+ items = computed(() => {
3017
+ const opts = this.options();
3018
+ if (!opts.length)
3019
+ return [];
3020
+ return opts.map((option) => ({
3021
+ label: option.label ?? option.value,
3022
+ value: option.value,
3023
+ leftIcons: option.leftIcons,
3024
+ rightIcons: option.rightIcons,
3025
+ disabled: option.disabled,
3026
+ }));
3027
+ }, ...(ngDevMode ? [{ debugName: "items" }] : []));
3028
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
3029
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
3030
+ constructor() {
3031
+ // Keep selectedIndex in sync when value or options change
3032
+ effect(() => {
3033
+ const currentValue = this.value();
3034
+ const options = this.options();
3035
+ if (currentValue == null) {
3036
+ this.selectedIndex.set(0);
3037
+ return;
3038
+ }
3039
+ const index = options.findIndex((opt) => opt.value === currentValue);
3040
+ this.selectedIndex.set(index >= 0 ? index : 0);
3041
+ });
3042
+ }
3043
+ /** Handles index changes coming from the dropdown */
3044
+ onSelectedIndexChange(index) {
3045
+ const options = this.options();
3046
+ const option = options[index];
3047
+ this.selectedIndex.set(index);
3048
+ this.value.set(option?.value ?? null);
3049
+ }
3050
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3051
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.2", type: SelectComponent, isStandalone: true, selector: "pe-select", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", selectedIndex: "selectedIndexChange" }, ngImport: i0, template: "<div\n class=\"pe-select pe-select--{{ size() }}\"\n [class.pe-select--disabled]=\"disabled()\"\n [class.pe-select--error]=\"hasError()\"\n [class.pe-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-select__control\"\n [id]=\"ids.controlId\"\n [class.pe-select__control--disabled]=\"disabled()\"\n >\n <pe-dropdown\n class=\"pe-select__dropdown\"\n [theme]=\"theme()\"\n [items]=\"items()\"\n [disabled]=\"disabled()\"\n [(selectedIndex)]=\"selectedIndex\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n />\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-select{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-select__control{display:flex;align-items:center;min-height:40px;border:2px solid rgba(255,255,255,.1);border-radius:8px;background-color:transparent;transition:border-color .25s cubic-bezier(.4,0,.2,1)}.pe-select__control:hover{border-color:#ffffff4d}.pe-select__control:focus-within{border-color:#ffffff80}.pe-select__control .pe-list-item:focus-visible,.pe-select__control .pe-list-item:focus{outline:none}.pe-select__control--disabled{opacity:.6;cursor:not-allowed}.pe-select--disabled .pe-select__control{border-color:#ffffff1a}.pe-select--disabled .pe-select__control:hover,.pe-select--disabled .pe-select__control:focus-within{border-color:#ffffff1a}.pe-select--disabled .pe-select__control{opacity:.6;cursor:not-allowed}.pe-select__dropdown{width:100%}\n"], dependencies: [{ kind: "component", type: DropdownComponent, selector: "pe-dropdown", inputs: ["theme", "items", "disabled", "menuTriggerIcons", "triggerIconOnly", "iconOnlyLabel", "selectedIndex"], outputs: ["selectedIndexChange", "selectedItemChange"] }, { kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3052
+ }
3053
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectComponent, decorators: [{
3054
+ type: Component,
3055
+ args: [{ selector: 'pe-select', standalone: true, imports: [DropdownComponent, FormFieldLabelComponent, FormFieldHelperComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-select pe-select--{{ size() }}\"\n [class.pe-select--disabled]=\"disabled()\"\n [class.pe-select--error]=\"hasError()\"\n [class.pe-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-select__control\"\n [id]=\"ids.controlId\"\n [class.pe-select__control--disabled]=\"disabled()\"\n >\n <pe-dropdown\n class=\"pe-select__dropdown\"\n [theme]=\"theme()\"\n [items]=\"items()\"\n [disabled]=\"disabled()\"\n [(selectedIndex)]=\"selectedIndex\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n />\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-select{white-space:nowrap;box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-select__control{display:flex;align-items:center;min-height:40px;border:2px solid rgba(255,255,255,.1);border-radius:8px;background-color:transparent;transition:border-color .25s cubic-bezier(.4,0,.2,1)}.pe-select__control:hover{border-color:#ffffff4d}.pe-select__control:focus-within{border-color:#ffffff80}.pe-select__control .pe-list-item:focus-visible,.pe-select__control .pe-list-item:focus{outline:none}.pe-select__control--disabled{opacity:.6;cursor:not-allowed}.pe-select--disabled .pe-select__control{border-color:#ffffff1a}.pe-select--disabled .pe-select__control:hover,.pe-select--disabled .pe-select__control:focus-within{border-color:#ffffff1a}.pe-select--disabled .pe-select__control{opacity:.6;cursor:not-allowed}.pe-select__dropdown{width:100%}\n"] }]
3056
+ }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }] } });
3057
+
3058
+ class SidebarComponent {
3059
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
3060
+ theme = input('ghost-white', ...(ngDevMode ? [{ debugName: "theme" }] : []));
3061
+ selectedIndex = model(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
3062
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
3063
+ closeOnBackdropClick = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : []));
3064
+ hideItemFocusOutline = input(true, ...(ngDevMode ? [{ debugName: "hideItemFocusOutline" }] : []));
3065
+ itemSelected = output();
3066
+ close() {
3067
+ this.open.set(false);
3068
+ }
3069
+ onOverlayClick() {
3070
+ if (this.closeOnBackdropClick()) {
3071
+ this.close();
3072
+ }
3073
+ }
3074
+ onItemClick(item, index) {
3075
+ if (item.disabled) {
3076
+ return;
3077
+ }
3078
+ this.selectedIndex.set(index);
3079
+ this.itemSelected.emit(item);
3080
+ }
3081
+ onEscape() {
3082
+ if (this.open()) {
3083
+ this.close();
3084
+ }
3085
+ }
3086
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3087
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: SidebarComponent, isStandalone: true, selector: "pe-sidebar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdropClick: { classPropertyName: "closeOnBackdropClick", publicName: "closeOnBackdropClick", isSignal: true, isRequired: false, transformFunction: null }, hideItemFocusOutline: { classPropertyName: "hideItemFocusOutline", publicName: "hideItemFocusOutline", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", open: "openChange", itemSelected: "itemSelected" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "attr.aria-hidden": "!open()" } }, ngImport: i0, template: "<div class=\"pe-sidebar\">\n <div\n class=\"pe-sidebar__overlay\"\n [class.pe-sidebar__overlay--visible]=\"open()\"\n [attr.aria-hidden]=\"!open()\"\n (click)=\"onOverlayClick()\"\n ></div>\n\n <aside\n class=\"pe-sidebar__drawer\"\n [class.pe-sidebar__drawer--open]=\"open()\"\n role=\"navigation\"\n [attr.aria-hidden]=\"!open()\"\n >\n <div class=\"pe-sidebar__inner\">\n <header class=\"pe-sidebar__header\">\n @if (open()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"pe-sidebar__close\"\n ariaLabel=\"Close menu\"\n (buttonClick)=\"close()\"\n >\n <pe-icon icon=\"close\" size=\"6\" />\n </pe-button>\n }\n <ng-content select=\"[pe-sidebar-header]\" />\n </header>\n <nav class=\"pe-sidebar__nav pe-scrollable\">\n @if (items().length > 0) {\n @for (item of items(); track $index) {\n <pe-list-item\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n [selected]=\"selectedIndex() === $index\"\n [hideFocusOutline]=\"hideItemFocusOutline()\"\n (click)=\"onItemClick(item, $index)\"\n >\n <ng-container pe-list-item-before-label>\n @if (item.leftIcons) {\n @for (icon of item.leftIcons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n <ng-container pe-list-item-label>{{ item.label }}</ng-container>\n <ng-container pe-list-item-after-label>\n @if (item.rightIcons) {\n @for (icon of item.rightIcons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n </pe-list-item>\n }\n } @else {\n <ng-content select=\"[pe-sidebar-nav]\" />\n }\n </nav>\n <footer class=\"pe-sidebar__footer\">\n <ng-content select=\"[pe-sidebar-footer]\" />\n </footer>\n </div>\n </aside>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-scrollable::-webkit-scrollbar{width:8px;height:8px}.pe-scrollable::-webkit-scrollbar-track{background:transparent;border-radius:4px}.pe-scrollable::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:4px;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.pe-scrollable::-webkit-scrollbar-thumb:hover{background:#fff3}.pe-scrollable{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.1) transparent;overflow:overlay;-webkit-overflow-scrolling:touch}.pe-scrollable::-webkit-scrollbar{opacity:0;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-scrollable:hover::-webkit-scrollbar{opacity:1}.pe-scrollable{scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .25s cubic-bezier(.4,0,.2,1)}.pe-scrollable:hover{scrollbar-color:rgba(255,255,255,.1) transparent}.pe-sidebar{position:relative;height:100%}.pe-sidebar__overlay{display:none;position:fixed;inset:0;background-color:#000000b3;z-index:900;opacity:0;pointer-events:none;transition:opacity .25s cubic-bezier(.4,0,.2,1)}@media(max-width:1279px){.pe-sidebar__overlay{display:block}}.pe-sidebar__overlay--visible{opacity:1;pointer-events:auto}.pe-sidebar__drawer{position:fixed;top:0;left:0;bottom:0;width:240px;max-width:85vw;height:100%;background-color:#0a0a0a;border-right:1px solid rgba(255,255,255,.1);z-index:1000;display:flex;flex-direction:column;overflow:hidden;transition:transform .25s cubic-bezier(.4,0,.2,1)}@media(max-width:1279px){.pe-sidebar__drawer{transform:translate(-100%)}}@media(max-width:1279px){.pe-sidebar__drawer--open{transform:translate(0)}}@media(min-width:1024px){.pe-sidebar__drawer{position:relative;transform:none;flex-shrink:0}}.pe-sidebar__inner{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}.pe-sidebar__header{flex-shrink:0;display:flex;align-items:center;gap:8px}@media(min-width:1024px){.pe-sidebar__header .pe-sidebar__close{display:none}}.pe-sidebar__header .pe-sidebar__close .pe-icon,.pe-sidebar__header .pe-sidebar__close .pe-icon:before{background-color:transparent}.pe-sidebar__nav{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px}.pe-sidebar__footer{flex-shrink:0;border-top:1px solid rgba(255,255,255,.1);padding-top:16px}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "pe-button", inputs: ["size", "theme", "iconOnly", "vertical", "disabled", "type", "ariaLabel"], outputs: ["buttonClick"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: ListItemComponent, selector: "pe-list-item", inputs: ["theme", "disabled", "hideFocusOutline", "selected", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3088
+ }
3089
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SidebarComponent, decorators: [{
3090
+ type: Component,
3091
+ args: [{ selector: 'pe-sidebar', standalone: true, imports: [ButtonComponent, IconComponent, ListItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
3092
+ '[attr.aria-hidden]': '!open()',
3093
+ }, template: "<div class=\"pe-sidebar\">\n <div\n class=\"pe-sidebar__overlay\"\n [class.pe-sidebar__overlay--visible]=\"open()\"\n [attr.aria-hidden]=\"!open()\"\n (click)=\"onOverlayClick()\"\n ></div>\n\n <aside\n class=\"pe-sidebar__drawer\"\n [class.pe-sidebar__drawer--open]=\"open()\"\n role=\"navigation\"\n [attr.aria-hidden]=\"!open()\"\n >\n <div class=\"pe-sidebar__inner\">\n <header class=\"pe-sidebar__header\">\n @if (open()) {\n <pe-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"pe-sidebar__close\"\n ariaLabel=\"Close menu\"\n (buttonClick)=\"close()\"\n >\n <pe-icon icon=\"close\" size=\"6\" />\n </pe-button>\n }\n <ng-content select=\"[pe-sidebar-header]\" />\n </header>\n <nav class=\"pe-sidebar__nav pe-scrollable\">\n @if (items().length > 0) {\n @for (item of items(); track $index) {\n <pe-list-item\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n [selected]=\"selectedIndex() === $index\"\n [hideFocusOutline]=\"hideItemFocusOutline()\"\n (click)=\"onItemClick(item, $index)\"\n >\n <ng-container pe-list-item-before-label>\n @if (item.leftIcons) {\n @for (icon of item.leftIcons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n <ng-container pe-list-item-label>{{ item.label }}</ng-container>\n <ng-container pe-list-item-after-label>\n @if (item.rightIcons) {\n @for (icon of item.rightIcons; track icon) {\n <pe-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n </pe-list-item>\n }\n } @else {\n <ng-content select=\"[pe-sidebar-nav]\" />\n }\n </nav>\n <footer class=\"pe-sidebar__footer\">\n <ng-content select=\"[pe-sidebar-footer]\" />\n </footer>\n </div>\n </aside>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-scrollable::-webkit-scrollbar{width:8px;height:8px}.pe-scrollable::-webkit-scrollbar-track{background:transparent;border-radius:4px}.pe-scrollable::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:4px;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.pe-scrollable::-webkit-scrollbar-thumb:hover{background:#fff3}.pe-scrollable{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.1) transparent;overflow:overlay;-webkit-overflow-scrolling:touch}.pe-scrollable::-webkit-scrollbar{opacity:0;transition:opacity .25s cubic-bezier(.4,0,.2,1)}.pe-scrollable:hover::-webkit-scrollbar{opacity:1}.pe-scrollable{scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .25s cubic-bezier(.4,0,.2,1)}.pe-scrollable:hover{scrollbar-color:rgba(255,255,255,.1) transparent}.pe-sidebar{position:relative;height:100%}.pe-sidebar__overlay{display:none;position:fixed;inset:0;background-color:#000000b3;z-index:900;opacity:0;pointer-events:none;transition:opacity .25s cubic-bezier(.4,0,.2,1)}@media(max-width:1279px){.pe-sidebar__overlay{display:block}}.pe-sidebar__overlay--visible{opacity:1;pointer-events:auto}.pe-sidebar__drawer{position:fixed;top:0;left:0;bottom:0;width:240px;max-width:85vw;height:100%;background-color:#0a0a0a;border-right:1px solid rgba(255,255,255,.1);z-index:1000;display:flex;flex-direction:column;overflow:hidden;transition:transform .25s cubic-bezier(.4,0,.2,1)}@media(max-width:1279px){.pe-sidebar__drawer{transform:translate(-100%)}}@media(max-width:1279px){.pe-sidebar__drawer--open{transform:translate(0)}}@media(min-width:1024px){.pe-sidebar__drawer{position:relative;transform:none;flex-shrink:0}}.pe-sidebar__inner{display:flex;flex-direction:column;height:100%;padding:16px;gap:16px}.pe-sidebar__header{flex-shrink:0;display:flex;align-items:center;gap:8px}@media(min-width:1024px){.pe-sidebar__header .pe-sidebar__close{display:none}}.pe-sidebar__header .pe-sidebar__close .pe-icon,.pe-sidebar__header .pe-sidebar__close .pe-icon:before{background-color:transparent}.pe-sidebar__nav{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px}.pe-sidebar__footer{flex-shrink:0;border-top:1px solid rgba(255,255,255,.1);padding-top:16px}\n"] }]
3094
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], closeOnBackdropClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdropClick", required: false }] }], hideItemFocusOutline: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideItemFocusOutline", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], onEscape: [{
3095
+ type: HostListener,
3096
+ args: ['document:keydown.escape']
3097
+ }] } });
3098
+
3099
+ class StatusComponent {
3100
+ status = input('info', ...(ngDevMode ? [{ debugName: "status" }] : []));
3101
+ customIcon = input(...(ngDevMode ? [undefined, { debugName: "customIcon" }] : []));
3102
+ loadingAnimation = input(false, ...(ngDevMode ? [{ debugName: "loadingAnimation" }] : []));
3103
+ get icon() {
3104
+ const customIcon = this.customIcon();
3105
+ if (customIcon) {
3106
+ return customIcon;
3107
+ }
3108
+ const statusIcons = {
3109
+ confirm: 'check',
3110
+ alert: 'alert',
3111
+ error: 'cross',
3112
+ pending: 'hourglass',
3113
+ info: 'info',
3114
+ };
3115
+ return statusIcons[this.status()] || 'info';
3116
+ }
3117
+ computedClasses = computed(() => ({
3118
+ 'pe-status': true,
3119
+ 'pe-status--confirm': this.status() === 'confirm',
3120
+ 'pe-status--alert': this.status() === 'alert',
3121
+ 'pe-status--error': this.status() === 'error',
3122
+ 'pe-status--pending': this.status() === 'pending',
3123
+ 'pe-status--info': this.status() === 'info',
3124
+ }), ...(ngDevMode ? [{ debugName: "computedClasses" }] : []));
3125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3126
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: StatusComponent, isStandalone: true, selector: "pe-status", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "customIcon", isSignal: true, isRequired: false, transformFunction: null }, loadingAnimation: { classPropertyName: "loadingAnimation", publicName: "loadingAnimation", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [class]=\"computedClasses()\">\n <div class=\"pe-status-icon\">\n <pe-icon [icon]=\"icon\" size=\"12\" />\n @if (loadingAnimation()) {\n <div class=\"pe-status-loading\">\n <pe-radial [size]=\"96\" [percentage]=\"50\" [infinite]=\"true\" />\n </div>\n }\n </div>\n <div class=\"pe-status-title-container\">\n <div class=\"pe-status-title\">\n <ng-content select=\"[pe-status-title]\" />\n </div>\n <div class=\"pe-status-subtitle\">\n <ng-content select=\"[pe-status-subtitle]\" />\n </div>\n </div>\n <div class=\"pe-status-description\">\n <ng-content select=\"[pe-status-description]\" />\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-status{display:flex;flex-direction:column;align-items:center;width:100%;max-width:540px;gap:32px}.pe-status-icon{position:relative;display:flex;align-items:center;justify-content:center;width:96px;height:96px;border-radius:4096px;background-color:#ffffff1a}.pe-status-loading{position:absolute;inset:0;width:100%}.pe-status-title{text-align:center;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-status-subtitle{text-align:center;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-status-description{text-align:center;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-status--confirm .pe-status-icon{background-color:#0b7a27}.pe-status--alert .pe-status-icon{background-color:#e87523}.pe-status--error .pe-status-icon{background-color:#c33a3a}.pe-status--pending .pe-status-icon{background-color:#6f3de0}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: RadialComponent, selector: "pe-radial", inputs: ["size", "infinite", "percentage", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3127
+ }
3128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: StatusComponent, decorators: [{
3129
+ type: Component,
3130
+ args: [{ selector: 'pe-status', standalone: true, imports: [IconComponent, RadialComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"computedClasses()\">\n <div class=\"pe-status-icon\">\n <pe-icon [icon]=\"icon\" size=\"12\" />\n @if (loadingAnimation()) {\n <div class=\"pe-status-loading\">\n <pe-radial [size]=\"96\" [percentage]=\"50\" [infinite]=\"true\" />\n </div>\n }\n </div>\n <div class=\"pe-status-title-container\">\n <div class=\"pe-status-title\">\n <ng-content select=\"[pe-status-title]\" />\n </div>\n <div class=\"pe-status-subtitle\">\n <ng-content select=\"[pe-status-subtitle]\" />\n </div>\n </div>\n <div class=\"pe-status-description\">\n <ng-content select=\"[pe-status-description]\" />\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-status{display:flex;flex-direction:column;align-items:center;width:100%;max-width:540px;gap:32px}.pe-status-icon{position:relative;display:flex;align-items:center;justify-content:center;width:96px;height:96px;border-radius:4096px;background-color:#ffffff1a}.pe-status-loading{position:absolute;inset:0;width:100%}.pe-status-title{text-align:center;font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-status-subtitle{text-align:center;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-status-description{text-align:center;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-status--confirm .pe-status-icon{background-color:#0b7a27}.pe-status--alert .pe-status-icon{background-color:#e87523}.pe-status--error .pe-status-icon{background-color:#c33a3a}.pe-status--pending .pe-status-icon{background-color:#6f3de0}\n"] }]
3131
+ }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], customIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "customIcon", required: false }] }], loadingAnimation: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingAnimation", required: false }] }] } });
3132
+
3133
+ /**
3134
+ * Table component for tabular data with optional sort (per-column) and global filter.
3135
+ * Uses semantic table markup; responsive with horizontal scroll on small viewports.
3136
+ */
3137
+ class TableComponent {
3138
+ columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : []));
3139
+ data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
3140
+ sortColumn = model(null, ...(ngDevMode ? [{ debugName: "sortColumn" }] : []));
3141
+ sortDirection = model('asc', ...(ngDevMode ? [{ debugName: "sortDirection" }] : []));
3142
+ filterPlaceholder = input('Filter...', ...(ngDevMode ? [{ debugName: "filterPlaceholder" }] : []));
3143
+ filterLabel = input('Filter', ...(ngDevMode ? [{ debugName: "filterLabel" }] : []));
3144
+ showGlobalFilter = input(false, ...(ngDevMode ? [{ debugName: "showGlobalFilter" }] : []));
3145
+ emptyMessage = input('No data', ...(ngDevMode ? [{ debugName: "emptyMessage" }] : []));
3146
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
3147
+ sortColumnChange = output();
3148
+ filterChange = output();
3149
+ filterQuery = signal('', ...(ngDevMode ? [{ debugName: "filterQuery" }] : []));
3150
+ hasSortableColumn = computed(() => this.columns().some((col) => col.sortable === true), ...(ngDevMode ? [{ debugName: "hasSortableColumn" }] : []));
3151
+ filteredData = computed(() => {
3152
+ const rows = this.data();
3153
+ const query = this.filterQuery().trim().toLowerCase();
3154
+ const cols = this.columns();
3155
+ if (!query)
3156
+ return rows;
3157
+ return rows.filter((row) => {
3158
+ return cols.some((col) => {
3159
+ const val = this.getCellValue(row, col.id);
3160
+ return String(val).toLowerCase().includes(query);
3161
+ });
3162
+ });
3163
+ }, ...(ngDevMode ? [{ debugName: "filteredData" }] : []));
3164
+ sortedData = computed(() => {
3165
+ const rows = this.filteredData();
3166
+ const colId = this.sortColumn();
3167
+ const dir = this.sortDirection();
3168
+ if (!colId)
3169
+ return rows;
3170
+ return [...rows].sort((a, b) => {
3171
+ const aVal = this.getCellValue(a, colId);
3172
+ const bVal = this.getCellValue(b, colId);
3173
+ const aStr = String(aVal ?? '');
3174
+ const bStr = String(bVal ?? '');
3175
+ const cmp = aStr.localeCompare(bStr, undefined, { numeric: true });
3176
+ return dir === 'asc' ? cmp : -cmp;
3177
+ });
3178
+ }, ...(ngDevMode ? [{ debugName: "sortedData" }] : []));
3179
+ filterId = `pe-table-filter-${Math.random().toString(36).slice(2, 9)}`;
3180
+ getCellValue(row, columnId) {
3181
+ return row[columnId];
3182
+ }
3183
+ onFilterInput(value) {
3184
+ this.filterQuery.set(value);
3185
+ this.filterChange.emit(value);
3186
+ }
3187
+ toggleSort(columnId) {
3188
+ const col = this.columns().find((c) => c.id === columnId);
3189
+ if (!col?.sortable)
3190
+ return;
3191
+ const current = this.sortColumn();
3192
+ const currentDir = this.sortDirection();
3193
+ if (current === columnId) {
3194
+ const nextDir = currentDir === 'asc' ? 'desc' : 'asc';
3195
+ this.sortDirection.set(nextDir);
3196
+ this.sortColumnChange.emit({ column: columnId, direction: nextDir });
3197
+ return;
3198
+ }
3199
+ else {
3200
+ this.sortColumn.set(columnId);
3201
+ this.sortDirection.set('asc');
3202
+ this.sortColumnChange.emit({ column: columnId, direction: 'asc' });
3203
+ }
3204
+ }
3205
+ getSortAriaSort(columnId) {
3206
+ if (this.sortColumn() !== columnId)
3207
+ return 'none';
3208
+ return this.sortDirection() === 'asc' ? 'ascending' : 'descending';
3209
+ }
3210
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3211
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: TableComponent, isStandalone: true, selector: "pe-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, sortColumn: { classPropertyName: "sortColumn", publicName: "sortColumn", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, filterPlaceholder: { classPropertyName: "filterPlaceholder", publicName: "filterPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, filterLabel: { classPropertyName: "filterLabel", publicName: "filterLabel", isSignal: true, isRequired: false, transformFunction: null }, showGlobalFilter: { classPropertyName: "showGlobalFilter", publicName: "showGlobalFilter", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortColumn: "sortColumnChange", sortDirection: "sortDirectionChange", sortColumnChange: "sortColumnChange", filterChange: "filterChange" }, ngImport: i0, template: "<div\n class=\"pe-table\"\n [class.pe-table--sortable]=\"hasSortableColumn()\"\n [class.pe-table--filterable]=\"showGlobalFilter()\"\n>\n @if (showGlobalFilter()) {\n <div class=\"pe-table__toolbar\">\n <pe-input\n [controlId]=\"filterId\"\n [label]=\"filterLabel()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterQuery()\"\n (valueChange)=\"onFilterInput($event)\"\n size=\"sm\"\n >\n <ng-container pe-input-left-elements>\n <pe-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </pe-input>\n </div>\n }\n\n <div class=\"pe-table__scroll pe-scrollable\">\n <pe-skeleton [show]=\"loading()\" variant=\"rect\">\n <table class=\"pe-table__table\">\n <thead class=\"pe-table__head\">\n <tr class=\"pe-table__row pe-table__row--head\">\n @for (col of columns(); track col.id) {\n <th\n class=\"pe-table__th\"\n [class.pe-table__th--sortable]=\"col.sortable\"\n [class.pe-table__th--sort-asc]=\"sortColumn() === col.id && sortDirection() === 'asc'\"\n [class.pe-table__th--sort-desc]=\"sortColumn() === col.id && sortDirection() === 'desc'\"\n [attr.scope]=\"'col'\"\n [attr.aria-sort]=\"col.sortable ? getSortAriaSort(col.id) : null\"\n >\n @if (col.sortable) {\n <button\n type=\"button\"\n class=\"pe-table__th-button\"\n [attr.aria-label]=\"'Sort by ' + col.label\"\n (click)=\"toggleSort(col.id)\"\n >\n <span class=\"pe-table__th-label\">{{ col.label }}</span>\n @if (sortColumn() === col.id && sortDirection() === 'asc') {\n <pe-icon size=\"5\" icon=\"arrow_up\" />\n } @else if (sortColumn() === col.id && sortDirection() === 'desc') {\n <pe-icon size=\"5\" icon=\"arrow_down\" />\n } @else {\n <pe-icon size=\"5\" icon=\"sort\" />\n }\n </button>\n } @else {\n <span class=\"pe-table__th-label\">{{ col.label }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"pe-table__body\">\n @if (sortedData().length === 0) {\n <tr class=\"pe-table__row pe-table__row--empty\">\n <td class=\"pe-table__cell pe-table__cell--empty\" [attr.colspan]=\"columns().length || 1\">\n {{ emptyMessage() }}\n </td>\n </tr>\n } @else {\n @for (row of sortedData(); track $index) {\n <tr class=\"pe-table__row\">\n @for (col of columns(); track col.id) {\n <td class=\"pe-table__cell\">{{ getCellValue(row, col.id) }}</td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </pe-skeleton>\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-table{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%}.pe-table__toolbar{flex-shrink:0;max-width:100%}.pe-table__scroll{overflow-x:auto;overflow-y:hidden;width:100%;-webkit-overflow-scrolling:touch}.pe-table__table{width:100%;min-width:100%;border-collapse:collapse;border-spacing:0;border:1px solid rgba(255,255,255,.1);font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#fff}.pe-table__head{position:sticky;top:0;z-index:1;background-color:transparent}.pe-table__row{border-bottom:1px solid rgba(255,255,255,.1)}.pe-table__row--head{border-bottom:2px solid rgba(255,255,255,.1)}.pe-table__row--empty{border-bottom:none}.pe-table__th{padding:8px 12px;text-align:left;font-weight:600;white-space:nowrap}.pe-table__th--sortable .pe-table__th-button{display:inline-flex;align-items:center;gap:4px;width:100%;min-width:0;padding:0;border:none;background:none;cursor:pointer;color:inherit;font:inherit;text-align:left;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;font-weight:600}.pe-table__th--sortable .pe-table__th-button:hover{color:#ffffffb3}.pe-table__th--sortable .pe-table__th-button:focus-visible{outline:2px solid rgba(255,255,255,.3);outline-offset:2px}.pe-table__th--sort-asc,.pe-table__th--sort-desc{color:#c2a8ff}.pe-table__th-label{overflow:hidden;text-overflow:ellipsis}.pe-table__body{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#fff}.pe-table__cell{padding:8px 12px;vertical-align:middle}.pe-table__cell--empty{padding:24px;text-align:center;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}@media(max-width:1023px){.pe-table__scroll{margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px}.pe-table__table{min-width:max-content}}@media(min-width:1024px){.pe-table__scroll{margin-left:0;margin-right:0;padding-left:0;padding-right:0}}\n"], dependencies: [{ kind: "component", type: InputComponent, selector: "pe-input", inputs: ["type", "size", "appearance", "error", "disabled", "readOnly", "required", "placeholder", "label", "helperText", "errorText", "maxLength", "minLength", "pattern", "autocomplete", "controlId", "invalid", "errors", "touched", "value"], outputs: ["touchedChange", "valueChange", "inputBlur", "inputFocus"] }, { kind: "component", type: IconComponent, selector: "pe-icon", inputs: ["size", "weight", "icon"] }, { kind: "component", type: SkeletonComponent, selector: "pe-skeleton", inputs: ["variant", "width", "height", "lines", "borderRadius", "show"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3212
+ }
3213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TableComponent, decorators: [{
3214
+ type: Component,
3215
+ args: [{ selector: 'pe-table', standalone: true, imports: [InputComponent, IconComponent, SkeletonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-table\"\n [class.pe-table--sortable]=\"hasSortableColumn()\"\n [class.pe-table--filterable]=\"showGlobalFilter()\"\n>\n @if (showGlobalFilter()) {\n <div class=\"pe-table__toolbar\">\n <pe-input\n [controlId]=\"filterId\"\n [label]=\"filterLabel()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterQuery()\"\n (valueChange)=\"onFilterInput($event)\"\n size=\"sm\"\n >\n <ng-container pe-input-left-elements>\n <pe-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </pe-input>\n </div>\n }\n\n <div class=\"pe-table__scroll pe-scrollable\">\n <pe-skeleton [show]=\"loading()\" variant=\"rect\">\n <table class=\"pe-table__table\">\n <thead class=\"pe-table__head\">\n <tr class=\"pe-table__row pe-table__row--head\">\n @for (col of columns(); track col.id) {\n <th\n class=\"pe-table__th\"\n [class.pe-table__th--sortable]=\"col.sortable\"\n [class.pe-table__th--sort-asc]=\"sortColumn() === col.id && sortDirection() === 'asc'\"\n [class.pe-table__th--sort-desc]=\"sortColumn() === col.id && sortDirection() === 'desc'\"\n [attr.scope]=\"'col'\"\n [attr.aria-sort]=\"col.sortable ? getSortAriaSort(col.id) : null\"\n >\n @if (col.sortable) {\n <button\n type=\"button\"\n class=\"pe-table__th-button\"\n [attr.aria-label]=\"'Sort by ' + col.label\"\n (click)=\"toggleSort(col.id)\"\n >\n <span class=\"pe-table__th-label\">{{ col.label }}</span>\n @if (sortColumn() === col.id && sortDirection() === 'asc') {\n <pe-icon size=\"5\" icon=\"arrow_up\" />\n } @else if (sortColumn() === col.id && sortDirection() === 'desc') {\n <pe-icon size=\"5\" icon=\"arrow_down\" />\n } @else {\n <pe-icon size=\"5\" icon=\"sort\" />\n }\n </button>\n } @else {\n <span class=\"pe-table__th-label\">{{ col.label }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"pe-table__body\">\n @if (sortedData().length === 0) {\n <tr class=\"pe-table__row pe-table__row--empty\">\n <td class=\"pe-table__cell pe-table__cell--empty\" [attr.colspan]=\"columns().length || 1\">\n {{ emptyMessage() }}\n </td>\n </tr>\n } @else {\n @for (row of sortedData(); track $index) {\n <tr class=\"pe-table__row\">\n @for (col of columns(); track col.id) {\n <td class=\"pe-table__cell\">{{ getCellValue(row, col.id) }}</td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </pe-skeleton>\n </div>\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-table{box-sizing:border-box;display:flex;flex-direction:column;gap:12px;width:100%}.pe-table__toolbar{flex-shrink:0;max-width:100%}.pe-table__scroll{overflow-x:auto;overflow-y:hidden;width:100%;-webkit-overflow-scrolling:touch}.pe-table__table{width:100%;min-width:100%;border-collapse:collapse;border-spacing:0;border:1px solid rgba(255,255,255,.1);font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#fff}.pe-table__head{position:sticky;top:0;z-index:1;background-color:transparent}.pe-table__row{border-bottom:1px solid rgba(255,255,255,.1)}.pe-table__row--head{border-bottom:2px solid rgba(255,255,255,.1)}.pe-table__row--empty{border-bottom:none}.pe-table__th{padding:8px 12px;text-align:left;font-weight:600;white-space:nowrap}.pe-table__th--sortable .pe-table__th-button{display:inline-flex;align-items:center;gap:4px;width:100%;min-width:0;padding:0;border:none;background:none;cursor:pointer;color:inherit;font:inherit;text-align:left;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;font-weight:600}.pe-table__th--sortable .pe-table__th-button:hover{color:#ffffffb3}.pe-table__th--sortable .pe-table__th-button:focus-visible{outline:2px solid rgba(255,255,255,.3);outline-offset:2px}.pe-table__th--sort-asc,.pe-table__th--sort-desc{color:#c2a8ff}.pe-table__th-label{overflow:hidden;text-overflow:ellipsis}.pe-table__body{font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400;color:#fff}.pe-table__cell{padding:8px 12px;vertical-align:middle}.pe-table__cell--empty{padding:24px;text-align:center;color:#ffffffb3;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}@media(max-width:1023px){.pe-table__scroll{margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px}.pe-table__table{min-width:max-content}}@media(min-width:1024px){.pe-table__scroll{margin-left:0;margin-right:0;padding-left:0;padding-right:0}}\n"] }]
3216
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], sortColumn: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortColumn", required: false }] }, { type: i0.Output, args: ["sortColumnChange"] }], sortDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDirection", required: false }] }, { type: i0.Output, args: ["sortDirectionChange"] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], filterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterLabel", required: false }] }], showGlobalFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGlobalFilter", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], sortColumnChange: [{ type: i0.Output, args: ["sortColumnChange"] }], filterChange: [{ type: i0.Output, args: ["filterChange"] }] } });
3217
+
3218
+ /**
3219
+ * When projected into pe-textarea, replaces the native textarea with custom content (e.g. Quill).
3220
+ * Use with [pe-textarea-field] on the element to project.
3221
+ */
3222
+ class TextareaFieldDirective {
3223
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TextareaFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3224
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: TextareaFieldDirective, isStandalone: true, selector: "[pe-textarea-field]", ngImport: i0 });
3225
+ }
3226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TextareaFieldDirective, decorators: [{
3227
+ type: Directive,
3228
+ args: [{
3229
+ selector: '[pe-textarea-field]',
3230
+ standalone: true,
3231
+ }]
3232
+ }] });
3233
+
3234
+ /**
3235
+ * Reusable textarea. Implements FormValueControl for Signal Forms [formField].
3236
+ * Use [(value)] for two-way binding or [formField]="myForm().message".
3237
+ *
3238
+ * Content projection: [pe-textarea-field] (replaces native textarea), [pe-textarea-left-elements], [pe-textarea-right-elements].
3239
+ */
3240
+ class TextareaComponent {
3241
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
3242
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
3243
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3244
+ readOnly = input(false, ...(ngDevMode ? [{ debugName: "readOnly" }] : []));
3245
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
3246
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
3247
+ label = input(null, ...(ngDevMode ? [{ debugName: "label" }] : []));
3248
+ helperText = input(null, ...(ngDevMode ? [{ debugName: "helperText" }] : []));
3249
+ errorText = input(null, ...(ngDevMode ? [{ debugName: "errorText" }] : []));
3250
+ maxLength = input(...(ngDevMode ? [undefined, { debugName: "maxLength" }] : []));
3251
+ minLength = input(...(ngDevMode ? [undefined, { debugName: "minLength" }] : []));
3252
+ autocomplete = input('off', ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
3253
+ rows = input(3, ...(ngDevMode ? [{ debugName: "rows" }] : []));
3254
+ resize = input('vertical', ...(ngDevMode ? [{ debugName: "resize" }] : []));
3255
+ /** When using [pe-textarea-field], pass focus state so the group border reflects it. */
3256
+ groupFocused = input(null, ...(ngDevMode ? [{ debugName: "groupFocused" }] : []));
3257
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
3258
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : []));
3259
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
3260
+ value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
3261
+ customField = contentChild(TextareaFieldDirective, ...(ngDevMode ? [{ debugName: "customField" }] : []));
3262
+ ids = createFormFieldIds('pe-textarea');
3263
+ isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
3264
+ isDirty = signal(false, ...(ngDevMode ? [{ debugName: "isDirty" }] : []));
3265
+ groupFocusedState = computed(() => this.groupFocused() ?? this.isFocused(), ...(ngDevMode ? [{ debugName: "groupFocusedState" }] : []));
3266
+ hasError = computed(() => this.error() || this.invalid(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
3267
+ describedBy = computed(() => getFormFieldDescribedBy(this.ids.helperId, this.ids.errorId, !!this.helperText(), this.hasError(), !!this.errorText() || this.errors().length > 0), ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
3268
+ inputBlur = output();
3269
+ inputFocus = output();
3270
+ valueChange = output();
3271
+ constructor() {
3272
+ effect(() => {
3273
+ const currentValue = this.value();
3274
+ if (this.isDirty()) {
3275
+ this.valueChange.emit(currentValue);
3276
+ }
3277
+ });
3278
+ }
3279
+ onInput(event) {
3280
+ const value = event.target.value;
3281
+ this.isDirty.set(true);
3282
+ this.value.set(value);
3283
+ }
3284
+ onBlur(event) {
3285
+ this.isFocused.set(false);
3286
+ this.touched.set(true);
3287
+ this.inputBlur.emit(event);
3288
+ }
3289
+ onFocus(event) {
3290
+ this.isFocused.set(true);
3291
+ this.inputFocus.emit(event);
3292
+ }
3293
+ focus() {
3294
+ if (this.customField())
3295
+ return;
3296
+ const el = document.getElementById(this.ids.controlId);
3297
+ el?.focus();
3298
+ }
3299
+ select() {
3300
+ const el = document.getElementById(this.ids.controlId);
3301
+ el?.select();
3302
+ }
3303
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3304
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: TextareaComponent, isStandalone: true, selector: "pe-textarea", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorText: { classPropertyName: "errorText", publicName: "errorText", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, groupFocused: { classPropertyName: "groupFocused", publicName: "groupFocused", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange", value: "valueChange", inputBlur: "inputBlur", inputFocus: "inputFocus", valueChange: "valueChange" }, queries: [{ propertyName: "customField", first: true, predicate: TextareaFieldDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"pe-textarea pe-textarea--{{ size() }}\"\n [class.pe-textarea--error]=\"hasError()\"\n [class.pe-textarea--disabled]=\"disabled()\"\n [class.pe-textarea--read-only]=\"readOnly()\"\n [class.pe-textarea--required]=\"required()\"\n [class.pe-textarea--resize-none]=\"resize() === 'none'\"\n [class.pe-textarea--resize-vertical]=\"resize() === 'vertical'\"\n [class.pe-textarea--resize-horizontal]=\"resize() === 'horizontal'\"\n [class.pe-textarea--resize-both]=\"resize() === 'both'\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-textarea__group\"\n [class.pe-textarea__group--focused]=\"groupFocusedState()\"\n [style.--pe-textarea-rows]=\"rows()\"\n >\n <div class=\"pe-textarea__left-elements\">\n <ng-content select=\"[pe-textarea-left-elements]\" />\n </div>\n\n <ng-content select=\"[pe-textarea-field]\" />\n @if (!customField()) {\n <textarea\n [id]=\"ids.controlId\"\n class=\"pe-textarea__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.rows]=\"rows()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n ></textarea>\n }\n\n <div class=\"pe-textarea__right-elements\">\n <ng-content select=\"[pe-textarea-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"(errorText() || (hasError() && errors().length ? errors()[0].message : null)) ?? null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-textarea{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-textarea__group{display:flex;align-items:stretch;padding:12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-textarea__group--focused{border-color:#ffffff80}.pe-textarea:not(.pe-textarea--disabled) .pe-textarea__group:hover{border-color:#ffffff4d}.pe-textarea__field{all:unset;flex:1;min-height:0;resize:vertical}.pe-textarea__field::placeholder{color:#ffffff80}.pe-textarea__field:hover::placeholder{color:#fff}.pe-textarea__field--custom{display:flex;flex-direction:column;min-height:0}.pe-textarea__left-elements,.pe-textarea__right-elements{display:flex;gap:8px;align-items:flex-start;padding-top:8px}.pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-textarea--sm .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 20px + 2 * 8px);padding:8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-textarea--sm .pe-textarea__left-elements,.pe-textarea--sm .pe-textarea__right-elements{gap:4px;padding-top:4px}.pe-textarea--sm .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--sm .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-textarea--md .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 24px + 2 * 12px);padding:12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-textarea--md .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--md .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-textarea--lg .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 28px + 2 * 12px);padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-textarea--lg .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--lg .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-textarea--xl .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 36px + 2 * 16px);padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-textarea--xl .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--xl .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-textarea--resize-none .pe-textarea__field{resize:none}.pe-textarea--resize-vertical .pe-textarea__field{resize:vertical}.pe-textarea--resize-horizontal .pe-textarea__field{resize:horizontal}.pe-textarea--resize-both .pe-textarea__field{resize:both}.pe-textarea--error .pe-textarea__group{border:2px solid #f69d9d}.pe-textarea--disabled .pe-textarea__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-textarea--disabled .pe-textarea__field,.pe-textarea--disabled .pe-textarea__field:disabled::placeholder{color:#ffffff4d}.pe-textarea--read-only .pe-textarea__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-textarea--read-only .pe-textarea__field,.pe-textarea--read-only .pe-textarea__field:read-only::placeholder{color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: FormFieldLabelComponent, selector: "pe-form-field-label", inputs: ["label", "required", "for", "size"] }, { kind: "component", type: FormFieldHelperComponent, selector: "pe-form-field-helper", inputs: ["id", "helperText", "errorText", "error"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3305
+ }
3306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: TextareaComponent, decorators: [{
3307
+ type: Component,
3308
+ args: [{ selector: 'pe-textarea', standalone: true, imports: [FormFieldLabelComponent, FormFieldHelperComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"pe-textarea pe-textarea--{{ size() }}\"\n [class.pe-textarea--error]=\"hasError()\"\n [class.pe-textarea--disabled]=\"disabled()\"\n [class.pe-textarea--read-only]=\"readOnly()\"\n [class.pe-textarea--required]=\"required()\"\n [class.pe-textarea--resize-none]=\"resize() === 'none'\"\n [class.pe-textarea--resize-vertical]=\"resize() === 'vertical'\"\n [class.pe-textarea--resize-horizontal]=\"resize() === 'horizontal'\"\n [class.pe-textarea--resize-both]=\"resize() === 'both'\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <pe-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n />\n\n <div\n class=\"pe-textarea__group\"\n [class.pe-textarea__group--focused]=\"groupFocusedState()\"\n [style.--pe-textarea-rows]=\"rows()\"\n >\n <div class=\"pe-textarea__left-elements\">\n <ng-content select=\"[pe-textarea-left-elements]\" />\n </div>\n\n <ng-content select=\"[pe-textarea-field]\" />\n @if (!customField()) {\n <textarea\n [id]=\"ids.controlId\"\n class=\"pe-textarea__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.rows]=\"rows()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n ></textarea>\n }\n\n <div class=\"pe-textarea__right-elements\">\n <ng-content select=\"[pe-textarea-right-elements]\" />\n </div>\n </div>\n\n <pe-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"(errorText() || (hasError() && errors().length ? errors()[0].message : null)) ?? null\"\n [error]=\"hasError()\"\n />\n</div>\n", styles: [".pe-rich-text{font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400;color:#fff}.pe-rich-text p,.pe-rich-text ul,.pe-rich-text ol,.pe-rich-text blockquote,.pe-rich-text pre{margin-top:0;margin-bottom:16px}.pe-rich-text:last-child,.pe-rich-text p:last-child,.pe-rich-text ul:last-child,.pe-rich-text ol:last-child,.pe-rich-text blockquote:last-child,.pe-rich-text pre:last-child{margin-bottom:0}.pe-rich-text h1,.pe-rich-text h2,.pe-rich-text h3,.pe-rich-text h4,.pe-rich-text h5,.pe-rich-text h6{margin-top:32px;margin-bottom:12px;font-weight:1000}.pe-rich-text h1{font-family:Ultra Nunito Sans;line-height:48px;font-size:48px;letter-spacing:-.48px;font-weight:1000}.pe-rich-text h2{font-family:Ultra Nunito Sans;line-height:48px;font-size:40px;letter-spacing:-.4px;font-weight:1000}.pe-rich-text h3{font-family:Ultra Nunito Sans;line-height:44px;font-size:36px;letter-spacing:-.36px;font-weight:1000}.pe-rich-text h4{font-family:Ultra Nunito Sans;line-height:40px;font-size:32px;letter-spacing:-.32px;font-weight:1000}.pe-rich-text h5{font-family:Ultra Nunito Sans;line-height:36px;font-size:28px;letter-spacing:-.28px;font-weight:1000}.pe-rich-text h6{font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:1000}.pe-rich-text ul,.pe-rich-text ol{padding-left:24px}.pe-rich-text ul ul,.pe-rich-text ul ol,.pe-rich-text ol ul,.pe-rich-text ol ol{margin-top:8px;margin-bottom:8px}.pe-rich-text li{margin-top:4px;margin-bottom:4px}.pe-rich-text strong{font-weight:800}.pe-rich-text code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text em{font-style:italic}.pe-rich-text a{color:#c2a8ff;text-decoration:underline;text-decoration-thickness:1px}.pe-rich-text a:hover{color:#d6c5ff}.pe-rich-text a:active{color:#a781ff}.pe-rich-text pre{padding:16px;border-radius:8px;background-color:#3b3b3b;overflow-x:auto}.pe-rich-text pre code{font-family:Roboto Mono;line-height:20px;font-size:14px;letter-spacing:0px;font-weight:400}.pe-rich-text blockquote{margin-left:0;padding-left:16px;border-left-width:2px;border-left-style:solid;border-left-color:#ffffff1a;color:#ffffffb3}.pe-rich-text--muted{color:#ffffffb3}.pe-rich-text--inverse,.pe-rich-text--inverse a{color:#000}.pe-rich-text--inverse a:hover,.pe-rich-text--inverse a:active{color:#000000b3}.pe-rich-text--body-m{font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-rich-text--compact p,.pe-rich-text--compact ul,.pe-rich-text--compact ol,.pe-rich-text--compact blockquote,.pe-rich-text--compact pre{margin-bottom:8px}.pe-rich-text--compact h1,.pe-rich-text--compact h2,.pe-rich-text--compact h3,.pe-rich-text--compact h4,.pe-rich-text--compact h5,.pe-rich-text--compact h6{margin-top:16px;margin-bottom:8px}.pe-textarea{box-sizing:border-box;display:flex;flex-direction:column;gap:4px}.pe-textarea__group{display:flex;align-items:stretch;padding:12px;gap:8px;border-radius:8px;border:2px solid rgba(255,255,255,.1);background-color:transparent;color:#fff;transition:border-color .25s cubic-bezier(.4,0,.2,1),background-color .25s cubic-bezier(.4,0,.2,1)}.pe-textarea__group--focused{border-color:#ffffff80}.pe-textarea:not(.pe-textarea--disabled) .pe-textarea__group:hover{border-color:#ffffff4d}.pe-textarea__field{all:unset;flex:1;min-height:0;resize:vertical}.pe-textarea__field::placeholder{color:#ffffff80}.pe-textarea__field:hover::placeholder{color:#fff}.pe-textarea__field--custom{display:flex;flex-direction:column;min-height:0}.pe-textarea__left-elements,.pe-textarea__right-elements{display:flex;gap:8px;align-items:flex-start;padding-top:8px}.pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-textarea--sm .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 20px + 2 * 8px);padding:8px;font-family:Ultra Nunito Sans;line-height:20px;font-size:14px;letter-spacing:.14px;font-weight:400}.pe-textarea--sm .pe-textarea__left-elements,.pe-textarea--sm .pe-textarea__right-elements{gap:4px;padding-top:4px}.pe-textarea--sm .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--sm .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:20px;line-height:20px}.pe-textarea--md .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 24px + 2 * 12px);padding:12px;font-family:Ultra Nunito Sans;line-height:24px;font-size:16px;letter-spacing:0px;font-weight:400}.pe-textarea--md .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--md .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:24px;line-height:24px}.pe-textarea--lg .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 28px + 2 * 12px);padding:8px 12px;font-family:Ultra Nunito Sans;line-height:28px;font-size:18px;letter-spacing:0px;font-weight:400}.pe-textarea--lg .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--lg .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:28px;line-height:28px}.pe-textarea--xl .pe-textarea__group{min-height:calc(var(--pe-textarea-rows, 3) * 36px + 2 * 16px);padding:8px 16px;font-family:Ultra Nunito Sans;line-height:36px;font-size:24px;letter-spacing:-.24px;font-weight:400}.pe-textarea--xl .pe-textarea__left-elements ::ng-deep .pe-icon,.pe-textarea--xl .pe-textarea__right-elements ::ng-deep .pe-icon{font-size:32px;line-height:32px}.pe-textarea--resize-none .pe-textarea__field{resize:none}.pe-textarea--resize-vertical .pe-textarea__field{resize:vertical}.pe-textarea--resize-horizontal .pe-textarea__field{resize:horizontal}.pe-textarea--resize-both .pe-textarea__field{resize:both}.pe-textarea--error .pe-textarea__group{border:2px solid #f69d9d}.pe-textarea--disabled .pe-textarea__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-textarea--disabled .pe-textarea__field,.pe-textarea--disabled .pe-textarea__field:disabled::placeholder{color:#ffffff4d}.pe-textarea--read-only .pe-textarea__group{border:2px solid rgba(255,255,255,.1);background-color:transparent}.pe-textarea--read-only .pe-textarea__field,.pe-textarea--read-only .pe-textarea__field:read-only::placeholder{color:#ffffffb3}\n"] }]
3309
+ }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], errorText: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorText", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], resize: [{ type: i0.Input, args: [{ isSignal: true, alias: "resize", required: false }] }], groupFocused: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupFocused", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], customField: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TextareaFieldDirective), { isSignal: true }] }], inputBlur: [{ type: i0.Output, args: ["inputBlur"] }], inputFocus: [{ type: i0.Output, args: ["inputFocus"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
3310
+
3311
+ /*
3312
+ * Public API Surface of ui
3313
+ */
3314
+
3315
+ /**
3316
+ * Generated bundle index. Do not edit.
3317
+ */
3318
+
3319
+ export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CarouselComponent, CarouselItemComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, DropdownComponent, FileInputComponent, FooterComponent, FormFieldHelperComponent, FormFieldLabelComponent, HeroComponent, IconComponent, ImageNotFoundDirective, InputComponent, ListItemComponent, ModalComponent, NavbarAvatarSlotDirective, NavbarComponent, NavbarLogoSlotDirective, NavbarSearchSlotDirective, PeHeroActionsSlotDirective, PeHeroBadgesSlotDirective, PeHeroContentSlotDirective, PeHeroSubtitleSlotDirective, PeHeroTitleSlotDirective, PillComponent, PriceButtonComponent, RadialComponent, RadioComponent, RadioGroupComponent, RichTextComponent, SearchSelectComponent, SelectComponent, SidebarComponent, SkeletonComponent, StatusComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy };
3320
+ //# sourceMappingURL=underlayerdev-ui.mjs.map